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

Output setpoints for AHU control

Information

This package contains sequences generating setpoints for single zone VAV AHU control.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.ExhaustDamper ExhaustDamper Control of actuated exhaust dampers without fans
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.ModeAndSetPoints ModeAndSetPoints Output zone setpoint with operation mode selection
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.OutsideAirFlow OutsideAirFlow Output the minimum outdoor airflow rate setpoint for systems with a single zone
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.Supply Supply Supply air set point for single zone VAV system
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.Validation Validation Collection of validation models

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

Control of actuated exhaust dampers without fans

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

Information

Control sequence for exhaust dampers without fans. It is implemented according to ASHRAE Guidline 35 (G36), PART 5.N.8.(for multi zone VAV AHU), PART 5.P.6 and PART3.2B.3 (for single zone VAV AHU).

Single zone VAV AHU: Control of actuated exhaust dampers without fans (PART 5.P.6)

  1. Exhaust damper position setpoints (PART3.2B.3)
    • minExhDamPos is the exhaust damper position that maintains a building pressure of 12 Pa (0.05 inchWC) while the system is at minOutPosMin (i.e., the economizer damper is positioned to provide minimum outdoor air while the supply fan is at minimum speed).
    • maxExhDamPos is the exhaust damper position that maintains a building pressure of 12 Pa (0.05 inchWC) while the economizer damper is fully open and the fan speed is at cooling maximum.
  2. The exhaust damper is enabled when the associated supply fan is proven on and any outdoor air damper is open uOutDamPos > 0 and disabled and closed otherwise.
  3. The exhaust damper position is reset linearly from minExhDamPos to maxExhDamPos as the commanded economizer damper position goes from minOutPosMin to outDamPhyPosMax.

The control sequence is as follows:

Image of the exhaust damper control chart for single zone AHU

Parameters

TypeNameDefaultDescription
Nominal parameters
RealminExhDamPos0.2Exhaust damper position maintaining building static pressure at setpoint when the system is at minPosMin [1]
RealmaxExhDamPos0.9Exhaust damper position maintaining building static pressure at setpoint when outdoor air damper is fully open and fan speed is at cooling maximum [1]
RealminOutPosMin0.4Outdoor air damper position when fan operating at minimum speed to supply minimum outdoor air flow [1]
RealoutDamPhyPosMax1Physical or at the comissioning fixed maximum position of the outdoor air damper [1]

Connectors

TypeNameDescription
input BooleanInputuSupFanSupply fan status
input RealInputuOutDamPosOutdoor air damper position [1]
output RealOutputyExhDamPosExhaust damper position [1]

Modelica definition

block ExhaustDamper "Control of actuated exhaust dampers without fans" parameter Real minExhDamPos( min=0, max=1, final unit="1") = 0.2 "Exhaust damper position maintaining building static pressure at setpoint when the system is at minPosMin"; parameter Real maxExhDamPos( min=0, max=1, final unit="1") = 0.9 "Exhaust damper position maintaining building static pressure at setpoint when outdoor air damper is fully open and fan speed is at cooling maximum"; parameter Real minOutPosMin( min=0, max=1, final unit="1") = 0.4 "Outdoor air damper position when fan operating at minimum speed to supply minimum outdoor air flow"; parameter Real outDamPhyPosMax( min=0, max=1, final unit="1")=1 "Physical or at the comissioning fixed maximum position of the outdoor air damper"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan status"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDamPos( min=0, max=1, final unit="1") "Outdoor air damper position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yExhDamPos( min=0, max=1, final unit="1") "Exhaust damper position"; Buildings.Controls.OBC.CDL.Continuous.Line exhDamPos "Linearly map exhaust damper position to the outdoor air damper position"; Buildings.Controls.OBC.CDL.Continuous.Switch swi1 "Check if exhaust damper should be open"; Buildings.Controls.OBC.CDL.Continuous.Hysteresis greThr( final uLow=0.02, final uHigh=0.05) "Check if outdoor air damper is open"; Buildings.Controls.OBC.CDL.Logical.And and2 "Check if exhaust damper should be activated"; protected Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerDam( final k=0) "Close damper when disabled"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minExhDam( final k=minExhDamPos) "Exhaust damper position maintaining building static pressure at setpoint while the system is at minPosMin"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxExhDam( final k=maxExhDamPos) "Exhaust damper position maintaining building static pressure at setpoint when outdoor air damper is fully open and fan speed is at cooling maximum"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minPosAtMinSpd( final k=minOutPosMin) "Outdoor air damper position when fan operating at minimum speed to supply minimum outdoor air flow"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig( final k=outDamPhyPosMax) "Physical or at the comissioning fixed maximum position of the outdoor air damper"; equation connect(outDamPhyPosMaxSig.y, exhDamPos.x2); connect(maxExhDam.y, exhDamPos.f2); connect(uOutDamPos, exhDamPos.u); connect(zerDam.y, swi1.u3); connect(and2.y, swi1.u2); connect(minPosAtMinSpd.y, exhDamPos.x1); connect(minExhDam.y, exhDamPos.f1); connect(uOutDamPos, greThr.u); connect(uSupFan, and2.u2); connect(greThr.y, and2.u1); connect(exhDamPos.y, swi1.u1); connect(swi1.y, yExhDamPos); end ExhaustDamper;

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

Output zone setpoint with operation mode selection

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

Information

Block that outputs the zone setpoint temperature (TZonCooSet, TZonHeaSet) and system operation mode (yOpeMod).

The sequence consists of the following two subsequences.

Operation mode selector

The subsequence outputs one of seven types of system operation mode (occupied, warm-up, cooldown, setback, freeze protection setback, setup, unoccupied) according to current time, the time to next occupied hours tNexOcc and current zone temperature TZon. See Buildings.Controls.OBC.ASHRAE.G36_PR1.Generic.SetPoints.OperationMode.

Zone setpoint temperature reset

It sets the zone temperature setpoint according to the globally specified setpoints, the local setpoint adjustments, the demand limits adjustment, the window status and the occupancy status. See Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.SetPoints.ZoneTemperatures.

Usage

This version is for a single zone only to be used in the Single Zone VAV sequence.

Parameters

TypeNameDefaultDescription
Booleanhave_winSen Check if the zone has window status sensor
Booleanhave_occSen Check if the zone has occupancy sensor
Setpoints
RealTHeaSetOcc293.15Occupied heating setpoint [K]
RealTHeaSetUno285.15Unoccupied heating setpoint [K]
RealTCooSetOcc297.15Occupied cooling setpoint [K]
RealTCooSetUno303.15Unoccupied cooling setpoint [K]
Setpoints adjustment
Adjustable settings
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
RealbouLim1Threshold of temperature difference for indicating the end of setback or setup mode
RealuLow-0.1Low limit of the hysteresis for checking temperature difference
RealuHigh0.1High limit of the hysteresis for checking temperature difference
Operation mode
RealpreWarCooTim10800Maximum cool-down or warm-up time [s]
RealTZonFreProOn277.15Threshold temperature to activate the freeze protection mode [K]
RealTZonFreProOff280.15Threshold temperature to end the freeze protection mode [K]

Connectors

TypeNameDescription
input RealInputcooDowTimCool-down time retrieved from optimal cool-down block [s]
input RealInputwarUpTimWarm-up time retrieved from optimal warm-up block [s]
input BooleanInputuWinWindow status: true=open, false=close
input RealInputTZonZone temperature [K]
input BooleanInputuOccZone occupancy status according to the schedule: true=occupied, false=unoccupied
input RealInputtNexOccTime to next occupied period [s]
input RealInputsetAdjSetpoint adjustment value
input RealInputheaSetAdjHeating setpoint adjustment value
input BooleanInputuOccSenOccupancy sensor (occupied=true, unoccupied=false)
input IntegerInputuCooDemLimLevCooling demand limit level
input IntegerInputuHeaDemLimLevHeating demand limit level
output IntegerOutputyOpeModOperation mode
output RealOutputTZonCooSetCooling setpoint temperature [K]
output RealOutputTZonHeaSetHeating setpoint temperature [K]

Modelica definition

block ModeAndSetPoints "Output zone setpoint with operation mode selection" parameter Boolean have_winSen "Check if the zone has window status sensor"; parameter Boolean have_occSen "Check if the zone has occupancy sensor"; parameter Real THeaSetOcc( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=293.15 "Occupied heating setpoint"; parameter Real THeaSetUno( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=285.15 "Unoccupied heating setpoint"; parameter Real TCooSetOcc( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=297.15 "Occupied cooling setpoint"; parameter Real TCooSetUno( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=303.15 "Unoccupied cooling setpoint"; 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 bouLim=1 "Threshold of temperature difference for indicating the end of setback or setup mode"; 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"; parameter Real preWarCooTim( final unit="s", final quantity="Time")=10800 "Maximum cool-down or warm-up time"; parameter Real TZonFreProOn( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=277.15 "Threshold temperature to activate the freeze protection mode"; parameter Real TZonFreProOff( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature")=280.15 "Threshold temperature to end the freeze protection mode"; 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 warUpTim( final unit="s", final quantity="Time") "Warm-up time retrieved from optimal warm-up block"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWin if have_winSen "Window status: true=open, false=close"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Zone temperature"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOcc "Zone occupancy status according to the schedule: true=occupied, false=unoccupied"; Buildings.Controls.OBC.CDL.Interfaces.RealInput tNexOcc( final unit="s", final quantity="Time") "Time to next occupied period"; Buildings.Controls.OBC.CDL.Interfaces.RealInput setAdj if cooAdj or sinAdj "Setpoint adjustment value"; Buildings.Controls.OBC.CDL.Interfaces.RealInput heaSetAdj if heaAdj "Heating setpoint adjustment value"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOccSen if have_occSen "Occupancy sensor (occupied=true, unoccupied=false)"; 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.IntegerOutput yOpeMod "Operation mode"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TZonCooSet( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Cooling setpoint temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TZonHeaSet( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Heating setpoint temperature"; Buildings.Controls.OBC.ASHRAE.G36_PR1.Generic.SetPoints.OperationMode opeModSel( final numZon=1, final preWarCooTim=preWarCooTim, final TZonFreProOn=TZonFreProOn, final TZonFreProOff=TZonFreProOff) "Operation mode"; Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.SetPoints.ZoneTemperatures TZonSet( final have_occSen=have_occSen, final have_winSen=have_winSen, 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) "Adjust setpoint temperature"; Buildings.Controls.OBC.ASHRAE.G36_PR1.Generic.SetPoints.ZoneStatus zonSta( final THeaSetOcc=THeaSetOcc, final THeaSetUno=THeaSetUno, final TCooSetOcc=TCooSetOcc, final TCooSetUno=TCooSetUno, final bouLim=bouLim, final have_winSen=have_winSen, final uLow=uLow, final uHigh=uHigh) "Zone temperature status"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger colZon "Check if the zone is cold"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger hotZon "Check if the zone is hot"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant winSta( final k=false) if not have_winSen "Assume window is closed when there is no windows status sensor"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant occSta( final k=true) if not have_occSen "Assume the zone is occupied when there is no occupancy sensor"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt "Boolean to integer"; equation connect(zonSta.cooDowTim, cooDowTim); connect(zonSta.warUpTim, warUpTim); connect(zonSta.uWin, uWin); connect(zonSta.TZon, TZon); connect(zonSta.yCooTim, opeModSel.maxCooDowTim); connect(zonSta.yWarTim, opeModSel.maxWarUpTim); connect(zonSta.yHigOccCoo, opeModSel.uHigOccCoo); connect(zonSta.yOccHeaHig, opeModSel.uOccHeaHig); connect(zonSta.yUnoHeaHig, colZon.u); connect(colZon.y, opeModSel.totColZon); connect(zonSta.yHigUnoCoo, hotZon.u); connect(hotZon.y, opeModSel.totHotZon); connect(zonSta.yUnoHeaHig, opeModSel.uSetBac); connect(zonSta.yEndSetBac, opeModSel.uEndSetBac); connect(TZon, opeModSel.TZonMax); connect(TZon, opeModSel.TZonMin); connect(zonSta.yHigUnoCoo, opeModSel.uSetUp); connect(zonSta.yEndSetUp, opeModSel.uEndSetUp); connect(opeModSel.uOcc, uOcc); connect(opeModSel.tNexOcc, tNexOcc); connect(zonSta.TCooSetOn, TZonSet.TZonCooSetOcc); connect(zonSta.TCooSetOff, TZonSet.TZonCooSetUno); connect(zonSta.THeaSetOn, TZonSet.TZonHeaSetOcc); connect(zonSta.THeaSetOff, TZonSet.TZonHeaSetUno); connect(opeModSel.yOpeMod, TZonSet.uOpeMod); connect(TZonSet.uCooDemLimLev, uCooDemLimLev); connect(TZonSet.uHeaDemLimLev, uHeaDemLimLev); connect(uWin, TZonSet.uWinSta); connect(winSta.y, TZonSet.uWinSta); connect(TZonSet.uOccSen, uOccSen); connect(occSta.y, TZonSet.uOccSen); connect(opeModSel.yOpeMod, yOpeMod); connect(TZonSet.TZonCooSet, TZonCooSet); connect(TZonSet.TZonHeaSet, TZonHeaSet); connect(winSta.y, booToInt.u); connect(uWin, booToInt.u); connect(booToInt.y, opeModSel.uOpeWin); connect(TZonSet.setAdj, setAdj); connect(TZonSet.heaSetAdj, heaSetAdj); end ModeAndSetPoints;

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

Output the minimum outdoor airflow rate setpoint for systems with a single zone

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

Information

This atomic sequence sets the minimum outdoor airflow setpoint for compliance with the ventilation rate procedure of ASHRAE 62.1-2013. The implementation is according to ASHRAE Guidline 36 (G36), PART 5.P.4.b, PART 5.B.2.b, PART3.1-D.2.a.

Step 1: Minimum breathing zone outdoor airflow required breZon

The number of occupant occCou could be retrieved directly from occupancy sensor nOcc if the sensor exists (have_occSen=true), or using the default occupant density occDen to find it AFlo*occDen. The occupant density can be found from Table 6.2.2.1 in ASHRAE Standard 62.1-2013.

Step 2: Zone air-distribution effectiveness zonDisEff

Table 6.2.2.2 in ASHRAE 62.1-2013 lists some typical values for setting the effectiveness. Depending on difference between zone space temperature TZon and supply air temperature TDis, Warm-air effectiveness zonDisEffHea or Cool-air effectiveness zonDisEffCoo should be applied.

Step 3: Minimum required zone outdoor airflow zonOutAirRate

For each zone in any mode other than occupied mode and for zones that have window switches and the window is open, zonOutAirRate shall be zero. Otherwise, the required zone outdoor airflow zonOutAirRate shall be calculated as follows:

If the zone is populated, or if there is no occupancy sensor: If the zone has an occupancy sensor and is unpopulated:

For the single zone system, the required minimum outdoor airflow setpoint VOutMinSet_flow equals to the zonOutAirRate.

Parameters

TypeNameDefaultDescription
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]
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]
Advanced
RealuLow-0.5If zone space temperature minus supply air temperature is less than uLow, then it should use heating supply air distribution effectiveness [K]
RealuHigh0.5If zone space temperature minus supply air temperature is more than uHig, then it should use cooling supply air distribution effectiveness [K]

Connectors

TypeNameDescription
input RealInputnOccNumber of occupants [1]
input RealInputTZonMeasured zone air temperature [K]
input RealInputTDisMeasured discharge air temperature [K]
input IntegerInputuOpeModAHU operation mode status signal
input BooleanInputuSupFanSupply fan status, true if on, false if off
input BooleanInputuWinWindow status, true if open, false if closed
output RealOutputVOutMinSet_flowEffective minimum outdoor airflow setpoint [m3/s]

Modelica definition

block OutsideAirFlow "Output the minimum outdoor airflow rate setpoint for systems with a single zone" 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 Real uLow( final unit="K", final displayUnit="K", final quantity="TemperatureDifference") = -0.5 "If zone space temperature minus supply air temperature is less than uLow, then it should use heating supply air distribution effectiveness"; parameter Real uHigh( final unit="K", final displayUnit="K", final quantity="TemperatureDifference") = 0.5 "If zone space temperature minus supply air temperature is more than uHig, then it should use cooling supply air distribution effectiveness"; Buildings.Controls.OBC.CDL.Interfaces.RealInput nOcc(final unit="1") if have_occSen "Number of occupants"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Measured zone air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TDis( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Measured discharge air temperature"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "AHU operation mode status signal"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan status, true if on, false if off"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWin "Window status, true if open, false if closed"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VOutMinSet_flow( min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Effective minimum outdoor airflow setpoint"; protected Buildings.Controls.OBC.CDL.Continuous.Add breZon "Breathing zone airflow"; Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 "Zone space temperature minus supply air temperature"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( final k=VOutPerPer_flow) if have_occSen "Outdoor airflow rate per person"; Buildings.Controls.OBC.CDL.Continuous.Switch swi "Switch for enabling occupancy sensor input"; Buildings.Controls.OBC.CDL.Continuous.Switch swi1 "Switch between cooling or heating distribution effectiveness"; Buildings.Controls.OBC.CDL.Continuous.Divide zonOutAirRate "Required zone outdoor airflow rate"; Buildings.Controls.OBC.CDL.Continuous.Switch swi2 "If window is open or it is not in occupied mode, the required outdoor airflow rate should be zero"; Buildings.Controls.OBC.CDL.Continuous.Switch swi3 "If supply fan is off, then outdoor airflow rate should be zero."; Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( final uLow=uLow, final uHigh=uHigh, final pre_y_start=true) "Check if cooling or heating air distribution effectiveness should be applied, with 1 degC deadband"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant occSen( final k=have_occSen) "Boolean constant to indicate if there is occupancy sensor"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerOutAir( final k=0) "Zero required outdoor airflow rate when window open or zone is not in occupied mode"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disEffHea( final k=zonDisEffHea) "Zone distribution effectiveness during heating"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disEffCoo( final k=zonDisEffCoo) "Zone distribution effectiveness for cooling"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant breZonAre( final k=VOutPerAre_flow*AFlo) "Area component of the breathing zone outdoor airflow"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant breZonPop( final k=VOutPerPer_flow*AFlo*occDen) "Population component of the breathing zone outdoor airflow"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 "Check if operation mode is occupied"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant occMod( final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "Occupied mode index"; Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and"; Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerOcc(final k=0) if not have_occSen "Zero occupant when there is no occupancy sensor"; equation connect(breZonAre.y, breZon.u1); connect(gai.y, swi.u1); connect(breZonPop.y, swi.u3); connect(swi.y, breZon.u2); connect(disEffCoo.y, swi1.u1); connect(disEffHea.y, swi1.u3); connect(breZon.y, zonOutAirRate.u1); connect(swi1.y, zonOutAirRate.u2); connect(uWin, swi2.u2); connect(zerOutAir.y, swi2.u1); connect(zonOutAirRate.y, swi2.u3); connect(swi.u2, occSen.y); connect(nOcc, gai.u); connect(swi3.y, VOutMinSet_flow); connect(TZon, sub2.u1); connect(TDis, sub2.u2); connect(sub2.y, hys.u); connect(hys.y, swi1.u2); connect(swi2.y, swi3.u3); connect(zerOutAir.y, swi3.u1); connect(and1.y, not1.u); connect(not1.y, swi3.u2); connect(uSupFan, and1.u1); connect(intEqu1.y, and1.u2); connect(uOpeMod, intEqu1.u1); connect(occMod.y, intEqu1.u2); connect(swi.u1, zerOcc.y); end OutsideAirFlow;

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

Supply air set point for single zone VAV system

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

Information

Block that outputs the set points for the supply air temperature for cooling, heating and economizer control, and the fan speed for a single zone VAV system.

For the temperature set points, the parameters are the maximum supply air temperature TSupSetMax, and the minimum supply air temperature for cooling TSupSetMin. The deadband temperature is equal to the average set point for the zone temperature for heating and cooling, as obtained from the input TZonSet, constraint to be within 21°C (≈70 F) and 24°C (≈75 F). The setpoints are computed as shown in the figure below. Note that the setpoint for the supply air temperature for heating and for economizer control is the same, and this setpoint is lower than TSupSetMin when the heating loop signal is zero and the economizer is in cooling mode, as shown in the figure.

For the fan speed set point, the parameters are the maximu fan speed at heating yHeaMax, the minimum fan speed yMin and the maximum fan speed for cooling yCooMax. For a cooling control signal of uCoo > 0.25, the speed is faster increased the larger the difference is between the zone temperature minus outdoor temperature TZon-TOut. The figure below shows the sequence.

Image of set point reset

The output TSupCoo is to be used to control the cooling coil, and the output TSupHeaEco is to be used to control the heating coil and the economizer dampers.

Note that the inputs uHea and uCoo must be computed based on the same temperature sensors and control loops.

Parameters

TypeNameDefaultDescription
Temperatures
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]

Connectors

TypeNameDescription
input RealInputuHeaHeating control signal [1]
input RealInputuCooCooling control signal [1]
input RealInputTZonSetAverage of heating and cooling setpoints for zone temperature [K]
input RealInputTZonZone temperature [K]
input RealInputTOutOutdoor air temperature [K]
output RealOutputTSupHeaEcoTemperature setpoint for heating coil and for economizer [K]
output RealOutputTSupCooCooling supply air temperature setpoint [K]
output RealOutputyFan speed [1]
input BooleanInputuFanSupply fan status

Modelica definition

block Supply "Supply air set point for single zone VAV system" 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"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uHea(min=0, max=1, unit="1") "Heating control signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uCoo(min=0, max=1, unit="1") "Cooling control signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZonSet(unit="K", displayUnit="degC") "Average of heating and cooling setpoints for zone temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon(unit="K", displayUnit="degC") "Zone temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut(unit="K", displayUnit="degC") "Outdoor air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupHeaEco(unit="K", displayUnit="degC") "Temperature setpoint for heating coil and for economizer"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupCoo(unit="K", displayUnit="degC") "Cooling supply air temperature setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput y(min=0, max=1, unit="1") "Fan speed"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uFan "Supply fan status"; Buildings.Controls.OBC.CDL.Continuous.Switch switch "Switch to assign control signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant fanOff(k=0) "Fan off status"; Buildings.Controls.OBC.CDL.Continuous.Min yFanHeaCoo "Fan speed due to heating or cooling"; protected Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) "Maximum fan speed"; Buildings.Controls.OBC.CDL.Continuous.Line TSetCooHig "Table to compute the setpoint for cooling for uCoo = 0...1"; Buildings.Controls.OBC.CDL.Continuous.Line offSetTSetHea "Table to compute the setpoint offset for heating for uCoo = 0...1"; Buildings.Controls.OBC.CDL.Continuous.Add addTHe "Adder for heating setpoint calculation"; Buildings.Controls.OBC.CDL.Continuous.Line offSetTSetCoo "Table to compute the setpoint offset for cooling for uHea = 0...1"; Buildings.Controls.OBC.CDL.Continuous.Add addTSupCoo "Adder for cooling setpoint calculation"; Buildings.Controls.OBC.CDL.Continuous.Subtract dT "Difference zone minus outdoor temperature"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( final k=(yMin - yCooMax)/(0.56 - 5.6)) "Gain factor"; Buildings.Controls.OBC.CDL.Continuous.AddParameter yMed( final p=yCooMax - (yMin - yCooMax)/(0.56 - 5.6)*5.6) "Fan speed at medium cooling load"; Buildings.Controls.OBC.CDL.Continuous.Limiter yMedLim( final uMax=yCooMax, final uMin=yMin) "Limiter for yMed"; Buildings.Controls.OBC.CDL.Continuous.Limiter TDea( final uMax=24 + 273.15, final uMin=21 + 273.15) "Limiter that outputs the dead band value for the supply air temperature"; Buildings.Controls.OBC.CDL.Continuous.Line TSetHeaHig "Block to compute the setpoint for heating for uHea = 0...1"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con0( final k=0) "Contant that outputs zero"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con25( final k=0.25) "Contant that outputs 0.25"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con05( final k=0.5) "Contant that outputs 0.5"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con75( final k=0.75) "Contant that outputs 0.75"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTSupSetMax( final k=TSupSetMax) "Constant that outputs TSupSetMax"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTSupSetMin( final k=TSupSetMin) "Constant that outputs TSupSetMin"; Buildings.Controls.OBC.CDL.Continuous.Subtract TDeaTSupSetMin "Outputs TDea-TSupSetMin"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( final k=-1) "Gain factor"; Buildings.Controls.OBC.CDL.Continuous.AddParameter addTDea( final p=-1.1) "Adds constant offset"; Buildings.Controls.OBC.CDL.Continuous.Subtract TSupSetMaxTDea "Outputs TSupSetMax-TDea"; Buildings.Controls.OBC.CDL.Continuous.Line yHea "Fan speed for heating"; Buildings.Controls.OBC.CDL.Continuous.Line lin050( final limitBelow=true, final limitAbove=true) "Linear increase in control signal for 0 < yCoo < 0.75"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con025( final k=0.25) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( final k=0.5) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con2( final k=1) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con3( final k=0) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con4( final k=yCooMax - yMin) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.Subtract dY075 "Change in control signal above yMedLim for y > 0.75"; Buildings.Controls.OBC.CDL.Continuous.Line lin075( final limitBelow=true, final limitAbove=true) "Linear increase in control signal for 0.75 < yCoo"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con5( final k=0.75) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con6( final k=0) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.AddParameter yOffSet( final p=-yMin) "Subtract yMin so that all control signals can be added"; Buildings.Controls.OBC.CDL.Continuous.Add addHeaCoo "Add heating control signal and offset due to cooling"; Buildings.Controls.OBC.CDL.Continuous.Add offCoo "Offset of control signal (relative to heating signal) for cooling"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con7(final k=0.5) "Contant that outputs 0.5"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSpe(final k=yMin) "Contant that outputs minimum fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne(final k=1) "Contant that outputs 1"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxHeaSpe(final k=yHeaMax) "Contant that outputs maximum fan speed for heating"; equation connect(offSetTSetHea.u, uCoo); connect(offSetTSetHea.y, addTHe.u2); connect(addTHe.y, TSupHeaEco); connect(TSetCooHig.y, addTSupCoo.u1); connect(offSetTSetCoo.y, addTSupCoo.u2); connect(TSetCooHig.u, uCoo); connect(offSetTSetCoo.u, uHea); connect(addTSupCoo.y, TSupCoo); connect(dT.u1, TZon); connect(dT.u2, TOut); connect(yMedLim.u, yMed.y); connect(TDea.u, TZonSet); connect(TDea.y, TSetHeaHig.f1); connect(con05.y, TSetHeaHig.x2); connect(conTSupSetMax.y, TSetHeaHig.f2); connect(uHea, TSetHeaHig.u); connect(TSetHeaHig.y, addTHe.u1); connect(con0.y, offSetTSetHea.x1); connect(con25.y, offSetTSetHea.x2); connect(con0.y, offSetTSetHea.f1); connect(TDea.y, TDeaTSupSetMin.u1); connect(conTSupSetMin.y, TDeaTSupSetMin.u2); connect(addTDea.y, offSetTSetHea.f2); connect(TSetCooHig.x1, con05.y); connect(TSetCooHig.f1, TDea.y); connect(TSetCooHig.x2, con75.y); connect(TSetCooHig.f2, conTSupSetMin.y); connect(offSetTSetCoo.f1, con0.y); connect(offSetTSetCoo.x1, con0.y); connect(offSetTSetCoo.x2, con05.y); connect(TSupSetMaxTDea.u1, conTSupSetMax.y); connect(TDea.y, TSupSetMaxTDea.u2); connect(TSupSetMaxTDea.y, offSetTSetCoo.f2); connect(uCoo, lin050.u); connect(dY075.u1, con4.y); connect(lin075.x2, con2.y); connect(lin075.x1, con5.y); connect(uCoo, lin075.u); connect(yMedLim.y, yOffSet.u); connect(dY075.u2, yOffSet.y); connect(offCoo.u1, lin050.y); connect(offCoo.u2, lin075.y); connect(offCoo.y, addHeaCoo.u2); connect(lin050.x2, con1.y); connect(con025.y, lin050.x1); connect(lin050.f2, yOffSet.y); connect(con3.y, lin050.f1); connect(dY075.y, lin075.f2); connect(con6.y, lin075.f1); connect(TSetHeaHig.x1, con0.y); connect(con7.y, yHea.x1); connect(minSpe.y, yHea.f1); connect(uHea, yHea.u); connect(conOne.y, yHea.x2); connect(maxHeaSpe.y, yHea.f2); connect(yHea.y, addHeaCoo.u1); connect(uFan, switch.u2); connect(fanOff.y, switch.u3); connect(switch.y, y); connect(one.y, yFanHeaCoo.u1); connect(addHeaCoo.y, yFanHeaCoo.u2); connect(yFanHeaCoo.y, switch.u1); connect(TDeaTSupSetMin.y, gai.u); connect(gai.y, addTDea.u); connect(dT.y, gai1.u); connect(gai1.y, yMed.u); end Supply;