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.TerminalUnits.ModeAndSetPoints.

Parameters

TypeNameDefaultDescription
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 signal
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 signal
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 loop signal
SimpleControllercontrollerTypeCooCoiBuildings.Controls.OBC.CDL.T...Type of controller
RealkCooCoi1.0Gain for cooling coil control loop signal [1/K]
RealTiCooCoil900Time constant of integrator block for cooling coil control loop signal [s]
RealTdCooCoil0.1Time constant of derivative block for cooling coil control loop 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
Booleanhave_occSen Set to true if zones have occupancy sensor
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
RealdelTOutHis1Delta between the temperature hysteresis high and low limit [K]
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]

Connectors

TypeNameDescription
input RealInputTOutOutside air temperature [K]
input RealInputtNexOccTime to next occupied period
input RealInputTZonMeasured zone temperatures [K]
input BooleanInputuOccCurrent occupancy period, true if it is in occupant period
input RealInputTCutEconomizer high limit cutoff. Fixed dry bulb or differential dry bulb temeprature [K]
input RealInputTSupMeasured supply air temperature [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 RealOutputTZonHeaSetZone heating setpoint temperature [K]
output RealOutputTZonCooSetZone cooling 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 Real TZonHeaOn( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature")=293.15 "Heating setpoint during on"; parameter Real TZonHeaOff( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature")=285.15 "Heating setpoint during off"; parameter Real TZonCooOn( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature")=297.15 "Cooling setpoint during on"; parameter Real TZonCooOff( final unit="K", final 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.P "Type of controller"; parameter Real kCooCoi(final unit="1/K")=1.0 "Gain for cooling coil control loop signal"; parameter Real TiCooCoil( final unit="s", final quantity="Time")=900 "Time constant of integrator block for cooling coil control loop signal"; parameter Real TdCooCoil( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for cooling coil control loop signal"; parameter Real TSupSetMax( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Maximum supply air temperature for heating"; parameter Real TSupSetMin( final unit="K", final 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 Boolean have_occSen "Set to true if zones have occupancy sensor"; 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 delTOutHis( final unit="K", final displayUnit="K", final quantity="TemperatureDifference")=1 "Delta between the temperature hysteresis high and low limit"; parameter Real delEntHis( final unit="J/kg", final quantity="SpecificEnergy")=1000 "Delta between the enthalpy hysteresis high and low limits"; parameter 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", final 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"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut( final unit="K", final displayUnit="degC", final quantity = "ThermodynamicTemperature") "Outside air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput tNexOcc "Time to next occupied period"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon( final unit="K", final 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.RealInput TCut( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Economizer high limit cutoff. Fixed dry bulb or differential dry bulb temeprature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSup( final unit="K", final displayUnit="degC", final quantity = "ThermodynamicTemperature") "Measured supply air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TMix( final unit="K", final 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 "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", final displayUnit="degC", final quantity="ThermodynamicTemperature") if use_fixed_plus_differential_drybulb "Used only for fixed plus differential dry bulb temperature high limit cutoff"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uFreProSta if use_G36FrePro "Freeze protection status, used if use_G36FrePro=true"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupHeaEco( final unit="K", final displayUnit="degC", final quantity = "ThermodynamicTemperature") "Temperature setpoint for heating coil and for economizer"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupCoo( final unit="K", final 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", final displayUnit="degC", final quantity = "ThermodynamicTemperature") "Zone heating setpoint temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TZonCooSet( final unit="K", final displayUnit="degC", final quantity = "ThermodynamicTemperature") "Zone 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.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.LimPID cooPI( final reverseAction=true, final controllerType=controllerTypeCoo, final k=kCoo, final Ti=TiCoo, final Td=TdCoo, final reset=Buildings.Controls.OBC.CDL.Types.Reset.Parameter) "Zone cooling control signal"; Buildings.Controls.OBC.CDL.Continuous.LimPID heaPI( final reset=Buildings.Controls.OBC.CDL.Types.Reset.Parameter, 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=delTOutHis, 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) "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.TerminalUnits.ModeAndSetPoints modSetPoi( final TZonHeaOn=TZonHeaOn, final TZonHeaOff=TZonHeaOff, final TZonCooOn=TZonCooOn, final TZonCooOff=TZonCooOff) "Output zone setpoint with operation mode selection"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.CoolingCoil cooCoi( final controllerTypeCooCoi=controllerTypeCooCoi, kCooCoi=kCooCoi) "Controller for cooling coil valve"; equation connect(modSetPoi.tNexOcc, tNexOcc); 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(modSetPoi.TZonHeaSet, ave.u2); connect(modSetPoi.TZonHeaSet, heaPI.u_s); connect(modSetPoi.TZonCooSet, cooPI.u_s); connect(outAirSetPoi.uWin, uWin); connect(modSetPoi.uOcc, uOcc); connect(TZon, modSetPoi.TZon); 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(modSetPoi.yOpeMod, conEco.uOpeMod); connect(modSetPoi.TZonHeaSet, TZonHeaSet); 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(modSetPoi.TZonCooSet, TZonCooSet); connect(TZon, heaPI.u_m); connect(intEqu.u1, modSetPoi.yOpeMod); connect(setPoiVAV.TSupCoo, cooCoi.TSupCoo); connect(modSetPoi.TZonCooSet, ave.u1); connect(TZon, setPoiVAV.TZon); connect(TZon, outAirSetPoi.TZon); connect(modSetPoi.yOpeMod, outAirSetPoi.uOpeMod); 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 [1/K]
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(final unit="1/K")=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"; 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.LimPID cooCoiPI( reverseAction=true, reset=Buildings.Controls.OBC.CDL.Types.Reset.Parameter, controllerType=controllerTypeCooCoi, k=kCooCoi, Ti=TiCooCoi, Td=TdCooCoi) "Cooling coil control signal"; Buildings.Controls.OBC.CDL.Logical.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.Add uHeaMinUCoo( final k2=-1) "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;