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

Sequences for multi zone AHU control

Information

This package contains control sequences from ASHRAE Guideline 36, Part 5.N for multi zone VAV air handling unit control.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Controller Controller Multizone AHU controller that composes subsequences for controlling fan speed, dampers, and supply air temperature
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers Economizers Economizer control of multi zone VAV AHU
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.SetPoints SetPoints Output setpoints for AHU control
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Controller Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Controller

Multizone AHU controller that composes subsequences for controlling fan speed, dampers, and supply air temperature

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Controller

Information

Block that is applied for multizone VAV AHU control. It outputs the supply fan status and the operation speed, outdoor and return air damper position, supply air temperature setpoint and the valve position of the cooling and heating coils. It is implemented according to the ASHRAE Guideline 36, PART5.N.

The sequence consists of five subsequences.

Supply fan speed control

The fan speed control is implemented according to PART5.N.1. It outputs the boolean signal ySupFan to turn on or off the supply fan. In addition, based on the pressure reset request uZonPreResReq from the VAV zones controller, the sequence resets the duct pressure setpoint, and uses this setpoint to modulate the fan speed ySupFanSpe using a PI controller. See Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.SetPoints.VAVSupplyFan for more detailed description.

Minimum outdoor airflow setting

According to current occupany nOcc, supply operation status ySupFan, zone temperatures TZon and the discharge air temperature TDis, the sequence computes the minimum outdoor airflow rate setpoint, which is used as input for the economizer control. More detailed information can be found in Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.SetPoints.OutsideAirFlow.

Economizer control

The block outputs outdoor and return air damper position, yOutDamPos and yRetDamPos. First, it computes the position limits to satisfy the minimum outdoor airflow requirement. Second, it determines the availability of the economizer based on the outdoor condition. The dampers are modulated to track the supply air temperature loop signal, which is calculated from the sequence below, subject to the minimum outdoor airflow requirement and economizer availability. Optionally, there is also an override for freeze protection. See Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Controller for more detailed description.

Supply air temperature setpoint

Based on PART5.N.2, the sequence first sets the maximum supply air temperature based on reset requests collected from each zone uZonTemResReq. The outdoor temperature TOut and operation mode uOpeMod are used along with the maximum supply air temperature, for computing the supply air temperature setpoint. See Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.SetPoints.VAVSupplyTemperature for more detailed description.

Coil valve control

The subsequence retrieves supply air temperature setpoint from previous sequence. Along with the measured supply air temperature and the supply fan status, it generates coil valve positions. See Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.SetPoints.VAVSupplySignals

Parameters

TypeNameDefaultDescription
TimesamplePeriod120Sample period of component, set to the same value to the trim and respond sequence [s]
System and building parameters
IntegernumZon Total number of served VAV boxes
AreaAFlo[numZon] Floor area of each zone [m2]
Booleanhave_occSenfalseSet to true if zones have occupancy sensor
Booleanhave_winSenfalseSet to true if zones have window status sensor
Booleanhave_perZonRehBoxtrueCheck 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)
Economizer PID controller
SimpleControllercontrollerTypeMinOutBuildings.Controls.OBC.CDL.T...Type of controller
RealkMinOut0.05Gain of controller for minimum outdoor air intake [1]
TimeTiMinOut1200Time constant of controller for minimum outdoor air intake [s]
TimeTdMinOut0.1Time constant of derivative block for minimum outdoor air intake [s]
Economizer freeze protection
Booleanuse_TMixtrueSet to true if mixed air temperature measurement is enabled
Booleanuse_G36FreProfalseSet to true to use G36 freeze protection
SimpleControllercontrollerTypeFreBuildings.Controls.OBC.CDL.T...Type of controller
RealkFre0.1Gain for mixed air temperature tracking for freeze protection, used if use_TMix=true [1/K]
TimeTiFre120Time constant of controller for mixed air temperature tracking for freeze protection. Require TiFre < TiMinOut [s]
TimeTdFre0.1Time constant of derivative block for freeze protection [s]
TemperatureTFreSet279.15Lower limit for mixed air temperature for freeze protection, used if use_TMix=true [K]
Fan speed PID controller
SimpleControllercontrollerTypeFanSpeBuildings.Controls.OBC.CDL.T...Type of controller
RealkFanSpe0.1Gain of fan fan speed controller, normalized using pMaxSet [1]
TimeTiFanSpe60Time constant of integrator block for fan speed [s]
TimeTdFanSpe0.1Time constant of derivative block for fan speed [s]
RealyFanMax1Maximum allowed fan speed
RealyFanMin0.1Lowest allowed fan speed if fan is on
Supply air temperature
SimpleControllercontrollerTypeTSupBuildings.Controls.OBC.CDL.T...Type of controller for supply air temperature signal
RealkTSup0.05Gain of controller for supply air temperature signal [1/K]
TimeTiTSup600Time constant of integrator block for supply air temperature control signal [s]
TimeTdTSup0.1Time constant of integrator block for supply air temperature control signal [s]
RealuHeaMax-0.25Upper limit of controller signal when heating coil is off. Require -1 < uHeaMax < uCooMin < 1.
RealuCooMin0.25Lower limit of controller signal when cooling coil is off. Require -1 < uHeaMax < uCooMin < 1.
Economizer
Booleanuse_enthalpyfalseSet to true if enthalpy measurement is used in addition to temperature measurement
Timedelta5Time horizon over which the outdoor air flow measurment is averaged [s]
TemperatureDifferencedelTOutHis1Delta between the temperature hysteresis high and low limit [K]
SpecificEnergydelEntHis1000Delta between the enthalpy hysteresis high and low limits [J/kg]
Damper limits
RealretDamPhyPosMax1Physically fixed maximum position of the return air damper [1]
RealretDamPhyPosMin0Physically fixed minimum position of the return air damper [1]
RealoutDamPhyPosMax1Physically fixed maximum position of the outdoor air damper [1]
RealoutDamPhyPosMin0Physically fixed minimum position of the outdoor air damper [1]
RealyMinDamLim0Lower limit of damper position limits control signal output
RealyMaxDamLim1Upper limit of damper position limits control signal output
Economizer delays at disable
TimeretDamFulOpeTim180Time period to keep RA damper fully open before releasing it for minimum outdoor airflow control at disable to avoid pressure fluctuations [s]
TimedisDel15Short time delay before closing the OA damper at disable to avoid pressure fluctuations [s]
Fan speed
Trim and respond for reseting duct static pressure setpoint
PressureDifferencepIniSet60Initial pressure setpoint for fan speed control [Pa]
PressureDifferencepMinSet25Minimum pressure setpoint for fan speed control [Pa]
PressureDifferencepMaxSet400Maximum pressure setpoint for fan speed control [Pa]
TimepDelTim600Delay time after which trim and respond is activated [s]
IntegerpNumIgnReq2Number of ignored requests for fan speed control
PressureDifferencepTriAmo-12.0Trim amount for fan speed control [Pa]
PressureDifferencepResAmo15Respond amount (must be opposite in to triAmo) for fan speed control [Pa]
PressureDifferencepMaxRes32Maximum response per time interval (same sign as resAmo) for fan speed control [Pa]
Minimum outdoor airflow rate
RealzonDisEffHea[numZon]fill(0.8, outAirSetPoi.numZon)Zone air distribution effectiveness during heating
RealzonDisEffCoo[numZon]fill(1.0, outAirSetPoi.numZon)Zone air distribution effectiveness during cooling
Nominal conditions
RealoccDen[numZon]fill(0.05, outAirSetPoi.numZ...Default number of person in unit area [1/m2]
RealoutAirPerAre[numZon]fill(3e-4, outAirSetPoi.numZ...Outdoor air rate per unit area [m3/(s.m2)]
VolumeFlowRateoutAirPerPer[numZon]fill(2.5e-3, outAirSetPoi.nu...Outdoor air rate per person [m3/s]
VolumeFlowRateminZonPriFlo[numZon] Minimum expected zone primary flow rate [m3/s]
VolumeFlowRatemaxSysPriFlo Maximum expected system primary airflow at design stage [m3/s]
RealdesZonDisEff[numZon]fill(1.0, outAirSetPoi.numZon)Design zone air distribution effectiveness
RealdesZonPop[numZon]{outAirSetPoi.occDen[i]*outA...Design zone population during peak occupancy
RealpeaSysPop1.2*sum({outAirSetPoi.occDen...Peak system population
Supply air temperature
Temperature limits
TemperatureTSupMin285.15Lowest cooling supply air temperature setpoint [K]
TemperatureTSupMax291.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]
TemperatureTSupDes286.15Nominal supply air temperature setpoint [K]
TemperatureTOutMin289.15Lower value of the outdoor air temperature reset range. Typically value is 16 degC (60 degF) [K]
TemperatureTOutMax294.15Higher value of the outdoor air temperature reset range. Typically value is 21 degC (70 degF) [K]
Trim and respond for reseting TSup setpoint
TemperatureiniSetSupTemsupTemSetPoi.maxSetInitial setpoint for supply temperature control [K]
TemperaturemaxSetSupTemsupTemSetPoi.TSupMaxMaximum setpoint for supply temperature control [K]
TemperatureminSetSupTemsupTemSetPoi.TSupDesMinimum setpoint for supply temperature control [K]
TimedelTimSupTem600Delay timer for supply temperature control [s]
IntegernumIgnReqSupTem2Number of ignorable requests for supply temperature control
TemperatureDifferencetriAmoSupTem0.1Trim amount for supply temperature control [K]
TemperatureDifferenceresAmoSupTem-0.2Response amount for supply temperature control [K]
TemperatureDifferencemaxResSupTem-0.6Maximum response per time interval for supply temperature control [K]

Connectors

TypeNameDescription
input RealInputVBox_flow[numZon]Primary airflow rate to the ventilation zone from the air handler, including outdoor air and recirculated air [m3/s]
input RealInputTMixMeasured mixed air temperature, used for freeze protection if use_TMix=true [K]
input RealInputducStaPreMeasured duct static pressure [Pa]
input RealInputTOutOutdoor air temperature [K]
input RealInputTOutCutOA temperature high limit cutoff. For differential dry bulb temeprature condition use return air temperature measurement [K]
input RealInputhOutOutdoor air enthalpy [J/kg]
input RealInputhOutCutOA enthalpy high limit cutoff. For differential enthalpy use return air enthalpy measurement [J/kg]
input RealInputTSupMeasured supply air temperature [K]
input RealInputTHeaSetZone air temperature heating setpoint [K]
input RealInputVOut_flowMeasured outdoor volumetric airflow rate [m3/s]
input RealInputnOcc[numZon]Number of occupants
input RealInputTZon[numZon]Measured zone air temperature [K]
input RealInputTDis[numZon]Discharge air temperature [K]
input RealInputTCooSetZone air temperature cooling setpoint [K]
input IntegerInputuZonTemResReqZone cooling supply air temperature reset request
input IntegerInputuZonPreResReqZone static pressure reset requests
input IntegerInputuOpeModAHU operation mode status signal
input BooleanInputuWin[numZon]Window status, true if open, false if closed
input IntegerInputuFreProStaFreeze protection status, used if use_G36FrePro=true
output RealOutputTSetSupSetpoint for supply air temperature [K]
output RealOutputyHeaControl signal for heating [1]
output RealOutputyCooControl signal for cooling [1]
output RealOutputySupFanSpeSupply fan speed [1]
output RealOutputyRetDamPosReturn air damper position [1]
output RealOutputyOutDamPosOutdoor air damper position [1]
output BooleanOutputySupFanSupply fan status, true if fan should be on

Modelica definition

block Controller "Multizone AHU controller that composes subsequences for controlling fan speed, dampers, and supply air temperature" parameter Modelica.SIunits.Time samplePeriod=120 "Sample period of component, set to the same value to the trim and respond sequence"; parameter Integer numZon(min=2) "Total number of served VAV boxes"; parameter Modelica.SIunits.Area AFlo[numZon] "Floor area of each zone"; parameter Boolean have_occSen=false "Set to true if zones have occupancy sensor"; parameter Boolean have_winSen=false "Set to true if zones have window status sensor"; parameter Boolean have_perZonRehBox=true "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)"; // ----------- Parameters for economizer control ----------- parameter Boolean use_enthalpy=false "Set to true if enthalpy measurement is used in addition to temperature measurement"; parameter Modelica.SIunits.Time delta=5 "Time horizon over which the outdoor air flow measurment is averaged"; parameter Modelica.SIunits.TemperatureDifference delTOutHis=1 "Delta between the temperature hysteresis high and low limit"; parameter Modelica.SIunits.SpecificEnergy delEntHis=1000 "Delta between the enthalpy hysteresis high and low limits"; parameter Real retDamPhyPosMax( final min=0, final max=1, final unit="1") = 1 "Physically fixed maximum position of the return air damper"; parameter Real retDamPhyPosMin( final min=0, final max=1, final unit="1") = 0 "Physically fixed minimum position of the return air damper"; parameter Real outDamPhyPosMax( final min=0, final max=1, final unit="1") = 1 "Physically fixed maximum position of the outdoor air damper"; parameter Real outDamPhyPosMin( final min=0, final max=1, final unit="1") = 0 "Physically fixed minimum position of the outdoor air damper"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeMinOut= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kMinOut(final unit="1")=0.05 "Gain of controller for minimum outdoor air intake"; parameter Modelica.SIunits.Time TiMinOut=1200 "Time constant of controller for minimum outdoor air intake"; parameter Modelica.SIunits.Time TdMinOut=0.1 "Time constant of derivative block for minimum outdoor air intake"; parameter Boolean use_TMix=true "Set to true if mixed air temperature measurement is enabled"; parameter Boolean use_G36FrePro=false "Set to true to use G36 freeze protection"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeFre= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kFre(final unit="1/K") = 0.1 "Gain for mixed air temperature tracking for freeze protection, used if use_TMix=true"; parameter Modelica.SIunits.Time TiFre(max=TiMinOut)=120 "Time constant of controller for mixed air temperature tracking for freeze protection. Require TiFre < TiMinOut"; parameter Modelica.SIunits.Time TdFre=0.1 "Time constant of derivative block for freeze protection"; parameter Modelica.SIunits.Temperature TFreSet = 279.15 "Lower limit for mixed air temperature for freeze protection, used if use_TMix=true"; parameter Real yMinDamLim=0 "Lower limit of damper position limits control signal output"; parameter Real yMaxDamLim=1 "Upper limit of damper position limits control signal output"; parameter Modelica.SIunits.Time retDamFulOpeTim=180 "Time period to keep RA damper fully open before releasing it for minimum outdoor airflow control at disable to avoid pressure fluctuations"; parameter Modelica.SIunits.Time disDel=15 "Short time delay before closing the OA damper at disable to avoid pressure fluctuations"; // ----------- parameters for fan speed control ----------- parameter Modelica.SIunits.PressureDifference pIniSet(displayUnit="Pa")=60 "Initial pressure setpoint for fan speed control"; parameter Modelica.SIunits.PressureDifference pMinSet(displayUnit="Pa")=25 "Minimum pressure setpoint for fan speed control"; parameter Modelica.SIunits.PressureDifference pMaxSet(displayUnit="Pa")=400 "Maximum pressure setpoint for fan speed control"; parameter Modelica.SIunits.Time pDelTim=600 "Delay time after which trim and respond is activated"; parameter Integer pNumIgnReq=2 "Number of ignored requests for fan speed control"; parameter Modelica.SIunits.PressureDifference pTriAmo(displayUnit="Pa")=-12.0 "Trim amount for fan speed control"; parameter Modelica.SIunits.PressureDifference pResAmo(displayUnit="Pa")=15 "Respond amount (must be opposite in to triAmo) for fan speed control"; parameter Modelica.SIunits.PressureDifference pMaxRes(displayUnit="Pa")=32 "Maximum response per time interval (same sign as resAmo) for fan speed control"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeFanSpe=Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kFanSpe(final unit="1")=0.1 "Gain of fan fan speed controller, normalized using pMaxSet"; parameter Modelica.SIunits.Time TiFanSpe=60 "Time constant of integrator block for fan speed"; parameter Modelica.SIunits.Time TdFanSpe=0.1 "Time constant of derivative block for fan speed"; parameter Real yFanMax=1 "Maximum allowed fan speed"; parameter Real yFanMin=0.1 "Lowest allowed fan speed if fan is on"; // ----------- parameters for minimum outdoor airflow setting ----------- parameter Real zonDisEffHea[numZon]= fill(0.8, outAirSetPoi.numZon) "Zone air distribution effectiveness during heating"; parameter Real zonDisEffCoo[numZon]= fill(1.0, outAirSetPoi.numZon) "Zone air distribution effectiveness during cooling"; parameter Real occDen[numZon](each final unit="1/m2")= fill(0.05, outAirSetPoi.numZon) "Default number of person in unit area"; parameter Real outAirPerAre[numZon](each final unit = "m3/(s.m2)")= fill(3e-4, outAirSetPoi.numZon) "Outdoor air rate per unit area"; parameter Modelica.SIunits.VolumeFlowRate outAirPerPer[numZon]= fill(2.5e-3, outAirSetPoi.numZon) "Outdoor air rate per person"; parameter Modelica.SIunits.VolumeFlowRate minZonPriFlo[numZon] "Minimum expected zone primary flow rate"; parameter Modelica.SIunits.VolumeFlowRate maxSysPriFlo "Maximum expected system primary airflow at design stage"; parameter Real desZonDisEff[numZon]=fill(1.0, outAirSetPoi.numZon) "Design zone air distribution effectiveness"; parameter Real desZonPop[numZon]={ outAirSetPoi.occDen[i]*outAirSetPoi.AFlo[i] for i in 1:outAirSetPoi.numZon} "Design zone population during peak occupancy"; parameter Real peaSysPop=1.2*sum( {outAirSetPoi.occDen[iZon]*outAirSetPoi.AFlo[iZon] for iZon in 1:outAirSetPoi.numZon}) "Peak system population"; // parameter 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" // annotation (Evaluate=true, // Dialog(tab="Minimum outdoor airflow rate", group="Advanced")); // parameter 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" // annotation (Evaluate=true, // Dialog(tab="Minimum outdoor airflow rate", group="Advanced")); // ----------- parameters for supply air temperature control ----------- parameter Modelica.SIunits.Temperature TSupMin=285.15 "Lowest cooling supply air temperature setpoint"; parameter Modelica.SIunits.Temperature TSupMax=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 Modelica.SIunits.Temperature TSupDes=286.15 "Nominal supply air temperature setpoint"; parameter Modelica.SIunits.Temperature TOutMin=289.15 "Lower value of the outdoor air temperature reset range. Typically value is 16 degC (60 degF)"; parameter Modelica.SIunits.Temperature TOutMax=294.15 "Higher value of the outdoor air temperature reset range. Typically value is 21 degC (70 degF)"; parameter Modelica.SIunits.Temperature iniSetSupTem=supTemSetPoi.maxSet "Initial setpoint for supply temperature control"; parameter Modelica.SIunits.Temperature maxSetSupTem=supTemSetPoi.TSupMax "Maximum setpoint for supply temperature control"; parameter Modelica.SIunits.Temperature minSetSupTem=supTemSetPoi.TSupDes "Minimum setpoint for supply temperature control"; parameter Modelica.SIunits.Time delTimSupTem=600 "Delay timer for supply temperature control"; parameter Integer numIgnReqSupTem=2 "Number of ignorable requests for supply temperature control"; parameter Modelica.SIunits.TemperatureDifference triAmoSupTem=0.1 "Trim amount for supply temperature control"; parameter Modelica.SIunits.TemperatureDifference resAmoSupTem=-0.2 "Response amount for supply temperature control"; parameter Modelica.SIunits.TemperatureDifference maxResSupTem=-0.6 "Maximum response per time interval for supply temperature control"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeTSup= 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 Modelica.SIunits.Time TiTSup=600 "Time constant of integrator block for supply air temperature control signal"; parameter Modelica.SIunits.Time TdTSup=0.1 "Time constant of integrator block for supply air temperature control signal"; parameter Real uHeaMax(min=-0.9)=-0.25 "Upper limit of controller signal when heating coil is off. Require -1 < uHeaMax < uCooMin < 1."; parameter Real uCooMin(max=0.9)=0.25 "Lower limit of controller signal when cooling coil is off. Require -1 < uHeaMax < uCooMin < 1."; Buildings.Controls.OBC.CDL.Interfaces.RealInput VBox_flow[numZon]( each final unit="m3/s", each quantity="VolumeFlowRate", min=0) "Primary airflow rate to the ventilation zone from the air handler, including outdoor air and recirculated air"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TMix( final unit="K", final quantity = "ThermodynamicTemperature") if use_TMix "Measured mixed air temperature, used for freeze protection if use_TMix=true"; Buildings.Controls.OBC.CDL.Interfaces.RealInput ducStaPre( final unit="Pa", displayUnit="Pa") "Measured duct static pressure"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut( final unit="K", final quantity="ThermodynamicTemperature") "Outdoor air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TOutCut( final unit="K", final quantity="ThermodynamicTemperature") "OA temperature high limit cutoff. For differential dry bulb temeprature condition use return air temperature measurement"; Buildings.Controls.OBC.CDL.Interfaces.RealInput hOut( final unit="J/kg", final quantity="SpecificEnergy") if use_enthalpy "Outdoor air enthalpy"; Buildings.Controls.OBC.CDL.Interfaces.RealInput hOutCut( final unit="J/kg", final quantity="SpecificEnergy") if use_enthalpy "OA enthalpy high limit cutoff. For differential enthalpy use return air enthalpy measurement"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSup( final unit="K", final quantity="ThermodynamicTemperature") "Measured supply air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaSet( final unit="K", final quantity="ThermodynamicTemperature") "Zone air temperature heating setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VOut_flow( final unit="m3/s", final quantity="VolumeFlowRate") "Measured outdoor volumetric airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput nOcc[numZon] if have_occSen "Number of occupants"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon[numZon]( each final unit="K", each final quantity="ThermodynamicTemperature") "Measured zone air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TDis[numZon]( each final unit="K", each final quantity="ThermodynamicTemperature") "Discharge air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TCooSet( final unit="K", final quantity="ThermodynamicTemperature") "Zone air temperature cooling setpoint"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uZonTemResReq "Zone cooling supply air temperature reset request"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uZonPreResReq "Zone static pressure reset requests"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "AHU operation mode status signal"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWin[numZon] if have_winSen "Window status, true if open, false if closed"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uFreProSta if use_G36FrePro "Freeze protection status, used if use_G36FrePro=true"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSetSup( final unit="K", final quantity="ThermodynamicTemperature") "Setpoint for supply air temperature"; 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 ySupFanSpe( final min=0, final max=1, final unit="1") "Supply fan speed"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDamPos( final min=0, final max=1, final unit="1") "Return air damper position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDamPos( final min=0, final max=1, final unit="1") "Outdoor air damper position"; Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput ySupFan "Supply fan status, true if fan should be on"; Buildings.Controls.OBC.CDL.Continuous.Average TZonSetPoiAve "Average of all zone set points"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.SetPoints.OutsideAirFlow outAirSetPoi( final AFlo=AFlo, final maxSysPriFlo=maxSysPriFlo, final minZonPriFlo=minZonPriFlo, final numZon=numZon, final have_occSen=have_occSen, final outAirPerAre=outAirPerAre, final outAirPerPer=outAirPerPer, final occDen=occDen, final zonDisEffHea=zonDisEffHea, final zonDisEffCoo=zonDisEffCoo, final desZonDisEff=desZonDisEff, final desZonPop=desZonPop, final peaSysPop=peaSysPop, final have_winSen=have_winSen) "Controller for minimum outdoor airflow rate"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.SetPoints.VAVSupplyFan supFan( final numZon=numZon, final samplePeriod=samplePeriod, final have_perZonRehBox=have_perZonRehBox, final have_duaDucBox=have_duaDucBox, final have_airFloMeaSta=have_airFloMeaSta, final iniSet=pIniSet, final minSet=pMinSet, final maxSet=pMaxSet, final delTim=pDelTim, final numIgnReq=pNumIgnReq, final triAmo=pTriAmo, final resAmo=pResAmo, final maxRes=pMaxRes, final controllerType=controllerTypeFanSpe, final k=kFanSpe, final Ti=TiFanSpe, final Td=TdFanSpe, final yFanMax=yFanMax, final yFanMin=yFanMin) "Supply fan controller"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.SetPoints.VAVSupplyTemperature supTemSetPoi( final samplePeriod=samplePeriod, final TSupMin=TSupMin, final TSupMax=TSupMax, final TSupDes=TSupDes, final TOutMin=TOutMin, final TOutMax=TOutMax, final iniSet=iniSetSupTem, final maxSet=maxSetSupTem, final minSet=minSetSupTem, final delTim=delTimSupTem, final numIgnReq=numIgnReqSupTem, final triAmo=triAmoSupTem, final resAmo=resAmoSupTem, final maxRes=maxResSupTem) "Setpoint for supply temperature"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.Economizers.Controller eco( final use_enthalpy=use_enthalpy, final delTOutHis=delTOutHis, final delEntHis=delEntHis, final retDamFulOpeTim=retDamFulOpeTim, final disDel=disDel, final controllerTypeMinOut=controllerTypeMinOut, final kMinOut=kMinOut, final TiMinOut=TiMinOut, final TdMinOut=TdMinOut, final retDamPhyPosMax=retDamPhyPosMax, final retDamPhyPosMin=retDamPhyPosMin, final outDamPhyPosMax=outDamPhyPosMax, final outDamPhyPosMin=outDamPhyPosMin, final uHeaMax=uHeaMax, final uCooMin=uCooMin, final uOutDamMax=(uHeaMax + uCooMin)/2, final uRetDamMin=(uHeaMax + uCooMin)/2, final TFreSet=TFreSet, final controllerTypeFre=controllerTypeFre, final kFre=kFre, final TiFre=TiFre, final TdFre=TdFre, final delta=delta, final use_TMix=use_TMix, final use_G36FrePro=use_G36FrePro) "Economizer controller"; Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.MultiZone.SetPoints.VAVSupplySignals val( final controllerType=controllerTypeTSup, final kTSup=kTSup, final TiTSup=TiTSup, final TdTSup=TdTSup, final uHeaMax=uHeaMax, final uCooMin=uCooMin) "AHU coil valve control"; protected Buildings.Controls.OBC.CDL.Continuous.Division VOut_flow_normalized( u1(final unit="m3/s"), u2(final unit="m3/s"), y(final unit="1")) "Normalization of outdoor air flow intake by design minimum outdoor air intake"; equation connect(eco.yRetDamPos, yRetDamPos); connect(eco.yOutDamPos, yOutDamPos); connect(eco.uSupFan, supFan.ySupFan); connect(supFan.ySupFanSpe, ySupFanSpe); connect(TOut, eco.TOut); connect(eco.TOutCut, TOutCut); connect(eco.hOut, hOut); connect(eco.hOutCut, hOutCut); connect(eco.uOpeMod, uOpeMod); connect(supTemSetPoi.TSetSup, TSetSup); connect(supTemSetPoi.TOut, TOut); connect(supTemSetPoi.uSupFan, supFan.ySupFan); connect(supTemSetPoi.uZonTemResReq, uZonTemResReq); connect(supTemSetPoi.uOpeMod, uOpeMod); connect(supFan.uOpeMod, uOpeMod); connect(supFan.uZonPreResReq, uZonPreResReq); connect(supFan.ducStaPre, ducStaPre); connect(eco.VOutMinSet_flow_normalized, outAirSetPoi.VOutMinSet_flow); connect(outAirSetPoi.nOcc, nOcc); connect(outAirSetPoi.TZon, TZon); connect(outAirSetPoi.TDis, TDis); connect(supFan.ySupFan, outAirSetPoi.uSupFan); connect(supTemSetPoi.TSetZones, TZonSetPoiAve.y); connect(outAirSetPoi.VBox_flow, VBox_flow); connect(supFan.VBox_flow, VBox_flow); connect(supFan.ySupFan, ySupFan); connect(outAirSetPoi.uOpeMod, uOpeMod); connect(TZonSetPoiAve.u2, TCooSet); connect(eco.TMix, TMix); connect(TSup, val.TSup); connect(supFan.ySupFan, val.uSupFan); connect(val.uTSup, eco.uTSup); connect(val.yHea, yHea); connect(val.yCoo, yCoo); connect(outAirSetPoi.uWin, uWin); connect(supTemSetPoi.TSetSup, val.TSetSup); connect(THeaSet, TZonSetPoiAve.u1); connect(eco.uFreProSta, uFreProSta); connect(eco.VOut_flow_normalized, VOut_flow_normalized.y); connect(outAirSetPoi.VDesOutMin_flow_nominal, VOut_flow_normalized.u2); connect(VOut_flow_normalized.u1, VOut_flow); end Controller;