Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF

Sequences for parallel fan-powered terminal unit with variable-volume fan

Information

This package contains sequences for parallel fan-powered terminal unit with variable volume fan. They are created according to Section 5.8 of ASHRAE Guideline 36, May 2020.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Controller Controller Controller for variable-volume parallel fan-powered terminal unit
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences Subsequences Package of subsequences for variable-volume parallel fan-powered terminal unit
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Controller Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Controller

Controller for variable-volume parallel fan-powered terminal unit

Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Controller

Information

Controller for variable-volume parallel fan-powered terminal unit according to Section 5.8 of ASHRAE Guideline 36, May 2020. It outputs discharge airflow setpoint VSet_flow_Set, damper position setpoint yDam, hot water valve position setpoint yVal, terminal fan command on status y1Fan and the airflow setpoint VFan_flow_Set, AHU cooling supply temperature setpoint reset request yZonTemResReq, and static pressure setpoint reset request yZonPreResReq, hot water reset request yHeaValResReq and yHotWatPlaReq. It also outputs the alarms about the low airflow yLowFloAla, low discharge temperature yLowTemAla, leaking damper yLeaDamAla and valve yLeaValAla, airflow sensor calibration alarm yFloSenAla and the terminal fan status alarm yFanStaAla.

The sequence consists of six subsequences.

a. Heating and cooling control loop

The subsequence is implementd according to Section 5.3.4. The measured zone temperature TZon, zone setpoints temperatures THeaSet and TCooSet are inputs to the instance of class Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ZoneStates to generate the heating and cooling control loop signal.

b. Active airflow setpoint calculation

This sequence sets the active cooling maximum and minimum airflow according to Section 5.8.4. Depending on operation modes uOpeMod, it sets the airflow rate limits. See Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.ActiveAirFlow.

c. Damper and valve control

This sequence sets the damper and valve position setpoints for the terminal unit. It also sets the command on status of the terminal fan and the airflow setpoint. The implementation is according to Section 5.8.5. According to heating and cooling control loop signal, it calculates the discharge air temperature setpoint TDisSet. Along with the active cooling maximum and minimum airflow setpoint, measured zone temperature, the sequence outputs yDam, yVal, TDisSet and discharge airflow rate setpoint VDis_flow_Set. See Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.DamperValves.

d. System reset requests generation

According to Section 5.8.8, this sequence outputs the system reset requests, i.e. cooling supply air temperature reset requests yZonTemResReq, static pressure reset requests yZonPreResReq, hot water reset requests yHeaValResReq, and the hot water plant reset requests yHotWatPlaReq. See Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.SystemRequests.

e. Alarms

According to Section 5.8.6, this sequence outputs the alarms of low discharge flow, low discharge temperature, fan status alarm, leaking damper, leaking valve, and airflow sensor calibration alarm. See Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.Alarms.

f. Testing and commissioning overrides

According to Section 5.8.7, this sequence allows the override the aiflow setpoints, damper and valve position setpoints, terminal fan command. See Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.Overrides.

Parameters

TypeNameDefaultDescription
VentilationStandardvenStdBuildings.Controls.OBC.ASHRA...Ventilation standard, ASHRAE 62.1 or Title 24
Booleanhave_winSentrueTrue: the zone has window sensor
Booleanhave_occSentrueTrue: the zone has occupancy sensor
Booleanhave_CO2SentrueTrue: the zone has CO2 sensor
Booleanhave_hotWatCoitrueTrue: the unit has the hot water coil
Booleanpermit_occStandbytrueTrue: occupied-standby mode is permitted
RealVOccMin_flow Zone minimum outdoor airflow for occupants [m3/s]
RealVAreMin_flow Zone minimum outdoor airflow for building area [m3/s]
Design conditions
RealVAreBreZon_flow Design area component of the breathing zone outdoor airflow [m3/s]
RealVPopBreZon_flow Design population component of the breathing zone outdoor airflow [m3/s]
RealVMin_flow Design zone minimum airflow setpoint [m3/s]
RealVCooMax_flow Design zone cooling maximum airflow rate [m3/s]
Control loops
Cooling
RealkCooCon0.1Gain of controller for cooling control loop
RealTiCooCon900Time constant of integrator block for cooling control loop [s]
Heating
RealkHeaCon0.1Gain of controller for heating control loop
RealTiHeaCon900Time constant of integrator block for heating control loop [s]
Damper and valve control
RealdTDisZonSetMax11Zone maximum discharge air temperature above heating setpoint [K]
RealminRat Lowest parallel fan rate when it receives the lowest signal from BAS [m3/s]
RealmaxRat Maximum heating-fan airflow setpoint [m3/s]
Valve
SimpleControllercontrollerTypeValBuildings.Controls.OBC.CDL.T...Type of controller
RealkVal0.5Gain of controller for valve control
RealTiVal300Time constant of integrator block for valve control [s]
RealTdVal0.1Time constant of derivative block for valve control [s]
Damper
Booleanhave_preIndDamfalseTrue: the VAV damper is pressure independent (with built-in flow controller)
SimpleControllercontrollerTypeDamBuildings.Controls.OBC.CDL.T...Type of controller
RealkDam0.5Gain of controller for damper control
RealTiDam300Time constant of integrator block for damper control [s]
RealTdDam0.1Time constant of derivative block for damper control [s]
System requests
RealthrTemDif3Threshold difference between zone temperature and cooling setpoint for generating 3 cooling SAT reset requests [K]
RealtwoTemDif2Threshold difference between zone temperature and cooling setpoint for generating 2 cooling SAT reset requests [K]
RealthrTDis_117Threshold difference between discharge air temperature and its setpoint for generating 3 hot water reset requests [K]
RealthrTDis_28.3Threshold difference between discharge air temperature and its setpoint for generating 2 hot water reset requests [K]
Duration time
RealdurTimTem120Duration time of zone temperature exceeds setpoint [s]
RealdurTimFlo60Duration time of airflow rate less than setpoint [s]
RealdurTimDisAir300Duration time of discharge air temperature less than setpoint [s]
Alarms
RealstaPreMul1Importance multiplier for the zone static pressure reset control loop
RealhotWatRes1Importance multiplier for the hot water reset control loop
ReallowFloTim300Threshold time to check low flow rate [s]
ReallowTemTim600Threshold time to check low discharge temperature [s]
RealcomChaTim15Threshold time after fan command change [s]
RealfanOffTim600Threshold time to check fan off [s]
RealleaFloTim600Threshold time to check damper leaking airflow [s]
RealvalCloTim900Threshold time to check valve leaking water flow [s]
Time-based suppresion
RealsamplePeriod120Sample period of component, set to the same value as the trim and respond that process static pressure reset [s]
RealchaRat540Gain factor to calculate suppression time based on the change of the setpoint, second per degC
RealmaxSupTim1800Maximum suppression time [s]
Advanced
RealdTHys0.25Near zero temperature difference, below which the difference will be seen as zero [K]
ReallooHys0.05Loop output hysteresis below which the output will be seen as zero [1]
RealfloHys0.01Near zero flow rate, below which the flow rate or difference will be seen as zero [m3/s]
RealdamPosHys0.05Near zero damper position, below which the damper will be seen as closed [1]
RealvalPosHys0.05Near zero valve position, below which the valve will be seen as closed [1]
Control loops
RealtimChe30Threshold time to check the zone temperature status [s]
Distribution effectiveness
RealzonDisEff_cool1.0Zone cooling air distribution effectiveness [1]
RealzonDisEff_heat0.8Zone heating air distribution effectiveness [1]

Connectors

TypeNameDescription
input RealInputTZonMeasured room temperature [K]
input RealInputTCooSetSetpoint temperature for room for cooling [K]
input RealInputTHeaSetSetpoint temperature for room for heating [K]
input BooleanInputu1WinWindow status, true if the window is open, false if it is closed
input BooleanInputu1OccTrue: the zone is populated
input IntegerInputuOpeModZone operation mode
input RealInputppmCO2SetCO2 concentration setpoint
input RealInputppmCO2Detected CO2 concentration
input RealInputVParFan_flowParallel fan airflow rate [m3/s]
input RealInputTDisMeasured supply air temperature after heating coil [K]
input RealInputVPri_flowMeasured primary airflow rate airflow rate [m3/s]
input RealInputTSupTemperature of the air supplied from central air handler [K]
input RealInputTSupSetSupply air temperature setpoint from central air handler [K]
input IntegerInputoveFloSetIndex of overriding flow setpoint, 1: set to zero; 2: set to cooling maximum; 3: set to minimum flow; 4: set to heating maximum
input IntegerInputoveDamPosIndex of overriding damper position, 1: set to close; 2: set to open
input IntegerInputoveFanIndex of overriding terminal fan status, 1: turn fan off; 2: turn fan on
input BooleanInputuHeaOffOverride heating valve position, true: close heating valve
input BooleanInputu1FanAHU supply fan status
input BooleanInputu1TerFanTerminal fan status
input BooleanInputu1HotPlaHot water plant status
output RealOutputVSet_flowDischarge airflow setpoint after considering override [m3/s]
output RealOutputyDamDamper commanded position, or commanded flow rate ratio [1]
output RealOutputyValHeating valve commanded position [1]
output RealOutputVFan_flow_SetParalle fan flow rate setpoint [m3/s]
output BooleanOutputy1FanTerminal fan command on status
output RealOutputVAdjPopBreZon_flowAdjusted population component breathing zone flow rate [m3/s]
output RealOutputVAdjAreBreZon_flowAdjusted area component breathing zone flow rate [m3/s]
output RealOutputVMinOA_flowMinimum outdoor airflow setpoint [m3/s]
output RealOutputVZonAbsMin_flowZone absolute minimum outdoor airflow setpoint [m3/s]
output RealOutputVZonDesMin_flowZone design minimum outdoor airflow setpoint [m3/s]
output RealOutputyCO2CO2 control loop signal [1]
output IntegerOutputyZonTemResReqZone cooling supply air temperature reset request
output IntegerOutputyZonPreResReqZone static pressure reset requests
output IntegerOutputyHeaValResReqHot water reset requests
output IntegerOutputyHotWatPlaReqRequest to heating hot-water plant
output IntegerOutputyLowFloAlaLow airflow alarms
output IntegerOutputyFloSenAlaAirflow sensor calibration alarm
output IntegerOutputyFanStaAlaTerminal fan status alarm
output IntegerOutputyLeaDamAlaLeaking damper alarm
output IntegerOutputyLeaValAlaLeaking valve alarm
output IntegerOutputyLowTemAlaLow discharge air temperature alarms

Modelica definition

block Controller "Controller for variable-volume parallel fan-powered terminal unit" parameter Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard venStd=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1_2016 "Ventilation standard, ASHRAE 62.1 or Title 24"; parameter Boolean have_winSen=true "True: the zone has window sensor"; parameter Boolean have_occSen=true "True: the zone has occupancy sensor"; parameter Boolean have_CO2Sen=true "True: the zone has CO2 sensor"; parameter Boolean have_hotWatCoi=true "True: the unit has the hot water coil"; parameter Boolean permit_occStandby=true "True: occupied-standby mode is permitted"; parameter Real VOccMin_flow(unit="m3/s") "Zone minimum outdoor airflow for occupants"; parameter Real VAreMin_flow(unit="m3/s") "Zone minimum outdoor airflow for building area"; // ---------------- Design parameters ---------------- parameter Real VAreBreZon_flow(unit="m3/s") "Design area component of the breathing zone outdoor airflow"; parameter Real VPopBreZon_flow(unit="m3/s") "Design population component of the breathing zone outdoor airflow"; parameter Real VMin_flow(unit="m3/s") "Design zone minimum airflow setpoint"; parameter Real VCooMax_flow(unit="m3/s") "Design zone cooling maximum airflow rate"; // ---------------- Control loop parameters ---------------- parameter Real kCooCon=0.1 "Gain of controller for cooling control loop"; parameter Real TiCooCon(unit="s")=900 "Time constant of integrator block for cooling control loop"; parameter Real kHeaCon=0.1 "Gain of controller for heating control loop"; parameter Real TiHeaCon(unit="s")=900 "Time constant of integrator block for heating control loop"; // ---------------- Damper and valve control parameters ---------------- parameter Real dTDisZonSetMax(unit="K")=11 "Zone maximum discharge air temperature above heating setpoint"; parameter Real minRat(unit="m3/s") "Lowest parallel fan rate when it receives the lowest signal from BAS"; parameter Real maxRat(unit="m3/s") "Maximum heating-fan airflow setpoint"; parameter CDL.Types.SimpleController controllerTypeVal=Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kVal=0.5 "Gain of controller for valve control"; parameter Real TiVal(unit="s")=300 "Time constant of integrator block for valve control"; parameter Real TdVal(unit="s")=0.1 "Time constant of derivative block for valve control"; parameter Boolean have_preIndDam=false "True: the VAV damper is pressure independent (with built-in flow controller)"; parameter CDL.Types.SimpleController controllerTypeDam= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kDam=0.5 "Gain of controller for damper control"; parameter Real TiDam(unit="s")=300 "Time constant of integrator block for damper control"; parameter Real TdDam(unit="s")=0.1 "Time constant of derivative block for damper control"; // ---------------- System request parameters ---------------- parameter Real thrTemDif(unit="K")=3 "Threshold difference between zone temperature and cooling setpoint for generating 3 cooling SAT reset requests"; parameter Real twoTemDif(unit="K")=2 "Threshold difference between zone temperature and cooling setpoint for generating 2 cooling SAT reset requests"; parameter Real thrTDis_1(unit="K")=17 "Threshold difference between discharge air temperature and its setpoint for generating 3 hot water reset requests"; parameter Real thrTDis_2(unit="K")=8.3 "Threshold difference between discharge air temperature and its setpoint for generating 2 hot water reset requests"; parameter Real durTimTem(unit="s")=120 "Duration time of zone temperature exceeds setpoint"; parameter Real durTimFlo(unit="s")=60 "Duration time of airflow rate less than setpoint"; parameter Real durTimDisAir(unit="s")=300 "Duration time of discharge air temperature less than setpoint"; // ---------------- Parameters for alarms ---------------- parameter Real staPreMul=1 "Importance multiplier for the zone static pressure reset control loop"; parameter Real hotWatRes=1 "Importance multiplier for the hot water reset control loop"; parameter Real lowFloTim(unit="s")=300 "Threshold time to check low flow rate"; parameter Real lowTemTim(unit="s")=600 "Threshold time to check low discharge temperature"; parameter Real comChaTim(unit="s")=15 "Threshold time after fan command change"; parameter Real fanOffTim(unit="s")=600 "Threshold time to check fan off"; parameter Real leaFloTim(unit="s")=600 "Threshold time to check damper leaking airflow"; parameter Real valCloTim(unit="s")=900 "Threshold time to check valve leaking water flow"; // ---------------- Parameters for time-based suppression ---------------- parameter Real samplePeriod(unit="s")=120 "Sample period of component, set to the same value as the trim and respond that process static pressure reset"; parameter Real chaRat=540 "Gain factor to calculate suppression time based on the change of the setpoint, second per degC"; parameter Real maxSupTim(unit="s")=1800 "Maximum suppression time"; // ---------------- Advanced parameters ---------------- parameter Real dTHys(unit="K")=0.25 "Near zero temperature difference, below which the difference will be seen as zero"; parameter Real looHys(unit="1")=0.05 "Loop output hysteresis below which the output will be seen as zero"; parameter Real floHys(unit="m3/s")=0.01 "Near zero flow rate, below which the flow rate or difference will be seen as zero"; parameter Real damPosHys(unit="1")=0.05 "Near zero damper position, below which the damper will be seen as closed"; parameter Real valPosHys(unit="1")=0.05 "Near zero valve position, below which the valve will be seen as closed"; parameter Real timChe(unit="s")=30 "Threshold time to check the zone temperature status"; parameter Real zonDisEff_cool(unit="1")=1.0 "Zone cooling air distribution effectiveness"; parameter Real zonDisEff_heat(unit="1")=0.8 "Zone heating air distribution effectiveness"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon( final quantity="ThermodynamicTemperature", final unit="K", final displayUnit="degC") "Measured room temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TCooSet( final quantity="ThermodynamicTemperature", final unit="K", final displayUnit="degC") "Setpoint temperature for room for cooling"; Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaSet( final quantity="ThermodynamicTemperature", final unit="K", final displayUnit="degC") "Setpoint temperature for room for heating"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1Win if have_winSen "Window status, true if the window is open, false if it is closed"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1Occ if have_occSen "True: the zone is populated"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "Zone operation mode"; Buildings.Controls.OBC.CDL.Interfaces.RealInput ppmCO2Set if have_CO2Sen "CO2 concentration setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealInput ppmCO2 if have_CO2Sen "Detected CO2 concentration"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VParFan_flow( final unit="m3/s", final min=0, final quantity="VolumeFlowRate") if have_CO2Sen "Parallel fan airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TDis( final quantity="ThermodynamicTemperature", final unit="K", final displayUnit="degC") "Measured supply air temperature after heating coil"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VPri_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Measured primary airflow rate airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSup( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Temperature of the air supplied from central air handler"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSupSet( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Supply air temperature setpoint from central air handler"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput oveFloSet "Index of overriding flow setpoint, 1: set to zero; 2: set to cooling maximum; 3: set to minimum flow; 4: set to heating maximum"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput oveDamPos "Index of overriding damper position, 1: set to close; 2: set to open"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput oveFan "Index of overriding terminal fan status, 1: turn fan off; 2: turn fan on"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uHeaOff "Override heating valve position, true: close heating valve"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1Fan "AHU supply fan status"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1TerFan "Terminal fan status"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1HotPla if have_hotWatCoi "Hot water plant status"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VSet_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Discharge airflow setpoint after considering override"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yDam( final min=0, final unit="1") "Damper commanded position, or commanded flow rate ratio"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yVal( final min=0, final unit="1") "Heating valve commanded position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VFan_flow_Set( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Paralle fan flow rate setpoint"; Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1Fan "Terminal fan command on status"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VAdjPopBreZon_flow( final quantity="VolumeFlowRate", final unit="m3/s") if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1_2016 "Adjusted population component breathing zone flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VAdjAreBreZon_flow( final quantity="VolumeFlowRate", final unit="m3/s") if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1_2016 "Adjusted area component breathing zone flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VMinOA_flow( final quantity="VolumeFlowRate", final unit="m3/s") if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1_2016 "Minimum outdoor airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VZonAbsMin_flow( final quantity="VolumeFlowRate", final unit="m3/s") if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016 "Zone absolute minimum outdoor airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VZonDesMin_flow( final quantity="VolumeFlowRate", final unit="m3/s") if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016 "Zone design minimum outdoor airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yCO2( final unit="1") if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016 "CO2 control loop signal"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yZonTemResReq "Zone cooling supply air temperature reset request"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yZonPreResReq "Zone static pressure reset requests"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHeaValResReq "Hot water reset requests"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHotWatPlaReq "Request to heating hot-water plant"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yLowFloAla "Low airflow alarms"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yFloSenAla "Airflow sensor calibration alarm"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yFanStaAla "Terminal fan status alarm"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yLeaDamAla "Leaking damper alarm"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yLeaValAla "Leaking valve alarm"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yLowTemAla if have_hotWatCoi "Low discharge air temperature alarms"; Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.ActiveAirFlow actAirSet( final VCooMax_flow=VCooMax_flow) "Active airflow setpoint"; Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.SystemRequests sysReq( final have_hotWatCoi=have_hotWatCoi, final thrTemDif=thrTemDif, final twoTemDif=twoTemDif, final thrTDis_1=thrTDis_1, final thrTDis_2=thrTDis_2, final durTimTem=durTimTem, final durTimFlo=durTimFlo, final durTimDisAir=durTimDisAir, final dTHys=dTHys, final floHys=floHys, final looHys=looHys, final damPosHys=damPosHys, final valPosHys=valPosHys, final samplePeriod=samplePeriod) "Specify system requests "; Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ControlLoops conLoo( final kCooCon=kCooCon, final TiCooCon=TiCooCon, final kHeaCon=kHeaCon, final TiHeaCon=TiHeaCon, final timChe=timChe, final dTHys=dTHys, final looHys=looHys) "Heating and cooling control loop"; Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.Alarms ala( final have_hotWatCoi=have_hotWatCoi, final staPreMul=staPreMul, final hotWatRes=hotWatRes, final VCooMax_flow=VCooMax_flow, final lowFloTim=lowFloTim, final lowTemTim=lowTemTim, final comChaTim=comChaTim, final fanOffTim=fanOffTim, final leaFloTim=leaFloTim, final valCloTim=valCloTim, final floHys=floHys, final dTHys=dTHys, final damPosHys=damPosHys, final valPosHys=valPosHys) "Generate alarms"; Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.Overrides setOve "Override setpoints"; Buildings.Controls.OBC.ASHRAE.G36.Generic.TimeSuppression timSup( final samplePeriod=samplePeriod, final chaRat=chaRat, final maxTim=maxSupTim, final dTHys=dTHys) "Specify suppresion time due to the setpoint change and check if it has passed the suppresion period"; Buildings.Controls.OBC.ASHRAE.G36.VentilationZones.ASHRAE62_1.Setpoints setPoi( final have_winSen=have_winSen, final have_occSen=have_occSen, final have_CO2Sen=have_CO2Sen, final have_typTerUni=false, final have_parFanPowUni=true, final permit_occStandby=permit_occStandby, final VAreBreZon_flow=VAreBreZon_flow, final VPopBreZon_flow=VPopBreZon_flow, final VMin_flow=VMin_flow, final VCooMax_flow=VCooMax_flow, final zonDisEff_cool=zonDisEff_cool, final zonDisEff_heat=zonDisEff_heat, final dTHys=dTHys) if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1_2016 "Output the minimum outdoor airflow rate setpoint, when using ASHRAE 62.1"; Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.ParallelFanVVF.Subsequences.DamperValves damVal( final dTDisZonSetMax=dTDisZonSetMax, final VMin_flow=VMin_flow, final VCooMax_flow=VCooMax_flow, final minRat=minRat, final maxRat=maxRat, final controllerTypeVal=controllerTypeVal, final kVal=kVal, final TiVal=TiVal, final TdVal=TdVal, final have_preIndDam=have_preIndDam, final controllerTypeDam=controllerTypeDam, final kDam=kDam, final TiDam=TiDam, final TdDam=TdDam, final dTHys=dTHys, final looHys=looHys, final floHys=floHys) "Damper and valve control"; Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.ZoneStates zonSta( final uLow=looHys, final uHigh=2*looHys) if have_CO2Sen "Find if the zone is in heating, cooling, or deadband states"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1 "Convert boolean to real"; Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 "Paralle fan airflow setpoint"; Buildings.Controls.OBC.ASHRAE.G36.VentilationZones.Title24.Setpoints minFlo( final have_winSen=have_winSen, final have_occSen=have_occSen, final have_CO2Sen=have_CO2Sen, final have_parFanPowUni=true, final VOccMin_flow=VOccMin_flow, final VAreMin_flow=VAreMin_flow, final VMin_flow=VMin_flow, final VCooMax_flow=VCooMax_flow) if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016 "Output the minimum outdoor airflow rate setpoint, when using Title 24"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant noVenStd( final k=venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.Not_Specified) "No ventilation standard"; Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not"; Buildings.Controls.OBC.CDL.Utilities.Assert assMes1( final message="Warning: Ventilation standard is not specified!") "Warning when the ventilation standard is not specified"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerFlo( final k=0) if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.Not_Specified "Zero flow when the ventilation standard is not specified"; equation connect(TZon, timSup.TZon); connect(TCooSet, timSup.TSet); connect(TCooSet, conLoo.TCooSet); connect(TZon, conLoo.TZon); connect(THeaSet, conLoo.THeaSet); connect(u1Win, setPoi.u1Win); connect(u1Occ, setPoi.u1Occ); connect(uOpeMod, setPoi.uOpeMod); connect(ppmCO2, setPoi.ppmCO2); connect(TZon, setPoi.TZon); connect(TDis, setPoi.TDis); connect(uOpeMod, actAirSet.uOpeMod); connect(setPoi.VOccZonMin_flow, actAirSet.VOccMin_flow); connect(VPri_flow,damVal.VPri_flow); connect(conLoo.yCoo, damVal.uCoo); connect(actAirSet.VActCooMax_flow, damVal.VActCooMax_flow); connect(TSup, damVal.TSup); connect(actAirSet.VActMin_flow, damVal.VActMin_flow); connect(TDis, damVal.TDis); connect(TSupSet, damVal.TSupSet); connect(THeaSet, damVal.THeaSet); connect(conLoo.yHea, damVal.uHea); connect(TZon, damVal.TZon); connect(uOpeMod, damVal.uOpeMod); connect(oveDamPos, setOve.oveDamPos); connect(damVal.yDam, setOve.uDam); connect(uHeaOff, setOve.uHeaOff); connect(damVal.yVal, setOve.uVal); connect(timSup.yAftSup, sysReq.uAftSup); connect(TCooSet, sysReq.TCooSet); connect(TZon, sysReq.TZon); connect(conLoo.yCoo, sysReq.uCoo); connect(VPri_flow,sysReq.VPri_flow); connect(TDis, sysReq.TDis); connect(VPri_flow,ala.VPri_flow); connect(u1Fan, ala.u1Fan); connect(TSup, ala.TSup); connect(u1HotPla, ala.u1HotPla); connect(TDis, ala.TDis); connect(setOve.yDam, yDam); connect(setOve.yVal, yVal); connect(sysReq.yZonTemResReq, yZonTemResReq); connect(sysReq.yZonPreResReq, yZonPreResReq); connect(sysReq.yHeaValResReq, yHeaValResReq); connect(sysReq.yHotWatPlaReq, yHotWatPlaReq); connect(ala.yLowFloAla, yLowFloAla); connect(ala.yFloSenAla, yFloSenAla); connect(ala.yLeaDamAla, yLeaDamAla); connect(ala.yLeaValAla, yLeaValAla); connect(ala.yLowTemAla, yLowTemAla); connect(conLoo.yCoo, zonSta.uCoo); connect(conLoo.yHea, zonSta.uHea); connect(zonSta.yZonSta, setPoi.uZonSta); connect(setPoi.VParFan_flow, VParFan_flow); connect(setPoi.VMinOA_flow, damVal.VOAMin_flow); connect(damVal.THeaDisSet, sysReq.TDisSet); connect(setOve.oveFan, oveFan); connect(setOve.y1Fan, y1Fan); connect(ala.yFanStaAla, yFanStaAla); connect(damVal.y1Fan, setOve.u1Fan); connect(damVal.y1Fan, ala.u1FanCom); connect(damVal.THeaDisSet, ala.TDisSet); connect(damVal.VFan_flow_Set, mul1.u1); connect(setOve.y1Fan, booToRea1.u); connect(booToRea1.y, mul1.u2); connect(mul1.y, VFan_flow_Set); connect(u1TerFan, ala.u1TerFan); connect(ppmCO2Set, setPoi.ppmCO2Set); connect(minFlo.VOccZonMin_flow, actAirSet.VOccMin_flow); connect(minFlo.VZonAbsMin_flow, damVal.VOAMin_flow); connect(u1Win, minFlo.u1Win); connect(u1Occ, minFlo.u1Occ); connect(uOpeMod, minFlo.uOpeMod); connect(ppmCO2Set, minFlo.ppmCO2Set); connect(ppmCO2, minFlo.ppmCO2); connect(zonSta.yZonSta, minFlo.uZonSta); connect(VParFan_flow, minFlo.VParFan_flow); connect(damVal.VPri_flow_Set, VSet_flow); connect(damVal.VPri_flow_Set, sysReq.VSet_flow); connect(damVal.VPri_flow_Set, ala.VActSet_flow); connect(oveFloSet, damVal.oveFloSet); connect(setPoi.VAdjPopBreZon_flow, VAdjPopBreZon_flow); connect(setPoi.VAdjAreBreZon_flow, VAdjAreBreZon_flow); connect(setPoi.VMinOA_flow, VMinOA_flow); connect(minFlo.VZonAbsMin_flow, VZonAbsMin_flow); connect(minFlo.VZonDesMin_flow, VZonDesMin_flow); connect(minFlo.yCO2, yCO2); connect(noVenStd.y,not1. u); connect(not1.y,assMes1. u); connect(zerFlo.y, actAirSet.VOccMin_flow); connect(setOve.yDam, sysReq.uDam); connect(setOve.yDam, ala.uDam); connect(setOve.yVal, sysReq.uVal); connect(setOve.yVal, ala.uVal); end Controller;