Output setpoints for AHU control
Information
This package contains sequences generating setpoints for VAV AHU control.
Package Content
Name |
Description |
ExhaustDamper
|
Control of actuated exhaust air dampers without fans |
ReturnFanDirectPressure
|
Return fan control with direct building pressure control |
SupplyFan
|
Block to control multi zone VAV AHU supply fan |
SupplySignals
|
Multizone VAV AHU coil valve positions |
SupplyTemperature
|
Supply air temperature setpoint for multi zone system |
OutdoorAirFlow
|
Package of sequences for calculating minimum outdoor airflow rate |
Validation
|
Collection of validation models |
Control of actuated exhaust air dampers without fans
Information
Control sequence for actuated exhaust damper yExhDamPos
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).
Multi zone VAV AHU: Control of actuated exhaust dampers without fans (PART 5.N.8)
- The exhaust damper is enabled when the associated supply fan is proven on
uSupFan = true
, and disabled otherwise.
- When enabled, a P-only control loop modulates the exhaust damper to maintain
a building static pressure of
dpBui
, which is by default 12 Pa (0.05 inchWC).
-
When
uSupFan = false
, the damper is closed.
Parameters
Type | Name | Default | Description |
Real | dpBuiSet | 12 | Building static pressure difference relative to ambient (positive to pressurize the building) [Pa] |
Exhaust damper P-control parameter |
Real | k | 0.5 | Gain, applied to building pressure control error normalized with dpBuiSet [1] |
Connectors
Type | Name | Description |
input RealInput | dpBui | Building static pressure difference, relative to ambient (positive if pressurized) [Pa] |
input BooleanInput | uSupFan | Supply fan status |
output RealOutput | yExhDamPos | Exhaust damper control signal (0: closed, 1: open) [1] |
Modelica definition
block ExhaustDamper
parameter Real dpBuiSet(
final unit="Pa",
final quantity="PressureDifference",
max=30) = 12
;
parameter Real k(min=0, unit="1") = 0.5
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput dpBui(
final unit="Pa",
displayUnit="Pa")
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan ;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yExhDamPos(
final unit="1",
min=0,
max=1)
;
Buildings.Controls.OBC.CDL.Continuous.MovingMean movMea(
delta=300)
;
Buildings.Controls.OBC.CDL.Continuous.Feedback conErr(
u1(
final unit="Pa", displayUnit="Pa"),
u2(
final unit="Pa", displayUnit="Pa"),
y(
final unit="Pa", displayUnit="Pa"))
;
Buildings.Controls.OBC.CDL.Continuous.LimPID conP(
final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P,
final k=k) ;
Buildings.Controls.OBC.CDL.Logical.Switch swi
;
protected
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerDam(
final k=0)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpBuiSetPoi1(
final k=dpBuiSet)
;
Buildings.Controls.OBC.CDL.Continuous.Gain gaiNor(
final k=1/dpBuiSet)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1(
final k=0)
;
equation
connect(uSupFan, swi.u2);
connect(zerDam.y, swi.u3);
connect(swi.y, yExhDamPos);
connect(dpBui, movMea.u);
connect(movMea.y, conErr.u1);
connect(conErr.y, gaiNor.u);
connect(gaiNor.y, conP.u_s);
connect(dpBuiSetPoi1.y, conErr.u2);
connect(zer1.y, conP.u_m);
connect(conP.y, swi.u1);
end ExhaustDamper;
Return fan control with direct building pressure control
Information
Setpoint for return fan discharge pressure and exhaust air damper
for a multi zone VAV AHU according to ASHRAE guideline G36,
PART 5.N.10 (return fan control with direct building pressure).
-
Return fan operates whenever associated supply fan is proven on and is
off otherwise.
-
Return fan is controlled to maintain return fan discharge static pressure
at setpoint dpBuiSet
.
-
Exhaust damper is only enabled when the associated supply and return
fans are proven on (uFan=true
) and the minimum outdoor air damper is open
(to be controlled in a separate sequence).
The exhaust dampers is closed when the fan is disabled.
-
The building static pressure is time averaged with a sliding 5-minute window
to dampen fluctuations. The averaged value shall be displayed and is used
for control.
-
When the exhaust damper is enabled, a control loop modulates the exhaust damper
in sequence with the return fan static pressure setpoint as shown in the figure
below to maintain the building pressure equal to dpBuiSet
,
which is by default 12 Pa (0.05 inches).
The output signal of the building pressure control is as follows:
-
From 0 to 0.5, the building pressure control loop modulates the exhaust
dampers from
yExhDam = 0
(closed) to yExhDam = 1
(open).
-
From 0.5 to 1, the building pressure control loop resets the return fan
discharge static pressure setpoint from
dpDisMin
to dpDisMax
. The dpDisMin
and
dpDisMax
are specified in Section G36 PART 3.2A.3.b.
Parameters
Type | Name | Default | Description |
Real | dpBuiSet | 12 | Building static pressure difference relative to ambient (positive to pressurize the building) [Pa] |
Real | dpDisMin | 2.4 | Minimum return fan discharge static pressure difference setpoint [Pa] |
Real | dpDisMax | 40 | Maximum return fan discharge static pressure setpoint [Pa] |
Real | k | 1 | Gain, normalized using dpBuiSet [1] |
Connectors
Type | Name | Description |
input RealInput | dpBui | Building static pressure difference, relative to ambient (positive if pressurized) [Pa] |
input BooleanInput | uFan | Fan on/off signal, true if fan is on |
output RealOutput | dpDisSet | Return fan discharge static pressure setpoint [Pa] |
output RealOutput | yExhDam | Exhaust damper control signal (0: closed, 1: open) [1] |
Modelica definition
block ReturnFanDirectPressure
parameter Real dpBuiSet(
final unit="Pa",
final quantity="PressureDifference",
final max=30) = 12
;
parameter Real dpDisMin(
final unit="Pa",
final quantity="PressureDifference",
final min=0,
final max=1000) = 2.4
;
parameter Real dpDisMax(
final unit="Pa",
final quantity="PressureDifference",
final min=0,
final max=1000) = 40
;
parameter Real k(
final unit="1") = 1
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput dpBui(
final unit="Pa",
displayUnit="Pa")
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uFan
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput dpDisSet(
final unit="Pa",
displayUnit="Pa",
min=0)
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yExhDam(
final unit="1",
min=0,
max=1)
;
Buildings.Controls.OBC.CDL.Continuous.MovingMean movMea(
delta=300)
;
Buildings.Controls.OBC.CDL.Continuous.LimPID conP(
final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P,
final k=k,
reverseAction=true) ;
Buildings.Controls.OBC.CDL.Continuous.Line linExhAirDam
;
Buildings.Controls.OBC.CDL.Continuous.Line linRetFanStaPre
;
Buildings.Controls.OBC.CDL.Logical.Switch swi1
;
Buildings.Controls.OBC.CDL.Logical.Switch swi
;
Buildings.Controls.OBC.CDL.Continuous.Division div ;
protected
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpBuiSetPoi(
final k=dpBuiSet) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retFanDisPreMin(
final k=dpDisMin) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retFanDisPreMax(
final k=dpDisMax) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(
final k=0)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1(
final k=0)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(
final k=0.5)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(
final k=1)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne(
final k=1)
;
equation
connect(movMea.u, dpBui);
connect(swi.u2, uFan);
connect(swi.u3, zer.y);
connect(zer1.y, linExhAirDam.x1);
connect(zer1.y, linExhAirDam.f1);
connect(con.y, linExhAirDam.x2);
connect(one.y, linExhAirDam.f2);
connect(con.y, linRetFanStaPre.x1);
connect(one.y, linRetFanStaPre.x2);
connect(retFanDisPreMin.y, linRetFanStaPre.f1);
connect(retFanDisPreMax.y, linRetFanStaPre.f2);
connect(linRetFanStaPre.y, swi.u1);
connect(uFan, swi1.u2);
connect(linExhAirDam.y, swi1.u1);
connect(swi1.y, yExhDam);
connect(zer1.y, swi1.u3);
connect(swi.y, dpDisSet);
connect(conP.y, linExhAirDam.u);
connect(conP.y, linRetFanStaPre.u);
connect(dpBuiSetPoi.y, div.u2);
connect(movMea.y, div.u1);
connect(conOne.y, conP.u_s);
connect(div.y, conP.u_m);
end ReturnFanDirectPressure;
Block to control multi zone VAV AHU supply fan
Information
Supply fan control for a multi zone VAV AHU according to
ASHRAE guideline G36, PART 5.N.1 (Supply fan control).
Supply fan start/stop
- Supply fan shall run when system is in the Cool-down, Setup, or Occupied mode
- If there are any VAV-reheat boxes on perimeter zones, supply fan shall also
run when system is in Setback or Warmup mode;
- If the AHU does not serve dual duct boxes
that do not have hot-duct inlet airflow sensors (
have_duaDucBox=true
)
or the AHU does not have airflow measurement station (have_airFloMeaSta=false
),
sum the current airflow rate from the VAV boxes and output to a software point.
Static pressure setpoint reset
Static pressure setpoint shall be reset using trim-respond logic using following
parameters as a starting point:
Variable | Value | Definition |
Device | AHU Supply Fan | Associated device |
SP0 | iniSet | Initial setpoint |
SPmin | minSet | Minimum setpoint |
SPmax | maxSet | Maximum setpoint |
Td | delTim | Delay timer |
T | samplePeriod | Time step |
I | numIgnReq | Number of ignored requests |
R | uZonPreResReq | Number of requests |
SPtrim | triAmo | Trim amount |
SPres | resAmo | Respond amount |
SPres_max | maxRes | Maximum response per time interval |
Static pressure control
Supply fan speed is controlled with a PI controller to maintain duct static pressure at setpoint
when the fan is proven on. The setpoint for the PI controller and the measured
duct static pressure are normalized with the maximum design static presssure
maxSet
.
Where the zone groups served by the system are small,
provide multiple sets of gains that are used in the control loop as a function
of a load indicator (such as supply fan airflow rate, the area of the zone groups
that are occupied, etc.).
Parameters
Type | Name | Default | Description |
System configuration |
Boolean | have_perZonRehBox | false | Check if there is any VAV-reheat boxes on perimeter zones |
Boolean | have_duaDucBox | false | Check if the AHU serves dual duct boxes |
Boolean | have_airFloMeaSta | false | Check if the AHU has AFMS (Airflow measurement station) |
Trim and respond for pressure setpoint |
Real | iniSet | 120 | Initial setpoint [Pa] |
Real | minSet | 25 | Minimum setpoint [Pa] |
Real | maxSet | | Maximum setpoint [Pa] |
Real | delTim | 600 | Delay time after which trim and respond is activated [s] |
Real | samplePeriod | 120 | Sample period [s] |
Integer | numIgnReq | 2 | Number of ignored requests |
Real | triAmo | -12.0 | Trim amount [Pa] |
Real | resAmo | 15 | Respond amount (must be opposite in to triAmo) [Pa] |
Real | maxRes | 32 | Maximum response per time interval (same sign as resAmo) [Pa] |
Fan PID controller |
SimpleController | controllerType | Buildings.Controls.OBC.CDL.T... | Type of controller |
Real | k | 0.1 | Gain of controller, normalized using maxSet [1] |
Real | Ti | 60 | Time constant of integrator block [s] |
Real | Td | 0.1 | Time constant of derivative block [s] |
Real | yFanMax | 1 | Maximum allowed fan speed [1] |
Real | yFanMin | 0.1 | Lowest allowed fan speed if fan is on [1] |
Connectors
Type | Name | Description |
input IntegerInput | uOpeMod | System operation mode |
input RealInput | ducStaPre | Measured duct static pressure [Pa] |
input IntegerInput | uZonPreResReq | Zone static pressure reset requests |
output BooleanOutput | ySupFan | Supply fan on status |
output RealOutput | ySupFanSpe | Supply fan speed [1] |
Modelica definition
block SupplyFan
parameter Boolean have_perZonRehBox = false
;
parameter Boolean have_duaDucBox = false
;
parameter Boolean have_airFloMeaSta = false
;
parameter Real iniSet(
final unit="Pa",
final quantity="PressureDifference") = 120
;
parameter Real minSet(
final unit="Pa",
final quantity="PressureDifference") = 25
;
parameter Real maxSet(
final unit="Pa",
final quantity="PressureDifference")
;
parameter Real delTim(
final unit="s",
final quantity="Time")= 600
;
parameter Real samplePeriod(
final unit="s",
final quantity="Time") = 120 ;
parameter Integer numIgnReq = 2
;
parameter Real triAmo(
final unit="Pa",
final quantity="PressureDifference") = -12.0
;
parameter Real resAmo(
final unit="Pa",
final quantity="PressureDifference") = 15
;
parameter Real maxRes(
final unit="Pa",
final quantity="PressureDifference") = 32
;
parameter Buildings.Controls.OBC.CDL.Types.SimpleController
controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI ;
parameter Real k(
final unit="1")=0.1
;
parameter Real Ti(
final unit="s",
final quantity="Time",
min=0)=60
;
parameter Real Td(
final unit="s",
final quantity="Time",
final min=0) = 0.1
;
parameter Real yFanMax(min=0.1, max=1, unit="1") = 1
;
parameter Real yFanMin(min=0.1, max=1, unit="1") = 0.1
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput ducStaPre(
final unit="Pa",
quantity="PressureDifference")
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uZonPreResReq
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput ySupFan ;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySupFanSpe(
min=0,
max=1,
final unit="1") ;
Buildings.Controls.OBC.ASHRAE.G36_PR1.Generic.SetPoints.TrimAndRespond staPreSetRes(
final iniSet=iniSet,
final minSet=minSet,
final maxSet=maxSet,
final delTim=delTim,
final samplePeriod=samplePeriod,
final numIgnReq=numIgnReq,
final triAmo=triAmo,
final resAmo=resAmo,
final maxRes=maxRes) ;
Buildings.Controls.OBC.CDL.Continuous.LimPID conSpe(
final controllerType=controllerType,
final k=k,
final Ti=Ti,
final Td=Td,
final yMax=yFanMax,
final yMin=yFanMin,
reset=Buildings.Controls.OBC.CDL.Types.Reset.Parameter,
y_reset=yFanMin) ;
protected
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerSpe(k=0)
;
Buildings.Controls.OBC.CDL.Logical.Switch swi
;
Buildings.Controls.OBC.CDL.Logical.Or or1
;
Buildings.Controls.OBC.CDL.Logical.Or or2
if have_perZonRehBox
;
Buildings.Controls.OBC.CDL.Logical.Or3 or3
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant con(
k=false)
if not have_perZonRehBox
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(
k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.coolDown)
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt4(
k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.warmUp)
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1(
k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.setUp)
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt2(
k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied)
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt3(
k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.setBack)
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu1
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu2
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu3
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu4
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant gaiNor(
final k=maxSet)
;
Buildings.Controls.OBC.CDL.Continuous.Division norPSet
;
Buildings.Controls.OBC.CDL.Continuous.Division norPMea
;
Buildings.Controls.OBC.CDL.Discrete.FirstOrderHold firOrdHol(
final samplePeriod=samplePeriod)
;
equation
connect(or2.y, or1.u2);
connect(or1.y, ySupFan);
connect(or1.y, staPreSetRes.uDevSta);
connect(or1.y, swi.u2);
connect(conSpe.y, swi.u1);
connect(zerSpe.y, swi.u3);
connect(swi.y, ySupFanSpe);
connect(uZonPreResReq, staPreSetRes.numOfReq);
connect(con.y, or1.u2);
connect(intEqu.y, or3.u1);
connect(intEqu2.y, or3.u3);
connect(intEqu1.y, or3.u2);
connect(conInt.y, intEqu.u2);
connect(conInt1.y, intEqu1.u2);
connect(conInt2.y, intEqu2.u2);
connect(conInt3.y, intEqu3.u2);
connect(conInt4.y, intEqu4.u2);
connect(uOpeMod, intEqu.u1);
connect(uOpeMod, intEqu1.u1);
connect(uOpeMod, intEqu2.u1);
connect(uOpeMod, intEqu3.u1);
connect(uOpeMod, intEqu4.u1);
connect(or3.y, or1.u1);
connect(intEqu3.y, or2.u1);
connect(intEqu4.y, or2.u2);
connect(norPSet.y, conSpe.u_s);
connect(norPMea.y, conSpe.u_m);
connect(staPreSetRes.y, firOrdHol.u);
connect(conSpe.trigger, or1.y);
connect(gaiNor.y, norPSet.u2);
connect(ducStaPre, norPMea.u1);
connect(gaiNor.y, norPMea.u2);
connect(firOrdHol.y, norPSet.u1);
end SupplyFan;
Multizone VAV AHU coil valve positions
Information
Block that outputs the supply temperature control loop signal,
and the coil valve postions for VAV system with multiple zones,
implemented according to the ASHRAE Guideline G36, PART 5.N.2
(Supply air temperature control).
The supply air temperature control loop signal uTSup
is computed using a PI controller that tracks the supply air temperature
setpoint TSupSet
.
If the fan is off, then uTSup = 0
.
Heating valve control signal (or modulating electric heating
coil if applicable) yHea
and cooling valve control signal yCoo
are sequenced based on the supply air temperature control loop signal uTSup
.
From uTSup = uHeaMax
to uTSup = -1
,
yHea
increases linearly from 0 to 1.
Similarly, uTSup = uCooMin
to uTSup = +1
,
yCoo
increases linearly from 0 to 1.
The output uTSup
can be used in a controller for the economizer.
Parameters
Type | Name | Default | Description |
SimpleController | controllerType | Buildings.Controls.OBC.CDL.T... | Type of controller for supply air temperature signal |
Real | kTSup | 0.05 | Gain of controller for supply air temperature signal [1/K] |
Real | TiTSup | 600 | Time constant of integrator block for supply temperature control signal [s] |
Real | TdTSup | 0.1 | Time constant of derivative block for supply temperature control signal [s] |
Real | uHeaMax | -0.25 | Upper limit of controller signal when heating coil is off. Require -1 < uHeaMax < uCooMin < 1. [1] |
Real | uCooMin | 0.25 | Lower limit of controller signal when cooling coil is off. Require -1 < uHeaMax < uCooMin < 1. [1] |
Connectors
Type | Name | Description |
input RealInput | TSup | Measured supply air temperature [K] |
input RealInput | TSupSet | Setpoint for supply air temperature [K] |
input BooleanInput | uSupFan | Supply fan status |
output RealOutput | yHea | Control signal for heating [1] |
output RealOutput | yCoo | Control signal for cooling [1] |
output RealOutput | uTSup | Supply temperature control signal [1] |
Modelica definition
block SupplySignals
parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType=
Buildings.Controls.OBC.CDL.Types.SimpleController.PI
;
parameter Real kTSup(
final unit="1/K")=0.05
;
parameter Real TiTSup(
final unit="s",
final quantity="Time")=600
;
parameter Real TdTSup(
final unit="s",
final quantity="Time")=0.1
;
parameter Real uHeaMax(
final min=-0.9,
final unit="1")=-0.25
;
parameter Real uCooMin(
final max=0.9,
final unit="1")=0.25
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TSup(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TSupSet(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature")
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHea(
final min=0,
final max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yCoo(
final min=0,
final max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput uTSup(
final max=1,
final unit="1",
final min=-1)
;
protected
Buildings.Controls.OBC.CDL.Continuous.LimPID conTSup(
final controllerType=controllerType,
final k=kTSup,
final Ti=TiTSup,
final Td=TdTSup,
final yMax=1,
final yMin=-1,
final y_reset=0,
final reverseAction=true,
final reset=Buildings.Controls.OBC.CDL.Types.Reset.Parameter)
;
Buildings.Controls.OBC.CDL.Logical.Switch swi
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uHeaMaxCon(
final k=uHeaMax)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant negOne(
final k=-1)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uCooMinCon(
final k=uCooMin)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(
final k=0)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(
final k=1)
;
Buildings.Controls.OBC.CDL.Continuous.Line conSigCoo(
final limitBelow=true,
final limitAbove=false)
;
Buildings.Controls.OBC.CDL.Continuous.Line conSigHea(
final limitBelow=false,
final limitAbove=true)
;
equation
connect(zer.y,swi. u3);
connect(TSup,conTSup. u_m);
connect(negOne.y,conSigHea. x1);
connect(one.y,conSigHea. f1);
connect(swi.y,conSigHea. u);
connect(swi.y,conSigCoo. u);
connect(uHeaMaxCon.y,conSigHea. x2);
connect(zer.y,conSigHea. f2);
connect(uCooMinCon.y,conSigCoo. x1);
connect(zer.y,conSigCoo. f1);
connect(one.y,conSigCoo. x2);
connect(one.y,conSigCoo. f2);
connect(conSigHea.y,yHea);
connect(conSigCoo.y,yCoo);
connect(swi.y,uTSup);
connect(TSupSet, conTSup.u_s);
connect(uSupFan, swi.u2);
connect(conTSup.y, swi.u1);
connect(uSupFan, conTSup.trigger);
end SupplySignals;
Supply air temperature setpoint for multi zone system
Information
Block that outputs the supply air temperature setpoint and the coil valve control
inputs for VAV system with multiple zones, implemented according to the ASHRAE
Guideline G36, PART 5.N.2 (Supply air temperature control).
The control loop is enabled when the supply air fan uSupFan
is proven on,
and disabled and the output set to Deadband otherwise.
The supply air temperature setpoint is computed as follows.
Setpoints for TSupSetMin
, TSupSetMax
,
TSupSetDes
, TOutMin
, TOutMax
The default range of outdoor air temperature (TOutMin=16°C
,
TOutMax=21°C
) used to reset the occupied mode TSupSet
was chosen to maximize economizer hours. It may be preferable to use a lower
range of outdoor air temperature (e.g. TOutMin=13°C
,
TOutMax=18°C
) to minimize fan energy.
The TSupSetMin
variable is used during warm weather when little reheat
is expected to minimize fan energy. It should not be set too low or it may cause
excessive chilled water temperature reset requests which will reduce chiller
plant efficiency. It should be set no lower than the design coil leaving air
temperature.
The TSupSetMax
variable is typically 18 °C in mild and dry climate,
16 °C or lower in humid climates. It should not typically be greater than
18 °C since this may lead to excessive fan energy that can offset the mechanical
cooling savings from economizer operation.
During occupied mode (uOpeMod=1
)
The TSupSet
shall be reset from TSupSetMin
when the outdoor
air temperature is TOutMax
and above, proportionally up to
maximum supply temperature when the outdoor air temperature is TOutMin
and
below. The maximum supply temperature shall be reset using trim and respond logic between
TSupSetDes
and TSupSetMax
. Parameters suggested for the
trim and respond logic are shown in the table below. They require adjustment
during the commissioning and tuning phase.
Variable | Value | Definition |
Device | AHU Supply Fan | Associated device |
SP0 | iniSet | Initial setpoint |
SPmin | TSupSetDes | Minimum setpoint |
SPmax | TSupSetMax | Maximum setpoint |
Td | delTim | Delay timer |
T | samplePeriod | Time step |
I | numIgnReq | Number of ignored requests |
R | uZonTemResReq | Number of requests |
SPtrim | triAmo | Trim amount |
SPres | resAmo | Respond amount |
SPres_max | maxRes | Maximum response per time interval |
During Setup and Cool-down modes (uOpeMod=2
, uOpeMod=3
)
Supply air temperature setpoint TSupSet
shall be TSupSetMin
.
During Setback and Warmup modes (uOpeMod=4
, uOpeMod=5
)
Supply air temperature setpoint TSupSet
shall be TSupWarUpSetBac
.
Valves control
Supply air temperature shall be controlled to setpoint using a control loop whose
output is mapped to sequence the hot water valve or modulating electric heating
coil (if applicable) or chilled water valves.
Parameters
Type | Name | Default | Description |
Temperatures |
Real | TSupSetMin | 285.15 | Lowest cooling supply air temperature setpoint [K] |
Real | TSupSetMax | 291.15 | Highest cooling supply air temperature setpoint. It is typically 18 degC (65 degF)
in mild and dry climates, 16 degC (60 degF) or lower in humid climates [K] |
Real | TSupSetDes | 286.15 | Nominal supply air temperature setpoint [K] |
Real | TOutMin | 289.15 | Lower value of the outdoor air temperature reset range. Typically value is 16 degC (60 degF) [K] |
Real | TOutMax | 294.15 | Higher value of the outdoor air temperature reset range. Typically value is 21 degC (70 degF) [K] |
Real | TSupWarUpSetBac | 308.15 | Supply temperature in warm up and set back mode [K] |
Trim and respond logic |
Real | iniSet | maxSet | Initial setpoint [K] |
Real | maxSet | TSupSetMax | Maximum setpoint [K] |
Real | minSet | TSupSetDes | Minimum setpoint [K] |
Real | delTim | 600 | Delay timer [s] |
Real | samplePeriod | 120 | Sample period of component [s] |
Integer | numIgnReq | 2 | Number of ignorable requests for TrimResponse logic |
Real | triAmo | 0.1 | Trim amount [K] |
Real | resAmo | -0.2 | Response amount [K] |
Real | maxRes | -0.6 | Maximum response per time interval [K] |
Connectors
Type | Name | Description |
input RealInput | TOut | Outdoor air temperature [K] |
input RealInput | TZonSetAve | Average of heating and cooling setpoint [K] |
input BooleanInput | uSupFan | Supply fan status |
input IntegerInput | uOpeMod | System operation mode |
input IntegerInput | uZonTemResReq | Zone cooling supply air temperature reset request |
output RealOutput | TSupSet | Setpoint for supply air temperature [K] |
Modelica definition
block SupplyTemperature
parameter Real TSupSetMin(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature") = 285.15
;
parameter Real TSupSetMax(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature") = 291.15
;
parameter Real TSupSetDes(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature") = 286.15
;
parameter Real TOutMin(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature") = 289.15
;
parameter Real TOutMax(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature") = 294.15
;
parameter Real TSupWarUpSetBac(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature")=308.15
;
parameter Real iniSet(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature") = maxSet
;
parameter Real maxSet(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature") = TSupSetMax
;
parameter Real minSet(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature") = TSupSetDes
;
parameter Real delTim(
final unit="s",
final quantity="Time") = 600
;
parameter Real samplePeriod(
final unit="s",
final quantity="Time",
final min=1E-3) = 120
;
parameter Integer numIgnReq = 2
;
parameter Real triAmo(
final unit="K",
final displayUnit="K",
final quantity="TemperatureDifference") = 0.1
;
parameter Real resAmo(
final unit="K",
final displayUnit="K",
final quantity="TemperatureDifference") = -0.2
;
parameter Real maxRes(
final unit="K",
final displayUnit="K",
final quantity="TemperatureDifference") = -0.6
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TZonSetAve(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature")
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uZonTemResReq
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupSet(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature")
;
Buildings.Controls.OBC.ASHRAE.G36_PR1.Generic.SetPoints.TrimAndRespond maxSupTemRes(
final delTim=delTim,
final iniSet=iniSet,
final minSet=minSet,
final maxSet=maxSet,
final samplePeriod=samplePeriod,
final numIgnReq=numIgnReq,
final triAmo=triAmo,
final resAmo=resAmo,
final maxRes=maxRes) ;
protected
Buildings.Controls.OBC.CDL.Continuous.Line lin
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minOutTem(k=TOutMin)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxOutTem(k=TOutMax)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSupTem(k=TSupSetMin)
;
Buildings.Controls.OBC.CDL.Logical.And and2
;
Buildings.Controls.OBC.CDL.Logical.And and1
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant supTemWarUpSetBac(k=
TSupWarUpSetBac)
;
Buildings.Controls.OBC.CDL.Logical.Switch swi1
;
Buildings.Controls.OBC.CDL.Logical.Switch swi2
;
Buildings.Controls.OBC.CDL.Continuous.Limiter TDea(
uMax=297.15,
uMin=294.15)
;
Buildings.Controls.OBC.CDL.Logical.Switch swi3
;
Buildings.Controls.OBC.CDL.Integers.LessThreshold intLesThr(
threshold=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.warmUp)
;
Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr(
threshold=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied)
;
Buildings.Controls.OBC.CDL.Integers.LessThreshold intLesThr1(
threshold=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.unoccupied)
;
Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr1(
threshold=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.setUp)
;
equation
connect(minOutTem.y, lin.x1);
connect(TOut, lin.u);
connect(maxOutTem.y, lin.x2);
connect(minSupTem.y, lin.f2);
connect(and1.y, swi1.u2);
connect(supTemWarUpSetBac.y, swi1.u1);
connect(and2.y, swi2.u2);
connect(minSupTem.y, swi2.u1);
connect(swi2.y, swi1.u3);
connect(TZonSetAve, TDea.u);
connect(uSupFan, swi3.u2);
connect(swi1.y, swi3.u1);
connect(TDea.y, swi3.u3);
connect(intLesThr1.y, and1.u1);
connect(intGreThr1.y, and1.u2);
connect(intLesThr.y, and2.u1);
connect(intGreThr.y, and2.u2);
connect(uOpeMod, intLesThr.u);
connect(uOpeMod, intGreThr.u);
connect(uOpeMod, intLesThr1.u);
connect(uOpeMod, intGreThr1.u);
connect(lin.y, swi2.u3);
connect(uZonTemResReq, maxSupTemRes.numOfReq);
connect(uSupFan, maxSupTemRes.uDevSta);
connect(maxSupTemRes.y, lin.f1);
connect(swi3.y, TSupSet);
end SupplyTemperature;