Skip to content

Enhance AWHP plant template to support 4-pipe heat pumps#4657

Open
AntoineGautier wants to merge 98 commits into
masterfrom
issue4512_polyvalentHpPlant
Open

Enhance AWHP plant template to support 4-pipe heat pumps#4657
AntoineGautier wants to merge 98 commits into
masterfrom
issue4512_polyvalentHpPlant

Conversation

@AntoineGautier

@AntoineGautier AntoineGautier commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

This addresses #4512, with one exception: plants with modular polyvalent HP are not yet supported. Instead, the controller implements staging and valve/pump control logic for an arbitrary number of polyvalent HP. This reproduces the functionality of a modular polyvalent HP, just with the control logic hosted in the BAS instead of the HP onboard controller. The validation model Buildings.Templates.Plants.HeatPumps.Validation.AirToWaterPolyvalent reproduces the same plant layout as G36 Addendum L Figure A-35 (Primary-Only Modular Air-to-water Heat Pump/Chiller Plant), using individual polyvalent units instead of a single modular system.

⚠️ This PR includes many non-backward compatible changes, see release notes.

The Python script Buildings/Resources/Scripts/travis/templates/Plants.HeatPumps.py has been updated to test all valid plant configurations.

The validation models for several refactored control blocks (and therefore the main controller and the template model) fail to compile with OCT, due to ibpsa/modelica-ibpsa#2136 (to be addressed soon).

Most of the existing Extension Blocks under Buildings.Templates.Plants.Controls have also been refactored using only CDL Elementary Blocks.

  • There is only a single remaining Extension Block: Buildings.Templates.Plants.Controls.Utilities.StageIndex
  • The block Buildings.Templates.Plants.Controls.Utilities.TimerWithReset was refactored as proposed by @JayHuLBL in issue2293_chiller_plant_seq. It will be a duplicate of the block included in that latter branch when both branches are merged. @JayHuLBL let me know how you want to proceed: add a TODO in Chiller plant sequences #2299 to remove Buildings.Templates.Plants.Controls.Utilities.TimerWithReset before merging?

⚠️ Regression with OMC for the model Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly

On the master branch (0192839), this model is not excluded in conf.yml.
However, it fails to translate with OMC on this feature branch (14d4519).
Considering the changed files, I cannot explain why this fails.
Curiously, when checking out this model from the master branch, it also fails to translate: see the log below.
The similar model Buildings.Templates.ZoneEquipment.Validation.VAVBoxReheat is already excluded in conf.yml.
I also excluded VAVBoxCoolingOnly in the latest commit 8ead0f0.

In [10]: omc.sendExpression('getVersion()')
Out[10]: 'OpenModelica 1.27.0'

In [11]: print(repo.active_branch.name, repo.head.commit.hexsha)
master 0192839096eb88d9d260b9390bff8efa3bca02b5

In [12]: omc.sendExpression('simulate(Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly)')
[OMC log for 'sendExpression(simulate(Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly), True)']: [translation:warning:398] Components are deprecated in class.
[OMC log for 'sendExpression(simulate(Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly), True)']: [translation:warning:499] Parameter datAll.tit24CliZon has no value, and is fixed during initialization (fixed=true), using available start value (start=Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_1) as default value.
[OMC log for 'sendExpression(simulate(Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly), True)']: [translation:warning:499] Parameter datAll.VAVBox_1.coiHea.wAirEnt_nominal has no value, and is fixed during initialization (fixed=true), using available start value (start=0.01) as default value.
[OMC log for 'sendExpression(simulate(Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly), True)']: [translation:warning:499] Parameter VAVBox_1.datCoiHea.wAirEnt_nominal has no value, and is fixed during initialization (fixed=true), using available start value (start=0.01) as default value.
---------------------------------------------------------------------------
OMCSessionException                       Traceback (most recent call last)
Cell In[12], line 1
----> 1 omc.sendExpression('simulate(Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly)')

File ~/.local/share/mise/installs/python/3.12.13/lib/python3.12/site-packages/OMPython/OMCSession.py:410, in OMCSessionZMQ.sendExpression(self, command, parsed)
    407 # response according to the used log level
    408 # see: https://build.openmodelica.org/Documentation/OpenModelica.Scripting.ErrorLevel.html
    409 if log_level == 'error':
--> 410     raise OMCSessionException(msg)
    411 elif log_level == 'warning':
    412     logger.warning(msg)

OMCSessionException: [OMC log for 'sendExpression(simulate(Buildings.Templates.ZoneEquipment.Validation.VAVBoxCoolingOnly), True)']: [translation:error:63] Internal error NFConnection.checkBalance got unbalanced connection connect(sigBAS.busTer[1], VAVBox_1.bus):
  lhs: {sigBAS.busTer[1].TZonCooOccSet, sigBAS.busTer[1].TZonCooUnoSet, sigBAS.busTer[1].TZonHeaOccSet, sigBAS.busTer[1].TZonHeaUnoSet, sigBAS.busTer[1].damVAV.y, sigBAS.busTer[1].damVAV.y_actual, sigBAS.busTer[1].ppmCO2Set, sigBAS.busTer[1].y1OccSch, sigBAS.busTer[1].y1OveHeaOff, sigBAS.busTer[1].yOveDamPos, sigBAS.busTer[1].yOveFloSet}
  rhs: {VAVBox_1.bus.TAirDis, VAVBox_1.bus.TAirSup, VAVBox_1.bus.TZon, VAVBox_1.bus.TZonCooOccSet, VAVBox_1.bus.TZonCooUnoSet, VAVBox_1.bus.TZonHeaOccSet, VAVBox_1.bus.TZonHeaUnoSet, VAVBox_1.bus.VAdjAreBreZon_flow, VAVBox_1.bus.VAdjPopBreZon_flow, VAVBox_1.bus.VAirDis_flow, VAVBox_1.bus.VMinOA_flow, VAVBox_1.bus.dTHeaSetAdj, VAVBox_1.bus.damVAV.y, VAVBox_1.bus.damVAV.y_actual, VAVBox_1.bus.ppmCO2, VAVBox_1.bus.uCooDemLimLev, VAVBox_1.bus.uHeaDemLimLev, VAVBox_1.bus.y1FanSup_actual, VAVBox_1.bus.y1Occ, VAVBox_1.bus.y1OveOccZon, VAVBox_1.bus.y1Win, VAVBox_1.bus.yCooTim, VAVBox_1.bus.yEndSetBac, VAVBox_1.bus.yEndSetUp, VAVBox_1.bus.yHigOccCoo, VAVBox_1.bus.yHigUnoCoo, VAVBox_1.bus.yOccHeaHig, VAVBox_1.bus.yOpeMod, VAVBox_1.bus.yOveDamPos, VAVBox_1.bus.yOveFloSet, VAVBox_1.bus.yUnoHeaHig, VAVBox_1.bus.yWarTim, VAVBox_1.bus.yZonPreResReq, VAVBox_1.bus.yZonTemResReq}

…elica-buildings into issue4512_polyvalentHpPlant
…elica-buildings into issue4512_polyvalentHpPlant
…elica-buildings into issue4512_polyvalentHpPlant
- This avoids OCT solver failure while still allowing validating the
  hydronics.
…elica-buildings into issue4512_polyvalentHpPlant
- WARNING: Includes major changes in configuration parameters.
- Would require unequally sized primary pumps with a staging matrix.
- The opposite 'have_pumPriComHp' is not specific enough.
@AntoineGautier AntoineGautier added the non-backward compatible Non-backward compatible changes label Jul 8, 2026
@AntoineGautier AntoineGautier force-pushed the issue4512_polyvalentHpPlant branch from 8ead0f0 to b003936 Compare July 14, 2026 08:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

non-backward compatible Non-backward compatible changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant