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

Subsequences for economizer control

Information

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

Extends from Modelica.Icons.Package (Icon for standard packages).

Package Content

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

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Subsequences.Enable Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Subsequences.Enable

Multi zone VAV AHU economizer enable/disable switch

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Subsequences.Enable

Information

This is a multi zone VAV AHU economizer enable/disable sequence based on ASHRAE G36 PART5.N.7 and PART5.A.17. Additional conditions included in the sequence are: freeze protection (freeze protection stage 0-3, see PART5.N.12), supply fan status (on or off, see PART5.N.5), and zone state (cooling, heating, or deadband, as illustrated in the modulation control chart, PART5.N.2.c).

The economizer is disabled whenever the outdoor air conditions exceed the economizer high limit setpoint. This sequence allows for all device types listed in ASHRAE 90.1-2013 and Title 24-2013.

In addition, the economizer gets 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

After the disable signal is activated, the following procedure is applied, per PART5.N.7.d, in order to prevent pressure fluctuations in the HVAC system:

This sequence also has an overwrite of the damper positions to track a minimum mixed air temperature of TFreSet, which is by default set to 4°C (39.2 F). This is implemented using a proportional controller with a default deadband of 1 K, which can be adjusted using the parameter kPFrePro.

Parameters

TypeNameDefaultDescription
Conditional
Booleanuse_enthalpytrueSet to true to evaluate outdoor air enthalpy in addition to temperature
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]

Connectors

TypeNameDescription
input RealInputTOutOutdoor air temperature [K]
input RealInputhOutOutdoor air enthalpy [J/kg]
input RealInputTOutCutOA temperature high limit cutoff. For differential dry bulb temeprature condition use return air temperature measurement [K]
input RealInputhOutCutOA enthalpy high limit cutoff. For differential enthalpy use return air enthalpy measurement [J/kg]
input RealInputuOutDamPosMinMinimum outdoor air damper position, output from damper position limits sequence [1]
input RealInputuOutDamPosMaxMaximum outdoor air damper position, output from damper position limits sequence [1]
input RealInputuRetDamPosMaxMaximum return air damper position, output from damper position limits sequence [1]
input RealInputuRetDamPosMinMinimum return air damper position, output from damper position limits sequence [1]
input RealInputuRetDamPhyPosMaxPhysical maximum return air damper position, output from damper position limits sequence [1]
input BooleanInputuSupFanSupply fan on/off 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 "Multi zone VAV AHU economizer enable/disable switch" parameter Boolean use_enthalpy=true "Set to true to evaluate outdoor air enthalpy in addition to temperature"; 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"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut(final unit="K", 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 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 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 uOutDamPosMin( final unit="1", final min=0, final max=1) "Minimum outdoor air damper position, output 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, output from damper position limits sequence"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uRetDamPosMax( final unit="1", final min=0, final max=1) "Maximum return air damper position, output from damper position limits sequence"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uRetDamPosMin( final unit="1", final min=0, final max=1) "Minimum return air damper position, output from damper position limits sequence"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uRetDamPhyPosMax( final unit="1", final min=0, final max=1) "Physical maximum return air damper position, output from damper position limits sequence"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan on/off status signal"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uFreProSta "Freeze protection stage status signal"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDamPosMax( final unit="1", final min=0, final max=1) "Maximum outdoor air damper position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDamPosMin( final unit="1", final min=0, final max=1) "Minimum return air damper position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDamPosMax( final unit="1", final min=0, final max=1) "Maximum return air damper position"; Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol(trueHoldDuration=600) "10 min on/off delay"; CDL.Logical.And andEnaDis "Logical and that checks freeze protection stage and zone state"; protected final parameter Modelica.SIunits.TemperatureDifference TOutHigLimCutHig=0 "Hysteresis high limit cutoff"; final parameter Real TOutHigLimCutLow=TOutHigLimCutHig - delTOutHis "Hysteresis low limit cutoff"; final parameter Modelica.SIunits.SpecificEnergy hOutHigLimCutHig=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.Add add2(final k2=-1) if use_enthalpy "Add block determines difference between hOut and hOutCut"; Buildings.Controls.OBC.CDL.Continuous.Add add1(final k2=-1) "Add block determines difference between TOut and TOutCut"; Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutTem(final uLow= TOutHigLimCutLow, final uHigh=TOutHigLimCutHig) "Outdoor air temperature hysteresis for both fixed and 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 both fixed and differential enthalpy cutoff conditions"; Buildings.Controls.OBC.CDL.Logical.Switch outDamSwitch "Set maximum OA damper position to minimum at disable (after a given time delay)"; Buildings.Controls.OBC.CDL.Logical.Switch retDamSwitch "Set minimum RA damper position to maximum at disable"; Buildings.Controls.OBC.CDL.Logical.Switch maxRetDamSwitch "Keep maximum RA damper position at physical maximum for a short time period after disable signal"; Buildings.Controls.OBC.CDL.Logical.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 and2 "Logical and"; Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and checks supply fan status"; Buildings.Controls.OBC.CDL.Logical.And and3 "Logical and which checks supply fan status"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu "Logical block to check if the freeze protection is deactivated"; Buildings.Controls.OBC.CDL.Logical.TrueDelay delOutDamOsc(final delayTime= disDel) "Small delay before closing the outdoor air damper to avoid pressure fluctuations"; Buildings.Controls.OBC.CDL.Logical.TrueDelay delRetDam(final delayTime= retDamFulOpeTim) "Keep return damper open to its physical maximum for a short period of time before closing the outdoor air damper and resuming the maximum return air damper position, per G36 Part N7"; Buildings.Controls.OBC.CDL.Logical.Not not1; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.FreezeProtectionStages.stage0); equation connect(TOut, add1.u1); connect(TOutCut, add1.u2); connect(add1.y, hysOutTem.u); connect(hOut, add2.u1); connect(hOutCut, add2.u2); connect(add2.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(uRetDamPhyPosMax, maxRetDamSwitch.u1); connect(uRetDamPosMax, maxRetDamSwitch.u3); connect(nor1.y, truFalHol.u); connect(andEnaDis.y, not2.u); connect(maxRetDamSwitch.y, yRetDamPosMax); connect(and2.y, maxRetDamSwitch.u2); connect(and2.y, minRetDamSwitch.u2); connect(not2.y, retDamSwitch.u2); connect(uRetDamPosMax, retDamSwitch.u1); connect(uRetDamPosMin, retDamSwitch.u3); connect(retDamSwitch.y, minRetDamSwitch.u3); connect(uRetDamPhyPosMax, minRetDamSwitch.u1); connect(truFalHol.y, and1.u1); connect(and1.y, andEnaDis.u1); connect(uSupFan, and1.u2); connect(outDamSwitch.u2, and3.y); connect(not2.y, and3.u1); connect(and2.u1, not2.y); connect(and3.u2, delOutDamOsc.y); connect(delOutDamOsc.u, not2.y); connect(not2.y, delRetDam.u); connect(delRetDam.y, not1.u); connect(not1.y, and2.u2); connect(uFreProSta, intEqu.u1); connect(conInt.y, intEqu.u2); connect(intEqu.y, andEnaDis.u2); connect(outDamSwitch.y, yOutDamPosMax); connect(minRetDamSwitch.y, yRetDamPosMin); end Enable;

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Subsequences.Limits Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Subsequences.Limits

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

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Subsequences.Limits

Information

This block models the multi zone VAV AHU minimum outdoor air control with a single common damper for minimum outdoor air and economizer functions based on outdoor airflow measurement, designed in line with ASHRAE Guidline 36 (G36), PART5.N.6.c.

The controller is enabled when the supply fan is proven on (uSupFan=true), the AHU operation mode Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes equals occupied, and the freeze protection stage Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.FreezeProtectionStages is stage1 or lower. Otherwise the damper position limits are set to their corresponding maximum and minimum physical or at commissioning fixed limits. The state machine chart below illustrates listed conditions:

Image of damper position limits state machine chart

The controller sets the outdoor and return damper position limits so that the outdoor airflow rate VOut_flow stays equal or above the minimum outdoor air setpoint VOutMinSet_flow. The fraction of the controller output signal between yMin and retDamConSigMin is linearly mapped to the outdoor air damper minimal position yOutDamPosMin while the fraction of the controller output between retDamConSigMin and yMax is linearly mapped to the return air damper maximum position yRetDamPosMax. Thus the dampers are not interlocked.

The following control charts show the input/output structure and an expected damper position limits for a well configured controller. Control diagram:

Image of damper position limits control diagram

Expected damper position limits vs. control loop signal:

Image of damper position limits control chart

Parameters

TypeNameDefaultDescription
Controller
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller
Realk0.05Gain of damper limit controller [1]
TimeTi1200Time constant of damper limit controller integrator block [s]
TimeTd0.1Time constant of damper limit controller derivative block [s]
Commissioning
Controller
RealuRetDamMin0.5Minimum control signal for the return air damper position limit [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 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 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]
output RealOutputyRetDamPosMinMinimum return air damper position limit [1]
output RealOutputyRetDamPosMaxMaximum return air damper position limit [1]
output RealOutputyRetDamPhyPosMaxPhysical maximum return air damper position limit. Required as an input for the economizer enable disable sequence [1]

Modelica definition

block Limits "Multi zone VAV AHU minimum outdoor air control - damper position limits" constant Real yMin=-1 "Lower limit of control loop signal"; constant Real yMax=1 "Upper limit of control loop signal"; parameter Real uRetDamMin( final min=yMin, final max=yMax, final unit="1") = 0.5 "Minimum control signal for the return air damper position limit"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real k(final unit="1") = 0.05 "Gain of damper limit controller"; parameter Modelica.SIunits.Time Ti=1200 "Time constant of damper limit controller integrator block"; parameter Modelica.SIunits.Time Td=0.1 "Time constant of damper limit controller derivative block"; 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 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 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"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDamPosMin( final min=retDamPhyPosMin, final max=retDamPhyPosMax, final unit="1") "Minimum return air damper position limit"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDamPosMax( final min=retDamPhyPosMin, final max=retDamPhyPosMax, final unit="1") "Maximum return air damper position limit"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDamPhyPosMax( final min=0, final max=1, final unit="1") "Physical maximum return air damper position limit. Required as an input for the economizer enable disable sequence"; Buildings.Controls.OBC.CDL.Continuous.LimPID damLimCon( final controllerType=controllerType, final k=k, final Ti=Ti, final Td=Td, final yMax=yMax, final yMin=yMin, reset=Buildings.Controls.OBC.CDL.Types.Reset.Parameter) "Damper position limit controller"; protected Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMinSig( final k=outDamPhyPosMin) "Physically fixed minimum position of the outdoor air damper. This is the initial position of the economizer 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 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.Sources.Constant minSigLim(final k=yMin) "Equals minimum controller output signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxSigLim(final k=yMax) "Equals maximum controller output signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant sigFraForOutDam(final k=uRetDamMin) "Equals the fraction of the control loop signal below which the outdoor air damper limit gets modulated and above which the return air damper limit gets modulated"; Buildings.Controls.OBC.CDL.Continuous.Line minOutDam(final limitBelow=true, final limitAbove=true) "Linear mapping of the outdoor air damper position to the control signal"; Buildings.Controls.OBC.CDL.Continuous.Line minRetDam(final limitBelow=true, final limitAbove=true) "Linear mapping of the return air damper position to the control signal"; Buildings.Controls.OBC.CDL.Logical.Switch retDamPosMinSwitch "A switch to deactivate the return air damper minimal outdoor airflow control"; Buildings.Controls.OBC.CDL.Logical.Switch outDamPosMaxSwitch "A switch to deactivate the outdoor air damper minimal outdoor airflow control"; Buildings.Controls.OBC.CDL.Logical.MultiAnd and1(final nu=3) "Locigal and block"; Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not block"; 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.Sources.Constant conInt1(final k= Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "Occupied mode index"; Buildings.Controls.OBC.CDL.Integers.LessEqual intLesEqu "Check if freeze protection stage is stage 0"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu "Check if operation mode is occupied"; equation connect(minRetDam.y, yRetDamPosMax); connect(retDamPosMinSwitch.y, minRetDam.f2); connect(sigFraForOutDam.y, minRetDam.x1); connect(maxSigLim.y, minRetDam.x2); connect(VOut_flow_normalized, damLimCon.u_m); connect(VOutMinSet_flow_normalized, damLimCon.u_s); connect(damLimCon.y, minRetDam.u); connect(outDamPosMaxSwitch.y, minOutDam.f2); connect(minSigLim.y, minOutDam.x1); connect(sigFraForOutDam.y, minOutDam.x2); connect(damLimCon.y, minOutDam.u); connect(outDamPosMaxSwitch.y, yOutDamPosMax); connect(minOutDam.y, yOutDamPosMin); connect(retDamPhyPosMaxSig.y, retDamPosMinSwitch.u1); connect(retDamPhyPosMaxSig.y, minRetDam.f1); connect(retDamPhyPosMinSig.y, retDamPosMinSwitch.u3); connect(outDamPhyPosMaxSig.y, outDamPosMaxSwitch.u3); connect(outDamPhyPosMinSig.y, outDamPosMaxSwitch.u1); connect(outDamPhyPosMinSig.y, minOutDam.f1); connect(and1.y, not1.u); connect(not1.y, retDamPosMinSwitch.u2); connect(not1.y, outDamPosMaxSwitch.u2); connect(retDamPosMinSwitch.y, yRetDamPosMin); connect(retDamPhyPosMaxSig.y, yRetDamPhyPosMax); connect(and1.u[1], uSupFan); connect(uOpeMod, intEqu.u1); connect(conInt1.y, intEqu.u2); connect(intLesEqu.y, and1.u[2]); connect(intEqu.y, and1.u[3]); connect(conInt.y, intLesEqu.u2); connect(uFreProSta, intLesEqu.u1); connect(damLimCon.trigger, uSupFan); end Limits;

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Subsequences.Modulation Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Subsequences.Modulation

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

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Subsequences.Modulation

Information

This is a multi zone VAV AHU economizer modulation block. It calculates the outdoor and return air damper positions based on the supply air temperature control loop signal. The implementation is in line with ASHRAE Guidline 36 (G36), PART5.N.2.c. Damper positions are linearly mapped to the supply air control loop signal. This is a final sequence in the composite multi 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.MultiZone.Economizers.Subsequences.Limits and Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.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 time rate of change of the damper signals is limited by a first order hold, using the sample time samplePeriod. This prevents a quick opening of the outdoor air damper, for example when the outdoor airflow setpoint has a step change. Slowing down the opening of the outdoor air damper allows the freeze protection to componensate with its dynamics that is faster than the opening of the outdoor air damper. To avoid that all dampers are closed, the return air damper has the same time rate of change limitation.

The control charts below show the input-output structure and an economizer damper modulation sequence assuming a well configured controller. Control diagram:

Image of the multi zone AHU modulation sequence control diagram

Multi zone AHU economizer modulation control chart:

Image of the multi zone AHU modulation sequence expected performance

Parameters

TypeNameDefaultDescription
TimesamplePeriod300Sample period of component, used to limit the rate of change of the dampers (to avoid quick opening that can result in frost) [s]
Commissioning
Controller
RealuMin-0.25Lower limit of controller input when outdoor damper opens (see diagram) [1]
RealuMax+0.25Upper limit of controller input when return damper is closed (see diagram) [1]
RealuOutDamMax(uMin + uMax)/2Maximum loop signal for the OA damper to be fully open [1]
RealuRetDamMin(uMin + uMax)/2Minimum loop signal for the RA damper to be fully open [1]

Connectors

TypeNameDescription
input RealInputuTSupSignal for supply air temperature control (T Sup Control Loop Signal in diagram) [1]
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 RealOutputyOutDamPosEconomizer damper position [1]
output RealOutputyRetDamPosReturn air damper position [1]

Modelica definition

block Modulation "Outdoor and return air damper position modulation sequence for multi zone VAV AHU" parameter Real uMin( final max=0, final unit="1") = -0.25 "Lower limit of controller input when outdoor damper opens (see diagram)"; parameter Real uMax( final min=0, final unit="1") = +0.25 "Upper limit of controller input when return damper is closed (see diagram)"; parameter Real uOutDamMax( final min=-1, final max=1, final unit="1") = (uMin + uMax)/2 "Maximum loop signal for the OA damper to be fully open"; parameter Real uRetDamMin( final min=-1, final max=1, final unit="1") = (uMin + uMax)/2 "Minimum loop signal for the RA damper to be fully open"; parameter Modelica.SIunits.Time samplePeriod=300 "Sample period of component, used to limit the rate of change of the dampers (to avoid quick opening that can result in frost)"; 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 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 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"; 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 outDamMaxLimSig(final k=uOutDamMax) "Maximum control loop signal for the outdoor air damper"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamConMinLimSig( final k=uRetDamMin) "Minimal control loop signal for the return 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.Min min "Overwrite due to freeze protection"; Buildings.Controls.OBC.CDL.Continuous.Max max "Overwrite due to freeze protection"; CDL.Discrete.FirstOrderHold firOrdHolOutDam(final samplePeriod=samplePeriod) "First order hold to avoid too fast opening/closing of damper (which may cause freeze protection to be too slow to compensate)"; CDL.Discrete.FirstOrderHold firOrdHolRetDam(final samplePeriod=samplePeriod) "First order hold to avoid too fast opening/closing of damper (which may cause freeze protection to be too slow to compensate)"; equation connect(outDamPos.x2, outDamMaxLimSig.y); connect(outDamPos.x1, outDamMinLimSig.y); connect(outDamPos.f1, uOutDamPosMin); connect(outDamPos.f2, uOutDamPosMax); connect(retDamPos.x2, retDamMaxLimSig.y); connect(retDamPos.x1, retDamConMinLimSig.y); connect(retDamPos.f1, uRetDamPosMax); connect(retDamPos.f2, uRetDamPosMin); connect(min.u2, uOutDamPosMax); connect(min.u1, outDamPos.y); connect(max.u1, retDamPos.y); connect(uRetDamPosMin, max.u2); connect(min.y, firOrdHolOutDam.u); connect(firOrdHolOutDam.y, yOutDamPos); connect(uTSup, retDamPos.u); connect(uTSup, outDamPos.u); connect(max.y, firOrdHolRetDam.u); connect(firOrdHolRetDam.y, yRetDamPos); end Modulation;