Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences

Subsequences for economizer control

Information

This package contains subsequences for single zone VAV AHU economizer control.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Enable Enable Single zone VAV AHU economizer enable/disable switch
Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Limits Limits Single zone VAV AHU minimum outdoor air control - damper position limits
Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Modulation Modulation Outdoor and return air damper position modulation sequence for single zone VAV AHU
Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Enable Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Enable

Single zone VAV AHU economizer enable/disable switch

Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Enable

Information

This is a single zone VAV AHU economizer enable/disable sequence based on Section 5.18.7 and Section 5.1.17 of ASHRAE Guideline 36, May 2020. Additional conditions included in the sequence are:

The economizer is disabled whenever the outdoor air conditions exceed the economizer high limit cutoff setpoint plus the hysteresis low limit parameter (TOutHigLimCutLow or hOutHigLimCutLow) as shown in the figure. And the economizer is enabled whenever the outdoor air conditions are below the economizer high limit cutoff setpoint plus the hysteresis high limit parameter (TOutHigLimCutHig or hOutHigLimCutHig). This sequence allows for all device types listed in ASHRAE 90.1-2013 and Title 24-2013.

In addition, the economizer is disabled without a delay whenever any of the following is true:

The following state machine chart illustrates the transitions between enabling and disabling:

Image of economizer enable-disable state machine chart

Parameters

TypeNameDefaultDescription
Conditional
Booleanuse_enthalpytrueSet to true to evaluate outdoor air (OA) enthalpy in addition to temperature
Advanced
Hysteresis
RealdelTOutHys1Delta between the temperature hysteresis high and low limit [K]
RealdelEntHys1000Delta between the enthalpy hysteresis high and low limits [J/kg]
Commissioning
Physical damper position limits
RealretDamPhy_max1Physically fixed maximum position of the return air damper [1]
RealretDamPhy_min0Physically fixed minimum position of the return air damper [1]

Connectors

TypeNameDescription
input RealInputTOutOutdoor air temperature [K]
input RealInputTCutOA temperature high limit cutoff. For differential dry bulb temperature condition use return air temperature measurement [K]
input RealInputhOutOutdoor air enthalpy [J/kg]
input RealInputhCutOA enthalpy high limit cutoff. For differential enthalpy use return air enthalpy measurement [J/kg]
input BooleanInputu1SupFanSupply fan on/off status signal
input IntegerInputuFreProStaFreeze protection stage status signal
input IntegerInputuZonStaZone state status signal
input RealInputuOutDam_maxMaximum outdoor air damper position, get from damper position limits sequence [1]
input RealInputuOutDam_minMinimum outdoor air damper position, get from damper position limits sequence [1]
output RealOutputyOutDam_maxMaximum outdoor air damper position [1]
output RealOutputyRetDam_maxMaximum return air damper position [1]
output RealOutputyRetDam_minMinimum return air damper position [1]

Modelica definition

block Enable "Single zone VAV AHU economizer enable/disable switch" parameter Boolean use_enthalpy = true "Set to true to evaluate outdoor air (OA) enthalpy in addition to temperature"; parameter Real delTOutHys( final unit="K", final displayUnit="K", final quantity="TemperatureDifference")=1 "Delta between the temperature hysteresis high and low limit"; parameter Real delEntHys( final unit="J/kg", final quantity="SpecificEnergy")=1000 "Delta between the enthalpy hysteresis high and low limits"; parameter Real retDamPhy_max( final min=0, final max=1, final unit="1") = 1 "Physically fixed maximum position of the return air damper"; parameter Real retDamPhy_min( final min=0, final max=1, final unit="1") = 0 "Physically fixed minimum position of the return air damper"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut( final unit="K", final displayUnit="degC", final quantity = "ThermodynamicTemperature") "Outdoor air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TCut( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "OA temperature high limit cutoff. For differential dry bulb temperature 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 hCut( 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.BooleanInput u1SupFan "Supply fan on/off status signal"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uFreProSta "Freeze protection stage status signal"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uZonSta "Zone state status signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDam_max( final unit="1", final min=0, final max=1) "Maximum outdoor air damper position, get from damper position limits sequence"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDam_min( final unit="1", final min=0, final max=1) "Minimum outdoor air damper position, get from damper position limits sequence"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDam_max( final min=0, final max=1, final unit="1") "Maximum outdoor air damper position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDam_max( final min=retDamPhy_min, final max=retDamPhy_max, final unit="1") "Maximum return air damper position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDam_min( final min=retDamPhy_min, final max=retDamPhy_max, final unit="1") "Minimum return air damper position"; Buildings.Controls.OBC.CDL.Logical.And3 andEnaDis "Logical and that checks freeze protection stage and zone state"; Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol( trueHoldDuration=600) "10 min on/off delay"; protected final parameter Real TOutHigLimCutHig( final unit="K", final displayUnit="K", final quantity="TemperatureDifference") = 0 "Hysteresis high limit cutoff"; final parameter Real TOutHigLimCutLow = TOutHigLimCutHig - delTOutHys "Hysteresis low limit cutoff"; final parameter Real hOutHigLimCutHig( final unit="J/kg", final quantity="SpecificEnergy") = 0 "Hysteresis block high limit cutoff"; final parameter Real hOutHigLimCutLow = hOutHigLimCutHig - delEntHys "Hysteresis block low limit cutoff"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant entSubst( final k=false) if not use_enthalpy "Deactivates outdoor air enthalpy condition if there is no enthalpy sensor"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyMin( final k=retDamPhy_min) "Physically fixed minimum position of the return air damper"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyMax( final k=retDamPhy_max) "Physically fixed maximum position of the return air damper. This is the initial condition of the return air damper"; Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutTem( final uHigh=TOutHigLimCutHig, final uLow=TOutHigLimCutLow) "Outdoor air temperature hysteresis for fixed or differential dry bulb temperature cutoff conditions"; Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutEnt( final uLow=hOutHigLimCutLow, final uHigh=hOutHigLimCutHig) if use_enthalpy "Outdoor air enthalpy hysteresis for fixed or differential enthalpy cutoff conditions"; Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 if use_enthalpy "Add block that determines the difference between hOut and hOutCut"; Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 "Add block that determines difference the between TOut and TOutCut"; Buildings.Controls.OBC.CDL.Continuous.Switch maxOutDam "Set maximum OA damper position to minimum at disable (after time delay)"; Buildings.Controls.OBC.CDL.Continuous.Switch minRetDam "Keep minimum RA damper position at physical maximum for a short time period after disable"; Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not that starts the timer at disable signal "; Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and checks supply fan status"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeProtectionStages.stage0) "Freeze protection stage 0"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu "Logical block to check if the freeze protection is deactivated"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.ZoneStates.heating) "Heating zone state"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 "Logical block to check if the freeze protection is deactivated"; Buildings.Controls.OBC.CDL.Logical.Not not3 "Negation for check of freeze protection status"; Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if either the temperature or the enthalpy condition is satisfied"; equation connect(maxOutDam.y, yOutDam_max); connect(TOut, sub1.u1); connect(TCut, sub1.u2); connect(sub1.y, hysOutTem.u); connect(hOut, sub2.u1); connect(hCut, sub2.u2); connect(sub2.y, hysOutEnt.u); connect(uOutDam_min, maxOutDam.u1); connect(uOutDam_max, maxOutDam.u3); connect(andEnaDis.y, not2.u); connect(minRetDam.y, yRetDam_min); connect(truFalHol.y, and1.u1); connect(and1.y, andEnaDis.u1); connect(u1SupFan, and1.u2); connect(retDamPhyMax.y, minRetDam.u1); connect(retDamPhyMin.y, minRetDam.u3); connect(retDamPhyMax.y, yRetDam_max); connect(not2.y, minRetDam.u2); connect(not2.y, maxOutDam.u2); connect(conInt.y,intEqu. u2); connect(conInt1.y,intEqu1. u2); connect(intEqu1.y,not3. u); connect(uZonSta, intEqu1.u1); connect(uFreProSta, intEqu.u1); connect(intEqu.y, andEnaDis.u2); connect(not3.y, andEnaDis.u3); connect(hysOutTem.y, or2.u1); connect(hysOutEnt.y, or2.u2); connect(entSubst.y, or2.u2); connect(or2.y, truFalHol.u); end Enable;

Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Limits Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Limits

Single zone VAV AHU minimum outdoor air control - damper position limits

Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Limits

Information

This block implements the single zone VAV AHU minimum outdoor air control with a single common damper for minimum outdoor air and economizer functions based on outdoor airflow setpoint (VOutMinSet_flow) and supply fan speed (uSupFanSpe_actual), designed in line with Section 5.18.6 of ASHRAE Guidline 36, May 2020.

The controller is enabled when the supply fan is proven on (u1SupFan=true), the AHU operation mode uOpeMod is Occupied, and Freeze protection stage uFreProSta is 1 or smaller. Otherwise the damper position limits are set to their corresponding maximum and minimum physical or at commissioning fixed limits, as illustrated below:

Image of damper position limits state machine chart

If limit modulation is enabled, the outdoor air damper position yOutDamPosMin is computed as follows:

  1. Calculate outdoor air damper position yDam_VOutMin_curSpe which ensures minimum outdoor airflow rate VOutMin_flow at current supply fan speed uSupFanSpe_actual as a linear interpolation between the following values set at commissioning:
    • minimum damper position at minimum fan speed for minimum outdoor airflow outDamMinFloMinSpe and
    • minimum damper position at maximum fan speed for minimum outdoor airflow outDamMinFloMaxSpe.
  2. Calculate outdoor air damper position yDam_VOutDes_curSpe which ensures design outdoor airflow rate VOutDes_flow at current supply fan speed uSupFanSpe_actual, as a linear interpolation between the following values set at commissioning:
    • minimum damper position at minimum fan speed for design outdoor airflow outDamDesFloMinSpe and
    • minimum damper position at maximum fan speed for design outdoor airflow outDamDesFloMaxSpe.
  3. Calculate outdoor air damper position yOutDamPosMin which ensures outdoor airflow setpoint VOutMinSet_flow at current supply fan speed uSupFanSpe_actual as a linear interpolation between yDam_VOutMin_curSpe and yDam_VOutDes_curSpe, proportional to ratios of VOutMinSet_flow to VOutDes_flow and VOutMin_flow.
  4. If outdoor airflow setpoint VOutMinSet_flow is zero, yOutDamPosMin should be zero.

The chart below illustrates the OA damper position limit calculation:

Image of damper position limits control chart

Parameters

TypeNameDefaultDescription
Commissioning
Damper position limits
RealsupFanSpe_min0.1Minimum supply fan operation speed [1]
RealsupFanSpe_max1Maximum supply fan operation speed [1]
RealoutDamMinFloMinSpe0.4OA damper position to supply minimum outdoor airflow at minimum fan speed [1]
RealoutDamMinFloMaxSpe0.3OA damper position to supply minimum outdoor airflow at maximum fan speed [1]
RealoutDamDesFloMinSpe0.9OA damper position to supply design outdoor airflow at minimum fan speed [1]
RealoutDamDesFloMaxSpe0.8OA damper position to supply design outdoor airflow at maximum fan speed [1]
RealVOutMin_flow Calculated minimum outdoor airflow rate [m3/s]
RealVOutDes_flow Calculated design outdoor airflow rate [m3/s]
Physical damper position limits
RealoutDamPhy_max1Physically fixed maximum position of the outdoor air damper [1]
RealoutDamPhy_min0Physically fixed minimum position of the outdoor air damper [1]
Advanced
RealfloHys0.01Near zero flow rate, below which the flow rate or difference will be seen as zero [m3/s]

Connectors

TypeNameDescription
input RealInputuSupFan_actualActual supply fan speed [1]
input RealInputVOutMinSet_flowMinimum outdoor airflow setpoint [m3/s]
input IntegerInputuOpeModAHU operation mode status signal
input IntegerInputuFreProStaFreeze protection status signal
input BooleanInputu1SupFanSupply fan status signal
output RealOutputyOutDam_minMinimum outdoor air damper position limit [1]
output RealOutputyOutDam_maxMaximum outdoor air damper position limit [1]

Modelica definition

block Limits "Single zone VAV AHU minimum outdoor air control - damper position limits" parameter Real supFanSpe_min( final min=0, final max=1, final unit="1") = 0.1 "Minimum supply fan operation speed"; parameter Real supFanSpe_max( final min=0, final max=1, final unit="1") = 1 "Maximum supply fan operation speed"; parameter Real outDamMinFloMinSpe( final min=outDamPhy_min, final max=outDamPhy_max, final unit="1") = 0.4 "OA damper position to supply minimum outdoor airflow at minimum fan speed"; parameter Real outDamMinFloMaxSpe( final min=outDamPhy_min, final max=outDamPhy_max, final unit="1") = 0.3 "OA damper position to supply minimum outdoor airflow at maximum fan speed"; parameter Real outDamDesFloMinSpe( final min=outDamMinFloMinSpe, final max=outDamPhy_max, final unit="1") = 0.9 "OA damper position to supply design outdoor airflow at minimum fan speed"; parameter Real outDamDesFloMaxSpe( final min=outDamMinFloMaxSpe, final max=outDamPhy_max, final unit="1") = 0.8 "OA damper position to supply design outdoor airflow at maximum fan speed"; parameter Real VOutMin_flow( final unit="m3/s", final quantity="VolumeFlowRate") "Calculated minimum outdoor airflow rate"; parameter Real VOutDes_flow( final unit="m3/s", final quantity="VolumeFlowRate") "Calculated design outdoor airflow rate"; parameter Real outDamPhy_max( final min=0, final max=1, final unit="1") = 1 "Physically fixed maximum position of the outdoor air damper"; parameter Real outDamPhy_min( final min=0, final max=1, final unit="1") = 0 "Physically fixed minimum position of the outdoor air damper"; parameter Real floHys( final unit="m3/s", final quantity="VolumeFlowRate")=0.01 "Near zero flow rate, below which the flow rate or difference will be seen as zero"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uSupFan_actual( final min=0, final max=1, final unit="1") "Actual supply fan speed"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VOutMinSet_flow( final unit="m3/s", final quantity="VolumeFlowRate", final min=VOutMin_flow, final max=VOutDes_flow) "Minimum outdoor airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "AHU operation mode status signal"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uFreProSta "Freeze protection status signal"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1SupFan "Supply fan status signal"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDam_min( final min=outDamPhy_min, final max=outDamPhy_max, final unit="1") "Minimum outdoor air damper position limit"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDam_max( final min=outDamPhy_min, final max=outDamPhy_max, final unit="1") "Maximum outdoor air damper position limit"; protected Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanMinSig( final k=supFanSpe_min) "Minimum supply fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMinSig( final k=outDamPhy_min) "Physically fixed minimum position of the outdoor air damper"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig( final k=outDamPhy_max) "Physically fixed maximum position of the outdoor air damper"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanMaxSig( final k=supFanSpe_max) "Maximum supply fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutMin_minSpeSig( final k=outDamMinFloMinSpe) "OA damper position to supply minimum outdoor airflow at minimum fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutDes_minSpeSig( final k=outDamDesFloMinSpe) "OA damper position to supply design outdoor airflow at minimum fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutMin_maxSpeSig( final k=outDamMinFloMaxSpe) "OA damper position to supply minimum outdoor airflow at maximum fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutDes_maxSpeSig( final k=outDamDesFloMaxSpe) "OA damper position to supply design outdoor airflow at maximum fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minVOutSig( final k=VOutMin_flow) "Minimum outdoor airflow rate"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desVOutSig( final k=VOutDes_flow) "Design outdoor airflow rate"; Buildings.Controls.OBC.CDL.Continuous.Line yDam_VOutMin_curSpe( final limitBelow=true, final limitAbove=true) "Calculates OA damper position required to supply minimum outdoor airflow at current fan speed"; Buildings.Controls.OBC.CDL.Continuous.Line yDam_VOutDes_curSpe( final limitBelow=true, final limitAbove=true) "Calculates OA damper position required to supply design outdoor airflow at current fan speed"; Buildings.Controls.OBC.CDL.Continuous.Line minVOutSetCurFanSpePos( final limitBelow=true, final limitAbove=true) "Calculates OA damper position required to supply minimum outdoor airflow setpoint at current fan speed"; Buildings.Controls.OBC.CDL.Continuous.Switch enaDis "Logical switch to enable damper position limit calculation or disable it (set min limit to physical minimum)"; Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not block"; Buildings.Controls.OBC.CDL.Continuous.Switch enaDis1 "Logical switch to enable damper position limit calculation or disable it (set max limit to physical minimum)"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeProtectionStages.stage1) "Freeze protection stage 1"; Buildings.Controls.OBC.CDL.Integers.LessEqual intLesEqu "Check if freeze protection stage is stage 0"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "Occupied mode index"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 "Check if operation mode is occupied"; Buildings.Controls.OBC.CDL.Logical.And3 and3 "Logical and"; Buildings.Controls.OBC.CDL.Continuous.Switch enaDis2 "Zero minimum damper position when the min OA is near zero"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer( final k=0) "Zero minimum damper position"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold noZerMin( final t=floHys, final h=0.5*floHys) "Check if the min OA is greater than zero"; equation connect(minVOutSig.y, minVOutSetCurFanSpePos.x1); connect(desVOutSig.y, minVOutSetCurFanSpePos.x2); connect(yDam_VOutMin_curSpe.y, minVOutSetCurFanSpePos.f1); connect(yDam_VOutDes_curSpe.y, minVOutSetCurFanSpePos.f2); connect(yDam_VOutDes_minSpeSig.y, yDam_VOutDes_curSpe.f1); connect(yDam_VOutDes_maxSpeSig.y, yDam_VOutDes_curSpe.f2); connect(yDam_VOutMin_minSpeSig.y, yDam_VOutMin_curSpe.f1); connect(yDam_VOutMin_maxSpeSig.y, yDam_VOutMin_curSpe.f2); connect(uSupFan_actual, yDam_VOutMin_curSpe.u); connect(yFanMaxSig.y, yDam_VOutMin_curSpe.x2); connect(yFanMinSig.y, yDam_VOutMin_curSpe.x1); connect(yFanMinSig.y, yDam_VOutDes_curSpe.x1); connect(yFanMaxSig.y, yDam_VOutDes_curSpe.x2); connect(VOutMinSet_flow, minVOutSetCurFanSpePos.u); connect(uSupFan_actual, yDam_VOutDes_curSpe.u); connect(not1.y, enaDis.u2); connect(outDamPhyPosMinSig.y, enaDis.u1); connect(minVOutSetCurFanSpePos.y, enaDis.u3); connect(outDamPhyPosMinSig.y, enaDis1.u1); connect(outDamPhyPosMaxSig.y, enaDis1.u3); connect(enaDis1.y, yOutDam_max); connect(not1.y, enaDis1.u2); connect(uOpeMod, intEqu1.u1); connect(conInt1.y, intEqu1.u2); connect(intLesEqu.u2, conInt.y); connect(uFreProSta, intLesEqu.u1); connect(u1SupFan, and3.u1); connect(intLesEqu.y, and3.u2); connect(intEqu1.y, and3.u3); connect(and3.y, not1.u); connect(VOutMinSet_flow, noZerMin.u); connect(noZerMin.y, enaDis2.u2); connect(enaDis.y, enaDis2.u1); connect(enaDis2.y, yOutDam_min); connect(zer.y, enaDis2.u3); end Limits;

Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Modulation Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Modulation

Outdoor and return air damper position modulation sequence for single zone VAV AHU

Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Modulation

Information

This is a single zone VAV AHU economizer modulation block. It calculates the outdoor and return air damper positions based on the single zone VAV AHU supply air temperature control loop signal. Economizer dampers are modulated based on the calculated heating supply air temperature setpoint. The implementation is in line with Section 5.18.5.1 and 5.18.5.2 of ASHRAE Guidline 36, May 2020. Damper positions are linearly mapped to the supply air control loop signal. This is a final sequence in the composite single zone VAV AHU economizer control sequence. Damper position limits, which are the inputs to the sequence, are the outputs of Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Limits and Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Enable sequences.

When the economizer is enabled, the PI controller modulates the damper positions. Return and outdoor damper are not interlocked. When the economizer is disabled, the damper positions are set to the minimum outdoor air damper position limits.

The figures below show the input-output structure and an economizer damper modulation sequence assuming a well configured controller.

Control diagram:

Image of the single zone AHU modulation sequence control diagram

Single zone AHU economizer modulation control chart:

Image of the single zone AHU modulation sequence expected performance

Parameters

TypeNameDefaultDescription
Booleanhave_heaCoitrueTrue if the air handling unit has heating coil
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller
Realk1Gain of controller [1/K]
RealTi300Time constant of modulation controller integrator block [s]
RealTd0.1Time constant of derivative block for cooling control loop signal [s]
RealuMin0.1Lower limit of controller output uTSup at which the dampers are at their limits [1]
RealuMax0.9Upper limit of controller output uTSup at which the dampers are at their limits [1]

Connectors

TypeNameDescription
input RealInputTSupMeasured supply air temperature [K]
input RealInputTSupHeaEcoSetSupply air temperature heating setpoint [K]
input BooleanInputu1SupFanSupply fan status
input RealInputuOutDam_minMinimum economizer damper position limit as returned by the damper position limits sequence [1]
input RealInputuOutDam_maxMaximum economizer damper position limit as returned by the economizer enable-disable sequence. If the economizer is disabled, this value equals uOutDamPosMin [1]
input RealInputuRetDam_minMinimum return air damper position limit as returned by the economizer enable-disable sequence [1]
input RealInputuRetDam_maxMaximum return air damper position limit as returned by the economizer enable-disable sequence [1]
output RealOutputyHeaCoiHeating coil commanded valve position [1]
output RealOutputyOutDamEconomizer damper commanded position [1]
output RealOutputyRetDamReturn air damper commanded position [1]

Modelica definition

block Modulation "Outdoor and return air damper position modulation sequence for single zone VAV AHU" parameter Boolean have_heaCoi = true "True if the air handling unit has heating coil"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real k( final unit="1/K") = 1 "Gain of controller"; parameter Real Ti( final unit="s", final quantity="Time")=300 "Time constant of modulation controller integrator block"; parameter Real Td( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for cooling control loop signal"; parameter Real uMin( final min=0.1, final max=0.9, final unit="1") = 0.1 "Lower limit of controller output uTSup at which the dampers are at their limits"; parameter Real uMax( final min=0.1, final max=1, final unit="1") = 0.9 "Upper limit of controller output uTSup at which the dampers are at their limits"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSup( final unit="K", final displayUnit="degC", final quantity = "ThermodynamicTemperature") "Measured supply air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSupHeaEcoSet( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Supply air temperature heating setpoint"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1SupFan "Supply fan status"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDam_min( final min=0, final max=1, final unit="1") "Minimum economizer damper position limit as returned by the damper position limits sequence"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDam_max( final min=0, final max=1, final unit="1") "Maximum economizer damper position limit as returned by the economizer enable-disable sequence. If the economizer is disabled, this value equals uOutDamPosMin"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uRetDam_min( final min=0, final max=1, final unit="1") "Minimum return air damper position limit as returned by the economizer enable-disable sequence"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uRetDam_max( final min=0, final max=1, final unit="1") "Maximum return air damper position limit as returned by the economizer enable-disable sequence"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHeaCoi( final min=0, final max=1, final unit="1") if have_heaCoi "Heating coil commanded valve position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDam( final min=0, final max=1, final unit="1") "Economizer damper commanded position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDam( final min=0, final max=1, final unit="1") "Return air damper commanded position"; Buildings.Controls.OBC.CDL.Continuous.PIDWithReset uTSup( final controllerType=controllerType, final k=k, final Ti=Ti, final Td=Td, final yMax=1, final yMin=0) "Contoller that outputs a signal based on the error between the measured SAT and SAT heating setpoint"; protected Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamMinLimSig( final k=uMin) "Minimal control loop signal for the outdoor air damper"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamMaxLimSig( final k=uMax) "Maximal control loop signal for the return air damper"; Buildings.Controls.OBC.CDL.Continuous.Line outDamPos( final limitBelow=true, final limitAbove=true) "Damper position is linearly proportional to the control signal between signal limits"; Buildings.Controls.OBC.CDL.Continuous.Line retDamPos( final limitBelow=true, final limitAbove=true) "Damper position is linearly proportional to the control signal between signal limits"; Buildings.Controls.OBC.CDL.Continuous.Line HeaCoi( final limitBelow=true, final limitAbove=true) if have_heaCoi "Heating coil signal is linearly proportional to the control signal between signal limits"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoiMaxLimSig( final k=1) if have_heaCoi "Maximal control loop signal for the heating coil"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoiMinLimSig( final k=0) if have_heaCoi "Minimum control loop signal for the heating coil"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uMaxHeaCoi( final k=1) "Maximal control loop signal for the heating coil"; Buildings.Controls.OBC.CDL.Continuous.Switch enaDis if have_heaCoi "Enable or disable the heating coil"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Off( final k=0) if have_heaCoi "Off signal for heating coil"; equation connect(retDamMaxLimSig.y,retDamPos. x2); connect(uTSup.y, retDamPos.u); connect(uTSup.y, outDamPos.u); connect(outDamMinLimSig.y, outDamPos.x1); connect(retDamMaxLimSig.y, outDamPos.x2); connect(outDamMinLimSig.y, retDamPos.x1); connect(HeaCoi.u, retDamPos.u); connect(TSupHeaEcoSet, uTSup.u_s); connect(TSup, uTSup.u_m); connect(heaCoiMinLimSig.y, HeaCoi.f1); connect(heaCoiMaxLimSig.y, HeaCoi.f2); connect(retDamMaxLimSig.y, HeaCoi.x1); connect(uMaxHeaCoi.y, HeaCoi.x2); connect(uOutDam_min, outDamPos.f2); connect(uRetDam_min, retDamPos.f1); connect(uRetDam_max, retDamPos.f2); connect(Off.y, enaDis.u3); connect(u1SupFan, enaDis.u2); connect(HeaCoi.y, enaDis.u1); connect(enaDis.y, yHeaCoi); connect(uOutDam_max, outDamPos.f1); connect(retDamPos.y, yRetDam); connect(outDamPos.y, yOutDam); connect(u1SupFan, uTSup.trigger); end Modulation;