Output setpoints for AHU control
Information
This package contains sequences generating setpoints for single zone VAV AHU control.
Extends from Modelica.Icons.Package (Icon for standard packages).
Package Content
Name |
Description |
ExhaustDamper
|
Control of actuated exhaust dampers without fans |
OutsideAirFlow
|
Output the minimum outdoor airflow rate setpoint for systems with a single zone |
VAVSupply
|
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), PART5.N.8.(for multi zone VAV AHU), PART5.P.6
and PART3.2B.3 (for single zone VAV AHU).
Single zone VAV AHU: Control of actuated exhaust dampers without fans (PART5.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.1 | 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 | uFan | Supply fan status |
input RealInput | uOutDamPos | Outdoor air damper position [1] |
output RealOutput | yExhDam | Exhaust damper position [1] |
Modelica definition
block ExhaustDamper
parameter Real minExhDamPos(
min=0,
max=1,
final unit="1") = 0.1 ;
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 uFan ;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDamPos(
min=0,
max=1,
final unit="1") ;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yExhDam(
min=0,
max=1,
final unit="1") ;
Buildings.Controls.OBC.CDL.Continuous.Line exhDamPos ;
Buildings.Controls.OBC.CDL.Logical.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(uFan, and2.u2);
connect(greThr.y, and2.u1);
connect(exhDamPos.y, swi1.u1);
connect(swi1.y, yExhDam);
end ExhaustDamper;
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), PART5.P.4.b, PART5.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*outAirPerAre
.
- The population component of the breathing zone outdoor airflow:
breZonPop = occCou*outAirPerPer
.
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.
For design purpose, use design zone population desZonPop
to find
out the minimum requirement at the ventilation-design condition.
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 | outAirPerAre | 3e-4 | Outdoor air rate per unit area [m3/(s.m2)] |
VolumeFlowRate | outAirPerPer | 2.5e-3 | Outdoor air rate per person [m3/s] |
Area | 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 | uHig | 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 outAirPerAre(
final unit="m3/(s.m2)") = 3e-4 ;
parameter Modelica.SIunits.VolumeFlowRate outAirPerPer=2.5e-3 ;
parameter Modelica.SIunits.Area AFlo ;
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",
quantity="ThermodynamicTemperature") = -0.5 ;
parameter Real uHig(
final unit="K",
quantity="ThermodynamicTemperature") = 0.5 ;
Buildings.Controls.OBC.CDL.Interfaces.RealInput nOcc(
final unit="1") ;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon(
final unit="K", quantity
="ThermodynamicTemperature") ;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TDis(
final unit="K", 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",
quantity="VolumeFlowRate") ;
protected
Buildings.Controls.OBC.CDL.Continuous.Add breZon ;
Buildings.Controls.OBC.CDL.Continuous.Add add2(
final k1=+1,
final k2=-1) ;
Buildings.Controls.OBC.CDL.Continuous.Gain gai(
final k=outAirPerPer) ;
Buildings.Controls.OBC.CDL.Logical.Switch swi ;
Buildings.Controls.OBC.CDL.Logical.Switch swi1 ;
Buildings.Controls.OBC.CDL.Continuous.Division zonOutAirRate ;
Buildings.Controls.OBC.CDL.Logical.Switch swi2 ;
Buildings.Controls.OBC.CDL.Logical.Switch swi3 ;
Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys(
uLow=uLow,
uHigh=uHig,
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=
outAirPerAre*AFlo) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant breZonPop(
final k=
outAirPerPer*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 ;
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, add2.u1);
connect(TDis, add2.u2);
connect(add2.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);
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 TMax
,
and the minimum supply air temperature for cooling TMin
.
The deadband temperature is equal to the
average set point for the zone temperature
for heating and cooling, as obtained from the input TSetZon
,
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 TMin
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 yCoo > 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 TCoo
is to be used to control the cooling coil,
and the output
THeaEco
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 |
Temperature | TMax | | Maximum supply air temperature for heating [K] |
Temperature | TMin | | 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 | TSetZon | 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 | THeaEco | Temperature setpoint for heating coil and for economizer [K] |
output RealOutput | TCoo | Cooling supply air temperature setpoint [K] |
output RealOutput | y | Fan speed [1] |
Modelica definition
block VAVSupply
parameter Modelica.SIunits.Temperature TMax ;
parameter Modelica.SIunits.Temperature TMin ;
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 TSetZon(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 THeaEco(unit="K",
displayUnit="degC") ;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput TCoo(unit="K", displayUnit="degC")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput y(
min=0,
max=1,
unit="1") ;
protected
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 addTCoo ;
Buildings.Controls.OBC.CDL.Continuous.Add dT(
final k2=-1) ;
Buildings.Controls.OBC.CDL.Continuous.AddParameter yMed(p=yCooMax - (yMin -
yCooMax)/(0.56 - 5.6)*5.6, k=(yMin - yCooMax)/(0.56 - 5.6)) ;
Buildings.Controls.SetPoints.Table yHea(
final table=[0.5, yMin; 1, yHeaMax]) ;
Buildings.Controls.OBC.CDL.Continuous.Hysteresis yMinChe1(
final uLow=0.2,
final uHigh=0.3) ;
Buildings.Controls.OBC.CDL.Logical.Switch switch1;
Buildings.Controls.OBC.CDL.Continuous.Hysteresis yMinChe2(
final uLow=0.45,
final uHigh=0.55) ;
Buildings.Controls.OBC.CDL.Logical.Switch switch2;
Buildings.Controls.OBC.CDL.Continuous.Hysteresis yMinChe3(
final uLow=0.7,
final uHigh=0.8) ;
Buildings.Controls.OBC.CDL.Logical.Switch switch3;
Buildings.Controls.OBC.CDL.Continuous.Add add(
final k1=-1);
Buildings.Controls.OBC.CDL.Continuous.Add add1;
Buildings.Controls.OBC.CDL.Continuous.Gain gain(
final k=4);
Buildings.Controls.OBC.CDL.Continuous.AddParameter yMed1(
final p=2*yMin,
final k=-yMin) ;
Buildings.Controls.OBC.CDL.Continuous.Gain gain1(
final k=4);
Buildings.Controls.OBC.CDL.Continuous.Product product;
Buildings.Controls.OBC.CDL.Continuous.AddParameter yMed2(
final p=-3*yCooMax,
final k=4*yCooMax) ;
Buildings.Controls.OBC.CDL.Continuous.Product product1;
Buildings.Controls.OBC.CDL.Continuous.Add add2(
final k1=4,
final k2=-1);
Buildings.Controls.OBC.CDL.Continuous.Add add3;
Buildings.Controls.OBC.CDL.Continuous.Limiter yMedLim(
final uMax=yCooMax,
final uMin=yMin) ;
Buildings.Controls.OBC.CDL.Continuous.Limiter TDea(uMax=24 + 273.15, 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 conTMax(
final k=TMax) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTMin(
final k=TMin) ;
Buildings.Controls.OBC.CDL.Continuous.Add TDeaTMin(
final k2=-1) ;
Buildings.Controls.OBC.CDL.Continuous.AddParameter addTDea(
final p=-1.1,
final k=-1) ;
Buildings.Controls.OBC.CDL.Continuous.Add TMaxTDea(
final k2=-1) ;
Buildings.Controls.OBC.CDL.Logical.Not not1 ;
Buildings.Controls.OBC.CDL.Logical.Not not2 ;
Buildings.Controls.OBC.CDL.Logical.Not not3 ;
equation
connect(offSetTSetHea.u, uCoo);
connect(offSetTSetHea.y, addTHe.u2);
connect(addTHe.y, THeaEco);
connect(TSetCooHig.y, addTCoo.u1);
connect(offSetTSetCoo.y, addTCoo.u2);
connect(TSetCooHig.u, uCoo);
connect(offSetTSetCoo.u, uHea);
connect(addTCoo.y, TCoo);
connect(dT.u1, TZon);
connect(dT.u2, TOut);
connect(dT.y, yMed.u);
connect(yMinChe1.u, uCoo);
connect(switch2.y, switch1.u3);
connect(yMinChe2.u, uCoo);
connect(yMinChe3.u, uCoo);
connect(yMedLim.y, add.u1);
connect(gain.u, uCoo);
connect(gain.y, yMed1.u);
connect(add.y, add1.u1);
connect(yMed1.y, add1.u2);
connect(add1.y, switch2.u1);
connect(gain1.u, uCoo);
connect(product.u1, yMedLim.y);
connect(product.y, add.u2);
connect(product.u2, gain.y);
connect(yMedLim.y, add2.u1);
connect(product1.y, add2.u2);
connect(add2.y, add3.u1);
connect(yMed2.y, add3.u2);
connect(product1.u2, gain1.y);
connect(product1.u1, yMedLim.y);
connect(yMed2.u, uCoo);
connect(add3.y, switch3.u3);
connect(yHea.y, switch1.u1);
connect(switch1.y, y);
connect(yMedLim.y, switch3.u1);
connect(yMedLim.u, yMed.y);
connect(TDea.u, TSetZon);
connect(con0.y, TSetHeaHig.x1);
connect(TDea.y, TSetHeaHig.f1);
connect(con05.y, TSetHeaHig.x2);
connect(conTMax.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(yHea.u, uHea);
connect(TDea.y, TDeaTMin.u1);
connect(conTMin.y, TDeaTMin.u2);
connect(TDeaTMin.y, addTDea.u);
connect(addTDea.y, offSetTSetHea.f2);
connect(TSetCooHig.x1, con05.y);
connect(TSetCooHig.f1, TDea.y);
connect(TSetCooHig.x2, con75.y);
connect(TSetCooHig.f2, conTMin.y);
connect(offSetTSetCoo.f1, con0.y);
connect(offSetTSetCoo.x1, con0.y);
connect(offSetTSetCoo.x2, con05.y);
connect(TMaxTDea.u1, conTMax.y);
connect(TDea.y, TMaxTDea.u2);
connect(TMaxTDea.y, offSetTSetCoo.f2);
connect(yMinChe1.y, not1.u);
connect(not1.y, switch1.u2);
connect(yMinChe2.y, not2.u);
connect(not2.y, switch2.u2);
connect(yMinChe3.y, not3.u);
connect(not3.y, switch3.u2);
connect(switch3.y, switch2.u3);
end VAVSupply;