Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences

Package of subsequences for dual-duct terminal unit with cold-duct minimum control

Information

This package contains subsequences for dual-duct terminal unit with cold-duct minimum control. They are created according to Section 5.14 of ASHRAE Guideline 36, May 2020.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.ActiveAirFlow ActiveAirFlow Output the active airflow setpoint for dual-duct terminal unit with cold-duct minimum control
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Alarms Alarms Generate alarms of dual-duct terminal unit with cold-duct minimum control
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Dampers Dampers Output signals for controlling dampers of dual-duct terminal unit with cold-duct minimum control
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Overrides Overrides Software switches to override setpoints
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.SystemRequests SystemRequests Output system requests for dual-duct unit with cold-duct minimum control
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.ActiveAirFlow Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.ActiveAirFlow

Output the active airflow setpoint for dual-duct terminal unit with cold-duct minimum control

Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.ActiveAirFlow

Information

This sequence sets the active cooling and heating maximum and the active minimum setpoints for dual-duct terminal unit with cold-duct minimum control. The implementation is according to the Section 5.14.4 of ASHRAE Guideline 36, May 2020.

The setpoints shall vary depending on the mode of the zone group.

Setpoint OccupiedCooldown SetupWarm-upSetbackUnoccupied
Cooling maximum (VActCooMax_flow)VCooMax_flow VCooMax_flowVCooMax_flow 000
Minimum (VActMin_flow)VOccMin_flow0 0000
Heating maximum (VActHeaMax_flow)VHeaMax_flow 00VHeaMax_flowVHeaMax_flow 0

Note that the designer must ensure that the minimum (VOccMin_flow) and heating maximum (VHeaMax_flow) sum to less than the cooling maximum (VCooMax_flow) to avoid oversupplying the diffusers.

Parameters

TypeNameDefaultDescription
RealVCooMax_flow Design zone cooling maximum airflow rate [m3/s]
RealVHeaMax_flow Design zone heating maximum airflow rate [m3/s]
Advanced
RealfloHys Near zero flow rate, below which the flow rate or difference will be seen as zero [m3/s]

Connectors

TypeNameDescription
input RealInputVOccMin_flowOccupied minimum airflow setpoint [m3/s]
input IntegerInputuOpeModZone operation mode
output RealOutputVActCooMax_flowActive cooling maximum airflow setpoint [m3/s]
output RealOutputVActMin_flowActive minimum airflow setpoint [m3/s]
output RealOutputVActHeaMax_flowActive heating maximum airflow setpoint [m3/s]

Modelica definition

block ActiveAirFlow "Output the active airflow setpoint for dual-duct terminal unit with cold-duct minimum control" parameter Real VCooMax_flow( final quantity="VolumeFlowRate", final unit="m3/s") "Design zone cooling maximum airflow rate"; parameter Real VHeaMax_flow( final quantity="VolumeFlowRate", final unit="m3/s") "Design zone heating maximum airflow rate"; parameter Real floHys(unit="m3/s") "Near zero flow rate, below which the flow rate or difference will be seen as zero"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VOccMin_flow( final unit="m3/s", final quantity="VolumeFlowRate") "Occupied minimum airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "Zone operation mode"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VActCooMax_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Active cooling maximum airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VActMin_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Active minimum airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VActHeaMax_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Active heating maximum airflow setpoint"; protected Buildings.Controls.OBC.CDL.Integers.Sources.Constant occMod( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied) "Occupied mode"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant cooDowMod( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.coolDown) "Cool down mode"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant setUpMod( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.setUp) "Setup mode"; Buildings.Controls.OBC.CDL.Logical.Or3 or3 "Check if it is in occupied, cooldown, or setup mode"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal actCooMax( final realTrue=VCooMax_flow) "Active cooling maximum flow"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal occModInd( final realTrue=1) "If in occupied mode, output 1"; Buildings.Controls.OBC.CDL.Continuous.Multiply pro "Active cooling minimum, minimum airflow setpoint"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal heaMaxFlo( final realTrue=VHeaMax_flow) "Heating maximum flow when input is true"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant setBacMod( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.setBack) "Setback mode"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant warUpMod( final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.warmUp) "Warm up mode"; Buildings.Controls.OBC.CDL.Integers.Equal ifOcc "Check if current operation mode is occupied mode"; Buildings.Controls.OBC.CDL.Integers.Equal ifCooDow "Check if current operation mode is cooldown mode"; Buildings.Controls.OBC.CDL.Integers.Equal ifSetUp "Check if current operation mode is setup mode"; Buildings.Controls.OBC.CDL.Integers.Equal ifWarUp "Check if current operation mode is warm-up mode"; Buildings.Controls.OBC.CDL.Integers.Equal ifSetBac "Check if current operation mode is setback mode"; Buildings.Controls.OBC.CDL.Logical.Or3 or1 "Check if it is in occupied, warm-up, or setback mode"; Buildings.Controls.OBC.CDL.Continuous.Add add2 "Sum of minimum flow and cooling maximum flow"; Buildings.Controls.OBC.CDL.Utilities.Assert assMes( final message="Warning: the sum of minimum flow and heating maximum flow is greater than the cooling maximum flow.") "Generate warning when the cooling maximum is less than the sum of heating maximum and the minimum flow"; Buildings.Controls.OBC.CDL.Continuous.Greater gre( final h=floHys) "Check if cooling maximum is greater than the sum of minimum and heating maximum flow"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMax( final k=VHeaMax_flow) "Heating maximum flow"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMax( final k=VCooMax_flow) "Cooling maximum flow"; equation connect(occMod.y, ifOcc.u1); connect(cooDowMod.y, ifCooDow.u1); connect(setUpMod.y, ifSetUp.u1); connect(warUpMod.y, ifWarUp.u1); connect(uOpeMod, ifOcc.u2); connect(uOpeMod, ifCooDow.u2); connect(uOpeMod, ifSetUp.u2); connect(uOpeMod, ifWarUp.u2); connect(uOpeMod, ifSetBac.u2); connect(setBacMod.y, ifSetBac.u1); connect(ifOcc.y, or3.u1); connect(ifCooDow.y, or3.u2); connect(ifSetUp.y, or3.u3); connect(or3.y, actCooMax.u); connect(ifOcc.y, occModInd.u); connect(VOccMin_flow, pro.u2); connect(occModInd.y, pro.u1); connect(actCooMax.y, VActCooMax_flow); connect(pro.y, VActMin_flow); connect(ifOcc.y, or1.u1); connect(ifWarUp.y, or1.u2); connect(ifSetBac.y, or1.u3); connect(or1.y, heaMaxFlo.u); connect(heaMaxFlo.y, VActHeaMax_flow); connect(heaMax.y, add2.u2); connect(cooMax.y, gre.u1); connect(add2.y, gre.u2); connect(gre.y, assMes.u); connect(VOccMin_flow, add2.u1); end ActiveAirFlow;

Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Alarms Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Alarms

Generate alarms of dual-duct terminal unit with cold-duct minimum control

Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Alarms

Information

This block outputs alarms of dual-duct terminal unit with cold-duct minimum control. The implementation is according to the Section 5.14.6 of ASHRAE Guideline 36, May 2020. Note that the sequence uses two airflow sensors, one at each inlet.

Low airflow

  1. If the measured airflow (VColDucDis_flow plus VHotDucDis_flow) is less than 70% of setpoint VActSet_flow for 5 minutes (lowFloTim) while the setpoint is greater than zero, generate a Level 3 alarm.
  2. If the measured airflow (VColDucDis_flow plus VHotDucDis_flow) is less than 50% of setpoint VActSet_flow for 5 minutes (lowFloTim) while the setpoint is greater than zero, generate a Level 2 alarm.
  3. If a zone has an importance multiplier (staPreMul) of 0 for its static pressure reset Trim-Respond control loop, low airflow alarms shall be suppressed for that zone.

Airflow sensor calibration

Leaking damper

Parameters

TypeNameDefaultDescription
RealstaPreMul Importance multiplier for the zone static pressure reset control loop
RealVCooMax_flow Design zone cooling maximum airflow rate [m3/s]
RealVHeaMax_flow Design zone heating maximum airflow rate [m3/s]
ReallowFloTim300Threshold time to check low flow rate [s]
RealfanOffTim600Threshold time to check fan off [s]
RealleaFloTim600Threshold time to check damper leaking airflow [s]
Advanced
RealfloHys0.05Near 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]

Connectors

TypeNameDescription
input RealInputVActSet_flowActive airflow setpoint [m3/s]
input RealInputVColDucDis_flowMeasured cold-duct discharge airflow rate [m3/s]
input BooleanInputu1CooFanCooling air handler supply fan status
input RealInputuCooDamCold-duct air damper position setpoint [1]
input RealInputVHotDucDis_flowMeasured hot-duct discharge airflow rate [m3/s]
input BooleanInputu1HeaFanHeating air handler supply fan status
input RealInputuHeaDamHot-duct air damper position setpoint [1]
output IntegerOutputyLowFloAlaLow airflow alarms
output IntegerOutputyColFloSenAlaCold-duct airflow sensor calibration alarm
output IntegerOutputyColLeaDamAlaLeaking cold-duct damper alarm
output IntegerOutputyHotFloSenAlaHot-duct airflow sensor calibration alarm
output IntegerOutputyHotLeaDamAlaLeaking hot-duct damper alarm

Modelica definition

block Alarms "Generate alarms of dual-duct terminal unit with cold-duct minimum control" parameter Real staPreMul "Importance multiplier for the zone static pressure reset control loop"; parameter Real VCooMax_flow( final quantity="VolumeFlowRate", final unit="m3/s") "Design zone cooling maximum airflow rate"; parameter Real VHeaMax_flow( final quantity="VolumeFlowRate", final unit="m3/s") "Design zone heating maximum airflow rate"; parameter Real lowFloTim( final unit="s", final quantity="Time")=300 "Threshold time to check low flow rate"; parameter Real fanOffTim( final unit="s", final quantity="Time")=600 "Threshold time to check fan off"; parameter Real leaFloTim( final unit="s", final quantity="Time")=600 "Threshold time to check damper leaking airflow"; parameter Real floHys( final quantity="VolumeFlowRate", final unit="m3/s")=0.05 "Near zero flow rate, below which the flow rate or difference will be seen as zero"; parameter Real damPosHys( final unit="1")=0.05 "Near zero damper position, below which the damper will be seen as closed"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VActSet_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Active airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VColDucDis_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Measured cold-duct discharge airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1CooFan "Cooling air handler supply fan status"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uCooDam( final min=0, final unit="1") "Cold-duct air damper position setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VHotDucDis_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Measured hot-duct discharge airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1HeaFan "Heating air handler supply fan status"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uHeaDam( final min=0, final unit="1") "Hot-duct air damper position setpoint"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yLowFloAla "Low airflow alarms"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yColFloSenAla "Cold-duct airflow sensor calibration alarm"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yColLeaDamAla "Leaking cold-duct damper alarm"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHotFloSenAla "Hot-duct airflow sensor calibration alarm"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHotLeaDamAla "Leaking hot-duct damper alarm"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( final k=0.5) "Percentage of the setpoint"; Buildings.Controls.OBC.CDL.Continuous.Less les( final h=floHys) "Check if measured airflow is less than threshold"; Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( final delayTime=lowFloTim) "Check if the measured airflow has been less than threshold value for threshold time"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( final h=floHys) "Check if setpoint airflow is greater than zero"; Buildings.Controls.OBC.CDL.Continuous.Greater gre( final h=floHys) "Check if measured airflow is less than threshold"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( final k=0.7) "Percentage of the setpoint"; Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1( final delayTime=lowFloTim) "Check if the measured airflow has been less than threshold value for threshold time"; Buildings.Controls.OBC.CDL.Logical.And and2 "Measured airflow has been less than threshold value for sufficient time"; Buildings.Controls.OBC.CDL.Logical.And and1 "Measured airflow has been less than threshold value for sufficient time"; Buildings.Controls.OBC.CDL.Integers.Switch lowFloAla "Low airflow alarm"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( final k=2) "Level 2 alarm"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt( final integerTrue=3) "Convert boolean true to level 3 alarm"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conInt1( final k=staPreMul) "Importance multiplier for zone static pressure reset"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 "Check if the multiplier is greater than zero"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Suppress the alarm when multiplier is zero"; Buildings.Controls.OBC.CDL.Integers.Multiply proInt "Low flow alarms"; Buildings.Controls.OBC.CDL.Logical.And and3 "Logical and"; Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not"; Buildings.Controls.OBC.CDL.Utilities.Assert assMes( final message="Warning: airflow is less than 50% of the setpoint.") "Level 2 low airflow alarm"; Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and"; Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not"; Buildings.Controls.OBC.CDL.Utilities.Assert assMes1( final message="Warning: airflow is less than 70% of the setpoint.") "Level 3 low airflow alarm"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxFlo( final k=VCooMax_flow) "Cooling maximum airflow setpoint"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( final k=0.1) "Percentage of the setpoint"; Buildings.Controls.OBC.CDL.Logical.Not not3 "Logical not"; Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel2( final delayTime=fanOffTim) "Check if the supply fan has been OFF more than threshold time"; Buildings.Controls.OBC.CDL.Continuous.Greater gre1( final h=floHys) "Check if measured airflow is greater than threshold"; Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and"; Buildings.Controls.OBC.CDL.Logical.Not not4 "Logical not"; Buildings.Controls.OBC.CDL.Utilities.Assert assMes2( final message="Warning: cold-duct airflow sensor should be calibrated.") "Level 3 airflow sensor alarm"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt2( final integerTrue=3) "Convert boolean true to level 3 alarm"; Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel3( final delayTime=leaFloTim) "Check if the air flow is above threshold by more than threshold time"; Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero"; Buildings.Controls.OBC.CDL.Logical.And3 leaDamAla "Check if generating leak damper alarms"; Buildings.Controls.OBC.CDL.Logical.Not not5 "Logical not"; Buildings.Controls.OBC.CDL.Utilities.Assert assMes3( final message="Warning: the cold-duct damper is leaking.") "Level 4 leaking damper alarm"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt3( final integerTrue=4) "Convert boolean true to level 4 alarm"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMaxFlo( final k=VHeaMax_flow) "Heating maximum airflow setpoint"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3(final k=0.1) "Percentage of the setpoint"; Buildings.Controls.OBC.CDL.Logical.Not not6 "Logical not"; Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel4( final delayTime=fanOffTim) "Check if the supply fan has been OFF more than threshold time"; Buildings.Controls.OBC.CDL.Continuous.Greater gre2( final h=floHys) "Check if measured airflow is greater than threshold"; Buildings.Controls.OBC.CDL.Logical.And and6 "Logical and"; Buildings.Controls.OBC.CDL.Logical.Not not7 "Logical not"; Buildings.Controls.OBC.CDL.Utilities.Assert assMes4( final message="Warning: hot-duct airflow sensor should be calibrated.") "Level 3 airflow sensor alarm"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt4( final integerTrue=3) "Convert boolean true to level 3 alarm"; Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel5( final delayTime=leaFloTim) "Check if the air flow is above threshold by more than threshold time"; Buildings.Controls.OBC.CDL.Continuous.LessThreshold cloDam1( final t=damPosHys, final h=0.5*damPosHys) "Check if damper position is near zero"; Buildings.Controls.OBC.CDL.Logical.And3 leaDamAla1 "Check if generating leak damper alarms"; Buildings.Controls.OBC.CDL.Logical.Not not8 "Logical not"; Buildings.Controls.OBC.CDL.Utilities.Assert assMes5( final message="Warning: the hot-duct damper is leaking.") "Level 4 leaking damper alarm"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt5( final integerTrue=4) "Convert boolean true to level 4 alarm"; Buildings.Controls.OBC.CDL.Continuous.Add add2 "Total discharge airflow"; equation connect(VActSet_flow, gai.u); connect(gai.y, les.u2); connect(les.y, truDel.u); connect(VActSet_flow, greThr.u); connect(VActSet_flow, gai1.u); connect(gai1.y, gre.u1); connect(gre.y, truDel1.u); connect(truDel.y, and2.u1); connect(greThr.y, and2.u2); connect(greThr.y, and1.u1); connect(truDel1.y, and1.u2); connect(and2.y, lowFloAla.u2); connect(conInt.y, lowFloAla.u1); connect(and1.y, booToInt.u); connect(booToInt.y, lowFloAla.u3); connect(conInt1.y, greThr1.u); connect(greThr1.y, booToInt1.u); connect(lowFloAla.y, proInt.u1); connect(booToInt1.y, proInt.u2); connect(not1.y, assMes.u); connect(and3.y, not1.u); connect(and2.y, and3.u1); connect(greThr1.y, and3.u2); connect(and1.y, and4.u1); connect(greThr1.y, and4.u2); connect(and4.y, not2.u); connect(not2.y, assMes1.u); connect(cooMaxFlo.y, gai2.u); connect(not3.y, truDel2.u); connect(u1CooFan, not3.u); connect(gai2.y, gre1.u2); connect(gre1.y, and5.u1); connect(truDel2.y, and5.u2); connect(and5.y, not4.u); connect(not4.y, assMes2.u); connect(and5.y, booToInt2.u); connect(booToInt2.y, yColFloSenAla); connect(proInt.y, yLowFloAla); connect(gre1.y, truDel3.u); connect(uCooDam, cloDam.u); connect(truDel3.y, leaDamAla.u1); connect(u1CooFan, leaDamAla.u2); connect(cloDam.y, leaDamAla.u3); connect(not5.y, assMes3.u); connect(leaDamAla.y, not5.u); connect(leaDamAla.y, booToInt3.u); connect(booToInt3.y, yColLeaDamAla); connect(VColDucDis_flow, gre1.u1); connect(heaMaxFlo.y, gai3.u); connect(not6.y,truDel4. u); connect(u1HeaFan, not6.u); connect(gai3.y,gre2. u2); connect(gre2.y,and6. u1); connect(truDel4.y,and6. u2); connect(and6.y,not7. u); connect(not7.y,assMes4. u); connect(and6.y,booToInt4. u); connect(booToInt4.y, yHotFloSenAla); connect(gre2.y,truDel5. u); connect(uHeaDam, cloDam1.u); connect(truDel5.y, leaDamAla1.u1); connect(u1HeaFan, leaDamAla1.u2); connect(cloDam1.y, leaDamAla1.u3); connect(not8.y,assMes5. u); connect(leaDamAla1.y, not8.u); connect(leaDamAla1.y, booToInt5.u); connect(booToInt5.y, yHotLeaDamAla); connect(VHotDucDis_flow, gre2.u1); connect(VColDucDis_flow, add2.u1); connect(VHotDucDis_flow, add2.u2); connect(add2.y, les.u1); connect(add2.y, gre.u2); end Alarms;

Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Dampers Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Dampers

Output signals for controlling dampers of dual-duct terminal unit with cold-duct minimum control

Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Dampers

Information

This sequence sets the dampers for dual-duct terminal unit with cold-duct minimum control. The implementation is according to Section 5.14.5 of ASHRAE Guideline 36, May 2020. The calculation is done following the steps below.

  1. When the zone state is cooling (uCoo > 0), then the cooling loop output uCoo shall reset the cooling supply airflow setpoint VColDucDis_flow_Set from the minimum VActMin_flow to cooling maximum setpoint VActCooMax_flow. The cooling damper shall be modulated by a control loop to maintain the measured cooling aiflow VColDucDis_flow at setpoint. The heating damper shall be closed yHeaDam=0.
    • If the cold-deck supply air temperature TColSup from the cooling air handler is greater than room temperature TZon, cooling supply airflow setpoint shall be no higher than the minimum.
  2. When the zone state is deadband (uCoo=0 and uHea=0), the cooling airflow set point VColDucDis_flow_Set shall be the minimum set point VActMin_flow. The cooling damper shall be modulated by a control loop to maintain the measured cooling airflow at set point. The heating damper shall be closed.
  3. When the zone state is heating (uHea > 0), then the heating loop output uHea shall reset the heating supply airflow setpoint VHotDucDis_flow_Set from zero to heating maximum setpoint VActHeaMax_flow. The heating damper shall be modulated by a control loop to maintain the measured heating aiflow VHotDucDis_flow at setpoint. The cooling airflow setpoint shall be the minimum setpoint VActMin_flow. The cooling damper shall be controlled to maintain the set point.
    • If the hot-deck supply air temperature THotSup from the heating air handler is less than room temperature TZon, heating supply airflow setpoint shall be no higher than the minimum.
  4. Overriding above controls:
    • If heating air handler is not proven ON (u1HeaAHU=false), the heating damper shall be closed (yHeaDam=0).
    • If cooling air handler is not proven ON (u1CooAHU=false), the cooling damper shall be closed (yCooDam=0).

The sequences of controlling dampers position for dual-duct terminal unit with cold-duct minimum control are described in the following figure below.

Image of damper and valve control for dual-duct terminal unit with cold-duct minimum control

Parameters

TypeNameDefaultDescription
Booleanhave_preIndDamtrueTrue: the VAV damper is pressure independent (with built-in flow controller)
RealVCooMax_flow Design zone cooling maximum airflow rate [m3/s]
RealVHeaMax_flow Design zone heating maximum airflow rate [m3/s]
SimpleControllercontrollerTypeDamBuildings.Controls.OBC.CDL.T...Type of controller
RealkDam0.5Gain of controller for damper control [1]
RealTiDam300Time constant of integrator block for damper control [s]
RealTdDam0.1Time constant of derivative block for damper control [s]
Advanced
RealdTHys0.25Temperature difference hysteresis below which the temperature difference will be seen as zero [K]
ReallooHys0.05Loop output hysteresis below which the output will be seen as zero [1]

Connectors

TypeNameDescription
input RealInputuCooCooling control signal [1]
input RealInputVActCooMax_flowActive cooling maximum airflow rate [m3/s]
input RealInputTColSupCold duct supply air temperature from central air handler [K]
input RealInputVColDucDis_flowMeasured cold-duct discharge airflow rate airflow rate [m3/s]
input BooleanInputu1CooAHUCooling air handler status
input RealInputVActMin_flowActive minimum airflow rate [m3/s]
input RealInputTZonMeasured zone temperature [K]
input RealInputTHotSupHot duct supply air temperature from central air handler [K]
input RealInputuHeaHeating control signal [1]
input RealInputVActHeaMax_flowActive heating maximum airflow rate [m3/s]
input RealInputVHotDucDis_flowMeasured hot-duct discharge airflow rate airflow rate [m3/s]
input BooleanInputu1HeaAHUHeating air handler status
output RealOutputVDis_flow_SetDischarge airflow setpoint [m3/s]
output RealOutputVColDucDis_flow_SetCold duct discharge airflow setpoint [m3/s]
output RealOutputyCooDamCold duct damper commanded position [1]
output RealOutputVHotDucDis_flow_SetHot duct discharge airflow setpoint [m3/s]
output RealOutputyHeaDamHot duct damper commanded position [1]

Modelica definition

block Dampers "Output signals for controlling dampers of dual-duct terminal unit with cold-duct minimum control" parameter Boolean have_preIndDam = true "True: the VAV damper is pressure independent (with built-in flow controller)"; parameter Real VCooMax_flow( final quantity="VolumeFlowRate", final unit="m3/s") "Design zone cooling maximum airflow rate"; parameter Real VHeaMax_flow( final quantity="VolumeFlowRate", final unit="m3/s") "Design zone heating maximum airflow rate"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeDam= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real kDam(final unit="1")=0.5 "Gain of controller for damper control"; parameter Real TiDam( final unit="s", final quantity="Time")=300 "Time constant of integrator block for damper control"; parameter Real TdDam( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block for damper control"; parameter Real dTHys( final unit="K", final quantity="TemperatureDifference")=0.25 "Temperature difference hysteresis below which the temperature difference will be seen as zero"; parameter Real looHys( final unit="1") = 0.05 "Loop output hysteresis below which the output will be seen as zero"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uCoo( final min=0, final max=1, final unit="1") "Cooling control signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VActCooMax_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Active cooling maximum airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TColSup( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Cold duct supply air temperature from central air handler"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VColDucDis_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") if not have_preIndDam "Measured cold-duct discharge airflow rate airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1CooAHU "Cooling air handler status"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VActMin_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Active minimum airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Measured zone temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput THotSup( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Hot duct supply air temperature from central air handler"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uHea( final min=0, final max=1, final unit="1") "Heating control signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VActHeaMax_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Active heating maximum airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VHotDucDis_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") if not have_preIndDam "Measured hot-duct discharge airflow rate airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1HeaAHU "Heating air handler status"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VDis_flow_Set( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Discharge airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VColDucDis_flow_Set( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Cold duct discharge airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yCooDam( final min=0, final max=1, final unit="1") "Cold duct damper commanded position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VHotDucDis_flow_Set( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Hot duct discharge airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHeaDam( final min=0, final max=1, final unit="1") "Hot duct damper commanded position"; Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and"; Buildings.Controls.OBC.CDL.Continuous.Line lin "Active airflow setpoint for cooling"; Buildings.Controls.OBC.CDL.Continuous.Switch swi "Output active cold duct airflow setpoint"; Buildings.Controls.OBC.CDL.Continuous.Switch swi5 "Airflow setpoint when it is in cooling state"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer( final k=0) "Constant zero"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne( final k=1) "Constant one"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( final t=looHys, final h=0.5*looHys) "Check if it is cooling state"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is greater than room temperature"; Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 "Calculate temperature difference between AHU supply air and room "; Buildings.Controls.OBC.CDL.Continuous.Add add2 "Total discharge airflow setpoint"; Buildings.Controls.OBC.CDL.Logical.Or or2 "Cooing or heating state"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( final t=looHys, final h=0.5*looHys) "Check if it is cooling state"; Buildings.Controls.OBC.CDL.Continuous.Line lin1 "Active airflow setpoint for heating"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer1( final k=0) "Constant zero"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne1( final k=1) "Constant one"; Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 "Calculate temperature difference between AHU supply air and room "; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( final t=dTHys, final h=0.5*dTHys) "Check if supply air temperature is less than room temperature"; Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and"; Buildings.Controls.OBC.CDL.Continuous.Switch swi2 "Airflow setpoint when it is in heating state"; Buildings.Controls.OBC.CDL.Continuous.Switch swi3 "Airflow setpoint when it is in heating state"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conZer3( final k=0) "Constant zero"; Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor "Normalized setpoint for discharge volume flow rate"; Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conCooDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, final Td=TdDam, final yMax=1, final yMin=0, final y_reset=0) if not have_preIndDam "Cooling damper position controller"; Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor if not have_preIndDam "Normalized discharge volume flow rate"; Buildings.Controls.OBC.CDL.Continuous.Switch cooDamPos "Output cooling damper position"; Buildings.Controls.OBC.CDL.Logical.Not not3 "Not proven on"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai( final k=1) if have_preIndDam "Block that can be disabled so remove the connection"; Buildings.Controls.OBC.CDL.Continuous.Divide VDisSet_flowNor1 "Normalized setpoint for discharge volume flow rate"; Buildings.Controls.OBC.CDL.Continuous.PIDWithReset conHeaDam( final controllerType=controllerTypeDam, final k=kDam, final Ti=TiDam, final Td=TdDam, final yMax=1, final yMin=0, final y_reset=0) if not have_preIndDam "Heating damper position controller"; Buildings.Controls.OBC.CDL.Continuous.Divide VDis_flowNor1 if not have_preIndDam "Normalized discharge volume flow rate"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( final k=1) if have_preIndDam "Block that can be disabled so remove the connection"; Buildings.Controls.OBC.CDL.Continuous.Switch heaDamPos "Output heating damper position"; Buildings.Controls.OBC.CDL.Logical.Or or1 "Cooing or deadband state"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1( final realTrue=0, final realFalse=1) "Ensure heating damper is closed when it is in cooling or deadband state"; Buildings.Controls.OBC.CDL.Continuous.Multiply mul1 "Ensure heating damper is closed when it is in cooling or deadband state"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMax1( final k=VCooMax_flow) "Cooling maximum flow"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMax1( final k=VHeaMax_flow) "Heating maximum flow"; Buildings.Controls.OBC.CDL.Continuous.Max max2 "Nominal flow"; equation connect(uCoo, lin.u); connect(conZer.y, lin.x1); connect(conOne.y, lin.x2); connect(VActCooMax_flow, lin.f2); connect(uCoo, greThr1.u); connect(and4.y, swi5.u2); connect(lin.y, swi5.u3); connect(swi5.y, swi.u1); connect(TColSup, sub2.u1); connect(sub2.y, greThr.u); connect(greThr.y, and4.u2); connect(greThr1.y, and4.u1); connect(greThr1.y, swi.u2); connect(add2.y, VDis_flow_Set); connect(TZon, sub2.u2); connect(VActMin_flow, swi5.u1); connect(greThr1.y, or2.u1); connect(uHea, greThr2.u); connect(greThr2.y, or2.u2); connect(uHea, lin1.u); connect(conZer1.y, lin1.x1); connect(conZer1.y, lin1.f1); connect(conOne1.y, lin1.x2); connect(VActHeaMax_flow, lin1.f2); connect(TZon, sub1.u1); connect(THotSup, sub1.u2); connect(sub1.y, greThr3.u); connect(greThr3.y, and1.u1); connect(greThr2.y, and1.u2); connect(VActMin_flow, swi2.u1); connect(and1.y, swi2.u2); connect(lin1.y, swi2.u3); connect(greThr2.y, swi3.u2); connect(swi2.y, swi3.u1); connect(conZer3.y, swi3.u3); connect(swi3.y, VHotDucDis_flow_Set); connect(swi.y, VColDucDis_flow_Set); connect(swi.y, add2.u1); connect(swi.y, VDisSet_flowNor.u1); connect(VDisSet_flowNor.y, conCooDam.u_s); connect(VColDucDis_flow, VDis_flowNor.u1); connect(VDis_flowNor.y, conCooDam.u_m); connect(u1CooAHU, conCooDam.trigger); connect(u1CooAHU, not3.u); connect(not3.y, cooDamPos.u2); connect(VDisSet_flowNor.y, gai.u); connect(gai.y, cooDamPos.u3); connect(conCooDam.y, cooDamPos.u3); connect(conZer3.y, cooDamPos.u1); connect(cooDamPos.y, yCooDam); connect(heaDamPos.y, yHeaDam); connect(u1HeaAHU, heaDamPos.u2); connect(conZer3.y, heaDamPos.u3); connect(swi3.y, VDisSet_flowNor1.u1); connect(VDisSet_flowNor1.y, conHeaDam.u_s); connect(VHotDucDis_flow, VDis_flowNor1.u1); connect(VDis_flowNor1.y, conHeaDam.u_m); connect(u1HeaAHU, conHeaDam.trigger); connect(greThr1.y, or1.u1); connect(or2.y, or1.u2); connect(or1.y, booToRea1.u); connect(booToRea1.y, mul1.u2); connect(VDisSet_flowNor1.y, gai1.u); connect(gai1.y, mul1.u1); connect(conHeaDam.y, mul1.u1); connect(mul1.y, heaDamPos.u1); connect(swi3.y, add2.u2); connect(VActMin_flow, lin.f1); connect(VActMin_flow, swi.u3); connect(cooMax1.y, max2.u1); connect(heaMax1.y, max2.u2); connect(max2.y, VDisSet_flowNor.u2); connect(max2.y, VDis_flowNor.u2); connect(max2.y, VDisSet_flowNor1.u2); connect(max2.y, VDis_flowNor1.u2); end Dampers;

Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Overrides Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Overrides

Software switches to override setpoints

Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.Overrides

Information

This block considers the overrides to the setpoints for dual-duct terminal unit with cold-duct minimum control. The implementation is according to the Section 5.14.7 of ASHRAE Guideline 36, May 2020.

Provide software switches that interlock to a system-level point to:

  1. when oveFloSet equals to 1, force the zone airflow setpoint VSet_flow to zero,
  2. when oveFloSet equals to 2, force the zone airflow setpoint VSet_flow to zone cooling maximum airflow rate VCooMax_flow,
  3. when oveFloSet equals to 3, force the zone airflow setpoint VSet_flow to zone minimum airflow setpoint VMin_flow.
  4. when oveFloSet equals to 4, force the zone airflow setpoint VSet_flow to zone heating maximum airflow setpoint VHeaMax_flow.
  5. when oveCooDamPos equals to 1, force the cooling damper to full closed by setting yCooDam to 0,
  6. when oveCooDamPos equals to 2, force the cooling damper to full open by setting yCooDam to 1.
  7. when oveHeaDamPos equals to 1, force the heating damper to full closed by setting yHeaDam to 0,
  8. when oveHeaDamPos equals to 2, force the heating damper to full open by setting yHeaDam to 1.

Parameters

TypeNameDefaultDescription
RealVMin_flow Design zone minimum airflow setpoint [m3/s]
RealVCooMax_flow Design zone cooling maximum airflow rate [m3/s]
RealVHeaMax_flow Design zone heating maximum airflow rate [m3/s]

Connectors

TypeNameDescription
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 RealInputVActSet_flowActive airflow setpoint [m3/s]
input IntegerInputoveCooDamPosIndex of overriding cooling damper position, 1: set to close; 2: set to open
input RealInputuCooDamCooling damper commanded position [1]
input IntegerInputoveHeaDamPosIndex of overriding heating damper position, 1: set to close; 2: set to open
input RealInputuHeaDamHeating damper commanded position [1]
output RealOutputVSet_flowAirflow setpoint after considering override [m3/s]
output RealOutputyCooDamCooling damper commanded position, after considering override [1]
output RealOutputyHeaDamHeating damper commanded position, after considering override [1]

Modelica definition

block Overrides "Software switches to override setpoints" parameter Real VMin_flow( final quantity="VolumeFlowRate", final unit="m3/s") "Design zone minimum airflow setpoint"; parameter Real VCooMax_flow( final quantity="VolumeFlowRate", final unit="m3/s") "Design zone cooling maximum airflow rate"; parameter Real VHeaMax_flow( final quantity="VolumeFlowRate", final unit="m3/s") "Design zone heating maximum airflow rate"; 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.RealInput VActSet_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Active airflow setpoint"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput oveCooDamPos "Index of overriding cooling damper position, 1: set to close; 2: set to open"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uCooDam( final min=0, final unit="1") "Cooling damper commanded position"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput oveHeaDamPos "Index of overriding heating damper position, 1: set to close; 2: set to open"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uHeaDam( final min=0, final unit="1") "Heating damper commanded position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VSet_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Airflow setpoint after considering override"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yCooDam( final min=0, final unit="1") "Cooling damper commanded position, after considering override"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHeaDam( final min=0, final unit="1") "Heating damper commanded position, after considering override"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( final k=1) "Constant 1"; Buildings.Controls.OBC.CDL.Integers.Equal forZerFlo "Check if forcing zone airflow setpoint to zero"; Buildings.Controls.OBC.CDL.Integers.Equal forCooMax "Check if forcing zone airflow setpoint to cooling maximum"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1( final k=2) "Constant 2"; Buildings.Controls.OBC.CDL.Integers.Equal forMinFlo "Check if forcing zone airflow setpoint to minimum flow"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt2( final k=3) "Constant 3"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal zerFlo( final realTrue=0) "Force zone airflow setpoint to zero"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal cooMax( final realTrue=VCooMax_flow) "Force zone airflow setpoint to cooling maximum"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal minFlo( final realTrue=VMin_flow) "Force zone airflow setpoint to zone minimum flow"; Buildings.Controls.OBC.CDL.Continuous.Add add2 "Add up two inputs"; Buildings.Controls.OBC.CDL.Continuous.Add add1 "Add up inputs"; Buildings.Controls.OBC.CDL.Continuous.Switch swi "Airflow setpoint after considering override"; Buildings.Controls.OBC.CDL.Logical.Or3 or3 "Check if the airflow setpoint should be overrided"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt3( final k=1) "Constant 1"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu3 "Check if forcing damper to full close"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu4 "Check if forcing damper to full open"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt4( final k=2) "Constant 2"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal cloDam( final realTrue=0) "Full closed damper position"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal opeDam( final realTrue=1) "Full open damper position"; Buildings.Controls.OBC.CDL.Continuous.Add add3 "Add up inputs"; Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if the damper setpoint position should be overrided"; Buildings.Controls.OBC.CDL.Continuous.Switch swi1 "Damper setpoint position after considering override"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt5( final k=4) "Constant 4"; Buildings.Controls.OBC.CDL.Integers.Equal forMinFlo1 "Check if forcing zone airflow setpoint to minimum flow"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal heaMax( final realTrue=VHeaMax_flow) "Force zone airflow setpoint to zone heating maximum flow"; Buildings.Controls.OBC.CDL.Continuous.Add add4 "Add up two inputs"; Buildings.Controls.OBC.CDL.Logical.Or or1 "Check if the airflow setpoint should be overrided"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt6( final k=1) "Constant 1"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 "Check if forcing damper to full close"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu2 "Check if forcing damper to full open"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt7( final k=2) "Constant 2"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal cloDam1( final realTrue=0) "Full closed damper position"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal opeDam1( final realTrue=1) "Full open damper position"; Buildings.Controls.OBC.CDL.Continuous.Add add5 "Add up inputs"; Buildings.Controls.OBC.CDL.Logical.Or or4 "Check if the damper setpoint position should be overrided"; Buildings.Controls.OBC.CDL.Continuous.Switch swi2 "Damper setpoint position after considering override"; equation connect(oveFloSet, forZerFlo.u1); connect(conInt.y, forZerFlo.u2); connect(oveFloSet, forCooMax.u1); connect(conInt1.y, forCooMax.u2); connect(oveFloSet, forMinFlo.u1); connect(conInt2.y, forMinFlo.u2); connect(forZerFlo.y, zerFlo.u); connect(forCooMax.y, cooMax.u); connect(forMinFlo.y, minFlo.u); connect(cooMax.y, add2.u1); connect(zerFlo.y, add1.u1); connect(forZerFlo.y, or3.u1); connect(forCooMax.y, or3.u2); connect(forMinFlo.y, or3.u3); connect(add1.y, swi.u1); connect(VActSet_flow, swi.u3); connect(swi.y, VSet_flow); connect(conInt3.y, intEqu3.u2); connect(conInt4.y,intEqu4. u2); connect(oveCooDamPos, intEqu3.u1); connect(oveCooDamPos, intEqu4.u1); connect(intEqu3.y, cloDam.u); connect(intEqu4.y, opeDam.u); connect(cloDam.y, add3.u1); connect(opeDam.y, add3.u2); connect(intEqu3.y, or2.u1); connect(intEqu4.y, or2.u2); connect(add3.y, swi1.u1); connect(or2.y, swi1.u2); connect(uCooDam, swi1.u3); connect(swi1.y, yCooDam); connect(oveFloSet, forMinFlo1.u1); connect(conInt5.y, forMinFlo1.u2); connect(forMinFlo1.y, heaMax.u); connect(add2.y, add1.u2); connect(minFlo.y, add4.u1); connect(heaMax.y, add4.u2); connect(add4.y, add2.u2); connect(or3.y, or1.u1); connect(forMinFlo1.y, or1.u2); connect(or1.y, swi.u2); connect(conInt6.y,intEqu1. u2); connect(conInt7.y,intEqu2. u2); connect(oveHeaDamPos, intEqu1.u1); connect(oveHeaDamPos, intEqu2.u1); connect(intEqu1.y, cloDam1.u); connect(intEqu2.y, opeDam1.u); connect(cloDam1.y, add5.u1); connect(opeDam1.y, add5.u2); connect(intEqu1.y,or4. u1); connect(intEqu2.y,or4. u2); connect(add5.y,swi2. u1); connect(or4.y,swi2. u2); connect(uHeaDam, swi2.u3); connect(swi2.y, yHeaDam); end Overrides;

Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.SystemRequests Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.SystemRequests

Output system requests for dual-duct unit with cold-duct minimum control

Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctColdDuctMin.Subsequences.SystemRequests

Information

This sequence outputs the system reset requests for dual-duct terminal unit with cold-duct minimum control. The implementation is according to the Section 5.14.8 of ASHRAE Guideline 36, May 2020.

Cooling SAT reset requests yZonCooTemResReq

  1. If the zone temperature TZon exceeds the zone cooling setpoint TCooSet by 3 °C (5 °F)) for 2 minutes and after suppression period (uAftSupCoo=true) due to setpoint change per G36 Part 5.1.20, send 3 requests (yZonCooTemResReq=3).
  2. Else if the zone temperature TZon exceeds the zone cooling setpoint TCooSet by 2 °C (3 °F) for 2 minutes and after suppression period (uAftSupCoo=true) due to setpoint change per G36 Part 5.1.20, send 2 requests (yZonCooTemResReq=3).
  3. Else if the cooling loop uCoo is greater than 95%, send 1 request (yZonCooTemResReq=1) until uCoo is less than 85%.
  4. Else if uCoo is less than 95%, send 0 request (yZonCooTemResReq=0).

Cold-duct static pressure reset requests yColDucPreResReq

  1. If the measured airflow VColDucDis_flow is less than 50% of setpoint VColDuc_flow_Set while the setpoint is greater than zero and the damper position uCooDam is greater than 95% for 1 minute, send 3 requests (yColDucPreResReq=3).
  2. Else if the measured airflow VColDucDis_flow is less than 70% of setpoint VColDuc_flow_Set while the setpoint is greater than zero and the damper position uCooDam is greater than 95% for 1 minute, send 2 requests (yColDucPreResReq=2).
  3. Else if the damper position uCooDam is greater than 95%, send 1 request (yColDucPreResReq=1) until uDam is less than 85%.
  4. Else if the damper position uCooDam is less than 95%, send 0 request (yColDucPreResReq=0).

Heating SAT reset requests yZonHeaTemResReq

  1. If the zone temperature TZon is below the zone heating setpoint THeaSet by 3 °C (5 °F)) for 2 minutes and after suppression period (uAftSupHea=true) due to setpoint change per G36 Part 5.1.20, send 3 requests (yZonHeaTemResReq=3).
  2. Else if the zone temperature TZon is below the zone heating setpoint THeaSet by 2 °C (3 °F) for 2 minutes and after suppression period (uAftSupHea=true) due to setpoint change per G36 Part 5.1.20, send 2 requests (yZonHeaTemResReq=3).
  3. Else if the heating loop uHea is greater than 95%, send 1 request (yZonHeaTemResReq=1) until uHea is less than 85%.
  4. Else if uHea is less than 95%, send 0 request (yZonHeaTemResReq=0).

Hot-duct static pressure reset requests yHotDucPreResReq

  1. If the measured airflow VHotDucDis_flow is less than 50% of setpoint VHotDuc_flow_Set while the setpoint is greater than zero and the damper position uHeaDam is greater than 95% for 1 minute, send 3 requests (yHotDucPreResReq=3).
  2. Else if the measured airflow VHotDucDis_flow is less than 70% of setpoint VHotDuc_flow_Set while the setpoint is greater than zero and the damper position uHeaDam is greater than 95% for 1 minute, send 2 requests (yHotDucPreResReq=2).
  3. Else if the damper position uHeaDam is greater than 95%, send 1 request (yHotDucPreResReq=1) until uHeaDam is less than 85%.
  4. Else if the damper position uHeaDam is less than 95%, send 0 request (yHotDucPreResReq=0).

Heating-fan requests

Send the heating fan that serves the zone a heating-fan request as follows:

  1. If the heating loop is greater than 15%, send 1 request until the heating loop is less than 1%.
  2. Else if the heatling loop is less than 15%, send 0 requests.

Parameters

TypeNameDefaultDescription
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]
Duration times
RealdurTimTem120Duration time of zone temperature exceeds setpoint [s]
RealdurTimFlo60Duration time of airflow rate less than setpoint [s]
Advanced
RealdTHys0.25Near zero temperature difference, below which the difference will be seen as zero [K]
RealfloHys Near zero flow rate, below which the flow rate or difference will be seen as zero [m3/s]
ReallooHys Loop output hysteresis below which the output will be seen as zero [1]
RealdamPosHys Near zero damper position, below which the damper will be seen as closed [1]

Connectors

TypeNameDescription
input BooleanInputuAftSupCooAfter suppression period due to the cooling setpoint change
input RealInputTCooSetZone cooling setpoint temperature [K]
input RealInputTZonZone temperature [K]
input RealInputuCooCooling loop signal [1]
input RealInputVColDuc_flow_SetCold duct discharge airflow rate setpoint [m3/s]
input RealInputVColDucDis_flowMeasured cold duct discharge airflow rate [m3/s]
input RealInputuCooDamCooling damper position setpoint [1]
input BooleanInputuAftSupHeaAfter suppression period due to the heating setpoint change
input RealInputTHeaSetZone heating setpoint temperature [K]
input RealInputuHeaHeating loop signal [1]
input RealInputVHotDuc_flow_SetHot duct discharge airflow rate setpoint [m3/s]
input RealInputVHotDucDis_flowMeasured hot duct discharge airflow rate [m3/s]
input RealInputuHeaDamHeating damper position setpoint [1]
output IntegerOutputyZonCooTemResReqZone cooling supply air temperature reset request
output IntegerOutputyColDucPreResReqCold duct static pressure reset requests
output IntegerOutputyZonHeaTemResReqZone heating supply air temperature reset request
output IntegerOutputyHotDucPreResReqHot duct static pressure reset requests
output IntegerOutputyHeaFanReqHeating fan request

Modelica definition

block SystemRequests "Output system requests for dual-duct unit with cold-duct minimum control" parameter Real thrTemDif( final unit="K", final quantity="TemperatureDifference")=3 "Threshold difference between zone temperature and cooling setpoint for generating 3 cooling SAT reset requests"; parameter Real twoTemDif( final unit="K", final quantity="TemperatureDifference")=2 "Threshold difference between zone temperature and cooling setpoint for generating 2 cooling SAT reset requests"; parameter Real durTimTem( final unit="s", final quantity="Time")=120 "Duration time of zone temperature exceeds setpoint"; parameter Real durTimFlo( final unit="s", final quantity="Time")=60 "Duration time of airflow rate less than setpoint"; parameter Real dTHys( final unit="K", final quantity="TemperatureDifference")=0.25 "Near zero temperature difference, below which the difference will be seen as zero"; parameter Real floHys( final quantity="VolumeFlowRate", final unit="m3/s") "Near zero flow rate, below which the flow rate or difference will be seen as zero"; parameter Real looHys(unit="1") "Loop output hysteresis below which the output will be seen as zero"; parameter Real damPosHys( final unit="1") "Near zero damper position, below which the damper will be seen as closed"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uAftSupCoo "After suppression period due to the cooling setpoint change"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TCooSet( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Zone cooling setpoint temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Zone temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uCoo( final min=0, final max=1, final unit="1") "Cooling loop signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VColDuc_flow_Set( final min=0, final unit="m3/s", quantity="VolumeFlowRate") "Cold duct discharge airflow rate setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VColDucDis_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Measured cold duct discharge airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uCooDam( final min=0, final max=1, final unit="1") "Cooling damper position setpoint"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uAftSupHea "After suppression period due to the heating setpoint change"; Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaSet( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Zone heating setpoint temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uHea( final min=0, final max=1, final unit="1") "Heating loop signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VHotDuc_flow_Set( final min=0, final unit="m3/s", quantity="VolumeFlowRate") "Hot duct discharge airflow rate setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VHotDucDis_flow( final min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Measured hot duct discharge airflow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uHeaDam( final min=0, final max=1, final unit="1") "Heating damper position setpoint"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yZonCooTemResReq "Zone cooling supply air temperature reset request"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yColDucPreResReq "Cold duct static pressure reset requests"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yZonHeaTemResReq "Zone heating supply air temperature reset request"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHotDucPreResReq "Hot duct static pressure reset requests"; Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHeaFanReq "Heating fan request"; protected Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1( final t=thrTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr2( final t=twoTemDif, final h=dTHys) "Check if zone temperature is greater than cooling setpoint by threshold"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr3( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr( final t=0.95, final h=looHys) "Check if cooling loop signal is greater than 0.95"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr4( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt "Convert boolean to integer"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1 "Convert boolean to integer"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1( final k=0.5) "50% of setpoint"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2( final k=0.7) "70% of setpoint"; Buildings.Controls.OBC.CDL.Continuous.Subtract sub2 "Calculate difference between zone temperature and cooling setpoint"; Buildings.Controls.OBC.CDL.Continuous.Subtract sub3 "Calculate difference between zone temperature and cooling setpoint"; Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and"; Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and"; Buildings.Controls.OBC.CDL.Logical.And and3 "Logical and"; Buildings.Controls.OBC.CDL.Logical.And and4 "Logical and"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant thrCooResReq( final k=3) "Constant 3"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant twoCooResReq( final k=2) "Constant 2"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant thrPreResReq( final k=3) "Constant 3"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant twoPreResReq( final k=2) "Constant 2"; Buildings.Controls.OBC.CDL.Integers.Switch intSwi "Output 3 or other request "; Buildings.Controls.OBC.CDL.Integers.Switch intSwi1 "Output 2 or other request "; Buildings.Controls.OBC.CDL.Integers.Switch swi4 "Output 3 or other request "; Buildings.Controls.OBC.CDL.Integers.Switch swi5 "Output 2 or other request "; Buildings.Controls.OBC.CDL.Logical.TrueDelay tim1( final delayTime=durTimTem) "Check if it is more than threshold time"; Buildings.Controls.OBC.CDL.Logical.TrueDelay tim2( final delayTime=durTimTem) "Check if it is more than threshold time"; Buildings.Controls.OBC.CDL.Logical.TrueDelay tim3( final delayTime=durTimFlo) "Check if it is more than threshold time"; Buildings.Controls.OBC.CDL.Continuous.Greater greEqu(final h=floHys) "Check if discharge airflow is less than 50% of setpoint"; Buildings.Controls.OBC.CDL.Continuous.Greater greEqu1(final h=floHys) "Check if discharge airflow is less than 70% of setpoint"; Buildings.Controls.OBC.CDL.Logical.And and5 "Logical and"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr7( final t=thrTemDif, final h=dTHys) "Check if zone temperature is less than heating setpoint by threshold"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr8( final t=twoTemDif, final h=dTHys) "Check if zone temperature is less than heating setpoint by threshold"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr9( final t=0.95, final h=damPosHys) "Check if damper position is greater than 0.95"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr10( final t=0.95, final h=looHys) "Check if heating loop signal is greater than 0.95"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr11( final t=floHys, final h=0.5*floHys) "Check if discharge airflow setpoint is greater than 0"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt4 "Convert boolean to integer"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt5 "Convert boolean to integer"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3( final k=0.5) "50% of setpoint"; Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai4( final k=0.7) "70% of setpoint"; Buildings.Controls.OBC.CDL.Continuous.Subtract sub1 "Calculate difference between zone temperature and heating setpoint"; Buildings.Controls.OBC.CDL.Continuous.Subtract sub4 "Calculate difference between zone temperature and heating setpoint"; Buildings.Controls.OBC.CDL.Logical.And and6 "Logical and"; Buildings.Controls.OBC.CDL.Logical.And and7 "Logical and"; Buildings.Controls.OBC.CDL.Logical.And and8 "Logical and"; Buildings.Controls.OBC.CDL.Logical.And and9 "Logical and"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant thrCooResReq1( final k=3) "Constant 3"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant twoCooResReq1( final k=2) "Constant 2"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant thrPreResReq1( final k=3) "Constant 3"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant twoPreResReq1( final k=2) "Constant 2"; Buildings.Controls.OBC.CDL.Integers.Switch intSwi4 "Output 3 or other request "; Buildings.Controls.OBC.CDL.Integers.Switch intSwi5 "Output 2 or other request "; Buildings.Controls.OBC.CDL.Integers.Switch swi1 "Output 3 or other request "; Buildings.Controls.OBC.CDL.Integers.Switch swi2 "Output 2 or other request "; Buildings.Controls.OBC.CDL.Logical.TrueDelay tim6( final delayTime=durTimTem) "Check if it is more than threshold time"; Buildings.Controls.OBC.CDL.Logical.TrueDelay tim7( final delayTime=durTimTem) "Check if it is more than threshold time"; Buildings.Controls.OBC.CDL.Logical.TrueDelay tim8( final delayTime=durTimFlo) "Check if it is more than threshold time"; Buildings.Controls.OBC.CDL.Continuous.Greater greEqu2(final h=floHys) "Check if discharge airflow is less than 50% of setpoint"; Buildings.Controls.OBC.CDL.Continuous.Greater greEqu3(final h=floHys) "Check if discharge airflow is less than 70% of setpoint"; Buildings.Controls.OBC.CDL.Logical.And and10 "Logical and"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr12( final t=0.15, final h=looHys) "Check if heating loop signal is greater than 0.15"; Buildings.Controls.OBC.CDL.Logical.Latch lat "Hold the true input"; Buildings.Controls.OBC.CDL.Continuous.LessThreshold lesThr( final t=0.01, final h=looHys) "Check if the heating loop output is less than threshold"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt6 "Heating fan request"; equation connect(sub2.y, greThr1.u); connect(and2.y, intSwi.u2); connect(sub3.y, greThr2.u); connect(and1.y, intSwi1.u2); connect(and3.y, swi4.u2); connect(and4.y, swi5.u2); connect(greThr2.y, tim2.u); connect(tim2.y, and1.u2); connect(greThr1.y, tim1.u); connect(tim1.y, and2.u2); connect(greThr4.u, VColDuc_flow_Set); connect(greEqu.u1, gai1.y); connect(greEqu.y, and3.u2); connect(gai2.y, greEqu1.u1); connect(greEqu1.y, and4.u2); connect(uCoo, greThr.u); connect(uAftSupCoo, and2.u1); connect(uAftSupCoo, and1.u1); connect(thrCooResReq.y, intSwi.u1); connect(twoCooResReq.y, intSwi1.u1); connect(intSwi1.y, intSwi.u3); connect(intSwi.y, yZonCooTemResReq); connect(greThr.y, booToInt.u); connect(booToInt.y, intSwi1.u3); connect(uCooDam, greThr3.u); connect(VColDuc_flow_Set, gai1.u); connect(VColDuc_flow_Set, gai2.u); connect(VColDucDis_flow, greEqu.u2); connect(VColDucDis_flow, greEqu1.u2); connect(greThr3.y, tim3.u); connect(greThr4.y, and5.u1); connect(tim3.y, and5.u2); connect(and5.y, and3.u1); connect(and5.y, and4.u1); connect(greThr3.y, booToInt1.u); connect(booToInt1.y, swi5.u3); connect(twoPreResReq.y, swi5.u1); connect(thrPreResReq.y, swi4.u1); connect(swi5.y, swi4.u3); connect(TCooSet, sub3.u2); connect(TCooSet, sub2.u2); connect(TZon, sub2.u1); connect(TZon, sub3.u1); connect(sub1.y,greThr7. u); connect(and7.y, intSwi4.u2); connect(sub4.y,greThr8. u); connect(and6.y,intSwi5. u2); connect(and8.y,swi1. u2); connect(and9.y,swi2. u2); connect(greThr8.y,tim7. u); connect(tim7.y,and6. u2); connect(greThr7.y,tim6. u); connect(tim6.y,and7. u2); connect(greThr11.u, VHotDuc_flow_Set); connect(greEqu2.u1, gai3.y); connect(greEqu2.y, and8.u2); connect(gai4.y,greEqu3. u1); connect(greEqu3.y,and9. u2); connect(uHea, greThr10.u); connect(uAftSupHea, and7.u1); connect(uAftSupHea, and6.u1); connect(thrCooResReq1.y, intSwi4.u1); connect(twoCooResReq1.y, intSwi5.u1); connect(intSwi5.y, intSwi4.u3); connect(intSwi4.y, yZonHeaTemResReq); connect(greThr10.y, booToInt4.u); connect(booToInt4.y, intSwi5.u3); connect(uHeaDam, greThr9.u); connect(VHotDuc_flow_Set, gai3.u); connect(VHotDuc_flow_Set, gai4.u); connect(VHotDucDis_flow, greEqu2.u2); connect(VHotDucDis_flow, greEqu3.u2); connect(greThr9.y,tim8. u); connect(greThr11.y, and10.u1); connect(tim8.y, and10.u2); connect(and10.y, and8.u1); connect(and10.y, and9.u1); connect(greThr9.y,booToInt5. u); connect(booToInt5.y,swi2. u3); connect(twoPreResReq1.y, swi2.u1); connect(thrPreResReq1.y, swi1.u1); connect(swi2.y,swi1. u3); connect(THeaSet, sub1.u1); connect(THeaSet, sub4.u1); connect(TZon, sub1.u2); connect(TZon, sub4.u2); connect(uHea, greThr12.u); connect(greThr12.y, lat.u); connect(uHea, lesThr.u); connect(lesThr.y, lat.clr); connect(lat.y, booToInt6.u); connect(booToInt6.y, yHeaFanReq); connect(swi1.y, yHotDucPreResReq); connect(swi4.y, yColDucPreResReq); end SystemRequests;