Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers

Economizer control of multi zone VAV AHU

Information

The package contains a multi zone VAV AHU economizer control sequence and the related economizer subsequences.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Controller Controller Multi zone VAV AHU economizer control sequence
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences Subsequences Subsequences for economizer control
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Controller Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Controller

Multi zone VAV AHU economizer control sequence

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Controller

Information

Multi zone VAV AHU economizer control sequence that calculates outdoor and return air damper positions based on ASHRAE Guidline 36, PART 5 sections: N.2.c, N.5, N.6.c, N.7, A.17, N.12.

The sequence consists of three subsequences.

To enable freeze protection control logic that closes the outdoor air damper based on the mixed air temperature TMix, set use_TMix=true. This part of the control logic is not in Guideline 36, public review draft 1.

To enable the freeze protection according to Guideline 36, public review draft 1, which may be revised in future versions, set use_G36FrePro=true.

Parameters

TypeNameDefaultDescription
Booleanuse_enthalpyfalseSet to true if enthalpy measurement is used in addition to temperature measurement
Booleanuse_TMixtrueSet to true if mixed air temperature measurement is enabled
Booleanuse_G36FreProfalseSet to true to use G36 freeze protection
Realdelta5Time horizon over which the outdoor air flow measurment is averaged [s]
Minimum outdoor air
SimpleControllercontrollerTypeMinOutBuildings.Controls.OBC.CDL.T...Type of controller
RealkMinOut0.05Gain of controller for minimum outdoor air [1]
RealTiMinOut120Time constant of controller for minimum outdoor air intake [s]
RealTdMinOut0.1Time constant of derivative block for minimum outdoor air intake [s]
Freeze protection
SimpleControllercontrollerTypeFreBuildings.Controls.OBC.CDL.T...Type of controller
RealTFreSet279.15Lower limit for mixed air temperature for freeze protection, used if use_TMix=true [K]
RealkFre0.1Gain for mixed air temperature tracking for freeze protection, used if use_TMix=true [1/K]
RealTiFre120Time constant of controller for mixed air temperature tracking for freeze protection. Require TiFre <= TiMinOut [s]
Economizer freeze protection
RealTdFre0.1Time constant of derivative block for freeze protection [s]
Advanced
Hysteresis
RealdelTOutHis1Delta between the temperature hysteresis high and low limit [K]
RealdelEntHis1000Delta between the enthalpy hysteresis high and low limits [J/kg]
Delays at disable
RealretDamFulOpeTim180Time period to keep RA damper fully open before releasing it for minimum outdoor airflow control at disable to avoid pressure fluctuations [s]
RealdisDel15Short time delay before closing the OA damper at disable to avoid pressure fluctuations [s]
Commissioning
Supply air temperature control
RealuHeaMax-0.25Lower limit of controller input when outdoor damper opens for modulation control. Require -1 < uHeaMax < uCooMin < 1.
RealuCooMin+0.25Upper limit of controller input when return damper is closed for modulation control. Require -1 < uHeaMax < uCooMin < 1.
RealuOutDamMax(uHeaMax + uCooMin)/2Maximum loop signal for the OA damper to be fully open. Require -1 < uHeaMax < uOutDamMax <= uRetDamMin < uCooMin < 1. [1]
RealuRetDamMin(uHeaMax + uCooMin)/2Minimum loop signal for the RA damper to be fully open. Require -1 < uHeaMax < uOutDamMax <= uRetDamMin < uCooMin < 1. [1]
Minimum outdoor air control
RealuRetDamMinLim0.5Loop signal value to start decreasing the maximum return air damper position [1]
Physical damper position limits
RealretDamPhyPosMax1Physically fixed maximum position of the return air damper [1]
RealretDamPhyPosMin0Physically fixed minimum position of the return air damper [1]
RealoutDamPhyPosMax1Physically fixed maximum position of the outdoor air damper [1]
RealoutDamPhyPosMin0Physically fixed minimum position of the outdoor air damper [1]

Connectors

TypeNameDescription
input RealInputuTSupSignal for supply air temperature control (T Sup Control Loop Signal in diagram) [1]
input RealInputTOutOutdoor air (OA) temperature [K]
input RealInputTOutCutOA temperature high limit cutoff. For differential dry bulb temeprature condition use return air temperature measurement [K]
input RealInputhOutOutdoor air enthalpy [J/kg]
input RealInputhOutCutOA enthalpy high limit cutoff. For differential enthalpy use return air enthalpy measurement [J/kg]
input RealInputTMixMeasured mixed air temperature, used for freeze protection [K]
input RealInputVOut_flow_normalizedMeasured outdoor volumetric airflow rate, normalized by design minimum outdoor airflow rate [1]
input RealInputVOutMinSet_flow_normalizedEffective minimum outdoor airflow setpoint, normalized by design minimum outdoor airflow rate [1]
input IntegerInputuFreProStaFreeze protection status
input IntegerInputuOpeModAHU operation mode status signal
input BooleanInputuSupFanSupply fan status
output RealOutputyRetDamPosReturn air damper position [1]
output RealOutputyOutDamPosOutdoor air damper position [1]

Modelica definition

block Controller "Multi zone VAV AHU economizer control sequence" parameter Boolean use_enthalpy=false "Set to true if enthalpy measurement is used in addition to temperature measurement"; parameter Boolean use_TMix=true "Set to true if mixed air temperature measurement is enabled"; parameter Boolean use_G36FrePro=false "Set to true to use G36 freeze protection"; parameter Real delTOutHis( final unit="K", final displayUnit="K", final quantity="TemperatureDifference")=1 "Delta between the temperature hysteresis high and low limit"; parameter Real delEntHis( final unit="J/kg", final quantity="SpecificEnergy")=1000 "Delta between the enthalpy hysteresis high and low limits"; parameter Real retDamFulOpeTim( final unit="s", final quantity="Time")=180 "Time period to keep RA damper fully open before releasing it for minimum outdoor airflow control at disable to avoid pressure fluctuations"; parameter Real disDel( final unit="s", final quantity="Time")=15 "Short time delay before closing the OA damper at disable to avoid pressure fluctuations"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeMinOut= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kMinOut(final unit="1")=0.05 "Gain of controller for minimum outdoor air"; parameter Real TiMinOut( final unit="s", final quantity="Time")=120 "Time constant of controller for minimum outdoor air intake"; parameter Real TdMinOut( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for minimum outdoor air intake"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeFre= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real TFreSet( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature")= 279.15 "Lower limit for mixed air temperature for freeze protection, used if use_TMix=true"; parameter Real kFre(final unit="1/K") = 0.1 "Gain for mixed air temperature tracking for freeze protection, used if use_TMix=true"; parameter Real TiFre( final unit="s", final quantity="Time", final max=TiMinOut)=120 "Time constant of controller for mixed air temperature tracking for freeze protection. Require TiFre <= TiMinOut"; parameter Real TdFre( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for freeze protection"; parameter Real delta( final unit="s", final quantity="Time")=5 "Time horizon over which the outdoor air flow measurment is averaged"; parameter Real uHeaMax=-0.25 "Lower limit of controller input when outdoor damper opens for modulation control. Require -1 < uHeaMax < uCooMin < 1."; parameter Real uCooMin=+0.25 "Upper limit of controller input when return damper is closed for modulation control. Require -1 < uHeaMax < uCooMin < 1."; parameter Real uOutDamMax( final min=-1, final max=1, final unit="1") = (uHeaMax + uCooMin)/2 "Maximum loop signal for the OA damper to be fully open. Require -1 < uHeaMax < uOutDamMax <= uRetDamMin < uCooMin < 1."; parameter Real uRetDamMin( final min=-1, final max=1, final unit="1") = (uHeaMax + uCooMin)/2 "Minimum loop signal for the RA damper to be fully open. Require -1 < uHeaMax < uOutDamMax <= uRetDamMin < uCooMin < 1."; parameter Real uRetDamMinLim( final min=0, final max=1, final unit="1") = 0.5 "Loop signal value to start decreasing the maximum return air damper position"; parameter Real retDamPhyPosMax( final min=0, final max=1, final unit="1") = 1 "Physically fixed maximum position of the return air damper"; parameter Real retDamPhyPosMin( final min=0, final max=1, final unit="1") = 0 "Physically fixed minimum position of the return air damper"; parameter Real outDamPhyPosMax( final min=0, final max=1, final unit="1") = 1 "Physically fixed maximum position of the outdoor air damper"; parameter Real outDamPhyPosMin( final min=0, final max=1, final unit="1") = 0 "Physically fixed minimum position of the outdoor air damper"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uTSup(final unit="1") "Signal for supply air temperature control (T Sup Control Loop Signal in diagram)"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Outdoor air (OA) temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TOutCut( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "OA temperature high limit cutoff. For differential dry bulb temeprature condition use return air temperature measurement"; Buildings.Controls.OBC.CDL.Interfaces.RealInput hOut( final unit="J/kg", final quantity="SpecificEnergy") if use_enthalpy "Outdoor air enthalpy"; Buildings.Controls.OBC.CDL.Interfaces.RealInput hOutCut( final unit="J/kg", final quantity="SpecificEnergy") if use_enthalpy "OA enthalpy high limit cutoff. For differential enthalpy use return air enthalpy measurement"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TMix( final unit="K", final displayUnit="degC", final quantity = "ThermodynamicTemperature") if use_TMix "Measured mixed air temperature, used for freeze protection"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VOut_flow_normalized( final unit="1") "Measured outdoor volumetric airflow rate, normalized by design minimum outdoor airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VOutMinSet_flow_normalized( final unit="1") "Effective minimum outdoor airflow setpoint, normalized by design minimum outdoor airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uFreProSta if use_G36FrePro "Freeze protection status"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "AHU operation mode status signal"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan status"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDamPos( final min=0, final max=1, final unit="1") "Return air damper position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDamPos( final min=0, final max=1, final unit="1") "Outdoor air damper position"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Enable enaDis( final use_enthalpy=use_enthalpy, final delTOutHis=delTOutHis, final delEntHis=delEntHis, final retDamFulOpeTim=retDamFulOpeTim, final disDel=disDel) "Multi zone VAV AHU economizer enable/disable sequence"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Limits damLim( final retDamPhyPosMax=retDamPhyPosMax, final retDamPhyPosMin=retDamPhyPosMin, final outDamPhyPosMax=outDamPhyPosMax, final outDamPhyPosMin=outDamPhyPosMin, final k=kMinOut, final Ti=TiMinOut, final Td=TdMinOut, final uRetDamMin=uRetDamMinLim, final controllerType=controllerTypeMinOut) "Multi zone VAV AHU economizer minimum outdoor air requirement damper limit sequence"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.Economizers.Subsequences.Modulation mod( final uRetDamMin=uRetDamMin, final uMin=uHeaMax, final uMax=uCooMin, final uOutDamMax=uOutDamMax) "Multi zone VAV AHU economizer damper modulation sequence"; Buildings.Controls.OBC.ASHRAE.G36_PR1.Generic.FreezeProtectionMixedAir freProTMix( final controllerType=controllerTypeFre, final TFreSet = TFreSet, final k=kFre, final Ti=TiFre, final Td=TdFre) if use_TMix "Block that tracks TMix against a freeze protection setpoint"; protected Buildings.Controls.OBC.CDL.Continuous.MovingMean movAve(final delta=delta) "Moving average of outdoor air flow measurement, normalized by design minimum outdoor airflow rate"; Buildings.Controls.OBC.CDL.Continuous.Min outDamMaxFre "Maximum control signal for outdoor air damper due to freeze protection"; Buildings.Controls.OBC.CDL.Continuous.Max retDamMinFre "Minimum position for return air damper due to freeze protection"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant noTMix(k=0) if not use_TMix "Ignore max evaluation if there is no mixed air temperature sensor"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant noTMix1(k=1) if not use_TMix "Ignore min evaluation if there is no mixed air temperature sensor"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta( final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.FreezeProtectionStages.stage0) if not use_G36FrePro "Freeze protection status is 0. Use if G36 freeze protection is not implemented"; equation connect(uSupFan, enaDis.uSupFan); connect(uFreProSta, enaDis.uFreProSta); connect(hOutCut, enaDis.hOutCut); connect(hOut, enaDis.hOut); connect(TOutCut, enaDis.TOutCut); connect(TOut, enaDis.TOut); connect(VOutMinSet_flow_normalized, damLim.VOutMinSet_flow_normalized); connect(uSupFan, damLim.uSupFan); connect(uOpeMod, damLim.uOpeMod); connect(uFreProSta, damLim.uFreProSta); connect(damLim.yOutDamPosMax, enaDis.uOutDamPosMax); connect(damLim.yOutDamPosMin, enaDis.uOutDamPosMin); connect(damLim.yRetDamPosMin, enaDis.uRetDamPosMin); connect(damLim.yRetDamPhyPosMax, enaDis.uRetDamPhyPosMax); connect(damLim.yRetDamPosMax, enaDis.uRetDamPosMax); connect(enaDis.yOutDamPosMax, mod.uOutDamPosMax); connect(enaDis.yRetDamPosMax, mod.uRetDamPosMax); connect(damLim.yOutDamPosMin, mod.uOutDamPosMin); connect(enaDis.yRetDamPosMin, mod.uRetDamPosMin); connect(uTSup, mod.uTSup); connect(VOut_flow_normalized, movAve.u); connect(movAve.y, damLim.VOut_flow_normalized); connect(retDamMinFre.y, yRetDamPos); connect(mod.yOutDamPos, outDamMaxFre.u1); connect(outDamMaxFre.y, yOutDamPos); connect(outDamMaxFre.u2, noTMix1.y); connect(mod.yRetDamPos, retDamMinFre.u2); connect(retDamMinFre.u1, noTMix.y); connect(TMix, freProTMix.TMix); connect(freProTMix.yFrePro, retDamMinFre.u1); connect(freProTMix.yFreProInv, outDamMaxFre.u2); connect(freProSta.y, damLim.uFreProSta); connect(freProSta.y, enaDis.uFreProSta); end Controller;