Subsequences for economizer control
Information
This package contains subsequences for multi zone VAV AHU economizer control.
Package Content
Name |
Description |
Enable
|
Multi zone VAV AHU economizer enable/disable switch |
Limits
|
Package of sequences to calculate the damper position limits of the economizer |
Modulations
|
Package of sequences to modulate economizer dampers |
Validation
|
Collection of validation models |
Multi zone VAV AHU economizer enable/disable switch
Information
This is a multi zone VAV AHU economizer enable/disable sequence
based on the Section 5.16.7 of the ASHRAE Guideline 36, May 2020. Additional
conditions included in the sequence are: freeze protection (freeze protection
stage 0-3, see Section 5.16.12), supply fan status (on or off, see Section 5.16.5).
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:
After the disable signal is activated, the following procedure is applied, in order to
prevent pressure fluctuations in the HVAC system:
-
The return damper gets fully opened (
yRetDam_max = uRetDamPhy_max
and
yRetDam_min = uRetDamPhy_max
) for retDamFulOpeTim
time period, after which the return damper gets released to its minimum outdoor airflow control position
(yRetDam_max = uRetDam_max
and yRetDam_min = uRetDam_max
).
-
The outdoor air damper is closed to its minimum outoor airflow control limit (
yOutDam_max = uOutDam_min
)
after a disDel
time delay.
Parameters
Type | Name | Default | Description |
Conditional |
Boolean | use_enthalpy | true | Set to true to evaluate outdoor air (OA) enthalpy in addition to temperature |
Advanced |
Hysteresis |
Real | delTOutHis | 1 | Delta between the temperature hysteresis high and low limit [K] |
Real | delEntHis | 1000 | Delta between the enthalpy hysteresis high and low limits [J/kg] |
Delays at disable |
Real | retDamFulOpeTim | 180 | Time period to keep RA damper fully open before releasing it for minimum outdoor airflow control
at disable to avoid pressure fluctuations [s] |
Real | disDel | 15 | Short time delay before closing the OA damper at disable to avoid pressure fluctuations [s] |
Connectors
Type | Name | Description |
input RealInput | TOut | Outdoor air temperature [K] |
input RealInput | hOut | Outdoor air enthalpy [J/kg] |
input RealInput | TOutCut | OA temperature high limit cutoff. For differential dry bulb temperature condition use return air temperature measurement [K] |
input RealInput | hOutCut | OA enthalpy high limit cutoff. For differential enthalpy use return air enthalpy measurement [J/kg] |
input RealInput | uOutDam_min | Minimum outdoor air damper position, output from damper position limits sequence [1] |
input RealInput | uOutDam_max | Maximum outdoor air damper position, output from damper position limits sequence [1] |
input RealInput | uRetDam_max | Maximum return air damper position, output from damper position limits sequence [1] |
input RealInput | uRetDam_min | Minimum return air damper position, output from damper position limits sequence [1] |
input RealInput | uRetDamPhy_max | Physical maximum return air damper position, output from damper position limits sequence [1] |
input BooleanInput | u1SupFan | Supply fan proven on |
input IntegerInput | uFreProSta | Freeze protection stage status signal |
output RealOutput | yOutDam_max | Maximum outdoor air damper position [1] |
output RealOutput | yRetDam_min | Minimum return air damper position [1] |
output RealOutput | yRetDam_max | Maximum return air damper position [1] |
Modelica definition
block Enable
parameter Boolean use_enthalpy = true
;
parameter Real delTOutHis(
final unit="K",
final displayUnit="K",
final quantity="TemperatureDifference")=1
;
parameter Real delEntHis(
final unit="J/kg",
final quantity="SpecificEnergy")=1000
;
parameter Real retDamFulOpeTim(
final unit="s",
final quantity="Time")=180
;
parameter Real disDel(
final unit="s",
final quantity="Time")=15
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut(
final unit="K",
final displayUnit="degC",
final quantity = "ThermodynamicTemperature")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput hOut(
final unit="J/kg",
final quantity="SpecificEnergy")
if use_enthalpy
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TOutCut(
final unit="K",
final displayUnit="degC",
final quantity = "ThermodynamicTemperature")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput hOutCut(
final unit="J/kg",
final quantity="SpecificEnergy")
if use_enthalpy
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDam_min(
final unit="1",
final min=0,
final max=1)
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDam_max(
final unit="1",
final min=0,
final max=1)
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uRetDam_max(
final unit="1",
final min=0,
final max=1)
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uRetDam_min(
final unit="1",
final min=0,
final max=1)
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uRetDamPhy_max(
final unit="1",
final min=0,
final max=1)
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1SupFan
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uFreProSta ;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDam_max(
final unit="1",
final min=0,
final max=1)
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDam_min(
final unit="1",
final min=0,
final max=1)
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDam_max(
final unit="1",
final min=0,
final max=1)
;
Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol(
final trueHoldDuration=600)
;
Buildings.Controls.OBC.CDL.Logical.And andEnaDis
;
protected
final parameter Real TOutHigLimCutHig(
final unit="K",
final displayUnit="K",
final quantity="TemperatureDifference")= 0
;
final parameter Real TOutHigLimCutLow = TOutHigLimCutHig - delTOutHis
;
final parameter Real hOutHigLimCutHig(
final unit="J/kg",
final quantity="SpecificEnergy")= 0
;
final parameter Real hOutHigLimCutLow = hOutHigLimCutHig - delEntHis
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub2
if use_enthalpy ;
Buildings.Controls.OBC.CDL.Reals.Subtract sub1
;
Buildings.Controls.OBC.CDL.Reals.Hysteresis hysOutTem(
final uLow=TOutHigLimCutLow,
final uHigh=TOutHigLimCutHig)
;
Buildings.Controls.OBC.CDL.Reals.Hysteresis hysOutEnt(
final uLow=hOutHigLimCutLow,
final uHigh=hOutHigLimCutHig)
if use_enthalpy
;
Buildings.Controls.OBC.CDL.Reals.Switch outDamSwitch
;
Buildings.Controls.OBC.CDL.Reals.Switch retDamSwitch ;
Buildings.Controls.OBC.CDL.Reals.Switch maxRetDamSwitch
;
Buildings.Controls.OBC.CDL.Reals.Switch minRetDamSwitch
;
Buildings.Controls.OBC.CDL.Logical.Not not2 ;
Buildings.Controls.OBC.CDL.Logical.And and2 ;
Buildings.Controls.OBC.CDL.Logical.And and1 ;
Buildings.Controls.OBC.CDL.Logical.And and3
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu
;
Buildings.Controls.OBC.CDL.Logical.TrueDelay delOutDamOsc(
final delayTime=disDel)
;
Buildings.Controls.OBC.CDL.Logical.TrueDelay delRetDam(
final delayTime=retDamFulOpeTim)
;
Buildings.Controls.OBC.CDL.Logical.Not not1 ;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeProtectionStages.stage0)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant entSubst1(
final k=false)
if not use_enthalpy
;
Buildings.Controls.OBC.CDL.Logical.Or or2
;
equation
connect(TOut, sub1.u1);
connect(TOutCut, sub1.u2);
connect(sub1.y, hysOutTem.u);
connect(hOut, sub2.u1);
connect(hOutCut, sub2.u2);
connect(sub2.y, hysOutEnt.u);
connect(uOutDam_min, outDamSwitch.u1);
connect(uOutDam_max, outDamSwitch.u3);
connect(uRetDamPhy_max, maxRetDamSwitch.u1);
connect(uRetDam_max, maxRetDamSwitch.u3);
connect(andEnaDis.y, not2.u);
connect(maxRetDamSwitch.y, yRetDam_max);
connect(and2.y, maxRetDamSwitch.u2);
connect(and2.y, minRetDamSwitch.u2);
connect(not2.y, retDamSwitch.u2);
connect(uRetDam_max, retDamSwitch.u1);
connect(uRetDam_min, retDamSwitch.u3);
connect(retDamSwitch.y, minRetDamSwitch.u3);
connect(uRetDamPhy_max, minRetDamSwitch.u1);
connect(truFalHol.y, and1.u1);
connect(and1.y, andEnaDis.u1);
connect(u1SupFan, 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, yOutDam_max);
connect(minRetDamSwitch.y, yRetDam_min);
connect(or2.y, truFalHol.u);
connect(hysOutTem.y, or2.u1);
connect(hysOutEnt.y, or2.u2);
connect(entSubst1.y, or2.u2);
end Enable;