Output setpoints for AHU control
Information
This package contains sequences generating setpoints for single zone VAV AHU control.
Package Content
Name |
Description |
ExhaustDamper
|
Control of actuated exhaust dampers without fans |
ModeAndSetPoints
|
Output zone setpoint with operation mode selection |
OutsideAirFlow
|
Output the minimum outdoor airflow rate setpoint for systems with a single zone |
Supply
|
Supply air set point for single zone VAV system |
Validation
|
Collection of validation models |
Control of actuated exhaust dampers without fans
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)
- 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.
-
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.
-
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:
Parameters
Type | Name | Default | Description |
Nominal parameters |
Real | minExhDamPos | 0.2 | Exhaust damper position maintaining building static pressure at setpoint when the system is at minPosMin [1] |
Real | maxExhDamPos | 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 [1] |
Real | minOutPosMin | 0.4 | Outdoor air damper position when fan operating at minimum speed to supply minimum outdoor air flow [1] |
Real | outDamPhyPosMax | 1 | Physical or at the comissioning fixed maximum position of the outdoor air damper [1] |
Connectors
Type | Name | Description |
input BooleanInput | uSupFan | Supply fan status |
input RealInput | uOutDamPos | Outdoor air damper position [1] |
output RealOutput | yExhDamPos | Exhaust damper position [1] |
Modelica definition
block ExhaustDamper
parameter Real minExhDamPos(
min=0,
max=1,
final unit="1") = 0.2
;
parameter Real maxExhDamPos(
min=0,
max=1,
final unit="1") = 0.9
;
parameter Real minOutPosMin(
min=0,
max=1,
final unit="1") = 0.4
;
parameter Real outDamPhyPosMax(
min=0,
max=1,
final unit="1")=1
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan ;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDamPos(
min=0,
max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yExhDamPos(
min=0,
max=1,
final unit="1") ;
Buildings.Controls.OBC.CDL.Continuous.Line exhDamPos
;
Buildings.Controls.OBC.CDL.Continuous.Switch swi1
;
Buildings.Controls.OBC.CDL.Continuous.Hysteresis greThr(
final uLow=0.02,
final uHigh=0.05)
;
Buildings.Controls.OBC.CDL.Logical.And and2
;
protected
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerDam(
final k=0)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minExhDam(
final k=minExhDamPos)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxExhDam(
final k=maxExhDamPos)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minPosAtMinSpd(
final k=minOutPosMin)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig(
final k=outDamPhyPosMax)
;
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;
Output zone setpoint with operation mode selection
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
Type | Name | Default | Description |
Boolean | have_winSen | | Check if the zone has window status sensor |
Boolean | have_occSen | | Check if the zone has occupancy sensor |
Setpoints |
Real | THeaSetOcc | 293.15 | Occupied heating setpoint [K] |
Real | THeaSetUno | 285.15 | Unoccupied heating setpoint [K] |
Real | TCooSetOcc | 297.15 | Occupied cooling setpoint [K] |
Real | TCooSetUno | 303.15 | Unoccupied cooling setpoint [K] |
Setpoints adjustment |
Adjustable settings |
Boolean | cooAdj | false | Flag, set to true if both cooling and heating setpoint are adjustable separately |
Boolean | heaAdj | false | Flag, set to true if heating setpoint is adjustable |
Boolean | sinAdj | false | Flag, set to true if both cooling and heating setpoint are adjustable through a single common knob |
Boolean | ignDemLim | false | Flag, set to true to exempt individual zone from demand limit setpoint adjustment |
Limits |
Real | TZonCooOnMax | 300.15 | Maximum cooling setpoint during on [K] |
Real | TZonCooOnMin | 295.15 | Minimum cooling setpoint during on [K] |
Real | TZonHeaOnMax | 295.15 | Maximum heating setpoint during on [K] |
Real | TZonHeaOnMin | 291.15 | Minimum heating setpoint during on [K] |
Real | TZonCooSetWinOpe | 322.15 | Cooling setpoint when window is open [K] |
Real | TZonHeaSetWinOpe | 277.15 | Heating setpoint when window is open [K] |
Demand control adjustment |
Real | incTSetDem_1 | 0.56 | Cooling setpoint increase value (degC) when cooling demand limit level 1 is imposed |
Real | incTSetDem_2 | 1.1 | Cooling setpoint increase value (degC) when cooling demand limit level 2 is imposed |
Real | incTSetDem_3 | 2.2 | Cooling setpoint increase value (degC) when cooling demand limit level 3 is imposed |
Real | decTSetDem_1 | 0.56 | Heating setpoint decrease value (degC) when heating demand limit level 1 is imposed |
Real | decTSetDem_2 | 1.1 | Heating setpoint decrease value (degC) when heating demand limit level 2 is imposed |
Real | decTSetDem_3 | 2.2 | Heating setpoint decrease value (degC) when heating demand limit level 3 is imposed |
Advanced |
Real | bouLim | 1 | Threshold of temperature difference for indicating the end of setback or setup mode |
Real | uLow | -0.1 | Low limit of the hysteresis for checking temperature difference |
Real | uHigh | 0.1 | High limit of the hysteresis for checking temperature difference |
Operation mode |
Real | preWarCooTim | 10800 | Maximum cool-down or warm-up time [s] |
Real | TZonFreProOn | 277.15 | Threshold temperature to activate the freeze protection mode [K] |
Real | TZonFreProOff | 280.15 | Threshold temperature to end the freeze protection mode [K] |
Connectors
Type | Name | Description |
input RealInput | cooDowTim | Cool-down time retrieved from optimal cool-down block [s] |
input RealInput | warUpTim | Warm-up time retrieved from optimal warm-up block [s] |
input BooleanInput | uWin | Window status: true=open, false=close |
input RealInput | TZon | Zone temperature [K] |
input BooleanInput | uOcc | Zone occupancy status according to the schedule: true=occupied, false=unoccupied |
input RealInput | tNexOcc | Time to next occupied period [s] |
input RealInput | setAdj | Setpoint adjustment value |
input RealInput | heaSetAdj | Heating setpoint adjustment value |
input BooleanInput | uOccSen | Occupancy sensor (occupied=true, unoccupied=false) |
input IntegerInput | uCooDemLimLev | Cooling demand limit level |
input IntegerInput | uHeaDemLimLev | Heating demand limit level |
output IntegerOutput | yOpeMod | Operation mode |
output RealOutput | TZonCooSet | Cooling setpoint temperature [K] |
output RealOutput | TZonHeaSet | Heating setpoint temperature [K] |
Modelica definition
block ModeAndSetPoints
parameter Boolean have_winSen ;
parameter Boolean have_occSen ;
parameter Real THeaSetOcc(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")=293.15
;
parameter Real THeaSetUno(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")=285.15
;
parameter Real TCooSetOcc(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")=297.15
;
parameter Real TCooSetUno(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")=303.15
;
parameter Boolean cooAdj=false
;
parameter Boolean heaAdj=false
;
parameter Boolean sinAdj=false
;
parameter Boolean ignDemLim=false
;
parameter Real TZonCooOnMax(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")=300.15
;
parameter Real TZonCooOnMin(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")=295.15
;
parameter Real TZonHeaOnMax(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")=295.15
;
parameter Real TZonHeaOnMin(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")=291.15
;
parameter Real TZonCooSetWinOpe(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")=322.15 ;
parameter Real TZonHeaSetWinOpe(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")=277.15 ;
parameter Real incTSetDem_1=0.56
;
parameter Real incTSetDem_2=1.1
;
parameter Real incTSetDem_3=2.2
;
parameter Real decTSetDem_1=0.56
;
parameter Real decTSetDem_2=1.1
;
parameter Real decTSetDem_3=2.2
;
parameter Real bouLim=1
;
parameter Real uLow=-0.1
;
parameter Real uHigh=0.1
;
parameter Real preWarCooTim(
final unit="s",
final quantity="Time")=10800 ;
parameter Real TZonFreProOn(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")=277.15
;
parameter Real TZonFreProOff(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")=280.15
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput cooDowTim(
final unit="s",
final quantity="Time")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput warUpTim(
final unit="s",
final quantity="Time") ;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWin
if have_winSen
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOcc
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput tNexOcc(
final unit="s",
final quantity="Time") ;
Buildings.Controls.OBC.CDL.Interfaces.RealInput setAdj
if cooAdj
or sinAdj
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput heaSetAdj
if heaAdj
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uOccSen
if have_occSen
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uCooDemLimLev
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uHeaDemLimLev
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yOpeMod ;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput TZonCooSet(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput TZonHeaSet(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")
;
Buildings.Controls.OBC.ASHRAE.G36_PR1.Generic.SetPoints.OperationMode
opeModSel(
final numZon=1,
final preWarCooTim=preWarCooTim,
final TZonFreProOn=TZonFreProOn,
final TZonFreProOff=TZonFreProOff) ;
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) ;
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) ;
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger colZon
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger hotZon
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant winSta(
final k=false)
if not have_winSen
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant occSta(
final k=true)
if not have_occSen
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt
;
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.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;
Output the minimum outdoor airflow rate setpoint for systems with a single zone
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 area component of the breathing zone outdoor airflow:
breZonAre = AFlo*VOutPerAre_flow
.
- The population component of the breathing zone outdoor airflow:
breZonPop = occCou*VOutPerPer_flow
.
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 discharge air temperature at the terminal unit is less than or equal to
zone space temperature:
zonOutAirRate = (breZonAre+breZonPop)/disEffCoo
.
-
If discharge air temperature at the terminal unit is greater than zone space
temperature:
zonOutAirRate = (breZonAre+breZonPop)/disEffHea
If the zone has an occupancy sensor and is unpopulated:
- If discharge air temperature at the terminal unit is less than or equal to
zone space temperature:
zonOutAirRate = breZonAre/disEffCoo
- If discharge air temperature at the terminal unit is greater than zone
space temperature:
zonOutAirRate = breZonAre/disEffHea
For the single zone system, the required minimum outdoor airflow setpoint
VOutMinSet_flow
equals to the zonOutAirRate
.
Parameters
Type | Name | Default | Description |
Boolean | have_occSen | | Set to true if zones have occupancy sensor |
Real | occDen | 0.05 | Default number of person in unit area [1/m2] |
Real | zonDisEffHea | 0.8 | Zone air distribution effectiveness during heating [1] |
Real | zonDisEffCoo | 1.0 | Zone air distribution effectiveness during cooling [1] |
Nominal condition |
Real | VOutPerAre_flow | 3e-4 | Outdoor air rate per unit area [m3/(s.m2)] |
Real | VOutPerPer_flow | 2.5e-3 | Outdoor air rate per person [m3/s] |
Real | AFlo | | Floor area [m2] |
Advanced |
Real | uLow | -0.5 | If zone space temperature minus supply air temperature is less than uLow,
then it should use heating supply air distribution effectiveness [K] |
Real | uHigh | 0.5 | If zone space temperature minus supply air temperature is more than uHig,
then it should use cooling supply air distribution effectiveness [K] |
Connectors
Type | Name | Description |
input RealInput | nOcc | Number of occupants [1] |
input RealInput | TZon | Measured zone air temperature [K] |
input RealInput | TDis | Measured discharge air temperature [K] |
input IntegerInput | uOpeMod | AHU operation mode status signal |
input BooleanInput | uSupFan | Supply fan status, true if on, false if off |
input BooleanInput | uWin | Window status, true if open, false if closed |
output RealOutput | VOutMinSet_flow | Effective minimum outdoor airflow setpoint [m3/s] |
Modelica definition
block OutsideAirFlow
parameter Real VOutPerAre_flow(
final unit="m3/(s.m2)") = 3e-4
;
parameter Real VOutPerPer_flow(
final unit="m3/s",
final quantity="VolumeFlowRate")= 2.5e-3
;
parameter Real AFlo(
final unit="m2",
final quantity="Area") ;
parameter Boolean have_occSen
;
parameter Real occDen(
final unit="1/m2") = 0.05
;
parameter Real zonDisEffHea(
final unit="1") = 0.8
;
parameter Real zonDisEffCoo(
final unit="1") = 1.0
;
parameter Real uLow(
final unit="K",
final displayUnit="K",
final quantity="TemperatureDifference") = -0.5
;
parameter Real uHigh(
final unit="K",
final displayUnit="K",
final quantity="TemperatureDifference") = 0.5
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput nOcc(
final unit="1")
if have_occSen ;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature") ;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TDis(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature") ;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWin
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput VOutMinSet_flow(
min=0,
final unit="m3/s",
final quantity="VolumeFlowRate") ;
protected
Buildings.Controls.OBC.CDL.Continuous.Add breZon ;
Buildings.Controls.OBC.CDL.Continuous.Subtract sub2
;
Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(
final k=VOutPerPer_flow)
if have_occSen ;
Buildings.Controls.OBC.CDL.Continuous.Switch swi
;
Buildings.Controls.OBC.CDL.Continuous.Switch swi1
;
Buildings.Controls.OBC.CDL.Continuous.Divide zonOutAirRate
;
Buildings.Controls.OBC.CDL.Continuous.Switch swi2
;
Buildings.Controls.OBC.CDL.Continuous.Switch swi3
;
Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys(
final uLow=uLow,
final uHigh=uHigh,
final pre_y_start=true)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant occSen(
final k=have_occSen)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerOutAir(
final k=0)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disEffHea(
final k=zonDisEffHea)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disEffCoo(
final k=zonDisEffCoo)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant breZonAre(
final k=VOutPerAre_flow*AFlo)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant breZonPop(
final k=VOutPerPer_flow*AFlo*occDen)
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 ;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant occMod(
final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied)
;
Buildings.Controls.OBC.CDL.Logical.And and1 ;
Buildings.Controls.OBC.CDL.Logical.Not not1 ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerOcc(
final k=0)
if not have_occSen
;
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;
Supply air set point for single zone VAV system
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.
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
Type | Name | Default | Description |
Temperatures |
Real | TSupSetMax | | Maximum supply air temperature for heating [K] |
Real | TSupSetMin | | Minimum supply air temperature for cooling [K] |
Speed |
Real | yHeaMax | | Maximum fan speed for heating [1] |
Real | yMin | | Minimum fan speed [1] |
Real | yCooMax | 1 | Maximum fan speed for cooling [1] |
Connectors
Type | Name | Description |
input RealInput | uHea | Heating control signal [1] |
input RealInput | uCoo | Cooling control signal [1] |
input RealInput | TZonSet | Average of heating and cooling setpoints for zone temperature [K] |
input RealInput | TZon | Zone temperature [K] |
input RealInput | TOut | Outdoor air temperature [K] |
output RealOutput | TSupHeaEco | Temperature setpoint for heating coil and for economizer [K] |
output RealOutput | TSupCoo | Cooling supply air temperature setpoint [K] |
output RealOutput | y | Fan speed [1] |
input BooleanInput | uFan | Supply fan status |
Modelica definition
block Supply
parameter Real TSupSetMax(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature")
;
parameter Real TSupSetMin(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature")
;
parameter Real yHeaMax(min=0, max=1, unit="1")
;
parameter Real yMin(min=0, max=1, unit="1")
;
parameter Real yCooMax(min=0, max=1, unit="1") = 1
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uHea(min=0, max=1, unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uCoo(min=0, max=1, unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TZonSet(unit="K", displayUnit="degC")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon(unit="K", displayUnit="degC")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut(unit="K", displayUnit="degC")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupHeaEco(unit="K", displayUnit="degC")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupCoo(unit="K", displayUnit="degC")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput y(min=0, max=1, unit="1") ;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uFan ;
Buildings.Controls.OBC.CDL.Continuous.Switch switch ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant fanOff(k=0) ;
Buildings.Controls.OBC.CDL.Continuous.Min yFanHeaCoo ;
protected
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(
final k=1) ;
Buildings.Controls.OBC.CDL.Continuous.Line TSetCooHig
;
Buildings.Controls.OBC.CDL.Continuous.Line offSetTSetHea
;
Buildings.Controls.OBC.CDL.Continuous.Add addTHe
;
Buildings.Controls.OBC.CDL.Continuous.Line offSetTSetCoo
;
Buildings.Controls.OBC.CDL.Continuous.Add addTSupCoo
;
Buildings.Controls.OBC.CDL.Continuous.Subtract dT
;
Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(
final k=(yMin - yCooMax)/(0.56 - 5.6))
;
Buildings.Controls.OBC.CDL.Continuous.AddParameter yMed(
final p=yCooMax - (yMin - yCooMax)/(0.56 - 5.6)*5.6)
;
Buildings.Controls.OBC.CDL.Continuous.Limiter yMedLim(
final uMax=yCooMax,
final uMin=yMin) ;
Buildings.Controls.OBC.CDL.Continuous.Limiter TDea(
final uMax=24 + 273.15,
final uMin=21 + 273.15)
;
Buildings.Controls.OBC.CDL.Continuous.Line TSetHeaHig
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con0(
final k=0) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con25(
final k=0.25) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con05(
final k=0.5) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con75(
final k=0.75) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTSupSetMax(
final k=TSupSetMax) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTSupSetMin(
final k=TSupSetMin) ;
Buildings.Controls.OBC.CDL.Continuous.Subtract TDeaTSupSetMin
;
Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(
final k=-1)
;
Buildings.Controls.OBC.CDL.Continuous.AddParameter addTDea(
final p=-1.1)
;
Buildings.Controls.OBC.CDL.Continuous.Subtract TSupSetMaxTDea
;
Buildings.Controls.OBC.CDL.Continuous.Line yHea ;
Buildings.Controls.OBC.CDL.Continuous.Line lin050(
final limitBelow=true,
final limitAbove=true)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con025(
final k=0.25) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1(
final k=0.5) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con2(
final k=1) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con3(
final k=0) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con4(
final k=yCooMax - yMin) ;
Buildings.Controls.OBC.CDL.Continuous.Subtract dY075
;
Buildings.Controls.OBC.CDL.Continuous.Line lin075(
final limitBelow=true,
final limitAbove=true)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con5(
final k=0.75) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con6(
final k=0) ;
Buildings.Controls.OBC.CDL.Continuous.AddParameter yOffSet(
final p=-yMin)
;
Buildings.Controls.OBC.CDL.Continuous.Add addHeaCoo
;
Buildings.Controls.OBC.CDL.Continuous.Add offCoo
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con7(
final k=0.5)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSpe(
final k=yMin)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne(
final k=1)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxHeaSpe(
final k=yHeaMax)
;
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;