Skip to content

Commit c41c984

Browse files
Refactor the control section for hybrid plant support
- This does not include the condition of "identical primary pump configuration" yet.
1 parent 1340b1f commit c41c984

6 files changed

Lines changed: 35 additions & 28 deletions

File tree

Buildings/Templates/Plants/Boilers/HotWater/Components/BoilerGroup.mo

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ model BoilerGroup "Boiler group"
3535
final cap_nominal=capBoi_nominal,
3636
final dpHeaWat_nominal=if typValBoiIso==Buildings.Templates.Components.Types.Valve.None then
3737
dat.dpHeaWatBoi_nominal else fill(0, nBoi),
38-
final THeaWatSup_nominal=dat.THeaWatBoiSup_nominal,
38+
final THeaWatSup_nominal=dat.THeaWatSupBoi_nominal,
3939
final per=dat.per)
4040
"Parameter record of each boiler";
4141
final parameter Buildings.Templates.Components.Data.Valve datValBoiIso[nBoi](
@@ -56,8 +56,8 @@ model BoilerGroup "Boiler group"
5656
final parameter Modelica.Units.SI.PressureDifference dpHeaWatBoi_nominal[nBoi]=
5757
dat.dpHeaWatBoi_nominal
5858
"HW pressure drop - Each boiler";
59-
final parameter Modelica.Units.SI.Temperature THeaWatBoiSup_nominal[nBoi]=
60-
dat.THeaWatBoiSup_nominal
59+
final parameter Modelica.Units.SI.Temperature THeaWatSupBoi_nominal[nBoi]=
60+
dat.THeaWatSupBoi_nominal
6161
"HW supply temperature - Each boiler";
6262

6363
parameter Modelica.Fluid.Types.Dynamics energyDynamics=

Buildings/Templates/Plants/Boilers/HotWater/Components/Controls/Guideline36.mo

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -232,47 +232,56 @@ initial equation
232232

233233
equation
234234
/* Control point connection - start */
235+
235236
// Primary loop controller inputs from plant control bus
236-
// Hybrid plants not supported: bus*Con and bus*Non are exclusive from each other.
237237
connect(bus.dpHeaWatLoc, ctlLooPri.dpHotWatPri_loc);
238238
connect(bus.dpHeaWatRem, ctlLooPri.dpHotWatPri_rem);
239239
connect(bus.TOut, ctlLooPri.TOut);
240+
// FIXME: There should be distinct connectors in the controller for condensing and non-condensing groups.
240241
connect(busLooCon.THeaWatPlaRet, ctlLooPri.TRetPri);
241242
connect(busLooNon.THeaWatPlaRet, ctlLooPri.TRetPri);
242243
connect(bus.THeaWatSecRet, ctlLooPri.TRetSec);
243-
connect(busBoiCon.THeaWatSup, ctlLooPri.TSupBoi);
244-
connect(busBoiNon.THeaWatSup, ctlLooPri.TSupBoi);
244+
connect(busBoiCon.THeaWatSup, ctlLooPri.TSupBoi[1:cfg.nBoiCon]);
245+
connect(busBoiNon.THeaWatSup, ctlLooPri.TSupBoi[(cfg.nBoiCon+1):nBoi]);
246+
// FIXME: There should be distinct connectors in the controller for condensing and non-condensing groups.
245247
connect(busLooCon.THeaWatPriSup, ctlLooPri.TSupPri);
246248
connect(busLooNon.THeaWatPriSup, ctlLooPri.TSupPri);
247249
connect(bus.THeaWatSecSup, ctlLooPri.TSupSec);
248-
connect(busValBoiConIso.y1_actual, ctlLooPri.uHotWatIsoVal);
249-
connect(busValBoiNonIso.y1_actual, ctlLooPri.uHotWatIsoVal);
250-
connect(busPumHeaWatPriCon.y1_actual, ctlLooPri.uPriPum);
251-
connect(busPumHeaWatPriNon.y1_actual, ctlLooPri.uPriPum);
250+
connect(busValBoiConIso.y1_actual, ctlLooPri.uHotWatIsoVal[1:cfg.nBoiCon]);
251+
connect(busValBoiNonIso.y1_actual, ctlLooPri.uHotWatIsoVal[(cfg.nBoiCon+1):nBoi]);
252+
connect(busPumHeaWatPriCon.y1_actual, ctlLooPri.uPriPum[1:cfg.nBoiCon]);
253+
connect(busPumHeaWatPriNon.y1_actual, ctlLooPri.uPriPum[(cfg.nBoiCon+1):nBoi]);
252254
connect(bus.u1Sch, ctlLooPri.uSchEna);
255+
// FIXME: There should be distinct connectors in the controller for condensing and non-condensing groups.
253256
connect(busLooCon.VHeaWatByp_flow, ctlLooPri.VHotWatDec_flow);
254257
connect(busLooNon.VHeaWatByp_flow, ctlLooPri.VHotWatDec_flow);
258+
// FIXME: There should be distinct connectors in the controller for condensing and non-condensing groups.
255259
connect(busLooCon.VHeaWatPri_flow, ctlLooPri.VHotWatPri_flow);
256260
connect(busLooNon.VHeaWatPri_flow, ctlLooPri.VHotWatPri_flow);
257261
connect(bus.VHotWatSec_flow, ctlLooPri.VHotWatSec_flow);
262+
258263
// Secondary HW pump controller inputs from plant control bus
259264
connect(bus.dpHeaWatLoc, ctlPumHeaWatSec.dpHotWat_local);
260265
connect(bus.dpHeaWatRem, ctlPumHeaWatSec.dpHotWat_remote);
261266
connect(busPumHeaWatSec.y1_actual, ctlPumHeaWatSec.uHotWatPum);
262-
connect(busPumHeaWatPriCon.y1_actual, ctlPumHeaWatSec.uPriPumSta);
263-
connect(busPumHeaWatPriNon.y1_actual, ctlPumHeaWatSec.uPriPumSta);
267+
connect(busPumHeaWatPriCon.y1_actual, ctlPumHeaWatSec.uPriPumSta[1:cfg.nBoiCon]);
268+
connect(busPumHeaWatPriNon.y1_actual, ctlPumHeaWatSec.uPriPumSta[(cfg.nBoiCon+1):nBoi]);
264269
connect(bus.VHeaWatSec_flow, ctlPumHeaWatSec.VHotWat_flow);
270+
265271
// Primary loop controller outputs to plant control bus
266-
connect(ctlLooPri.TBoiHotWatSupSet, busBoiCon.THeaWatSupSet);
267-
connect(ctlLooPri.TBoiHotWatSupSet, busBoiNon.THeaWatSupSet);
268-
connect(ctlLooPri.yBoi, busBoiCon.y1);
269-
connect(ctlLooPri.yBoi, busBoiNon.y1);
272+
connect(ctlLooPri.TBoiHotWatSupSet[1:cfg.nBoiCon], busBoiCon.THeaWatSupSet);
273+
connect(ctlLooPri.TBoiHotWatSupSet[(cfg.nBoiCon+1):nBoi], busBoiNon.THeaWatSupSet);
274+
connect(ctlLooPri.yBoi[1:cfg.nBoiCon], busBoiCon.y1);
275+
connect(ctlLooPri.yBoi[(cfg.nBoiCon+1):nBoi], busBoiNon.y1);
270276
connect(ctlLooPri.yBypValPos, busValHeaWatMinByp.y);
271-
connect(ctlLooPri.yHotWatIsoVal, busValBoiConIso.y1);
272-
connect(ctlLooPri.yPriPum, busPumHeaWatPriCon.y1);
273-
connect(ctlLooPri.yPriPum, busPumHeaWatPriNon.y1);
277+
connect(ctlLooPri.yHotWatIsoVal[1:cfg.nBoiCon], busValBoiConIso.y1);
278+
connect(ctlLooPri.yHotWatIsoVal[(cfg.nBoiCon+1):nBoi], busValBoiNonIso.y1);
279+
connect(ctlLooPri.yPriPum[1:cfg.nBoiCon], busPumHeaWatPriCon.y1);
280+
connect(ctlLooPri.yPriPum[(cfg.nBoiCon+1):nBoi], busPumHeaWatPriNon.y1);
281+
// FIXME: There should be distinct connectors in the controller for condensing and non-condensing groups.
274282
connect(ctlLooPri.yPriPumSpe, busPumHeaWatPriCon.y);
275283
connect(ctlLooPri.yPriPumSpe, busPumHeaWatPriNon.y);
284+
276285
// Secondary HW pump controller outputs to plant control bus
277286
connect(ctlPumHeaWatSec.yHotWatPum, busPumHeaWatSec.y1);
278287
connect(ctlPumHeaWatSec.yPumSpe, busPumHeaWatSec.y);
@@ -339,8 +348,6 @@ equation
339348
-20},{-20,-20.7},{-12,-20.7}}, color={255,0,255}));
340349
annotation (Documentation(info="<html>
341350
<h4>Description</h4>
342-
FIXME cfg.have_boiCon and cfg.have_boiNon mutually exclusive
343-
344351
<p>
345352
This is an implementation of the control sequence specified in ASHRAE (2021)
346353
for hot water plants.

Buildings/Templates/Plants/Boilers/HotWater/Components/Data/BoilerGroup.mo

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ record BoilerGroup "Record for boiler group model"
2525
each final min=0)
2626
"Heating capacity - Each boiler"
2727
annotation(Dialog(group="Nominal condition"));
28-
parameter Modelica.Units.SI.Temperature THeaWatBoiSup_nominal[nBoi](
28+
parameter Modelica.Units.SI.Temperature THeaWatSupBoi_nominal[nBoi](
2929
each final min=260)
3030
"(Highest) HW supply temperature - Each boiler"
3131
annotation(Dialog(group="Nominal condition"));
@@ -34,7 +34,7 @@ record BoilerGroup "Record for boiler group model"
3434
constrainedby Buildings.Fluid.Boilers.Data.Generic(
3535
each fue=fue,
3636
Q_flow_nominal=if nBoi>0 then capBoi_nominal else {0},
37-
TIn_nominal=if nBoi>0 then THeaWatBoiSup_nominal -
37+
TIn_nominal=if nBoi>0 then THeaWatSupBoi_nominal -
3838
capBoi_nominal / Buildings.Utilities.Psychrometrics.Constants.cpWatLiq ./ mHeaWatBoi_flow_nominal
3939
else {Buildings.Templates.Data.Defaults.THeaWatRetHig},
4040
m_flow_nominal=if nBoi>0 then mHeaWatBoi_flow_nominal else {0},
@@ -53,7 +53,7 @@ record BoilerGroup "Record for boiler group model"
5353
"Coefficients for efficiency curve - Each boiler"
5454
annotation (Dialog(enable=
5555
typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial));
56-
parameter Modelica.Units.SI.Temperature T_nominal[nBoi]=THeaWatBoiSup_nominal
56+
parameter Modelica.Units.SI.Temperature T_nominal[nBoi]=THeaWatSupBoi_nominal
5757
"Temperature used to compute nominal efficiency (only used if efficiency curve depends on temperature) - Each boiler"
5858
annotation (Dialog(enable=
5959
typMod==Buildings.Templates.Components.Types.BoilerHotWaterModel.Polynomial and

Buildings/Templates/Plants/Boilers/HotWater/Components/Validation/BoilerGroupPolynomial.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ model BoilerGroupPolynomial "Validation model for boiler group"
2222
Buildings.Utilities.Psychrometrics.Constants.cpWatLiq,
2323
capBoi_nominal=fill(1000E3, nBoi),
2424
dpHeaWatBoi_nominal=fill(Buildings.Templates.Data.Defaults.dpHeaWatBoi, nBoi),
25-
THeaWatBoiSup_nominal=fill(Buildings.Templates.Data.Defaults.THeaWatSupHig, nBoi))
25+
THeaWatSupBoi_nominal=fill(Buildings.Templates.Data.Defaults.THeaWatSupHig, nBoi))
2626
"Design and operating parameters"
2727
annotation (Placement(transformation(extent={{100,100},{120,120}})));
2828
parameter Buildings.Templates.Components.Data.PumpMultiple datPumHeaWatPri(

Buildings/Templates/Plants/Boilers/HotWater/Data/BoilerPlant.mo

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ record BoilerPlant "Record for HW plant model"
1616
final nBoi=cfg.nBoiCon,
1717
final typMod=cfg.typMod,
1818
capBoi_nominal=ctl.capBoiCon_nominal,
19-
THeaWatBoiSup_nominal=fill(if cfg.have_boiCon and cfg.have_boiNon then ctl.THeaWatConSup_nominal
19+
THeaWatSupBoi_nominal=fill(if cfg.have_boiCon and cfg.have_boiNon then ctl.THeaWatConSup_nominal
2020
else ctl.THeaWatSup_nominal, cfg.nBoiCon))
2121
"Condensing boilers"
2222
annotation(Dialog(group="Boilers", enable=cfg.have_boiCon));
@@ -25,7 +25,7 @@ record BoilerPlant "Record for HW plant model"
2525
final nBoi=cfg.nBoiNon,
2626
final typMod=cfg.typMod,
2727
capBoi_nominal=ctl.capBoiNon_nominal,
28-
THeaWatBoiSup_nominal=fill(ctl.THeaWatSup_nominal, cfg.nBoiNon))
28+
THeaWatSupBoi_nominal=fill(ctl.THeaWatSup_nominal, cfg.nBoiNon))
2929
"Non-condensing boilers"
3030
annotation(Dialog(group="Boilers", enable=cfg.have_boiNon));
3131

Buildings/Templates/Plants/Boilers/HotWater/Validation/UserProject/Data/AllSystems.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class AllSystems
1313
dpHeaWatBoi_nominal=fill(Buildings.Templates.Data.Defaults.dpHeaWatBoi,
1414
pla.cfg.nBoiCon),
1515
mHeaWatBoi_flow_nominal=pla.ctl.capBoiCon_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq
16-
./ (pla.ctl.THeaWatConSup_nominal - Buildings.Templates.Data.Defaults.THeaWatRetHig)),
16+
./ (pla.ctl.THeaWatConSup_nominal - Buildings.Templates.Data.Defaults.THeaWatRetMed)),
1717
boiNon(
1818
fue=Buildings.Fluid.Data.Fuels.NaturalGasHigherHeatingValue(),
1919
dpHeaWatBoi_nominal=fill(Buildings.Templates.Data.Defaults.dpHeaWatBoi,

0 commit comments

Comments
 (0)