Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.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.Economizers.Controller Controller Multi zone VAV AHU economizer control sequence
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Subsequences Subsequences Subsequences for economizer control
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Validation Validation Collection of validation models

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

Multi zone VAV AHU economizer control sequence

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

Information

Multi zone VAV AHU economizer control sequence that calculates outdoor and return air damper positions based on ASHRAE Guidline 36, PART5 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
Timedelta5Time 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]
TimeTiMinOut1200Time constant of controller for minimum outdoor air intake [s]
TimeTdMinOut0.1Time constant of derivative block for minimum outdoor air intake [s]
Freeze protection
SimpleControllercontrollerTypeFreBuildings.Controls.OBC.CDL.T...Type of controller
TemperatureTFreSet279.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]
TimeTiFre120Time constant of controller for mixed air temperature tracking for freeze protection. Require TiFre < TiMinOut [s]
Economizer freeze protection
TimeTdFre0.1Time constant of derivative block for freeze protection [s]
Advanced
Hysteresis
TemperatureDifferencedelTOutHis1Delta between the temperature hysteresis high and low limit [K]
SpecificEnergydelEntHis1000Delta between the enthalpy hysteresis high and low limits [J/kg]
Delays at disable
TimeretDamFulOpeTim180Time period to keep RA damper fully open before releasing it for minimum outdoor airflow control at disable to avoid pressure fluctuations [s]
TimedisDel15Short time delay before closing the OA damper at disable to avoid pressure fluctuations [s]
Commissioning
Controller
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]
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 Modelica.SIunits.TemperatureDifference delTOutHis=1 "Delta between the temperature hysteresis high and low limit"; parameter Modelica.SIunits.SpecificEnergy delEntHis=1000 "Delta between the enthalpy hysteresis high and low limits"; parameter Modelica.SIunits.Time retDamFulOpeTim=180 "Time period to keep RA damper fully open before releasing it for minimum outdoor airflow control at disable to avoid pressure fluctuations"; parameter Modelica.SIunits.Time disDel=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 Modelica.SIunits.Time TiMinOut=1200 "Time constant of controller for minimum outdoor air intake"; parameter Modelica.SIunits.Time TdMinOut=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 Modelica.SIunits.Temperature TFreSet = 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 Modelica.SIunits.Time TiFre(max=TiMinOut)=120 "Time constant of controller for mixed air temperature tracking for freeze protection. Require TiFre < TiMinOut"; parameter Modelica.SIunits.Time TdFre=0.1 "Time constant of derivative block for freeze protection"; parameter Modelica.SIunits.Time delta=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 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 quantity="ThermodynamicTemperature") "Outdoor air (OA) temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TOutCut( final unit="K", 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 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.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.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=uRetDamMin, final controllerType=controllerTypeMinOut) "Multi zone VAV AHU economizer minimum outdoor air requirement damper limit sequence"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.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;