Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV

Sequences for single zone VAV AHU control

Information

This package contains control sequences from ASHRAE Guideline 36, Part 5.P for single zone VAV air handling unit control.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.Controller Controller Single Zone AHU controller that composes subsequences for controlling fan speed, economizer, and supply air temperature
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.CoolingCoil CoolingCoil Controller for cooling coil valve
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.ZoneState ZoneState Select the zone state
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.Economizers Economizers Economizer control of single zone VAV AHU
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints SetPoints Output setpoints for AHU control
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.Controller Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.Controller

Single Zone AHU controller that composes subsequences for controlling fan speed, economizer, and supply air temperature

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.Controller

Information

Block for single zone VAV control. It outputs supply fan speed, supply air temperature setpoints for heating, economizer and cooling, zone air heating and cooling setpoints, outdoor and return air damper positions, and valve positions of heating and cooling coils.

It is implemented according to the ASHRAE Guideline 36, Part 5.18.

The sequences consist of the following subsequences.

Supply fan speed control

The fan speed control is implemented according to PART 5.18.4. It outputs the control signal yFan to adjust the speed of the supply fan. See Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.Supply for more detailed description.

Supply air temperature setpoints

The supply air temperature setpoints control sequences are implemented based on PART 5.18.4. They are implemented in the same control block as the supply fan speed control. The supply air temperature setpoint for heating and economizer is the same; while the supply air temperature setpoint for cooling has a separate control loop. See Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.Supply for more detailed description.

Economizer control

The Economizer control block outputs outdoor and return air damper position, i.e. yOutDamPos and yRetDamPos, as well as control signal for heating coil yHeaCoi. Optionally, there is also an override for freeze protection, which is not part of Guideline 36. See Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.Economizers.Controller for more detailed description.

Minimum outdoor airflow

Control sequences are implemented to compute the minimum outdoor airflow setpoint, which is used as an input for the economizer control. More detailed information can be found at Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.OutsideAirFlow.

Zone air heating and cooling setpoints

Zone air heating and cooling setpoints as well as system operation modes are detailed at Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.ModeAndSetPoints.

Parameters

TypeNameDefaultDescription
Booleanhave_winSen Check if the zone has window status sensor
Booleanhave_occSen Set to true if zones have occupancy sensor
Zone setpoints
RealTZonHeaOn293.15Heating setpoint during on [K]
RealTZonHeaOff285.15Heating setpoint during off [K]
RealTZonCooOn297.15Cooling setpoint during on [K]
RealTZonCooOff303.15Cooling setpoint during off [K]
Cooling loop control
SimpleControllercontrollerTypeCooBuildings.Controls.OBC.CDL.T...Type of controller
RealkCoo0.1Gain for cooling control loop signal [1/K]
RealTiCoo900Time constant of integrator block for cooling control loop signal [s]
RealTdCoo0.1Time constant of derivative block for cooling control loop signal [s]
Heating loop control
SimpleControllercontrollerTypeHeaBuildings.Controls.OBC.CDL.T...Type of controller
RealkHea0.1Gain for heating control loop signal [1/K]
RealTiHea900Time constant of integrator block for heating control loop signal [s]
RealTdHea0.1Time constant of derivative block for heating control loop signal [s]
Cooling coil control
SimpleControllercontrollerTypeCooCoiBuildings.Controls.OBC.CDL.T...Type of controller
RealkCooCoi0.1Gain for cooling coil control signal [1/K]
RealTiCooCoil900Time constant of integrator block for cooling coil control signal [s]
RealTdCooCoil0.1Time constant of derivative block for cooling coil control signal [s]
VAV Setpoints
Temperature limits
RealTSupSetMax Maximum supply air temperature for heating [K]
RealTSupSetMin Minimum supply air temperature for cooling [K]
Speed
RealyHeaMax Maximum fan speed for heating [1]
RealyMin Minimum fan speed [1]
RealyCooMax1Maximum fan speed for cooling [1]
Outside Air Flow
Nominal condition
RealVOutPerAre_flow3e-4Outdoor air rate per unit area [m3/(s.m2)]
RealVOutPerPer_flow2.5e-3Outdoor air rate per person [m3/s]
RealAFlo Floor area [m2]
Occupancy
RealoccDen0.05Default number of person in unit area [1/m2]
RealzonDisEffHea0.8Zone air distribution effectiveness during heating [1]
RealzonDisEffCoo1.0Zone air distribution effectiveness during cooling [1]
Economizer
General
Booleanuse_enthalpyfalseSet to true if enthalpy measurement is used in addition to temperature measurement
Booleanuse_fixed_plus_differential_drybulbfalseSet to true to only evaluate fixed plus differential dry bulb temperature high limit cutoff; shall not be used with enthalpy
Booleanuse_TMixtrueSet to true if mixed air temperature measurement is enabled
Booleanuse_G36FreProfalseSet to true if G36 freeze protection is implemented
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]
Advanced
RealdelEntHis1000Delta between the enthalpy hysteresis high and low limits [J/kg]
Modulation
SimpleControllercontrollerTypeModBuildings.Controls.OBC.CDL.T...Type of controller
RealkMod1Gain of modulation controller [1/K]
RealTiMod300Time constant of modulation controller integrator block [s]
RealTdMod0.1Time constant of derivative block for modulation controller [s]
Freeze protection
SimpleControllercontrollerTypeFreBuildings.Controls.OBC.CDL.T...Type of controller
RealkFre0.1Gain for mixed air temperature tracking for freeze protection, used if use_TMix=true [1/K]
RealTiFre120Time constant of controller for mixed air temperature tracking for freeze protection. Require TiFre < TiMinOut [s]
RealTdFre0.1Time constant of derivative block for freeze protection [s]
RealTFreSet277.15Lower limit for mixed air temperature for freeze protection, used if use_TMix=true [K]
Commissioning
RealVOutMin_flow1.0Calculated minimum outdoor airflow rate [m3/s]
RealVOutDes_flow2.0Calculated design outdoor airflow rate [m3/s]
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]
RealoutDamPhyPosMax1Physically fixed maximum position of the outdoor air damper [1]
RealoutDamPhyPosMin0Physically fixed minimum position of the outdoor air damper [1]
RealretDamPhyPosMax1Physically fixed maximum position of the return air damper [1]
RealretDamPhyPosMin0Physically fixed minimum position of the return air damper [1]
Adjust temperature setpoint
General
BooleancooAdjfalseFlag, set to true if both cooling and heating setpoint are adjustable separately
BooleanheaAdjfalseFlag, set to true if heating setpoint is adjustable
BooleansinAdjfalseFlag, set to true if both cooling and heating setpoint are adjustable through a single common knob
BooleanignDemLimfalseFlag, set to true to exempt individual zone from demand limit setpoint adjustment
Limits
RealTZonCooOnMax300.15Maximum cooling setpoint during on [K]
RealTZonCooOnMin295.15Minimum cooling setpoint during on [K]
RealTZonHeaOnMax295.15Maximum heating setpoint during on [K]
RealTZonHeaOnMin291.15Minimum heating setpoint during on [K]
RealTZonCooSetWinOpe322.15Cooling setpoint when window is open [K]
RealTZonHeaSetWinOpe277.15Heating setpoint when window is open [K]
Demand control adjustment
RealincTSetDem_10.56Cooling setpoint increase value (degC) when cooling demand limit level 1 is imposed
RealincTSetDem_21.1Cooling setpoint increase value (degC) when cooling demand limit level 2 is imposed
RealincTSetDem_32.2Cooling setpoint increase value (degC) when cooling demand limit level 3 is imposed
RealdecTSetDem_10.56Heating setpoint decrease value (degC) when heating demand limit level 1 is imposed
RealdecTSetDem_21.1Heating setpoint decrease value (degC) when heating demand limit level 2 is imposed
RealdecTSetDem_32.2Heating setpoint decrease value (degC) when heating demand limit level 3 is imposed
Advanced
RealuLow-0.1Low limit of the hysteresis for checking temperature difference
RealuHigh0.1High limit of the hysteresis for checking temperature difference

Connectors

TypeNameDescription
input RealInputTOutOutside air temperature [K]
input RealInputwarUpTimWarm-up time retrieved from optimal warm-up block [s]
input RealInputcooDowTimCool-down time retrieved from optimal cool-down block [s]
input RealInputtNexOccTime to next occupied period
input RealInputTZonMeasured zone temperatures [K]
input BooleanInputuOccCurrent occupancy period, true if it is in occupant period
input IntegerInputuCooDemLimLevCooling demand limit level
input IntegerInputuHeaDemLimLevHeating demand limit level
input RealInputTSupMeasured supply air temperature [K]
input RealInputTCutEconomizer high limit cutoff. Fixed dry bulb or differential dry bulb temeprature [K]
input RealInputTMixMeasured mixed air temperature, used for freeze protection if use_TMix is true [K]
input RealInputnOccNumber of occupants [1]
input BooleanInputuWinWindow status, true if open, false if closed
input RealInputhOutOutdoor air enthalpy [J/kg]
input RealInputhCutEconomizer enthalpy high limit cutoff. Fixed enthalpy or differential enthalpy [J/kg]
input RealInputTRetUsed only for fixed plus differential dry bulb temperature high limit cutoff [K]
input IntegerInputuFreProStaFreeze protection status, used if use_G36FrePro=true
output RealOutputTSupHeaEcoTemperature setpoint for heating coil and for economizer [K]
output RealOutputTSupCooCooling supply air temperature setpoint [K]
output RealOutputyFanFan speed [1]
output RealOutputTZonHeaSetHeating setpoint temperature [K]
output RealOutputTZonCooSetCooling setpoint temperature [K]
output RealOutputyHeaCoiHeating coil control signal [1]
output RealOutputyCooCoiCooling coil control signal [1]
output RealOutputyOutDamPosOutdoor air damper position [1]
output RealOutputyRetDamPosReturn air damper position [1]

Modelica definition

block Controller "Single Zone AHU controller that composes subsequences for controlling fan speed, economizer, and supply air temperature" parameter Boolean have_winSen "Check if the zone has window status sensor"; parameter Boolean have_occSen "Set to true if zones have occupancy sensor"; parameter Real TZonHeaOn( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=293.15 "Heating setpoint during on"; parameter Real TZonHeaOff( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=285.15 "Heating setpoint during off"; parameter Real TZonCooOn( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=297.15 "Cooling setpoint during on"; parameter Real TZonCooOff( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=303.15 "Cooling setpoint during off"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeCoo= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kCoo(final unit="1/K") = 0.1 "Gain for cooling control loop signal"; parameter Real TiCoo( final unit="s", final quantity="Time")=900 "Time constant of integrator block for cooling control loop signal"; parameter Real TdCoo( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for cooling control loop signal"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeHea= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kHea(final unit="1/K")=0.1 "Gain for heating control loop signal"; parameter Real TiHea( final unit="s", final quantity="Time")=900 "Time constant of integrator block for heating control loop signal"; parameter Real TdHea( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for heating control loop signal"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeCooCoi= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kCooCoi(final unit="1/K")=0.1 "Gain for cooling coil control signal"; parameter Real TiCooCoil( final unit="s", final quantity="Time")=900 "Time constant of integrator block for cooling coil control signal"; parameter Real TdCooCoil( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for cooling coil control signal"; parameter Real TSupSetMax( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Maximum supply air temperature for heating"; parameter Real TSupSetMin( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Minimum supply air temperature for cooling"; parameter Real yHeaMax(min=0, max=1, unit="1") "Maximum fan speed for heating"; parameter Real yMin(min=0, max=1, unit="1") "Minimum fan speed"; parameter Real yCooMax(min=0, max=1, unit="1") = 1 "Maximum fan speed for cooling"; parameter Real VOutPerAre_flow(final unit="m3/(s.m2)") = 3e-4 "Outdoor air rate per unit area"; parameter Real VOutPerPer_flow( final unit="m3/s", final quantity="VolumeFlowRate") = 2.5e-3 "Outdoor air rate per person"; parameter Real AFlo(final unit="m2", final quantity="Area") "Floor area"; parameter Real occDen(final unit="1/m2") = 0.05 "Default number of person in unit area"; parameter Real zonDisEffHea(final unit="1") = 0.8 "Zone air distribution effectiveness during heating"; parameter Real zonDisEffCoo(final unit="1") = 1.0 "Zone air distribution effectiveness during cooling"; parameter Boolean use_enthalpy=false "Set to true if enthalpy measurement is used in addition to temperature measurement"; parameter Boolean use_fixed_plus_differential_drybulb=false "Set to true to only evaluate fixed plus differential dry bulb temperature high limit cutoff; shall not be used with enthalpy"; 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 Real delEntHis( final unit="J/kg", final quantity="SpecificEnergy")=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 Real TiMod( final unit="s", final quantity="Time")=300 "Time constant of modulation controller integrator block"; parameter Real TdMod( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for modulation controller"; parameter Real uMin( final min=0, final max=1, 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, final max=1, final unit="1") = 0.9 "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 Real TiFre( final unit="s", final quantity="Time")=120 "Time constant of controller for mixed air temperature tracking for freeze protection. Require TiFre < TiMinOut"; parameter Real TdFre( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for freeze protection"; parameter Real TFreSet( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=277.15 "Lower limit for mixed air temperature for freeze protection, used if use_TMix=true"; parameter Real VOutMin_flow( final unit="m3/s", final quantity="VolumeFlowRate")=1.0 "Calculated minimum outdoor airflow rate"; parameter Real VOutDes_flow( final unit="m3/s", final quantity="VolumeFlowRate")=2.0 "Calculated design outdoor airflow rate"; 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 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"; 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 Boolean cooAdj=false "Flag, set to true if both cooling and heating setpoint are adjustable separately"; parameter Boolean heaAdj=false "Flag, set to true if heating setpoint is adjustable"; parameter Boolean sinAdj=false "Flag, set to true if both cooling and heating setpoint are adjustable through a single common knob"; parameter Boolean ignDemLim=false "Flag, set to true to exempt individual zone from demand limit setpoint adjustment"; parameter Real TZonCooOnMax( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=300.15 "Maximum cooling setpoint during on"; parameter Real TZonCooOnMin( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=295.15 "Minimum cooling setpoint during on"; parameter Real TZonHeaOnMax( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=295.15 "Maximum heating setpoint during on"; parameter Real TZonHeaOnMin( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=291.15 "Minimum heating setpoint during on"; parameter Real TZonCooSetWinOpe( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=322.15 "Cooling setpoint when window is open"; parameter Real TZonHeaSetWinOpe( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=277.15 "Heating setpoint when window is open"; parameter Real incTSetDem_1=0.56 "Cooling setpoint increase value (degC) when cooling demand limit level 1 is imposed"; parameter Real incTSetDem_2=1.1 "Cooling setpoint increase value (degC) when cooling demand limit level 2 is imposed"; parameter Real incTSetDem_3=2.2 "Cooling setpoint increase value (degC) when cooling demand limit level 3 is imposed"; parameter Real decTSetDem_1=0.56 "Heating setpoint decrease value (degC) when heating demand limit level 1 is imposed"; parameter Real decTSetDem_2=1.1 "Heating setpoint decrease value (degC) when heating demand limit level 2 is imposed"; parameter Real decTSetDem_3=2.2 "Heating setpoint decrease value (degC) when heating demand limit level 3 is imposed"; parameter Real uLow=-0.1 "Low limit of the hysteresis for checking temperature difference"; parameter Real uHigh=0.1 "High limit of the hysteresis for checking temperature difference"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut( final unit="K", displayUnit="degC", final quantity = "ThermodynamicTemperature") "Outside air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput warUpTim( final unit="s", final quantity="Time") "Warm-up time retrieved from optimal warm-up block"; Buildings.Controls.OBC.CDL.Interfaces.RealInput cooDowTim( final unit="s", final quantity="Time") "Cool-down time retrieved from optimal cool-down block"; Buildings.Controls.OBC.CDL.Interfaces.RealInput tNexOcc "Time to next occupied period"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon( final unit="K", displayUnit="degC", final quantity = "ThermodynamicTemperature") "Measured zone temperatures"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOcc "Current occupancy period, true if it is in occupant period"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uCooDemLimLev "Cooling demand limit level"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uHeaDemLimLev "Heating demand limit level"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSup( final unit="K", displayUnit="degC", final quantity = "ThermodynamicTemperature") "Measured supply air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TCut( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Economizer high limit cutoff. Fixed dry bulb or differential dry bulb temeprature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TMix( final unit="K", displayUnit="degC", final quantity = "ThermodynamicTemperature") if use_TMix "Measured mixed air temperature, used for freeze protection if use_TMix is true"; Buildings.Controls.OBC.CDL.Interfaces.RealInput nOcc(final unit="1") if have_occSen "Number of occupants"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWin if have_winSen "Window status, true if open, false if closed"; 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 "Economizer enthalpy high limit cutoff. Fixed enthalpy or differential enthalpy"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TRet( final unit="K", 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.IntegerInput uFreProSta if use_G36FrePro "Freeze protection status, used if use_G36FrePro=true"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupHeaEco( final unit="K", displayUnit="degC", final quantity = "ThermodynamicTemperature") "Temperature setpoint for heating coil and for economizer"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupCoo( final unit="K", displayUnit="degC", final quantity = "ThermodynamicTemperature") "Cooling supply air temperature setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yFan( final min=0, final max=1, final unit="1") "Fan speed"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TZonHeaSet( final unit="K", displayUnit="degC", final quantity = "ThermodynamicTemperature") "Heating setpoint temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TZonCooSet( final unit="K", displayUnit="degC", final quantity = "ThermodynamicTemperature") "Cooling setpoint temperature"; 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 yCooCoi( final min=0, final max=1, final unit="1") "Cooling coil control signal"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDamPos( final min=0, final max=1, final unit="1") "Outdoor air 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.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.ModeAndSetPoints modSetPoi( final have_winSen=have_winSen, final have_occSen=have_occSen, final THeaSetOcc=TZonHeaOn, final THeaSetUno=TZonHeaOff, final TCooSetOcc=TZonCooOn, final TCooSetUno=TZonCooOff, final cooAdj=cooAdj, final heaAdj=heaAdj, final sinAdj=sinAdj, final ignDemLim=ignDemLim, final TZonCooOnMax=TZonCooOnMax, final TZonCooOnMin=TZonCooOnMin, final TZonHeaOnMax=TZonHeaOnMax, final TZonHeaOnMin=TZonHeaOnMin, final TZonCooSetWinOpe=TZonCooSetWinOpe, final TZonHeaSetWinOpe=TZonHeaSetWinOpe, final incTSetDem_1=incTSetDem_1, final incTSetDem_2=incTSetDem_2, final incTSetDem_3=incTSetDem_3, final decTSetDem_1=decTSetDem_1, final decTSetDem_2=decTSetDem_2, final decTSetDem_3=decTSetDem_3, final uLow=uLow, final uHigh=uHigh) "Zone setpoint and operation mode"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.Supply setPoiVAV( final TSupSetMax=TSupSetMax, final TSupSetMin=TSupSetMin, final yHeaMax=yHeaMax, final yMin=yMin, final yCooMax=yCooMax) "Supply air set point and fan signal for single zone VAV system"; Buildings.Controls.OBC.CDL.Continuous.PIDWithReset cooPI( final reverseActing=false, final controllerType=controllerTypeCoo, final k=kCoo, final Ti=TiCoo, final Td=TdCoo) "Zone cooling control signal"; Buildings.Controls.OBC.CDL.Continuous.PIDWithReset heaPI( final controllerType=controllerTypeHea, final k=kHea, final Ti=TiHea, final Td=TdHea) "Zone heating control signal"; Buildings.Controls.OBC.CDL.Continuous.Average ave "Average of zone heating and cooling setpoint"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.Economizers.Controller conEco( final use_TMix=use_TMix, final use_G36FrePro=use_G36FrePro, final delTOutHis=uHigh - uLow, final delEntHis=delEntHis, final controllerTypeMod=controllerTypeMod, final kMod=kMod, final TiMod=TiMod, final TdMod=TdMod, final uMin=uMin, final uMax=uMax, final controllerTypeFre=controllerTypeFre, final kFre=kFre, final TiFre=TiFre, final TdFre=TdFre, final TFreSet=TFreSet, final VOutMin_flow=VOutMin_flow, final VOutDes_flow=VOutDes_flow, final yDam_VOutMin_maxSpe=yDam_VOutMin_maxSpe, final yDam_VOutDes_minSpe=yDam_VOutDes_minSpe, final yDam_VOutDes_maxSpe=yDam_VOutDes_maxSpe, final outDamPhyPosMax=outDamPhyPosMax, final outDamPhyPosMin=outDamPhyPosMin, final retDamPhyPosMax=retDamPhyPosMax, final retDamPhyPosMin=retDamPhyPosMin, final use_enthalpy=use_enthalpy, final use_fixed_plus_differential_drybulb=use_fixed_plus_differential_drybulb, final yFanMin=0, final yFanMax=1) "Economizer control sequence"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.OutsideAirFlow outAirSetPoi( final AFlo=AFlo, final have_occSen=have_occSen, final VOutPerAre_flow=VOutPerAre_flow, final VOutPerPer_flow=VOutPerPer_flow, final occDen=occDen, final zonDisEffHea=zonDisEffHea, final zonDisEffCoo=zonDisEffCoo, final uLow=uLow, final uHigh=uHigh) "Output the minimum outdoor airflow rate setpoint "; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.ZoneState zonSta "Zone state"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.unoccupied) "Unoccupied mode"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu "Check if current operation mode is unoccupied mode"; Buildings.Controls.OBC.CDL.Logical.Not switch "If in unoccupied mode, switch off"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.CoolingCoil cooCoi( final controllerTypeCooCoi=controllerTypeCooCoi, kCooCoi=kCooCoi) "Controller for cooling coil valve"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant win( final k=false) if not have_winSen "Window status"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold havOcc( final t=0.5) if have_occSen "Check if there is occupant"; equation connect(ave.y, setPoiVAV.TZonSet); connect(TCut, conEco.TCut); connect(conEco.TSup, TSup); connect(setPoiVAV.TSupHeaEco, conEco.THeaSupSet); connect(setPoiVAV.y, conEco.uSupFanSpe); connect(TMix, conEco.TMix); connect(setPoiVAV.TSupHeaEco, TSupHeaEco); connect(setPoiVAV.TSupCoo, TSupCoo); connect(setPoiVAV.y, yFan); connect(conEco.yRetDamPos, yRetDamPos); connect(conEco.yOutDamPos, yOutDamPos); connect(outAirSetPoi.TDis, TSup); connect(conEco.VOutMinSet_flow, outAirSetPoi.VOutMinSet_flow); connect(TOut, setPoiVAV.TOut); connect(conEco.TOut, setPoiVAV.TOut); connect(zonSta.yZonSta, conEco.uZonSta); connect(conInt.y, intEqu.u2); connect(intEqu.y, switch.u); connect(outAirSetPoi.uWin, uWin); connect(TZon, cooPI.u_m); connect(nOcc, outAirSetPoi.nOcc); connect(uFreProSta, conEco.uFreProSta); connect(conEco.hOut, hOut); connect(conEco.hCut, hCut); connect(conEco.TRet, TRet); connect(conEco.yHeaCoi, yHeaCoi); connect(cooCoi.yCooCoi, yCooCoi); connect(switch.y, cooCoi.uSupFan); connect(zonSta.yZonSta, cooCoi.uZonSta); connect(cooCoi.TSup, TSup); connect(switch.y, outAirSetPoi.uSupFan); connect(switch.y, conEco.uSupFan); connect(switch.y, setPoiVAV.uFan); connect(heaPI.y, setPoiVAV.uHea); connect(heaPI.y, zonSta.uHea); connect(cooPI.y, setPoiVAV.uCoo); connect(cooPI.y, zonSta.uCoo); connect(switch.y, heaPI.trigger); connect(switch.y, cooPI.trigger); connect(TZon, heaPI.u_m); connect(setPoiVAV.TSupCoo, cooCoi.TSupCoo); connect(TZon, setPoiVAV.TZon); connect(TZon, outAirSetPoi.TZon); connect(modSetPoi.TZonHeaSet, heaPI.u_s); connect(modSetPoi.TZonHeaSet, ave.u2); connect(modSetPoi.TZonHeaSet, TZonHeaSet); connect(modSetPoi.TZonCooSet, ave.u1); connect(modSetPoi.TZonCooSet, cooPI.u_s); connect(modSetPoi.TZonCooSet, TZonCooSet); connect(TZon, modSetPoi.TZon); connect(tNexOcc, modSetPoi.tNexOcc); connect(uOcc, modSetPoi.uOcc); connect(modSetPoi.yOpeMod, outAirSetPoi.uOpeMod); connect(modSetPoi.yOpeMod, conEco.uOpeMod); connect(modSetPoi.yOpeMod, intEqu.u1); connect(win.y, modSetPoi.uWin); connect(uWin, modSetPoi.uWin); connect(win.y, outAirSetPoi.uWin); connect(nOcc, havOcc.u); connect(havOcc.y, modSetPoi.uOccSen); connect(modSetPoi.warUpTim, warUpTim); connect(modSetPoi.cooDowTim, cooDowTim); connect(modSetPoi.uCooDemLimLev, uCooDemLimLev); connect(modSetPoi.uHeaDemLimLev, uHeaDemLimLev); end Controller;

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.CoolingCoil Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.CoolingCoil

Controller for cooling coil valve

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.CoolingCoil

Information

This block outputs the cooling coil control signal if the fan is on and the zone status is uZonSta = Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.ZoneStates.cooling. Otherwise, the control signal for the coil is set to 0.

Parameters

TypeNameDefaultDescription
Cooling coil loop signal
SimpleControllercontrollerTypeCooCoiBuildings.Controls.OBC.CDL.T...Type of controller
RealkCooCoi0.1Gain for cooling coil control loop signal
RealTiCooCoi900Time constant of integrator block for cooling coil control loop signal [s]
RealTdCooCoi0.1Time constant of derivative block for cooling coil control loop signal [s]

Connectors

TypeNameDescription
input RealInputTSupCooCooling supply air temperature setpoint [K]
input RealInputTSupSupply air temperature measurement [K]
input IntegerInputuZonStaZone state
input BooleanInputuSupFanSupply fan status
output RealOutputyCooCoiCooling coil control signal

Modelica definition

model CoolingCoil "Controller for cooling coil valve" parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeCooCoi= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kCooCoi=0.1 "Gain for cooling coil control loop signal"; parameter Real TiCooCoi(final unit="s")=900 "Time constant of integrator block for cooling coil control loop signal"; parameter Real TdCooCoi(final unit="s")=0.1 "Time constant of derivative block for cooling coil control loop signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSupCoo( final unit="K", final displayUnit="degC", final quantity = "ThermodynamicTemperature") "Cooling supply air temperature setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSup( final unit="K", final displayUnit="degC", final quantity = "ThermodynamicTemperature") "Supply air temperature measurement"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uZonSta "Zone state"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan status"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yCooCoi "Cooling coil control signal"; Buildings.Controls.OBC.CDL.Continuous.PIDWithReset cooCoiPI( final reverseActing=false, final controllerType=controllerTypeCooCoi, final k=kCooCoi, final Ti=TiCooCoi, final Td=TdCooCoi) "Cooling coil control signal"; protected Buildings.Controls.OBC.CDL.Integers.Equal intEqu "Logical block to check if zone is in cooling state"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.ZoneStates.cooling) "Cooling state value"; Buildings.Controls.OBC.CDL.Continuous.Switch switch "Switch to assign cooling coil control signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant const(k=0) "Cooling off mode"; Buildings.Controls.OBC.CDL.Logical.And and2 "Conditions for cooling state"; equation connect(const.y, switch.u3); connect(cooCoiPI.trigger, uSupFan); connect(cooCoiPI.u_s, TSupCoo); connect(cooCoiPI.u_m, TSup); connect(switch.y, yCooCoi); connect(intEqu.y, and2.u1); connect(and2.u2, uSupFan); connect(and2.y, switch.u2); connect(conInt.y, intEqu.u1); connect(uZonSta, intEqu.u2); connect(cooCoiPI.y, switch.u1); end CoolingCoil;

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.ZoneState Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.ZoneState

Select the zone state

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.ZoneState

Information

Block that outputs the zone state. It first checks if the zone is in heating state; if not, it checks if the zone is in cooling state; otherwise it is in deadband state.

These states are defined in Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.ZoneStates.

The logic of the block is as follows.

  1. The zone state is heating when both of the following two conditions are satisfied: (i) The heating control signal satisfies uHea > uHigh, where uHigh is a parameter, and (ii) the following condition is satisfied uHea - uCoo > uLow, where uCoo is the cooling control signal and uLow is a parameter. The second condition is used to avoid errors when uHea > 0 and uCoo > 0 at the same time.
  2. The zone state is cooling when the zone state is not heating and the cooling control signal satisfies uCoo > uHigh, where uHigh is a parameter. If uCoo < uLow, then the zone state is not cooling.
  3. The zone state is deadband when it is neither in heating state nor in cooling state.

Parameters

TypeNameDefaultDescription
RealuLow0.01Hysteresis parameter uLow for heating and cooling control signals to avoid chattering [1]
RealuHigh0.05Hysteresis parameter uHigh for heating and cooling control signals to avoid chattering [1]

Connectors

TypeNameDescription
input RealInputuHeaHeating control signal
input RealInputuCooCooling control signal
output IntegerOutputyZonStaZone state

Modelica definition

block ZoneState "Select the zone state" parameter Real uLow(final unit = "1") = 0.01 "Hysteresis parameter uLow for heating and cooling control signals to avoid chattering"; parameter Real uHigh(final unit = "1") = 0.05 "Hysteresis parameter uHigh for heating and cooling control signals to avoid chattering"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uHea "Heating control signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uCoo "Cooling control signal"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yZonSta "Zone state"; protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToIntHea( final integerFalse=0, final integerTrue=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.ZoneStates.heating) "Convert Boolean to Integer number"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToIntCoo( final integerFalse=0, final integerTrue=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.ZoneStates.cooling) "Convert Boolean to Integer number"; Buildings.Controls.OBC.CDL.Logical.Nor isDea "In deadband state"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToIntDea( final integerFalse=0, final integerTrue=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.ZoneStates.deadband) "Convert Boolean to Integer number"; Buildings.Controls.OBC.CDL.Logical.And isHea "In heating state if both conditions are true"; Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysUHea( final uLow=uLow, final uHigh=uHigh) "Check if it is in heating state"; Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysUCoo( final uLow=uLow, final uHigh=uHigh) "Check if it is in cooling state"; Buildings.Controls.OBC.CDL.Continuous.Subtract uHeaMinUCoo "Difference between uHea and uCoo"; Buildings.Controls.OBC.CDL.Logical.And isCoo "In cooling state if both inputs are true"; Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysU( final uLow=-uLow, final uHigh=uLow) "Check if heating control signal is bigger than cooling control signal"; Buildings.Controls.OBC.CDL.Logical.Not notHea "Not in heating state"; Buildings.Controls.OBC.CDL.Integers.Add addInt "Add two integer inputs"; Buildings.Controls.OBC.CDL.Integers.Add addInt1 "Add two integer inputs"; equation connect(isDea.y, booToIntDea.u); connect(hysUHea.y, isHea.u1); connect(uHea, hysUHea.u); connect(uCoo,hysUCoo. u); connect(uCoo, uHeaMinUCoo.u2); connect(uHea, uHeaMinUCoo.u1); connect(isCoo.y, booToIntCoo.u); connect(hysUCoo.y, isCoo.u2); connect(uHeaMinUCoo.y, hysU.u); connect(isHea.y, booToIntHea.u); connect(isHea.y, notHea.u); connect(hysU.y, isHea.u2); connect(notHea.y, isCoo.u1); connect(isCoo.y, isDea.u2); connect(isHea.y, isDea.u1); connect(booToIntHea.y, addInt.u1); connect(booToIntCoo.y, addInt.u2); connect(addInt.y, addInt1.u1); connect(booToIntDea.y, addInt1.u2); connect(addInt1.y, yZonSta); end ZoneState;