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
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Controller Controller Head pressure controller for plants with headered condenser water pumps
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Subsequences Subsequences Subsequences for chiller head pressure control
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Controller Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Controller

Head pressure controller for plants with headered condenser water pumps

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.HeadPressure.Controller

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:

Parameters

TypeNameDefaultDescription
Plant
Booleanhave_chiHeaPreConfalseFlag indicating if there is head pressure control signal from chiller controller
Booleanhave_WSEtrueTrue if the plant has waterside economizer. When the plant has waterside economizer, the condenser water pump speed must be variable
Booleanhave_fixSpeConWatPumfalseFlag indicating if the plant has fixed speed condenser water pumps
Setpoints
RealminTowSpe0.1Minimum cooling tower fan speed
RealminConWatPumSpe0.1Minimum condenser water pump speed
RealminHeaPreValPos0.1Minimum head pressure control valve position
Loop signal
RealminChiLif10Minimum allowable lift at minimum load for chiller
PID controller
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller
Realk1Gain of controller
RealTi0.5Time constant of integrator block [s]
RealTd0.5Time constant of derivative block [s]

Connectors

TypeNameDescription
input BooleanInputuChiHeaConEnabling chillers head pressure control: true = ON, false = OFF
input RealInputTConWatRetMeasured condenser water return temperature (condenser leaving) [K]
input RealInputTChiWatSupMeasured chilled water supply temperature [K]
input RealInputdesConWatPumSpeDesign condenser water pump speed for current stage [1]
input BooleanInputuWSEStatus of water side economizer: true = ON, false = OFF
input RealInputuHeaPreConChiller head pressure control loop signal from chiller controller [1]
output RealOutputyMaxTowSpeSetMaximum cooling tower speed setpoint [1]
output RealOutputyHeaPreConValHead pressure control valve position [1]
output RealOutputyConWatPumSpeSetCondenser 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;