Buildings.Controls.OBC.ASHRAE.G36_PR1.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_PR1.AHUs.SingleZone.VAV.Economizers.Subsequences.Enable Enable Single zone VAV AHU economizer enable/disable switch
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.Economizers.Subsequences.Limits Limits Single zone VAV AHU minimum outdoor air control - damper position limits
Buildings.Controls.OBC.ASHRAE.G36_PR1.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_PR1.AHUs.SingleZone.VAV.Economizers.Subsequences.Validation Validation Collection of validation models

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

Single zone VAV AHU economizer enable/disable switch

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

Information

This is a single zone VAV AHU economizer enable/disable sequence based on ASHRAE G36 PART 5.5 and PART 5.A.17. 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
Booleanuse_fixed_plus_differential_drybulbfalseSet to true to evaluate fixed plus differential dry bulb temperature high limit cutoff; shall not be used with enthalpy
Advanced
Hysteresis
RealdelTOutHis1Delta between the temperature hysteresis high and low limit [K]
RealdelEntHis1000Delta between the enthalpy hysteresis high and low limits [J/kg]
Commissioning
Physical damper position limits
RealretDamPhyPosMax1Physically fixed maximum position of the return air damper [1]
RealretDamPhyPosMin0Physically fixed minimum position of the return air damper [1]

Connectors

TypeNameDescription
input RealInputTOutOutdoor air temperature [K]
input RealInputhOutOutdoor air enthalpy [J/kg]
input RealInputTCutOA temperature high limit cutoff. For differential dry bulb temeprature condition use return air temperature measurement [K]
input RealInputTRetUsed only for fixed plus differential dry bulb temperature high limit cutoff [K]
input RealInputhCutOA enthalpy high limit cutoff. For differential enthalpy use return air enthalpy measurement [J/kg]
input RealInputuOutDamPosMinMinimum outdoor air damper position, get from damper position limits sequence [1]
input RealInputuOutDamPosMaxMaximum outdoor air damper position, get from damper position limits sequence [1]
input BooleanInputuSupFanSupply fan on/off status signal
input IntegerInputuZonStaZone state status signal
input IntegerInputuFreProStaFreeze protection stage status signal
output RealOutputyOutDamPosMaxMaximum outdoor air damper position [1]
output RealOutputyRetDamPosMinMinimum return air damper position [1]
output RealOutputyRetDamPosMaxMaximum 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 Boolean use_fixed_plus_differential_drybulb = false "Set to true to evaluate fixed plus differential dry bulb temperature high limit cutoff; shall not be used with enthalpy"; 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 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"; 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 hOut( final unit="J/kg", final quantity="SpecificEnergy") if use_enthalpy "Outdoor air enthalpy"; 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 temeprature condition use return air temperature measurement"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TRet( final unit="K", final displayUnit="degC", final quantity = "ThermodynamicTemperature") if use_fixed_plus_differential_drybulb "Used only for fixed plus differential dry bulb temperature high limit cutoff"; 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.RealInput uOutDamPosMin( 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.RealInput uOutDamPosMax( 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.BooleanInput uSupFan "Supply fan on/off status signal"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uZonSta "Zone state status signal"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uFreProSta "Freeze protection stage status signal"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDamPosMax( final min=0, final max=1, final unit="1") "Maximum outdoor air damper position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDamPosMin( final min=retDamPhyPosMin, final max=retDamPhyPosMax, final unit="1") "Minimum return air damper position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDamPosMax( final min=retDamPhyPosMin, final max=retDamPhyPosMax, final unit="1") "Maximum 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"; Buildings.Controls.OBC.CDL.Logical.Xor xor "Either fixed+differential temperature cutoff or others"; protected final parameter Real TOutHigLimCutHig( final unit="K", final displayUnit="K", final quantity="TemperatureDifference") = 0 "Hysteresis high limit cutoff"; final parameter Real TOutHigLimCutLow = TOutHigLimCutHig - delTOutHis "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 - delEntHis "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 retDamPhyPosMinSig( final k=retDamPhyPosMin) "Physically fixed minimum position of the return air damper"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMaxSig( final k=retDamPhyPosMax) "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 outDamSwitch "Set maximum OA damper position to minimum at disable (after time delay)"; Buildings.Controls.OBC.CDL.Continuous.Switch minRetDamSwitch "Keep minimum RA damper position at physical maximum for a short time period after disable"; Buildings.Controls.OBC.CDL.Logical.Nor nor1 "Logical nor"; 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_PR1.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_PR1.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.Continuous.Subtract sub3 if use_fixed_plus_differential_drybulb "Add block that determines difference the between TOut and TOutCut"; Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysCutTem(final uHigh= TOutHigLimCutHig, final uLow=TOutHigLimCutLow) if use_fixed_plus_differential_drybulb "Outdoor air temperature hysteresis for both fixed and differential dry bulb temperature cutoff conditions"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant entSubst1(final k=false) if not use_fixed_plus_differential_drybulb "Deactivates the option if not using both fixed and differential dry bulb"; Buildings.Controls.OBC.CDL.Logical.Nor nor2 if use_fixed_plus_differential_drybulb "Logical nor"; equation connect(outDamSwitch.y, yOutDamPosMax); 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(hysOutTem.y, nor1.u1); connect(hysOutEnt.y, nor1.u2); connect(entSubst.y, nor1.u2); connect(uOutDamPosMin, outDamSwitch.u1); connect(uOutDamPosMax, outDamSwitch.u3); connect(andEnaDis.y, not2.u); connect(minRetDamSwitch.y, yRetDamPosMin); connect(truFalHol.y, and1.u1); connect(and1.y, andEnaDis.u1); connect(uSupFan, and1.u2); connect(retDamPhyPosMaxSig.y, minRetDamSwitch.u1); connect(retDamPhyPosMinSig.y, minRetDamSwitch.u3); connect(retDamPhyPosMaxSig.y, yRetDamPosMax); connect(not2.y, minRetDamSwitch.u2); connect(not2.y, outDamSwitch.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(TRet, sub3.u2); connect(TOut, sub3.u1); connect(sub3.y, hysCutTem.u); connect(hysCutTem.y, nor2.u2); connect(nor2.u1, hysOutTem.y); connect(nor2.y, xor.u1); connect(entSubst1.y, xor.u1); connect(nor1.y, xor.u2); connect(xor.y, truFalHol.u); end Enable;

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

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

Buildings.Controls.OBC.ASHRAE.G36_PR1.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), designed in line with ASHRAE Guidline 36, PART 5.P.4.d.

The controller is enabled when the supply fan is proven on (uSupFan=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 as a linear interpolation between the following values set at commissioning:
    • minimum damper position at minimum fan speed for minimum outdoor airflow yDam_VOutMin_minSpe and
    • minimum damper position at maximum fan speed for minimum outdoor airflow yDam_VOutMin_maxSpe.
  2. Calculate outdoor air damper position yDam_VOutDes_curSpe which ensures design outdoor airflow rate VOutDes_flow at current supply fan speed uSupFanSpe, as a linear interpolation between the following values set at commissioning:
    • minimum damper position at minimum fan speed for design outdoor airflow yDam_VOutDes_minSpe and
    • minimum damper position at maximum fan speed for design outdoor airflow yDam_VOutDes_maxSpe.
  3. Calculate outdoor air damper position yOutDamPosMin which ensures outdoor airflow setpoint VOutMinSet_flow at current supply fan speed uSupFanSpe as a linear interpolation between yDam_VOutMin_curSpe and yDam_VOutDes_curSpe, proportional to ratios of VOutMinSet_flow to VOutDes_flow and VOutMin_flow.

The chart below illustrates the OA damper position limit calculation:

Image of damper position limits control chart

Parameters

TypeNameDefaultDescription
Commissioning
Damper position limits
RealyFanMin0.1Minimum supply fan operation speed [1]
RealyFanMax1Maximum supply fan operation speed [1]
RealyDam_VOutMin_minSpe0.4OA damper position to supply minimum outdoor airflow at minimum fan speed [1]
RealyDam_VOutMin_maxSpe0.3OA damper position to supply minimum outdoor airflow at maximum fan speed [1]
RealyDam_VOutDes_minSpe0.9OA damper position to supply design outdoor airflow at minimum fan speed [1]
RealyDam_VOutDes_maxSpe0.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
RealoutDamPhyPosMax1Physically fixed maximum position of the outdoor air damper [1]
RealoutDamPhyPosMin0Physically fixed minimum position of the outdoor air damper [1]

Connectors

TypeNameDescription
input RealInputuSupFanSpeSupply fan speed [1]
input RealInputVOutMinSet_flowMinimum outdoor airflow setpoint [m3/s]
input IntegerInputuOpeModAHU operation mode status signal
input IntegerInputuFreProStaFreeze protection status signal
input BooleanInputuSupFanSupply fan status signal
output RealOutputyOutDamPosMinMinimum outdoor air damper position limit [1]
output RealOutputyOutDamPosMaxMaximum outdoor air damper position limit [1]

Modelica definition

block Limits "Single zone VAV AHU minimum outdoor air control - damper position limits" parameter Real yFanMin( final min=0, final max=1, final unit="1") = 0.1 "Minimum supply fan operation speed"; parameter Real yFanMax( final min=0, final max=1, final unit="1") = 1 "Maximum supply fan operation speed"; parameter Real yDam_VOutMin_minSpe( final min=outDamPhyPosMin, final max=outDamPhyPosMax, final unit="1") = 0.4 "OA damper position to supply minimum outdoor airflow at minimum fan speed"; parameter Real yDam_VOutMin_maxSpe( final min=outDamPhyPosMin, final max=outDamPhyPosMax, final unit="1") = 0.3 "OA damper position to supply minimum outdoor airflow at maximum fan speed"; parameter Real yDam_VOutDes_minSpe( final min=yDam_VOutMin_minSpe, final max=outDamPhyPosMax, final unit="1") = 0.9 "OA damper position to supply design outdoor airflow at minimum fan speed"; parameter Real yDam_VOutDes_maxSpe( final min=yDam_VOutMin_maxSpe, final max=outDamPhyPosMax, 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 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 uSupFanSpe( final min=0, final max=1, final unit="1") "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 uSupFan "Supply fan status signal"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDamPosMin( final min=outDamPhyPosMin, final max=outDamPhyPosMax, final unit="1") "Minimum outdoor air damper position limit"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDamPosMax( final min=outDamPhyPosMin, final max=outDamPhyPosMax, final unit="1") "Maximum outdoor air damper position limit"; protected Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanMinSig( final k=yFanMin) "Minimum supply fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMinSig( final k=outDamPhyPosMin) "Physically fixed minimum position of the outdoor air damper"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig( final k=outDamPhyPosMax) "Physically fixed maximum position of the outdoor air damper"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanMaxSig( final k=yFanMax) "Maximum supply fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutMin_minSpeSig( final k=yDam_VOutMin_minSpe) "OA damper position to supply minimum outdoor airflow at minimum fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutDes_minSpeSig( final k=yDam_VOutDes_minSpe) "OA damper position to supply design outdoor airflow at minimum fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutMin_maxSpeSig( final k=yDam_VOutMin_maxSpe) "OA damper position to supply minimum outdoor airflow at maximum fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutDes_maxSpeSig( final k=yDam_VOutDes_maxSpe) "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_PR1.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_PR1.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"; 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(enaDis.y, yOutDamPosMin); 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(uSupFanSpe, 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(uSupFanSpe, 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, yOutDamPosMax); connect(not1.y, enaDis1.u2); connect(uOpeMod, intEqu1.u1); connect(conInt1.y, intEqu1.u2); connect(intLesEqu.u2, conInt.y); connect(uFreProSta, intLesEqu.u1); connect(uSupFan, and3.u1); connect(intLesEqu.y, and3.u2); connect(intEqu1.y, and3.u3); connect(and3.y, not1.u); end Limits;

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

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

Buildings.Controls.OBC.ASHRAE.G36_PR1.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 ASHRAE Guidline 36 (G36), PART 5.P.3.b. 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_PR1.AHUs.SingleZone.VAV.Economizers.Subsequences.Limits and Buildings.Controls.OBC.ASHRAE.G36_PR1.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
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 RealInputTHeaSupSetSupply air temperature heating setpoint [K]
input BooleanInputuSupFanSupply fan status
input RealInputuOutDamPosMinMinimum economizer damper position limit as returned by the damper position limits sequence [1]
input RealInputuOutDamPosMaxMaximum economizer damper position limit as returned by the economizer enable-disable sequence. If the economizer is disabled, this value equals uOutDamPosMin [1]
input RealInputuRetDamPosMinMinimum return air damper position limit as returned by the economizer enable-disable sequence [1]
input RealInputuRetDamPosMaxMaximum return air damper position limit as returned by the economizer enable-disable sequence [1]
output RealOutputyHeaCoiHeating coil control signal [1]
output RealOutputyOutDamPosEconomizer damper position [1]
output RealOutputyRetDamPosReturn air damper position [1]

Modelica definition

block Modulation "Outdoor and return air damper position modulation sequence for single zone VAV AHU" 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 THeaSupSet( final unit="K", final displayUnit="degC", final quantity = "ThermodynamicTemperature") "Supply air temperature heating setpoint"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan status"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDamPosMin( 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 uOutDamPosMax( 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 uRetDamPosMin( 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 uRetDamPosMax( 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") "Heating coil control signal"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDamPos( final min=0, final max=1, final unit="1") "Economizer damper position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDamPos( final min=0, final max=1, final unit="1") "Return air damper 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) "Heating coil signal is linearly proportional to the control signal between signal limits"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoiMaxLimSig(final k=1) "Maximal control loop signal for the heating coil"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoiMinLimSig(final k=0) "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 "Enable or disable the heating coil"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Off( final k=0) "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(THeaSupSet, 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(uOutDamPosMin, outDamPos.f2); connect(uRetDamPosMin, retDamPos.f1); connect(uRetDamPosMax, retDamPos.f2); connect(Off.y, enaDis.u3); connect(uSupFan, enaDis.u2); connect(HeaCoi.y, enaDis.u1); connect(enaDis.y, yHeaCoi); connect(uOutDamPosMax, outDamPos.f1); connect(retDamPos.y, yRetDamPos); connect(outDamPos.y, yOutDamPos); connect(uSupFan, uTSup.trigger); end Modulation;