Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.CondenserWater
Sequences for condenser water pump control
Information
This package contains control sequences for condenser water pumps. The implementations are based on section 5.20.9 in ASHRAE Guideline 36-2021.
Package Content
| Name | Description |
|---|---|
| Condenser water pump controller | |
| Condenser water pump control sequences | |
| Collection of validation models |
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.CondenserWater.Controller
Condenser water pump controller
Information
Block that generates control signals for condenser water pumps control, according to ASHRAE Guideline 36-2021, section 5.20.9 Condenser water pumps.
This sequence contains three subsequences:
-
Enabling and disabling the lead pump should be controlled based on if the pumps
are configured as headered or dedicated. If it is headered,
have_heaPum= true, then use blockenaLeaHeaPum. See Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.CondenserWater.Subsequences.EnableLead_headered for a description. Otherwise, use blockenaLeaDedPum. See Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.CondenserWater.Subsequences.EnableLead_dedicated for a description. -
The design pump speed at current stage
yDesConWatPumSpeand the number of operating pumpsyConWatPumNumshould be output from blockpumSpe. See Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.CondenserWater.Subsequences.Speed for a description. - The last section of the sequence is to check if current pump speed is running on the setpoint.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Boolean | have_heaPum | true | Flag of headered condenser water pumps design: true=headered, false=dedicated |
| Boolean | have_WSE | true | Flag of waterside economizer: true=have WSE, false=no WSE |
| Boolean | fixSpe | false | Flag to indicate if the plant has fix speed condenser water pump |
| Integer | nChi | 2 | Total number of chillers |
| Integer | nConWatPum | 2 | Total number of condenser water pumps |
| Integer | nChiSta | 3 | Total number of chiller stages, including stage zero but not the stages with a WSE, if applicable |
| Stage design speed | |||
| Integer | nPlaSta | 6 | Total number of plant stages, including stage zero and the stages with a WSE, if applicable |
| Real | staVec[nPlaSta] | {0,0.5,1,1.5,2,2.5} | Plant stage vector, element value like x.5 means chiller stage x plus WSE |
| Real | desConWatPumSpe[nPlaSta] | {0,0.5,0.75,0.6,0.75,0.9} | Design condenser water pump speed setpoints, according to current chiller stage and WSE status |
| Integer | desConWatPumNum[nPlaSta] | {0,1,1,2,2,2} | Design number of condenser water pumps that should be enabled, according to current chiller stage and WSE status |
| Integer | desChiNum[nChiSta] | {0,1,2} | Design number of chiller that should be enabled, according to current chiller stage |
Connectors
| Type | Name | Description |
|---|---|---|
| input BooleanInput | uChiConIsoVal[nChi] | Chiller condenser water isolation valve status |
| input BooleanInput | uLeaChiEna | Lead chiller enabling status: true=lead chiller is enabled |
| input BooleanInput | uLeaChiSta | Lead chiller status: true=lead chiller proven on |
| input BooleanInput | uLeaConWatReq | Status indicating if chiller is requesting condenser water |
| input BooleanInput | uEnaPla | True: plant is just enabled |
| input IntegerInput | uChiSta | Current chiller stage that does not include WSE |
| input BooleanInput | uWSE | Water side economizer status: true = ON, false = OFF |
| output BooleanOutput | yLeaPum | Lead pump status setpoint |
| output RealOutput | yDesConWatPumSpe | Condenser water pump design speed at current stage |
| output IntegerOutput | yConWatPumNum | Number of operating condenser water pumps |
Modelica definition
block Controller "Condenser water pump controller"
parameter Boolean have_heaPum = true
"Flag of headered condenser water pumps design: true=headered, false=dedicated";
parameter Boolean have_WSE = true
"Flag of waterside economizer: true=have WSE, false=no WSE";
parameter Boolean fixSpe = false
"Flag to indicate if the plant has fix speed condenser water pump";
parameter Integer nChi=2 "Total number of chillers";
parameter Integer nConWatPum=2 "Total number of condenser water pumps";
parameter Integer nPlaSta=6
"Total number of plant stages, including stage zero and the stages with a WSE, if applicable";
parameter Integer nChiSta = 3
"Total number of chiller stages, including stage zero but not the stages with a WSE, if applicable";
parameter Real staVec[nPlaSta]={0,0.5,1,1.5,2,2.5}
"Plant stage vector, element value like x.5 means chiller stage x plus WSE";
parameter Real desConWatPumSpe[nPlaSta]={0,0.5,0.75,0.6,0.75,0.9}
"Design condenser water pump speed setpoints, according to current chiller stage and WSE status";
parameter Integer desConWatPumNum[nPlaSta]={0,1,1,2,2,2}
"Design number of condenser water pumps that should be enabled, according to current chiller stage and WSE status";
parameter Integer desChiNum[nChiSta]={0,1,2}
"Design number of chiller that should be enabled, according to current chiller stage";
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiConIsoVal[nChi]
if have_heaPum
"Chiller condenser water isolation valve status";
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiEna
"Lead chiller enabling status: true=lead chiller is enabled";
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiSta
"Lead chiller status: true=lead chiller proven on";
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaConWatReq
"Status indicating if chiller is requesting condenser water";
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uEnaPla
"True: plant is just enabled";
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uChiSta
"Current chiller stage that does not include WSE";
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWSE if have_WSE
"Water side economizer status: true = ON, false = OFF";
Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLeaPum
"Lead pump status setpoint";
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDesConWatPumSpe
if not fixSpe
"Condenser water pump design speed at current stage";
Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yConWatPumNum
"Number of operating condenser water pumps";
protected
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.CondenserWater.Subsequences.EnableLead_headered
enaLeaHeaPum(final have_WSE=have_WSE) if have_heaPum
"Enable lead pumps for plants with headered condenser water pump";
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.CondenserWater.Subsequences.EnableLead_dedicated
enaLeaDedPum if not have_heaPum
"Enable lead pumps for plants with dedicated condenser water pump";
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.CondenserWater.Subsequences.Speed
pumSpe(
final have_WSE=have_WSE,
final fixSpe=fixSpe,
final nPlaSta=nPlaSta,
final nChiSta=nChiSta,
final staVec=staVec,
final desConWatPumSpe=desConWatPumSpe,
final desConWatPumNum=desConWatPumNum,
final desChiNum=desChiNum)
"Design pump speed of condenser water pump at current stage";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0)
if not fixSpe
"Constant zero";
Buildings.Controls.OBC.CDL.Integers.Sources.Constant zer1(final k=0)
"Constant zero";
Buildings.Controls.OBC.CDL.Reals.Switch swi if not fixSpe
"Real switch";
Buildings.Controls.OBC.CDL.Integers.Switch intSwi "Integer switch";
Buildings.Controls.OBC.CDL.Logical.Sources.Constant con(
final k=false) if not have_WSE
"Logical true";
equation
connect(uWSE, enaLeaHeaPum.uWseConIsoVal);
connect(enaLeaDedPum.uLeaChiSta, uLeaChiSta);
connect(enaLeaDedPum.uLeaConWatReq, uLeaConWatReq);
connect(uWSE, pumSpe.uWSE);
connect(enaLeaHeaPum.yLea, yLeaPum);
connect(enaLeaDedPum.yLea, yLeaPum);
connect(uChiSta, pumSpe.uChiSta);
connect(swi.y,yDesConWatPumSpe);
connect(enaLeaDedPum.yLea, swi.u2);
connect(enaLeaHeaPum.yLea, swi.u2);
connect(zer.y, swi.u3);
connect(enaLeaHeaPum.yLea, intSwi.u2);
connect(enaLeaDedPum.yLea, intSwi.u2);
connect(pumSpe.yConWatPumNum, intSwi.u1);
connect(intSwi.y, yConWatPumNum);
connect(zer1.y, intSwi.u3);
connect(pumSpe.yDesConWatPumSpe, swi.u1);
connect(con.y, enaLeaHeaPum.uWseConIsoVal);
connect(con.y, pumSpe.uWSE);
connect(uLeaChiEna, enaLeaDedPum.uLeaChiEna);
connect(enaLeaHeaPum.uChiConIsoVal, uChiConIsoVal);
connect(uEnaPla, enaLeaHeaPum.uEnaPla);
connect(uEnaPla, enaLeaDedPum.uEnaPla);
end Controller;