Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.Economizers
Economizer control of single zone VAV AHU
Information
The package contains a single zone VAV AHU economizer control sequence and the related economizer subsequences.
Package Content
Name | Description |
---|---|
Controller | Single zone VAV AHU economizer control sequence |
Subsequences | Subsequences for economizer control |
Validation | Collection of validation models |
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.Economizers.Controller
Single zone VAV AHU economizer control sequence
Information
Single zone VAV AHU economizer control sequence that calculates outdoor and return air damper positions based on ASHRAE Guidline 36, PART5 sections: P.4.d, P.5, P.9, P.3.b, A.17.
The sequence consists of three subsequences.
-
First, the block
damLim
computes the damper position limits to satisfy outdoor air requirements. See Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.Economizers.Subsequences.Limits for a description. -
Second, the block
enaDis
enables or disables the economizer based on outdoor temperature and optionally enthalpy, and based on the supply fan status, freeze protection stage and zone state. See Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.Economizers.Subsequences.Enable for a description. -
Third, the block
mod
modulates the outdoor and return damper position to track the supply air temperature setpoint for heating, subject to the limits of the damper positions that were computed in the above two blocks. See Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.Economizers.Subsequences.Modulation for a description.
Parameters
Type | Name | Default | Description |
---|---|---|---|
Boolean | use_enthalpy | false | Set to true if enthalpy measurement is used in addition to temperature measurement |
Boolean | use_TMix | true | Set to true if mixed air temperature measurement is enabled |
Boolean | use_G36FrePro | false | Set to true if G36 freeze protection is implemented |
Real | uMin | 0 | Lower limit of controller output uTSup at which the dampers are at their limits [1] |
Real | uMax | 1 | Upper limit of controller output uTSup at which the dampers are at their limits [1] |
Modulation | |||
SimpleController | controllerTypeMod | Buildings.Controls.OBC.CDL.T... | Type of controller |
Real | kMod | 1 | Gain of modulation controller [1/K] |
Time | TiMod | 300 | Time constant of modulation controller integrator block [s] |
Time | TdMod | 0.1 | Time constant of derivative block for modulation controller [s] |
Freeze protection | |||
SimpleController | controllerTypeFre | Buildings.Controls.OBC.CDL.T... | Type of controller |
Real | kFre | 0.1 | Gain for mixed air temperature tracking for freeze protection, used if use_TMix=true [1/K] |
Time | TiFre | 120 | Time constant of controller for mixed air temperature tracking for freeze protection. Require TiFre < TiMinOut [s] |
Time | TdFre | 0.1 | Time constant of derivative block for freeze protection [s] |
Temperature | TFreSet | 277.15 | Lower limit for mixed air temperature for freeze protection, used if use_TMix=true [K] |
Advanced | |||
Hysteresis | |||
TemperatureDifference | delTOutHis | 1 | Delta between the temperature hysteresis high and low limit [K] |
SpecificEnergy | delEntHis | 1000 | Delta between the enthalpy hysteresis high and low limits [J/kg] |
Commissioning | |||
Damper position limits | |||
Real | yFanMin | 0.1 | Minimum supply fan operation speed [1] |
Real | yFanMax | 0.9 | Maximum supply fan operation speed [1] |
VolumeFlowRate | VOutMin_flow | 1.0 | Calculated minimum outdoor airflow rate [m3/s] |
VolumeFlowRate | VOutDes_flow | 2.0 | Calculated design outdoor airflow rate [m3/s] |
Real | minVOutMinFansSpePos | 0.4 | OA damper position to supply minimum outdoor airflow at minimum fan speed [1] |
Real | yDam_VOutMin_maxSpe | 0.3 | OA damper position to supply minimum outdoor airflow at maximum fan speed [1] |
Real | yDam_VOutDes_minSpe | 0.9 | OA damper position to supply design outdoor airflow at minimum fan speed [1] |
Real | yDam_VOutDes_maxSpe | 0.8 | OA damper position to supply design outdoor airflow at maximum fan speed [1] |
Physical damper position limits | |||
Real | outDamPhyPosMax | 1 | Physically fixed maximum position of the outdoor air (OA) damper [1] |
Real | outDamPhyPosMin | 0 | Physically fixed minimum position of the outdoor air damper [1] |
Real | retDamPhyPosMax | 1 | Physically fixed maximum position of the return air damper [1] |
Real | retDamPhyPosMin | 0 | Physically fixed minimum position of the return air damper [1] |
Connectors
Type | Name | Description |
---|---|---|
input RealInput | THeaSupSet | Supply air temperature heating setpoint [K] |
input RealInput | TSup | Measured supply air temperature [K] |
input RealInput | TOut | Outdoor air (OA) temperature [K] |
input RealInput | TOutCut | OA temperature high limit cutoff. For differential dry bulb temeprature condition use return air temperature measurement [K] |
input RealInput | hOut | Outdoor air enthalpy [J/kg] |
input RealInput | hOutCut | OA enthalpy high limit cutoff. For differential enthalpy use return air enthalpy measurement [J/kg] |
input RealInput | TMix | Measured mixed air temperature, used for freeze protection [K] |
input RealInput | VOutMinSet_flow | Minimum outdoor airflow setpoint [m3/s] |
input RealInput | uSupFanSpe | Supply fan speed [1] |
input IntegerInput | uZonSta | Zone state signal |
input IntegerInput | uFreProSta | Freeze protection status |
input IntegerInput | uOpeMod | AHU operation mode status signal |
input BooleanInput | uSupFan | Supply fan status |
output RealOutput | yRetDamPos | Return air damper position [1] |
output RealOutput | yOutDamPos | Outdoor air damper position [1] |
Modelica definition
model Controller "Single zone VAV AHU economizer control sequence"
parameter Boolean use_enthalpy = false
"Set to true if enthalpy measurement is used in addition to temperature measurement";
parameter Boolean use_TMix=true
"Set to true if mixed air temperature measurement is enabled";
parameter Boolean use_G36FrePro=false
"Set to true if G36 freeze protection is implemented";
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 Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeMod=
Buildings.Controls.OBC.CDL.Types.SimpleController.PI
"Type of controller";
parameter Real kMod(final unit="1/K")=1 "Gain of modulation controller";
parameter Modelica.SIunits.Time TiMod=300
"Time constant of modulation controller integrator block";
parameter Modelica.SIunits.Time TdMod=0.1
"Time constant of derivative block for modulation controller";
parameter Real uMin(
final min=0,
final max=1,
final unit="1") = 0
"Lower limit of controller output uTSup at which the dampers are at their limits";
parameter Real uMax(
final min=0,
final max=1,
final unit="1") = 1
"Upper limit of controller output uTSup at which the dampers are at their limits";
parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeFre=
Buildings.Controls.OBC.CDL.Types.SimpleController.PI
"Type of controller";
parameter Real kFre(final unit="1/K") = 0.1
"Gain for mixed air temperature tracking for freeze protection, used if use_TMix=true";
parameter Modelica.SIunits.Time TiFre=120
"Time constant of controller for mixed air temperature tracking for freeze protection. Require TiFre < TiMinOut";
parameter Modelica.SIunits.Time TdFre=0.1
"Time constant of derivative block for freeze protection";
parameter Modelica.SIunits.Temperature TFreSet = 277.15
"Lower limit for mixed air temperature for freeze protection, used if use_TMix=true";
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") = 0.9 "Maximum supply fan operation speed";
parameter Modelica.SIunits.VolumeFlowRate VOutMin_flow=1.0
"Calculated minimum outdoor airflow rate";
parameter Modelica.SIunits.VolumeFlowRate VOutDes_flow=2.0
"Calculated design outdoor airflow rate";
parameter Real minVOutMinFansSpePos(
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=minVOutMinFansSpePos,
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 outDamPhyPosMax(
final min=0,
final max=1,
final unit="1") = 1
"Physically fixed maximum position of the outdoor air (OA) damper";
parameter Real outDamPhyPosMin(
final min=0,
final max=1,
final unit="1") = 0
"Physically fixed minimum position of the outdoor air damper";
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 THeaSupSet(
final unit="K",
final quantity = "ThermodynamicTemperature")
"Supply air temperature heating setpoint";
Buildings.Controls.OBC.CDL.Interfaces.RealInput TSup(
final unit="K",
final quantity = "ThermodynamicTemperature")
"Measured supply air temperature";
Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut(
final unit="K",
final quantity = "ThermodynamicTemperature")
"Outdoor air (OA) temperature";
Buildings.Controls.OBC.CDL.Interfaces.RealInput TOutCut(
final unit="K",
final quantity = "ThermodynamicTemperature")
"OA temperature high limit cutoff. For differential dry bulb temeprature condition use return air temperature measurement";
Buildings.Controls.OBC.CDL.Interfaces.RealInput hOut(
final unit="J/kg",
final quantity="SpecificEnergy") if use_enthalpy
"Outdoor air enthalpy";
Buildings.Controls.OBC.CDL.Interfaces.RealInput hOutCut(
final unit="J/kg",
final quantity="SpecificEnergy") if use_enthalpy
"OA enthalpy high limit cutoff. For differential enthalpy use return air enthalpy measurement";
Buildings.Controls.OBC.CDL.Interfaces.RealInput TMix(
final unit="K",
final quantity = "ThermodynamicTemperature") if use_TMix
"Measured mixed air temperature, used for freeze protection";
Buildings.Controls.OBC.CDL.Interfaces.RealInput VOutMinSet_flow(
final min=VOutMin_flow,
final max=VOutDes_flow,
final unit="m3/s",
final quantity="VolumeFlowRate")
"Minimum outdoor airflow setpoint";
Buildings.Controls.OBC.CDL.Interfaces.RealInput uSupFanSpe(
final min=yFanMin,
final max=yFanMax,
final unit="1")
"Supply fan speed";
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uZonSta "Zone state signal";
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uFreProSta if use_G36FrePro
"Freeze protection status";
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "AHU operation mode status signal";
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan status";
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDamPos(
final min=0,
final max=1,
final unit="1")
"Return air damper position";
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDamPos(
final min=0,
final max=1,
final unit="1")
"Outdoor air damper position";
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.Economizers.Subsequences.Enable
enaDis(
final retDamPhyPosMax=retDamPhyPosMax,
final use_enthalpy=use_enthalpy,
final delTOutHis=delTOutHis,
final delEntHis=delEntHis,
final retDamPhyPosMin=retDamPhyPosMin)
"Single zone VAV AHU economizer enable/disable sequence";
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.Economizers.Subsequences.Limits
damLim(
final yFanMin=yFanMin,
final yFanMax=yFanMax,
final outDamPhyPosMax=outDamPhyPosMax,
final outDamPhyPosMin=outDamPhyPosMin,
final VOutMin_flow=VOutMin_flow,
final VOutDes_flow=VOutDes_flow,
final minVOutMinFansSpePos=minVOutMinFansSpePos,
final yDam_VOutMin_maxSpe=yDam_VOutMin_maxSpe,
final yDam_VOutDes_minSpe=yDam_VOutDes_minSpe,
final yDam_VOutDes_maxSpe=yDam_VOutDes_maxSpe)
"Single zone VAV AHU economizer minimum outdoor air requirement damper limit sequence";
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.Economizers.Subsequences.Modulation
mod(
final controllerType=controllerTypeMod,
final k=kMod,
final Ti=TiMod,
final Td=TdMod,
final uMin=uMin,
final uMax=uMax)
"Single zone VAV AHU economizer damper modulation sequence";
Buildings.Controls.OBC.ASHRAE.G36_PR1.Generic.FreezeProtectionMixedAir freProTMix(
final controllerType=controllerTypeFre,
final k=kFre,
final Ti=TiFre,
final Td=TdFre,
final TFreSet=TFreSet) if use_TMix
"Block that tracks TMix against a freeze protection setpoint";
protected
Buildings.Controls.OBC.CDL.Continuous.Max retDamMinFre
"Minimum position for return air damper due to freeze protection";
Buildings.Controls.OBC.CDL.Continuous.Min outDamMaxFre
"Maximum control signal for outdoor air damper due to freeze protection";
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant noTMix1(k=1) if not use_TMix
"Ignore min evaluation if there is no TMix sensor";
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant noTMix(k=0) if not use_TMix
"Ignore max evaluation if there is no TMix sensor";
Buildings.Controls.OBC.CDL.Integers.Sources.Constant freProSta(
final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.FreezeProtectionStages.stage0) if not use_G36FrePro
"Freeze protection status is 0. Used if G36 freeze protection is not implemented";
equation
connect(uSupFan, enaDis.uSupFan);
connect(uFreProSta, enaDis.uFreProSta);
connect(hOutCut, enaDis.hOutCut);
connect(hOut, enaDis.hOut);
connect(TOutCut, enaDis.TOutCut);
connect(TOut, enaDis.TOut);
connect(uSupFan, damLim.uSupFan);
connect(uOpeMod, damLim.uOpeMod);
connect(uFreProSta, damLim.uFreProSta);
connect(damLim.yOutDamPosMax, enaDis.uOutDamPosMax);
connect(damLim.yOutDamPosMin, enaDis.uOutDamPosMin);
connect(enaDis.yOutDamPosMax, mod.uOutDamPosMax);
connect(enaDis.yRetDamPosMax, mod.uRetDamPosMax);
connect(damLim.yOutDamPosMin, mod.uOutDamPosMin);
connect(THeaSupSet, mod.THeaSupSet);
connect(TSup, mod.TSup);
connect(enaDis.yRetDamPosMin, mod.uRetDamPosMin);
connect(uZonSta, enaDis.uZonSta);
connect(uSupFanSpe, damLim.uSupFanSpe);
connect(VOutMinSet_flow, damLim.VOutMinSet_flow);
connect(outDamMaxFre.u2, noTMix1.y);
connect(retDamMinFre.u1, noTMix.y);
connect(retDamMinFre.y, yRetDamPos);
connect(outDamMaxFre.y, yOutDamPos);
connect(mod.yRetDamPos, retDamMinFre.u2);
connect(mod.yOutDamPos, outDamMaxFre.u1);
connect(freProTMix.yFrePro, retDamMinFre.u1);
connect(freProTMix.yFreProInv, outDamMaxFre.u2);
connect(TMix, freProTMix.TMix);
connect(freProSta.y, enaDis.uFreProSta);
connect(freProSta.y, damLim.uFreProSta);
connect(uSupFan, mod.uSupFan);
end Controller;