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

Output setpoints for AHU control

Information

This package contains sequences generating setpoints for VAV AHU control.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.ExhaustDamper ExhaustDamper Control of actuated exhaust air dampers without fans
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.ReturnFanDirectPressure ReturnFanDirectPressure Return fan control with direct building pressure control
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplyFan SupplyFan Block to control multi zone VAV AHU supply fan
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplySignals SupplySignals Multizone VAV AHU coil valve positions
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplyTemperature SupplyTemperature Supply air temperature setpoint for multi zone system
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow OutdoorAirFlow Package of sequences for calculating minimum outdoor airflow rate
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.Validation Validation Collection of validation models

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

Control of actuated exhaust air dampers without fans

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

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)

  1. The exhaust damper is enabled when the associated supply fan is proven on uSupFan = true, and disabled otherwise.
  2. 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).
  3. When uSupFan = false, the damper is closed.

Parameters

TypeNameDefaultDescription
RealdpBuiSet12Building static pressure difference relative to ambient (positive to pressurize the building) [Pa]
Exhaust damper P-control parameter
Realk0.5Gain, applied to building pressure control error normalized with dpBuiSet [1]

Connectors

TypeNameDescription
input RealInputdpBuiBuilding static pressure difference, relative to ambient (positive if pressurized) [Pa]
input BooleanInputuSupFanSupply fan status
output RealOutputyExhDamPosExhaust damper control signal (0: closed, 1: open) [1]

Modelica definition

block ExhaustDamper "Control of actuated exhaust air dampers without fans" parameter Real dpBuiSet( final unit="Pa", final quantity="PressureDifference", max=30) = 12 "Building static pressure difference relative to ambient (positive to pressurize the building)"; parameter Real k(min=0, unit="1") = 0.5 "Gain, applied to building pressure control error normalized with dpBuiSet"; Buildings.Controls.OBC.CDL.Interfaces.RealInput dpBui( final unit="Pa", displayUnit="Pa") "Building static pressure difference, relative to ambient (positive if pressurized)"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan status"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yExhDamPos( final unit="1", min=0, max=1) "Exhaust damper control signal (0: closed, 1: open)"; Buildings.Controls.OBC.CDL.Continuous.MovingMean movMea( delta=300) "Average building static pressure measurement"; 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")) "Control error"; Buildings.Controls.OBC.CDL.Continuous.LimPID conP( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final k=k) "Building static pressure controller"; Buildings.Controls.OBC.CDL.Logical.Switch swi "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 dpBuiSetPoi1( final k=dpBuiSet) "Building pressure setpoint"; Buildings.Controls.OBC.CDL.Continuous.Gain gaiNor( final k=1/dpBuiSet) "Gain to normalize the control error"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1( final k=0) "Zero constant"; 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;

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.ReturnFanDirectPressure Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.ReturnFanDirectPressure

Return fan control with direct building pressure control

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.ReturnFanDirectPressure

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).

  1. Return fan operates whenever associated supply fan is proven on and is off otherwise.

  2. Return fan is controlled to maintain return fan discharge static pressure at setpoint dpBuiSet.

  3. 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.

  4. 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.

  5. 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:

  1. From 0 to 0.5, the building pressure control loop modulates the exhaust dampers from yExhDam = 0 (closed) to yExhDam = 1 (open).
  2. 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.

Image of return fan control for multi zone AHU

Parameters

TypeNameDefaultDescription
RealdpBuiSet12Building static pressure difference relative to ambient (positive to pressurize the building) [Pa]
RealdpDisMin2.4Minimum return fan discharge static pressure difference setpoint [Pa]
RealdpDisMax40Maximum return fan discharge static pressure setpoint [Pa]
Realk1Gain, normalized using dpBuiSet [1]

Connectors

TypeNameDescription
input RealInputdpBuiBuilding static pressure difference, relative to ambient (positive if pressurized) [Pa]
input BooleanInputuFanFan on/off signal, true if fan is on
output RealOutputdpDisSetReturn fan discharge static pressure setpoint [Pa]
output RealOutputyExhDamExhaust damper control signal (0: closed, 1: open) [1]

Modelica definition

block ReturnFanDirectPressure "Return fan control with direct building pressure control" parameter Real dpBuiSet( final unit="Pa", final quantity="PressureDifference", final max=30) = 12 "Building static pressure difference relative to ambient (positive to pressurize the building)"; parameter Real dpDisMin( final unit="Pa", final quantity="PressureDifference", final min=0, final max=1000) = 2.4 "Minimum return fan discharge static pressure difference setpoint"; parameter Real dpDisMax( final unit="Pa", final quantity="PressureDifference", final min=0, final max=1000) = 40 "Maximum return fan discharge static pressure setpoint"; parameter Real k(final unit="1") = 1 "Gain, normalized using dpBuiSet"; Buildings.Controls.OBC.CDL.Interfaces.RealInput dpBui( final unit="Pa", displayUnit="Pa") "Building static pressure difference, relative to ambient (positive if pressurized)"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uFan "Fan on/off signal, true if fan is on"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput dpDisSet( final unit="Pa", displayUnit="Pa", min=0) "Return fan discharge static pressure setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yExhDam( final unit="1", min=0, max=1) "Exhaust damper control signal (0: closed, 1: open)"; Buildings.Controls.OBC.CDL.Continuous.MovingMean movMea( delta=300) "Average building static pressure measurement"; Buildings.Controls.OBC.CDL.Continuous.LimPID conP( final controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.P, final k=k, reverseAction=true) "Building static pressure controller"; Buildings.Controls.OBC.CDL.Continuous.Line linExhAirDam "Exhaust air damper position"; Buildings.Controls.OBC.CDL.Continuous.Line linRetFanStaPre "Return fan static pressure setpoint"; Buildings.Controls.OBC.CDL.Logical.Switch swi1 "Exhaust air damper position"; Buildings.Controls.OBC.CDL.Logical.Switch swi "Return fan discharge static pressure setpoint"; Buildings.Controls.OBC.CDL.Continuous.Division div "Normalized the control error"; protected Buildings.Controls.OBC.CDL.Continuous.Sources.Constant dpBuiSetPoi( final k=dpBuiSet) "Building pressure setpoint"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retFanDisPreMin( final k=dpDisMin) "Return fan discharge static pressure minimum setpoint"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retFanDisPreMax( final k=dpDisMax) "Return fan discharge static pressure maximum setpoint"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(final k=0) "Zero fan control signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer1(final k=0) "Zero constant"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(final k=0.5) "Constant 0.5"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) "Constant one"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne(final k=1) "Constant one"; 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;

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplyFan Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplyFan

Block to control multi zone VAV AHU supply fan

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplyFan

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

Static pressure setpoint reset

Static pressure setpoint shall be reset using trim-respond logic using following parameters as a starting point:

Variable Value Definition
DeviceAHU Supply Fan Associated device
SP0iniSetInitial setpoint
SPminminSetMinimum setpoint
SPmaxmaxSetMaximum setpoint
TddelTimDelay timer
TsamplePeriodTime step
InumIgnReqNumber of ignored requests
RuZonPreResReqNumber of requests
SPtrimtriAmoTrim amount
SPresresAmoRespond amount
SPres_maxmaxResMaximum 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

TypeNameDefaultDescription
System configuration
Booleanhave_perZonRehBoxfalseCheck if there is any VAV-reheat boxes on perimeter zones
Booleanhave_duaDucBoxfalseCheck if the AHU serves dual duct boxes
Booleanhave_airFloMeaStafalseCheck if the AHU has AFMS (Airflow measurement station)
Trim and respond for pressure setpoint
RealiniSet120Initial setpoint [Pa]
RealminSet25Minimum setpoint [Pa]
RealmaxSet Maximum setpoint [Pa]
RealdelTim600Delay time after which trim and respond is activated [s]
RealsamplePeriod120Sample period [s]
IntegernumIgnReq2Number of ignored requests
RealtriAmo-12.0Trim amount [Pa]
RealresAmo15Respond amount (must be opposite in to triAmo) [Pa]
RealmaxRes32Maximum response per time interval (same sign as resAmo) [Pa]
Fan PID controller
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller
Realk0.1Gain of controller, normalized using maxSet [1]
RealTi60Time constant of integrator block [s]
RealTd0.1Time constant of derivative block [s]
RealyFanMax1Maximum allowed fan speed [1]
RealyFanMin0.1Lowest allowed fan speed if fan is on [1]

Connectors

TypeNameDescription
input IntegerInputuOpeModSystem operation mode
input RealInputducStaPreMeasured duct static pressure [Pa]
input IntegerInputuZonPreResReqZone static pressure reset requests
output BooleanOutputySupFanSupply fan on status
output RealOutputySupFanSpeSupply fan speed [1]

Modelica definition

block SupplyFan "Block to control multi zone VAV AHU supply fan" parameter Boolean have_perZonRehBox = false "Check if there is any VAV-reheat boxes on perimeter zones"; parameter Boolean have_duaDucBox = false "Check if the AHU serves dual duct boxes"; parameter Boolean have_airFloMeaSta = false "Check if the AHU has AFMS (Airflow measurement station)"; parameter Real iniSet( final unit="Pa", final quantity="PressureDifference") = 120 "Initial setpoint"; parameter Real minSet( final unit="Pa", final quantity="PressureDifference") = 25 "Minimum setpoint"; parameter Real maxSet( final unit="Pa", final quantity="PressureDifference") "Maximum setpoint"; parameter Real delTim( final unit="s", final quantity="Time")= 600 "Delay time after which trim and respond is activated"; parameter Real samplePeriod( final unit="s", final quantity="Time") = 120 "Sample period"; parameter Integer numIgnReq = 2 "Number of ignored requests"; parameter Real triAmo( final unit="Pa", final quantity="PressureDifference") = -12.0 "Trim amount"; parameter Real resAmo( final unit="Pa", final quantity="PressureDifference") = 15 "Respond amount (must be opposite in to triAmo)"; parameter Real maxRes( final unit="Pa", final quantity="PressureDifference") = 32 "Maximum response per time interval (same sign as resAmo)"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real k(final unit="1")=0.1 "Gain of controller, normalized using maxSet"; parameter Real Ti( final unit="s", final quantity="Time", min=0)=60 "Time constant of integrator block"; parameter Real Td( final unit="s", final quantity="Time", final min=0) = 0.1 "Time constant of derivative block"; parameter Real yFanMax(min=0.1, max=1, unit="1") = 1 "Maximum allowed fan speed"; parameter Real yFanMin(min=0.1, max=1, unit="1") = 0.1 "Lowest allowed fan speed if fan is on"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "System operation mode"; Buildings.Controls.OBC.CDL.Interfaces.RealInput ducStaPre( final unit="Pa", quantity="PressureDifference") "Measured duct static pressure"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uZonPreResReq "Zone static pressure reset requests"; Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput ySupFan "Supply fan on status"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySupFanSpe( min=0, max=1, final unit="1") "Supply fan speed"; 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) "Static pressure setpoint reset using trim and respond logic"; 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) "Supply fan speed control"; protected Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerSpe(k=0) "Zero fan speed when it becomes OFF"; Buildings.Controls.OBC.CDL.Logical.Switch swi "If fan is OFF, fan speed outputs to zero"; Buildings.Controls.OBC.CDL.Logical.Or or1 "Check whether supply fan should be ON"; Buildings.Controls.OBC.CDL.Logical.Or or2 if have_perZonRehBox "Setback or warmup mode"; Buildings.Controls.OBC.CDL.Logical.Or3 or3 "Cool-down or setup or occupied mode"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant con( k=false) if not have_perZonRehBox "Constant true"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.coolDown) "Cool down mode"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt4( k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.warmUp) "Warm-up mode"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1( k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.setUp) "Set up mode"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt2( k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "Occupied mode"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt3( k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.setBack) "Set back mode"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu "Check if current operation mode is cool-down mode"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 "Check if current operation mode is setup mode"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu2 "Check if current operation mode is occupied mode"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu3 "Check if current operation mode is setback mode"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu4 "Check if current operation mode is warmup mode"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant gaiNor( final k=maxSet) "Gain for normalization of controller input"; Buildings.Controls.OBC.CDL.Continuous.Division norPSet "Normalization for pressure set point"; Buildings.Controls.OBC.CDL.Continuous.Division norPMea "Normalization of pressure measurement"; Buildings.Controls.OBC.CDL.Discrete.FirstOrderHold firOrdHol( final samplePeriod=samplePeriod) "Extrapolation through the values of the last two sampled input signals"; 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;

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplySignals Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplySignals

Multizone VAV AHU coil valve positions

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplySignals

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

TypeNameDefaultDescription
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller for supply air temperature signal
RealkTSup0.05Gain of controller for supply air temperature signal [1/K]
RealTiTSup600Time constant of integrator block for supply temperature control signal [s]
RealTdTSup0.1Time constant of derivative block for supply temperature control signal [s]
RealuHeaMax-0.25Upper limit of controller signal when heating coil is off. Require -1 < uHeaMax < uCooMin < 1. [1]
RealuCooMin0.25Lower limit of controller signal when cooling coil is off. Require -1 < uHeaMax < uCooMin < 1. [1]

Connectors

TypeNameDescription
input RealInputTSupMeasured supply air temperature [K]
input RealInputTSupSetSetpoint for supply air temperature [K]
input BooleanInputuSupFanSupply fan status
output RealOutputyHeaControl signal for heating [1]
output RealOutputyCooControl signal for cooling [1]
output RealOutputuTSupSupply temperature control signal [1]

Modelica definition

block SupplySignals "Multizone VAV AHU coil valve positions" parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller for supply air temperature signal"; parameter Real kTSup(final unit="1/K")=0.05 "Gain of controller for supply air temperature signal"; parameter Real TiTSup( final unit="s", final quantity="Time")=600 "Time constant of integrator block for supply temperature control signal"; parameter Real TdTSup( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for supply temperature control signal"; parameter Real uHeaMax( final min=-0.9, final unit="1")=-0.25 "Upper limit of controller signal when heating coil is off. Require -1 < uHeaMax < uCooMin < 1."; parameter Real uCooMin( final max=0.9, final unit="1")=0.25 "Lower limit of controller signal when cooling coil is off. Require -1 < uHeaMax < uCooMin < 1."; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSup( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Measured supply air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSupSet( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Setpoint for supply air temperature"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan status"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHea( final min=0, final max=1, final unit="1") "Control signal for heating"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yCoo( final min=0, final max=1, final unit="1") "Control signal for cooling"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput uTSup( final max=1, final unit="1", final min=-1) "Supply temperature control signal"; 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) "Controller for supply air temperature control signal (to be used by heating coil, cooling coil and economizer)"; Buildings.Controls.OBC.CDL.Logical.Switch swi "Switch to select supply temperature control signal based on status of supply fan"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uHeaMaxCon( final k=uHeaMax) "Constant signal to map control action"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant negOne(final k=-1) "Negative unity signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uCooMinCon( final k=uCooMin) "Constant signal to map control action"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(final k=0) "Zero control signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(final k=1) "Unity signal"; Buildings.Controls.OBC.CDL.Continuous.Line conSigCoo( final limitBelow=true, final limitAbove=false) "Cooling control signal"; Buildings.Controls.OBC.CDL.Continuous.Line conSigHea( final limitBelow=false, final limitAbove=true) "Heating control signal"; 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;

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplyTemperature Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplyTemperature

Supply air temperature setpoint for multi zone system

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.VAV.SetPoints.SupplyTemperature

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
DeviceAHU Supply Fan Associated device
SP0iniSetInitial setpoint
SPminTSupSetDesMinimum setpoint
SPmaxTSupSetMaxMaximum setpoint
TddelTimDelay timer
TsamplePeriodTime step
InumIgnReqNumber of ignored requests
RuZonTemResReqNumber of requests
SPtrimtriAmoTrim amount
SPresresAmoRespond amount
SPres_maxmaxResMaximum response per time interval

Image of set point reset

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

TypeNameDefaultDescription
Temperatures
RealTSupSetMin285.15Lowest cooling supply air temperature setpoint [K]
RealTSupSetMax291.15Highest 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]
RealTSupSetDes286.15Nominal supply air temperature setpoint [K]
RealTOutMin289.15Lower value of the outdoor air temperature reset range. Typically value is 16 degC (60 degF) [K]
RealTOutMax294.15Higher value of the outdoor air temperature reset range. Typically value is 21 degC (70 degF) [K]
RealTSupWarUpSetBac308.15Supply temperature in warm up and set back mode [K]
Trim and respond logic
RealiniSetmaxSetInitial setpoint [K]
RealmaxSetTSupSetMaxMaximum setpoint [K]
RealminSetTSupSetDesMinimum setpoint [K]
RealdelTim600Delay timer [s]
RealsamplePeriod120Sample period of component [s]
IntegernumIgnReq2Number of ignorable requests for TrimResponse logic
RealtriAmo0.1Trim amount [K]
RealresAmo-0.2Response amount [K]
RealmaxRes-0.6Maximum response per time interval [K]

Connectors

TypeNameDescription
input RealInputTOutOutdoor air temperature [K]
input RealInputTZonSetAveAverage of heating and cooling setpoint [K]
input BooleanInputuSupFanSupply fan status
input IntegerInputuOpeModSystem operation mode
input IntegerInputuZonTemResReqZone cooling supply air temperature reset request
output RealOutputTSupSetSetpoint for supply air temperature [K]

Modelica definition

block SupplyTemperature "Supply air temperature setpoint for multi zone system" parameter Real TSupSetMin( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") = 285.15 "Lowest cooling supply air temperature setpoint"; parameter Real TSupSetMax( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") = 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"; parameter Real TSupSetDes( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") = 286.15 "Nominal supply air temperature setpoint"; parameter Real TOutMin( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") = 289.15 "Lower value of the outdoor air temperature reset range. Typically value is 16 degC (60 degF)"; parameter Real TOutMax( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") = 294.15 "Higher value of the outdoor air temperature reset range. Typically value is 21 degC (70 degF)"; parameter Real TSupWarUpSetBac( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature")=308.15 "Supply temperature in warm up and set back mode"; parameter Real iniSet( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") = maxSet "Initial setpoint"; parameter Real maxSet( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") = TSupSetMax "Maximum setpoint"; parameter Real minSet( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") = TSupSetDes "Minimum setpoint"; parameter Real delTim( final unit="s", final quantity="Time") = 600 "Delay timer"; parameter Real samplePeriod( final unit="s", final quantity="Time", final min=1E-3) = 120 "Sample period of component"; parameter Integer numIgnReq = 2 "Number of ignorable requests for TrimResponse logic"; parameter Real triAmo( final unit="K", final displayUnit="K", final quantity="TemperatureDifference") = 0.1 "Trim amount"; parameter Real resAmo( final unit="K", final displayUnit="K", final quantity="TemperatureDifference") = -0.2 "Response amount"; parameter Real maxRes( final unit="K", final displayUnit="K", final quantity="TemperatureDifference") = -0.6 "Maximum response per time interval"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Outdoor air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZonSetAve( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Average of heating and cooling setpoint"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan status"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "System operation mode"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uZonTemResReq "Zone cooling supply air temperature reset request"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupSet( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Setpoint for supply air temperature"; 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) "Maximum cooling supply temperature reset"; protected Buildings.Controls.OBC.CDL.Continuous.Line lin "Supply temperature distributes linearly between minimum and maximum supply air temperature, according to outdoor temperature"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minOutTem(k=TOutMin) "Lower value of the outdoor air temperature reset range"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxOutTem(k=TOutMax) "Higher value of the outdoor air temperature reset range"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSupTem(k=TSupSetMin) "Lowest cooling supply air temperature setpoint"; Buildings.Controls.OBC.CDL.Logical.And and2 "Check if it is in Setup or Cool-down mode"; Buildings.Controls.OBC.CDL.Logical.And and1 "Check if it is in Warmup or Setback mode"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant supTemWarUpSetBac(k= TSupWarUpSetBac) "Supply temperature setpoint under warm-up and setback mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi1 "If operation mode is setup or cool-down, setpoint shall be 35 degC"; Buildings.Controls.OBC.CDL.Logical.Switch swi2 "If operation mode is setup or cool-down, setpoint shall be TSupSetMin"; Buildings.Controls.OBC.CDL.Continuous.Limiter TDea( uMax=297.15, uMin=294.15) "Limiter that outputs the dead band value for the supply air temperature"; Buildings.Controls.OBC.CDL.Logical.Switch swi3 "Check output regarding supply fan status"; Buildings.Controls.OBC.CDL.Integers.LessThreshold intLesThr( threshold=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.warmUp) "Check if operation mode index is less than warm-up mode index (4)"; Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr( threshold=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "Check if operation mode index is greater than occupied mode index (1)"; Buildings.Controls.OBC.CDL.Integers.LessThreshold intLesThr1( threshold=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.unoccupied) "Check if operation mode index is less than unoccupied mode index (7)"; Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr1( threshold=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.setUp) "Check if operation mode index is greater than set up mode index (3)"; 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;