Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure
Chiller head pressure control sequence
Information
This package contains chiller head pressure control sequences. The implementation is based on section 5.20.10 in ASHRAE Guideline 36-2021.
Package Content
| Name | Description |
|---|---|
| Head pressure controller for plants with headered condenser water pumps | |
| Subsequences for chiller head pressure control | |
| Collection of validation models |
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Controller
Head pressure controller for plants with headered condenser water pumps
Information
Block that generates control signals for chiller head pressure control, according to ASHRAE Guideline 36-2021, section 5.20.10 head pressure control.
Note that if a plant has the waterside economizer, the condenser water pump must be variable speed.
This sequence contains three subsequences:
-
First, if the head pressure control signal
uHeaPreConis not available from the chiller controller. The signal will be generated by blockchiHeaPreLoo. See Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Subsequences.ControlLoop for a description. -
If the chiller plant does not have the waterside economizer, block
noWSEwill be used for controlling maximum cooling tower speed setpointyMaxTowSpeSetand, whether the plant has the constant speed condenser water pump or not, resetting head pressure control valve positionyHeaPreConValwhenhave_fixSpeConWatPum=true, or resetting condenser water pump speedyConWatPumSpeSetwhenhave_fixSpeConWatPum=false. See Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Subsequences.MappingWithoutWSE for a description. -
If the chiller plant has the waterside economizer, block
withWSEwill be used for specifyingyMaxTowSpeSet,yHeaPreConValand condenser water pump speedyConWatPumSpeSet. See Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Subsequences.MappingWithWSE for a description.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Plant | |||
| Boolean | have_chiHeaPreCon | false | Flag indicating if there is head pressure control signal from chiller controller |
| Boolean | have_WSE | true | True if the plant has waterside economizer. When the plant has waterside economizer, the condenser water pump speed must be variable |
| Boolean | have_fixSpeConWatPum | false | Flag indicating if the plant has fixed speed condenser water pumps |
| Setpoints | |||
| Real | minTowSpe | 0.1 | Minimum cooling tower fan speed |
| Real | minConWatPumSpe | 0.1 | Minimum condenser water pump speed |
| Real | minHeaPreValPos | 0.1 | Minimum head pressure control valve position |
| Loop signal | |||
| Real | minChiLif | 10 | Minimum allowable lift at minimum load for chiller |
| PID controller | |||
| SimpleController | controllerType | Buildings.Controls.OBC.CDL.T... | Type of controller |
| Real | k | 1 | Gain of controller |
| Real | Ti | 0.5 | Time constant of integrator block [s] |
| Real | Td | 0.5 | Time constant of derivative block [s] |
Connectors
| Type | Name | Description |
|---|---|---|
| input BooleanInput | uChiHeaCon | Enabling chillers head pressure control: true = ON, false = OFF |
| input RealInput | TConWatRet | Measured condenser water return temperature (condenser leaving) [K] |
| input RealInput | TChiWatSup | Measured chilled water supply temperature [K] |
| input RealInput | desConWatPumSpe | Design condenser water pump speed for current stage [1] |
| input BooleanInput | uWSE | Status of water side economizer: true = ON, false = OFF |
| input RealInput | uHeaPreCon | Chiller head pressure control loop signal from chiller controller [1] |
| output RealOutput | yMaxTowSpeSet | Maximum cooling tower speed setpoint [1] |
| output RealOutput | yHeaPreConVal | Head pressure control valve position [1] |
| output RealOutput | yConWatPumSpeSet | Condenser water pump speed setpoint [1] |
Modelica definition
block Controller "Head pressure controller for plants with headered condenser water pumps"
parameter Boolean have_chiHeaPreCon = false
"Flag indicating if there is head pressure control signal from chiller controller";
parameter Boolean have_WSE=true
"True if the plant has waterside economizer. When the plant has waterside economizer, the condenser water pump speed must be variable";
parameter Boolean have_fixSpeConWatPum=false
"Flag indicating if the plant has fixed speed condenser water pumps";
parameter Real minTowSpe=0.1
"Minimum cooling tower fan speed";
parameter Real minConWatPumSpe=0.1
"Minimum condenser water pump speed";
parameter Real minHeaPreValPos=0.1
"Minimum head pressure control valve position";
parameter Real minChiLif=10
"Minimum allowable lift at minimum load for chiller";
parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType=
Buildings.Controls.OBC.CDL.Types.SimpleController.PI
"Type of controller";
parameter Real k=1 "Gain of controller";
parameter Real Ti(
final unit="s",
final quantity="Time")=0.5 "Time constant of integrator block";
parameter Real Td(
final unit="s",
final quantity="Time")=0.5
"Time constant of derivative block";
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiHeaCon
"Enabling chillers head pressure control: true = ON, false = OFF";
Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatRet(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature") if not have_chiHeaPreCon
"Measured condenser water return temperature (condenser leaving)";
Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature") if not have_chiHeaPreCon
"Measured chilled water supply temperature";
Buildings.Controls.OBC.CDL.Interfaces.RealInput desConWatPumSpe(
final min=0,
final max=1,
final unit="1") if not have_fixSpeConWatPum
"Design condenser water pump speed for current stage";
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWSE
if have_WSE and (not have_fixSpeConWatPum)
"Status of water side economizer: true = ON, false = OFF";
Buildings.Controls.OBC.CDL.Interfaces.RealInput uHeaPreCon(
final min=0,
final max=1,
final unit="1") if have_chiHeaPreCon
"Chiller head pressure control loop signal from chiller controller";
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMaxTowSpeSet(
final min=0,
final max=1,
final unit="1") "Maximum cooling tower speed setpoint";
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHeaPreConVal(
final min=0,
final max=1,
final unit="1") if have_WSE or ((not have_WSE) and have_fixSpeConWatPum)
"Head pressure control valve position";
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yConWatPumSpeSet(
final min=0,
final max=1,
final unit="1") if not have_fixSpeConWatPum
"Condenser water pump speed setpoint";
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Subsequences.ControlLoop
chiHeaPreLoo(
final minChiLif=minChiLif,
final controllerType=controllerType,
final k=k,
final Ti=Ti,
final Td=Td) if not have_chiHeaPreCon
"Generate chiller head pressure control loop signal";
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Subsequences.MappingWithoutWSE
noWSE(
final have_fixSpeConWatPum=have_fixSpeConWatPum,
final minTowSpe=minTowSpe,
final minConWatPumSpe=minConWatPumSpe,
final minHeaPreValPos=minHeaPreValPos) if not have_WSE
"Controlling equipments for plants without waterside economizer";
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Subsequences.MappingWithWSE
withWSE(
final minTowSpe=minTowSpe,
final minConWatPumSpe=minConWatPumSpe,
final minHeaPreValPos=minHeaPreValPos) if have_WSE and (not have_fixSpeConWatPum)
"Controlling equipments for plants with waterside economizer";
protected
Buildings.Controls.OBC.CDL.Reals.Switch swi if have_chiHeaPreCon
"Head pressure control from chiller controller";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(
final k=0) if have_chiHeaPreCon "Constant";
Buildings.Controls.OBC.CDL.Utilities.Assert assMes1(
final message="If the plant has waterside economizer, the condenser water pump cannot be fix speed.")
"Generate alert if the plant has waterside economizer and the condenser water pump has fix speed";
Buildings.Controls.OBC.CDL.Logical.Sources.Constant havWSE(
final k=have_WSE)
"Have waterside economizer";
Buildings.Controls.OBC.CDL.Logical.Sources.Constant fixSpe(
final k=have_fixSpeConWatPum)
"Fix speed condenser water pump";
Buildings.Controls.OBC.CDL.Logical.And fixSpeWSE
"The plant has waterside economizer and the condenser water pump is fix speed";
Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not";
Buildings.Controls.OBC.CDL.Logical.Pre pre "Break loop";
equation
connect(chiHeaPreLoo.TConWatRet, TConWatRet);
connect(chiHeaPreLoo.TChiWatSup, TChiWatSup);
connect(chiHeaPreLoo.yHeaPreCon, noWSE.uHeaPreCon);
connect(chiHeaPreLoo.yHeaPreCon, withWSE.uHeaPreCon);
connect(withWSE.uWSE, uWSE);
connect(uHeaPreCon, swi.u1);
connect(con.y, swi.u3);
connect(swi.y, noWSE.uHeaPreCon);
connect(swi.y, withWSE.uHeaPreCon);
connect(noWSE.yMaxTowSpeSet, yMaxTowSpeSet);
connect(withWSE.yHeaPreConVal, yHeaPreConVal);
connect(withWSE.yMaxTowSpeSet, yMaxTowSpeSet);
connect(withWSE.yConWatPumSpeSet, yConWatPumSpeSet);
connect(desConWatPumSpe, withWSE.desConWatPumSpe);
connect(noWSE.yConWatPumSpeSet, yConWatPumSpeSet);
connect(noWSE.yHeaPreConVal, yHeaPreConVal);
connect(desConWatPumSpe, noWSE.desConWatPumSpe);
connect(havWSE.y, fixSpeWSE.u1);
connect(fixSpe.y, fixSpeWSE.u2);
connect(fixSpeWSE.y, not1.u);
connect(not1.y, assMes1.u);
connect(uChiHeaCon, pre.u);
connect(pre.y, swi.u2);
connect(pre.y, chiHeaPreLoo.uHeaPreEna);
connect(pre.y, noWSE.uHeaPreEna);
connect(pre.y, withWSE.uHeaPreEna);
end Controller;