Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed

Package of sequences for cooling tower fan speed control

Information

This package contains sequences for cooling tower fan speed control. The implementation is based on section 5.20.12.2 in ASHRAE Guideline 36-2021.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.Controller Controller Tower fan speed control
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.EnabledWSE EnabledWSE Package of sequences for control tower fan speed when waterside economizer is enabled
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.ReturnWaterTemperature ReturnWaterTemperature Sequences of control tower fan speed for controlling condenser water return temperature
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.Controller Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.Controller

Tower fan speed control

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.Controller

Information

Block that outputs cooling tower fan speed ySpeSet. This is implemented according to ASHRAE Guideline 36-2021, section 5.20.12.2, item a and c. These sections specify sequences to control tower fan speed in the mode when waterside economizer (if the plant does have it) is enabled or disabled, for maintaining condenser water return temperature at its setpoint. This control is used for plants with dynamic load profiles, i.e., those for which PLR may change by more than approximately 25% in any hour. It includes two subsequences:

Parameters

TypeNameDefaultDescription
Booleanneed_heaPreContrueTrue: the plant requires chiller head pressure being controlled
IntegernChi2Total number of chillers
IntegernTowCel4Total number of cooling tower cells
IntegernConWatPum2Total number of condenser water pumps
TowerSpeedControlfanSpeConBuildings.Controls.OBC.ASHRA...Tower fan speed control type
BooleancloseCoupledPlanttrueFlag to indicate if the plant is close coupled
Booleanhave_WSEtrueFlag to indicate if the plant has waterside economizer
RealdesCap1e6Plant design capacity [W]
RealfanSpeMin0.1Minimum tower fan speed
WSE Enabled
Integrated
RealchiMinCap[nChi]{1e4,1e4}Minimum cyclining load below which chiller will begin cycling [W]
SimpleControllerintOpeConBuildings.Controls.OBC.CDL.T...Type of controller
RealkIntOpe1Gain of controller
RealTiIntOpe0.5Time constant of integrator block [s]
RealTdIntOpe0.1Time constant of derivative block [s]
WSE-only
SimpleControllerchiWatConBuildings.Controls.OBC.CDL.T...Type of controller
RealkWSE1Gain of controller
RealTiWSE0.5Time constant of integrator block [s]
RealTdWSE0.1Time constant of derivative block [s]
Return temperature control
Setpoint
RealminChiLif[nChi]{12,12}Minimum LIFT of each chiller [K]
RealTConWatSup_nominal[nChi]{293.15,293.15}Design condenser water supply temperature (condenser entering) of each chiller [K]
RealTConWatRet_nominal[nChi]{303.15,303.15}Design condenser water return temperature (condenser leaving) of each chiller [K]
RealTChiWatSupMin[nChi]{278.15,278.15}Lowest chilled water supply temperature of each chiller [K]
Coupled plant
SimpleControllercouPlaConBuildings.Controls.OBC.CDL.T...Type of controller
RealkCouPla1Gain of controller
RealTiCouPla0.5Time constant of integrator block [s]
RealTdCouPla0.1Time constant of derivative block [s]
RealyCouPlaMax1Upper limit of output
RealyCouPlaMin0Lower limit of output
Less coupled plant
RealsamplePeriod30Period of sampling condenser water supply and return temperature difference
SimpleControllersupWatConBuildings.Controls.OBC.CDL.T...Type of controller
RealkSupCon1Gain of controller
RealTiSupCon0.5Time constant of integrator block [s]
RealTdSupCon0.1Time constant of derivative block [s]
RealySupConMax1Upper limit of output
RealySupConMin0Lower limit of output
Advanced
RealspeChe0.005Lower threshold value to check fan or pump speed
Return temperature control: Enable tower
RealcheMinFanSpe300Threshold time for checking duration when tower fan equals to the minimum tower fan speed [s]
RealcheMaxTowSpe300Threshold time for checking duration when any enabled chiller maximum cooling speed equals to the minimum tower fan speed [s]
RealcheTowOff60Threshold time for checking duration when there is no enabled tower fan [s]
Return temperature control: Setpoint
RealiniPlaTim600Time to hold return temperature to initial setpoint after plant being enabled [s]
RealramTim180Time to ramp return water temperature from initial value to setpoint [s]

Connectors

TypeNameDescription
input RealInputuChiLoaCurrent cooling load [W]
input BooleanInputuChi[nChi]Chiller enabling status: true=ON
input BooleanInputuWseWaterside economizer enabling status: true=ON
input RealInputTChiWatSupChilled water supply temperature [K]
input RealInputTChiWatSupSetChilled water supply temperature setpoint [K]
input RealInputreqPlaCapCurrent required plant capacity [W]
input RealInputuMaxSpeSet[nChi]Maximum cooling tower speed setpoint from each chiller head pressure control loop [1]
input BooleanInputuTow[nTowCel]Cooling tower cell operating status: true=running tower cell
input BooleanInputuPlaPlant enabling status
input RealInputTConWatRetCondenser water return temperature (condenser leaving) [K]
input BooleanInputuConWatPum[nConWatPum]Current condenser water pump status
input RealInputTConWatSupCondenser water supply temperature (condenser entering) [K]
output RealOutputySpeSetFan speed setpoint of each cooling tower cell [1]
output RealOutputyLifMaxMaximum LIFT among enabled chillers [K]
output RealOutputyLifMinMinimum LIFT among enabled chillers [K]
output RealOutputTConWatRetSetCondenser water return temperature setpoint [K]
output RealOutputTConWatSupSetCondenser water supply temperature setpoint [K]

Modelica definition

block Controller "Tower fan speed control" parameter Boolean need_heaPreCon = true "True: the plant requires chiller head pressure being controlled"; parameter Integer nChi=2 "Total number of chillers"; parameter Integer nTowCel=4 "Total number of cooling tower cells"; parameter Integer nConWatPum=2 "Total number of condenser water pumps"; parameter Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Types.TowerSpeedControl fanSpeCon= Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Types.TowerSpeedControl.CondenserWaterReturnTemperaure "Tower fan speed control type"; final parameter Boolean have_conWatRetCon = fanSpeCon==Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Types.TowerSpeedControl.CondenserWaterReturnTemperaure "True: the fan speed is controlled to maintain the condenser water return temperature setpoint"; parameter Boolean closeCoupledPlant=true "Flag to indicate if the plant is close coupled"; parameter Boolean have_WSE=true "Flag to indicate if the plant has waterside economizer"; parameter Real desCap(unit="W")=1e6 "Plant design capacity"; parameter Real fanSpeMin=0.1 "Minimum tower fan speed"; parameter Real chiMinCap[nChi]( final unit=fill("W", nChi))={1e4,1e4} "Minimum cyclining load below which chiller will begin cycling"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController intOpeCon= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kIntOpe=1 "Gain of controller"; parameter Real TiIntOpe(unit="s")=0.5 "Time constant of integrator block"; parameter Real TdIntOpe(unit="s")=0.1 "Time constant of derivative block"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController chiWatCon= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kWSE=1 "Gain of controller"; parameter Real TiWSE(unit="s")=0.5 "Time constant of integrator block"; parameter Real TdWSE(unit="s")=0.1 "Time constant of derivative block"; parameter Real minChiLif[nChi](unit=fill("K", nChi))={12,12} "Minimum LIFT of each chiller"; parameter Real TConWatSup_nominal[nChi]( unit=fill("K", nChi), each displayUnit="degC")={293.15,293.15} "Design condenser water supply temperature (condenser entering) of each chiller"; parameter Real TConWatRet_nominal[nChi]( unit=fill("K", nChi), each displayUnit="degC")={303.15,303.15} "Design condenser water return temperature (condenser leaving) of each chiller"; parameter Real TChiWatSupMin[nChi]( unit=fill("K", nChi), each displayUnit="degC")={278.15,278.15} "Lowest chilled water supply temperature of each chiller"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController couPlaCon= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kCouPla=1 "Gain of controller"; parameter Real TiCouPla(unit="s")=0.5 "Time constant of integrator block"; parameter Real TdCouPla(unit="s")=0.1 "Time constant of derivative block"; parameter Real yCouPlaMax=1 "Upper limit of output"; parameter Real yCouPlaMin=0 "Lower limit of output"; parameter Real samplePeriod=30 "Period of sampling condenser water supply and return temperature difference"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController supWatCon= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kSupCon=1 "Gain of controller"; parameter Real TiSupCon(unit="s")=0.5 "Time constant of integrator block"; parameter Real TdSupCon(unit="s")=0.1 "Time constant of derivative block"; parameter Real ySupConMax=1 "Upper limit of output"; parameter Real ySupConMin=0 "Lower limit of output"; parameter Real speChe=0.005 "Lower threshold value to check fan or pump speed"; parameter Real cheMinFanSpe(unit="s")=300 "Threshold time for checking duration when tower fan equals to the minimum tower fan speed"; parameter Real cheMaxTowSpe(unit="s")=300 "Threshold time for checking duration when any enabled chiller maximum cooling speed equals to the minimum tower fan speed"; parameter Real cheTowOff(unit="s")=60 "Threshold time for checking duration when there is no enabled tower fan"; parameter Real iniPlaTim(unit="s")=600 "Time to hold return temperature to initial setpoint after plant being enabled"; parameter Real ramTim(unit="s")=180 "Time to ramp return water temperature from initial value to setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiLoa(final unit="W", final quantity="HeatFlowRate") if have_WSE "Current cooling load"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi] "Chiller enabling status: true=ON"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWse if have_WSE "Waterside economizer enabling status: true=ON"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") if have_WSE "Chilled water supply temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Chilled water supply temperature setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealInput reqPlaCap( final unit="W", final quantity="HeatFlowRate") "Current required plant capacity"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uMaxSpeSet[nChi]( final min=fill(0, nChi), final max=fill(1, nChi), final unit=fill("1", nChi)) if need_heaPreCon "Maximum cooling tower speed setpoint from each chiller head pressure control loop"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uTow[nTowCel] "Cooling tower cell operating status: true=running tower cell"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla "Plant enabling status"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatRet( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") if have_conWatRetCon "Condenser water return temperature (condenser leaving)"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uConWatPum[nConWatPum] "Current condenser water pump status"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TConWatSup( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") if have_conWatRetCon and not closeCoupledPlant "Condenser water supply temperature (condenser entering)"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySpeSet( final min=0, final max=1, final unit="1") if have_conWatRetCon "Fan speed setpoint of each cooling tower cell"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yLifMax( final unit="K") if have_conWatRetCon "Maximum LIFT among enabled chillers"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yLifMin( final unit="K") if have_conWatRetCon "Minimum LIFT among enabled chillers"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConWatRetSet( final quantity="ThermodynamicTemperature", displayUnit="degC", final unit="K") if have_conWatRetCon "Condenser water return temperature setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConWatSupSet( final quantity="ThermodynamicTemperature", displayUnit="degC", final unit="K") if have_conWatRetCon and not closeCoupledPlant "Condenser water supply temperature setpoint"; Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.ReturnWaterTemperature.Controller fanSpeRetTem( final need_heaPreCon=need_heaPreCon, final nChi=nChi, final nTowCel=nTowCel, final nConWatPum=nConWatPum, final have_WSE=have_WSE, final closeCoupledPlant=closeCoupledPlant, final desCap=desCap, final fanSpeMin=fanSpeMin, final minChiLif=minChiLif, final TConWatRet_nominal=TConWatRet_nominal, final TConWatSup_nominal=TConWatSup_nominal, final TChiWatSupMin=TChiWatSupMin, final cheMinFanSpe=cheMinFanSpe, final cheMaxTowSpe=cheMaxTowSpe, final cheTowOff=cheTowOff, final iniPlaTim=iniPlaTim, final ramTim=ramTim, final couPlaCon=couPlaCon, final kCouPla=kCouPla, final TiCouPla=TiCouPla, final yCouPlaMax=yCouPlaMax, final yCouPlaMin=yCouPlaMin, final TdCouPla=TdCouPla, final supWatCon=supWatCon, final kSupCon=kSupCon, final TiSupCon=TiSupCon, final TdSupCon=TdSupCon, final ySupConMax=ySupConMax, final ySupConMin=ySupConMin, final speChe=speChe) if have_conWatRetCon "Fan speed control based on condenser water return temperature control"; Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.EnabledWSE.Controller fanSpeWse( final nChi=nChi, final chiMinCap=chiMinCap, final fanSpeMin=fanSpeMin, final intOpeCon=intOpeCon, final kIntOpe=kIntOpe, final TiIntOpe=TiIntOpe, final TdIntOpe=TdIntOpe, final fanSpeChe=speChe, final chiWatCon=chiWatCon, final kWSE=kWSE, final TiWSE=TiWSE, final TdWSE=TdWSE) if have_WSE "Tower fan speed when waterside economizer is enabled"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1( final k=fanSpeCon == Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Types.TowerSpeedControl.CondenserWaterReturnTemperaure) "Check if the speed control is for returning water temperature"; Buildings.Controls.OBC.CDL.Utilities.Assert assMes( final message="The tower speed control should be for controlling the return temperature setpoint.") "Tower speed control warning"; equation connect(fanSpeWse.ySpeSet, fanSpeRetTem.uSpeWSE); connect(fanSpeWse.uChiLoa, uChiLoa); connect(fanSpeWse.uChi, uChi); connect(fanSpeWse.uWse, uWse); connect(fanSpeWse.TChiWatSup, TChiWatSup); connect(fanSpeWse.TChiWatSupSet, TChiWatSupSet); connect(uChi, fanSpeRetTem.uChi); connect(uWse, fanSpeRetTem.uWse); connect(fanSpeRetTem.reqPlaCap, reqPlaCap); connect(fanSpeRetTem.uMaxSpeSet, uMaxSpeSet); connect(fanSpeRetTem.uTow, uTow); connect(TChiWatSupSet, fanSpeRetTem.TChiWatSupSet); connect(fanSpeRetTem.uPla, uPla); connect(fanSpeRetTem.TConWatRet, TConWatRet); connect(fanSpeRetTem.TConWatSup, TConWatSup); connect(fanSpeRetTem.ySpeSet,ySpeSet); connect(fanSpeRetTem.yLifMax, yLifMax); connect(fanSpeRetTem.yLifMin, yLifMin); connect(fanSpeRetTem.TConWatRetSet, TConWatRetSet); connect(fanSpeRetTem.TConWatSupSet, TConWatSupSet); connect(uConWatPum, fanSpeRetTem.uConWatPum); connect(con1.y, assMes.u); end Controller;