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 | 
|  ActiveAirFlow | Output the active airflow setpoint for dual-duct terminal unit with cold-duct minimum control | 
|  Alarms | Generate alarms of dual-duct terminal unit with cold-duct minimum control | 
|  Dampers | Output signals for controlling dampers of dual-duct terminal unit with cold-duct minimum control | 
|  Overrides | Software switches to override setpoints | 
|  SystemRequests | Output system requests for dual-duct unit with cold-duct minimum control | 
|  Validation | Collection of validation models | 
Output the active airflow setpoint for dual-duct terminal unit with cold-duct minimum control
 
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 | Occupied | Cooldown | Setup | Warm-up | Setback | Unoccupied | 
|---|
| Cooling maximum ( VActCooMax_flow) | VCooMax_flow | VCooMax_flow | VCooMax_flow | 0 | 0 | 0 | 
| Minimum ( VActMin_flow) | VOccMin_flow | 0 | 0 | 0 | 0 | 0 | 
| Heating maximum ( VActHeaMax_flow) | VHeaMax_flow | 0 | 0 | VHeaMax_flow | VHeaMax_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
| Type | Name | Default | Description | 
|---|
| Real | VCooMax_flow |  | Design zone cooling maximum airflow rate [m3/s] | 
| Real | VHeaMax_flow |  | Design zone heating maximum airflow rate [m3/s] | 
| Advanced | 
| Real | floHys |  | Near zero flow rate, below which the flow rate or difference will be seen as zero [m3/s] | 
Connectors
| Type | Name | Description | 
|---|
| input RealInput | VOccMin_flow | Occupied minimum airflow setpoint [m3/s] | 
| input IntegerInput | uOpeMod | Zone operation mode | 
| output RealOutput | VActCooMax_flow | Active cooling maximum airflow setpoint [m3/s] | 
| output RealOutput | VActMin_flow | Active minimum airflow setpoint [m3/s] | 
| output RealOutput | VActHeaMax_flow | Active heating maximum airflow setpoint [m3/s] | 
Modelica definition
block ActiveAirFlow
  
  
parameter Real VCooMax_flow(
    
final quantity="VolumeFlowRate",
    
final unit="m3/s")
    ;
  
parameter Real VHeaMax_flow(
    
final quantity="VolumeFlowRate",
    
final unit="m3/s")
    ;
  
parameter Real floHys(unit="m3/s")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VOccMin_flow(
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput VActCooMax_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput VActMin_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput VActHeaMax_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
protected 
  Buildings.Controls.OBC.CDL.Integers.Sources.Constant occMod(
    
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant cooDowMod(
    
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.coolDown)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant setUpMod(
    
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.setUp)
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or3
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal actCooMax(
    
final realTrue=VCooMax_flow)
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal occModInd(
    
final realTrue=1)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Multiply pro
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal heaMaxFlo(
    
final realTrue=VHeaMax_flow)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant setBacMod(
    
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.setBack)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant warUpMod(
    
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.warmUp)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal ifOcc
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal ifCooDow
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal ifSetUp
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal ifWarUp
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal ifSetBac
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or1
    ;
  
Buildings.Controls.OBC.CDL.Reals.Add add2
    ;
  
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.")
    ;
  
Buildings.Controls.OBC.CDL.Reals.Greater gre(
    
final h=floHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMax(
    
final k=VHeaMax_flow)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMax(
    
final k=VCooMax_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;
 
Generate alarms of dual-duct terminal unit with cold-duct minimum control
 
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
- 
If the zone is in occupied mode and after the AHU supply fan has been enabled for staTim,
if the measured airflow (VColDucDis_flowplusVHotDucDis_flow) is less than 70% of setpointVActSet_flowfor 5 minutes (lowFloTim) while the setpoint
is greater than zero, generate a Level 3 alarm.
- 
If the zone is in occupied mode and after the AHU supply fan has been enabled for staTim,
if the measured airflow (VColDucDis_flowplusVHotDucDis_flow) is less than 50% of setpointVActSet_flowfor 5 minutes (lowFloTim) while the setpoint
is greater than zero, generate a Level 2 alarm.
- 
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
- 
If the cooling fan serving the zone has been OFF (u1CooFan=false) for 10 minutes
(fanOffTim), and the cold-duct airflow sensor readingVColDucDis_flowis above 10% of the cooling maximum airflow setpointVCooMax_flow,
generate a Level 3 alarm.
- 
If the heating fan serving the zone has been OFF (u1HeaFan=false) for 10 minutes
(fanOffTim), and the hot-duct airflow sensor readingVHotDucDis_flowis above 10% of the heating maximum airflow setpointVHeaMax_flow,
generate a Level 3 alarm.
Leaking damper
- 
If the cooling damper position (uCooDam) is 0% and airflow sensor readingVColDucDis_flowis above 10% of the cooling maximum airflow setpointVCooMax_flowfor 10 minutes (leaFloTim) while the
fan serving the zone is proven on (u1CooFan=true), generate a Level
4 alarm.
- 
If the heating damper position (uHeaDam) is 0% and airflow sensor readingVHotDucDis_flowis above 10% of the heating maximum airflow setpointVHeaMax_flowfor 10 minutes (leaFloTim) while the
fan serving the zone is proven on (u1HeaFan=true), generate a Level
4 alarm.
Parameters
| Type | Name | Default | Description | 
|---|
| Real | staPreMul |  | Importance multiplier for the zone static pressure reset control loop | 
| Real | VCooMax_flow |  | Design zone cooling maximum airflow rate [m3/s] | 
| Real | VHeaMax_flow |  | Design zone heating maximum airflow rate [m3/s] | 
| Real | lowFloTim | 300 | Threshold time to check low flow rate [s] | 
| Real | fanOffTim | 600 | Threshold time to check fan off [s] | 
| Real | leaFloTim | 600 | Threshold time to check damper leaking airflow [s] | 
| Advanced | 
| Real | floHys | 0.05 | Near zero flow rate, below which the flow rate or difference will be seen as zero [m3/s] | 
| Real | damPosHys | 0.05 | Near zero damper position, below which the damper will be seen as closed [1] | 
| Real | staTim | 1800 | Delay triggering alarms after enabling AHU supply fan [s] | 
Connectors
| Type | Name | Description | 
|---|
| input RealInput | VActSet_flow | Active airflow setpoint [m3/s] | 
| input RealInput | VColDucDis_flow | Measured cold-duct discharge airflow rate [m3/s] | 
| input BooleanInput | u1CooFan | Cooling air handler supply fan status | 
| input IntegerInput | uOpeMod | Zone operation mode | 
| input RealInput | uCooDam | Cold-duct air damper position setpoint [1] | 
| input RealInput | VHotDucDis_flow | Measured hot-duct discharge airflow rate [m3/s] | 
| input BooleanInput | u1HeaFan | Heating air handler supply fan status | 
| input RealInput | uHeaDam | Hot-duct air damper position setpoint [1] | 
| output IntegerOutput | yLowFloAla | Low airflow alarms | 
| output IntegerOutput | yColFloSenAla | Cold-duct airflow sensor calibration alarm | 
| output IntegerOutput | yColLeaDamAla | Leaking cold-duct damper alarm | 
| output IntegerOutput | yHotFloSenAla | Hot-duct airflow sensor calibration alarm | 
| output IntegerOutput | yHotLeaDamAla | Leaking hot-duct damper alarm | 
Modelica definition
block Alarms 
  
parameter Real staPreMul
    ;
  
parameter Real VCooMax_flow(
    
final quantity="VolumeFlowRate",
    
final unit="m3/s")
    ;
  
parameter Real VHeaMax_flow(
    
final quantity="VolumeFlowRate",
    
final unit="m3/s")
    ;
  
parameter Real lowFloTim(
    
final unit="s",
    
final quantity="Time")=300
    ;
  
parameter Real fanOffTim(
    
final unit="s",
    
final quantity="Time")=600
    ;
  
parameter Real leaFloTim(
    
final unit="s",
    
final quantity="Time")=600
    ;
  
parameter Real floHys(
    
final quantity="VolumeFlowRate",
    
final unit="m3/s")=0.05
    ;
  
parameter Real damPosHys(
    
final unit="1")=0.05
    ;
  
parameter Real staTim(
    
final unit="s",
    
final quantity="Time")=1800
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VActSet_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate") ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VColDucDis_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1CooFan
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput uCooDam(
    
final min=0,
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VHotDucDis_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1HeaFan
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput uHeaDam(
    
final min=0,
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yLowFloAla
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yColFloSenAla
     ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yColLeaDamAla
     ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHotFloSenAla
     ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHotLeaDamAla
     ;
  
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai(
    
final k=0.5)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Less les(
    
final h=floHys)
    ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel(
    
final delayTime=lowFloTim)
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(
    
final t=floHys,
    
final h=0.5*floHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Greater gre(
    
final h=floHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(
    
final k=0.7)
    ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1(
    
final delayTime=lowFloTim)
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and2
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and1
    ;
  
Buildings.Controls.OBC.CDL.Integers.Switch lowFloAla
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(
    
final k=2)
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt(
    
final integerTrue=3)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.Constant conInt1(
    
final k=staPreMul)
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1
    ;
  
Buildings.Controls.OBC.CDL.Integers.Multiply proInt
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and8
    ;
  
Buildings.Controls.OBC.CDL.Logical.Not not1
    ;
  
Buildings.Controls.OBC.CDL.Utilities.Assert assMes(
    
final message="Warning: airflow is less than 50% of the setpoint.")
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and4
    ;
  
Buildings.Controls.OBC.CDL.Logical.Not not2
    ;
  
Buildings.Controls.OBC.CDL.Utilities.Assert assMes1(
    
final message="Warning: airflow is less than 70% of the setpoint.")
    ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMaxFlo(
    
final k=VCooMax_flow) ;
  
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2(
    
final k=0.1)
    ;
  
Buildings.Controls.OBC.CDL.Logical.Not not3
    ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel2(
    
final delayTime=fanOffTim)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Greater gre1(
    
final h=floHys)
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and5
    ;
  
Buildings.Controls.OBC.CDL.Logical.Not not4
    ;
  
Buildings.Controls.OBC.CDL.Utilities.Assert assMes2(
    
final message="Warning: cold-duct airflow sensor should be calibrated.")
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt2(
    
final integerTrue=3)
    ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel3(
    
final delayTime=leaFloTim)
    ;
  
Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam(
    
final t=damPosHys,
    
final h=0.5*damPosHys) ;
  
Buildings.Controls.OBC.CDL.Logical.And leaDamAla
    ;
  
Buildings.Controls.OBC.CDL.Logical.Not not5
    ;
  
Buildings.Controls.OBC.CDL.Utilities.Assert assMes3(
    
final message="Warning: the cold-duct damper is leaking.")
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt3(
    
final integerTrue=4)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMaxFlo(
    
final k=VHeaMax_flow)
     ;
  
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3(
final k=0.1)
    ;
  
Buildings.Controls.OBC.CDL.Logical.Not not6
    ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel4(
    
final delayTime=fanOffTim)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Greater gre2(
    
final h=floHys)
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and6
    ;
  
Buildings.Controls.OBC.CDL.Logical.Not not7
    ;
  
Buildings.Controls.OBC.CDL.Utilities.Assert assMes4(
    
final message="Warning: hot-duct airflow sensor should be calibrated.")
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt4(
    
final integerTrue=3)
    ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel5(
    
final delayTime=leaFloTim)
    ;
  
Buildings.Controls.OBC.CDL.Reals.LessThreshold cloDam1(
    
final t=damPosHys,
    
final h=0.5*damPosHys)
    ;
  
Buildings.Controls.OBC.CDL.Logical.And leaDamAla1
    ;
  
Buildings.Controls.OBC.CDL.Logical.Not not8
    ;
  
Buildings.Controls.OBC.CDL.Utilities.Assert assMes5(
    
final message="Warning: the hot-duct damper is leaking.")
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt5(
    
final integerTrue=4)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Add add2
    ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel6(
    
final delayTime=lowFloTim)
    ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay fanIni(
    
final delayTime=staTim)
    ;
  
Buildings.Controls.OBC.CDL.Logical.And  and11
    ;
  
Buildings.Controls.OBC.CDL.Logical.And  and10
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or fanOn
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant occMod(
    
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal isOcc
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and3
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and7
    ;
  
Buildings.Controls.OBC.CDL.Logical.And leaDamAla2
    ;
  
Buildings.Controls.OBC.CDL.Logical.And leaDamAla3
    ;
equation 
  connect(VActSet_flow, gai.u);
  
connect(VActSet_flow, greThr.u);
  
connect(VActSet_flow, gai1.u);
  
connect(gai1.y, gre.u1);
  
connect(truDel.y, and2.u1);
  
connect(truDel1.y, and1.u2);
  
connect(conInt.y, lowFloAla.u1);
  
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(and2.y,and8. u1);
  
connect(greThr1.y,and8. u2);
  
connect(and1.y, and4.u1);
  
connect(greThr1.y, and4.u2);
  
connect(not2.y, assMes1.u);
  
connect(cooMaxFlo.y, gai2.u);
  
connect(u1CooFan, not3.u);
  
connect(gai2.y, gre1.u2);
  
connect(gre1.y, and5.u1);
  
connect(not4.y, assMes2.u);
  
connect(booToInt2.y, yColFloSenAla);
  
connect(proInt.y, yLowFloAla);
  
connect(uCooDam, cloDam.u);
  
connect(u1CooFan, leaDamAla.u2);
  
connect(not5.y, assMes3.u);
  
connect(booToInt3.y, yColLeaDamAla);
  
connect(VColDucDis_flow, gre1.u1);
  
connect(heaMaxFlo.y, gai3.u);
  
connect(u1HeaFan, not6.u);
  
connect(gai3.y,gre2. u2);
  
connect(gre2.y,and6. u1);
  
connect(not7.y,assMes4. u);
  
connect(booToInt4.y, yHotFloSenAla);
  
connect(uHeaDam, cloDam1.u);
  
connect(u1HeaFan, leaDamAla1.u2);
  
connect(not8.y,assMes5. 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);
  
connect(greThr.y, truDel6.u);
  
connect(truDel6.y, and1.u1);
  
connect(truDel6.y, and2.u2);
  
connect(truDel3.y, booToInt3.u);
  
connect(truDel3.y, not5.u);
  
connect(not3.y, and5.u2);
  
connect(and5.y, truDel2.u);
  
connect(truDel2.y, booToInt2.u);
  
connect(truDel2.y, not4.u);
  
connect(gre1.y, leaDamAla.u1);
  
connect(truDel5.y, booToInt5.u);
  
connect(truDel5.y, not8.u);
  
connect(and6.y, truDel4.u);
  
connect(truDel4.y, booToInt4.u);
  
connect(not6.y, and6.u2);
  
connect(gre2.y, leaDamAla1.u1);
  
connect(truDel4.y, not7.u);
  
connect(les.y, and10.u1);
  
connect(and10.y, truDel.u);
  
connect(gre.y, and11.u1);
  
connect(and11.y, truDel1.u);
  
connect(fanOn.y, fanIni.u);
  
connect(fanIni.y, and10.u2);
  
connect(u1CooFan, fanOn.u2);
  
connect(u1HeaFan, fanOn.u1);
  
connect(uOpeMod,isOcc. u1);
  
connect(occMod.y, isOcc.u2);
  
connect(fanIni.y, and11.u2);
  
connect(gai.y, les.u2);
  
connect(and4.y, and7.u1);
  
connect(and7.y, booToInt.u);
  
connect(and7.y, not2.u);
  
connect(and3.y, lowFloAla.u2);
  
connect(and3.y, not1.u);
  
connect(and8.y, and3.u1);
  
connect(isOcc.y, and3.u2);
  
connect(isOcc.y, and7.u2);
  
connect(leaDamAla.y, leaDamAla2.u1);
  
connect(leaDamAla2.y, truDel3.u);
  
connect(cloDam.y, leaDamAla2.u2);
  
connect(leaDamAla1.y, leaDamAla3.u1);
  
connect(leaDamAla3.y, truDel5.u);
  
connect(cloDam1.y, leaDamAla3.u2);
end Alarms;
 
Output signals for controlling dampers of dual-duct terminal unit with cold-duct minimum control
 
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.
- 
When the zone state is cooling (uCoo > 0), then the cooling loop outputuCooshall reset the cooling supply airflow setpointVColDucDis_flow_Setfrom the minimumVActMin_flowto
cooling maximum setpointVActCooMax_flow. The cooling damper shall be
modulated by a control loop to maintain the measured cooling aiflowVColDucDis_flowat setpoint. The heating damper shall be closedyHeaDam=0.
- 
If the cold-deck supply air temperature TColSupfrom the cooling air handler
is greater than room temperatureTZon, cooling supply airflow setpoint shall be
no higher than the minimum.
 
- 
When the zone state is deadband (uCoo=0anduHea=0), the cooling
airflow set pointVColDucDis_flow_Setshall be the minimum set pointVActMin_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.
- 
When the zone state is heating (uHea > 0), then the heating loop outputuHeashall reset the heating supply airflow setpointVHotDucDis_flow_Setfrom zero to
heating maximum setpointVActHeaMax_flow. The heating damper shall be
modulated by a control loop to maintain the measured heating aiflowVHotDucDis_flowat setpoint. 
The cooling airflow setpoint shall be the minimum setpointVActMin_flow.
The cooling damper shall be controlled to maintain the set point.
- 
If the hot-deck supply air temperature THotSupfrom the heating air handler
is less than room temperatureTZon, heating supply airflow setpoint shall be
no higher than the minimum.
 
- 
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.
 
Parameters
| Type | Name | Default | Description | 
|---|
| Real | VCooMax_flow |  | Design zone cooling maximum airflow rate [m3/s] | 
| Real | VHeaMax_flow |  | Design zone heating maximum airflow rate [m3/s] | 
| SimpleController | controllerTypeDam | Buildings.Controls.OBC.CDL.T... | Type of controller | 
| Real | kDam | 0.5 | Gain of controller for damper control [1] | 
| Real | TiDam | 300 | Time constant of integrator block for damper control [s] | 
| Real | TdDam | 0.1 | Time constant of derivative block for damper control [s] | 
| Advanced | 
| Real | dTHys | 0.25 | Temperature difference hysteresis below which the temperature difference will be seen as zero [K] | 
| Real | looHys | 0.05 | Loop output hysteresis below which the output will be seen as zero [1] | 
| Real | iniDam | 0.01 | Initial heating damper position when the damper control is enabled [1] | 
Connectors
| Type | Name | Description | 
|---|
| input RealInput | uCoo | Cooling control signal [1] | 
| input RealInput | VActCooMax_flow | Active cooling maximum airflow rate [m3/s] | 
| input RealInput | TColSup | Cold duct supply air temperature from central air handler [K] | 
| input RealInput | VColDucDis_flow | Measured cold-duct discharge airflow rate airflow rate [m3/s] | 
| input BooleanInput | u1CooAHU | Cooling air handler status | 
| input RealInput | VActMin_flow | Active minimum airflow rate [m3/s] | 
| input RealInput | TZon | Measured zone temperature [K] | 
| input RealInput | THotSup | Hot duct supply air temperature from central air handler [K] | 
| input RealInput | uHea | Heating control signal [1] | 
| input RealInput | VActHeaMax_flow | Active heating maximum airflow rate [m3/s] | 
| input RealInput | VHotDucDis_flow | Measured hot-duct discharge airflow rate airflow rate [m3/s] | 
| input BooleanInput | u1HeaAHU | Heating air handler status | 
| output RealOutput | VDis_flow_Set | Discharge airflow setpoint [m3/s] | 
| output RealOutput | VColDucDis_flow_Set | Cold duct discharge airflow setpoint [m3/s] | 
| output RealOutput | yCooDam | Cold duct damper commanded position [1] | 
| output RealOutput | VHotDucDis_flow_Set | Hot duct discharge airflow setpoint [m3/s] | 
| output RealOutput | yHeaDam | Hot duct damper commanded position [1] | 
Modelica definition
block Dampers
  
  
parameter Real VCooMax_flow(
    
final quantity="VolumeFlowRate",
    
final unit="m3/s")
    ;
  
parameter Real VHeaMax_flow(
    
final quantity="VolumeFlowRate",
    
final unit="m3/s")
    ;
  
parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerTypeDam=
    Buildings.Controls.OBC.CDL.Types.SimpleController.PI
    ;
  
parameter Real kDam(
final unit="1")=0.5
    ;
  
parameter Real TiDam(
    
final unit="s",
    
final quantity="Time")=300
    ;
  
parameter Real TdDam(
    
final unit="s",
    
final quantity="Time")=0.1
    ;
  
parameter Real dTHys(
    
final unit="K",
    
final quantity="TemperatureDifference")=0.25
    ;
  
parameter Real looHys(
    
final unit="1") = 0.05
    ;
  
parameter Real iniDam(unit="1")=0.01
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput uCoo(
    
final min=0,
    
final max=1,
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VActCooMax_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput TColSup(
    
final unit="K",
    
final displayUnit="degC",
    
final quantity="ThermodynamicTemperature")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VColDucDis_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1CooAHU
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VActMin_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon(
    
final unit="K",
    
final displayUnit="degC",
    
final quantity="ThermodynamicTemperature")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput THotSup(
    
final unit="K",
    
final displayUnit="degC",
    
final quantity="ThermodynamicTemperature")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput uHea(
    
final min=0,
    
final max=1,
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VActHeaMax_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VHotDucDis_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1HeaAHU
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput VDis_flow_Set(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput VColDucDis_flow_Set(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yCooDam(
    
final min=0,
    
final max=1,
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput VHotDucDis_flow_Set(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate") ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHeaDam(
    
final min=0,
    
final max=1,
    
final unit="1") ;
  
Buildings.Controls.OBC.CDL.Logical.And and4 ;
  
Buildings.Controls.OBC.CDL.Reals.Line lin
    ;
  
Buildings.Controls.OBC.CDL.Reals.Switch swi
    ;
  
Buildings.Controls.OBC.CDL.Reals.Switch swi5
    ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer(
    
final k=0) ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne(
    
final k=1) ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1(
    
final t=looHys,
    
final h=0.5*looHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(
    
final t=dTHys,
    
final h=0.5*dTHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Subtract sub2
    ;
  
Buildings.Controls.OBC.CDL.Reals.Add add2
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or or2
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2(
    
final t=looHys,
    
final h=0.5*looHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Line lin1
    ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer1(
    
final k=0)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.Constant conOne1(
    
final k=1)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Subtract sub1
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3(
    
final t=dTHys,
    
final h=0.5*dTHys)
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and1
    ;
  
Buildings.Controls.OBC.CDL.Reals.Switch swi2
    ;
  
Buildings.Controls.OBC.CDL.Reals.Switch swi3
    ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.Constant conZer3(
    
final k=0)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor
    ;
  
Buildings.Controls.OBC.CDL.Reals.PIDWithReset conCooDam(
    
final controllerType=controllerTypeDam,
    
final k=kDam,
    
final Ti=TiDam,
    
final Td=TdDam,
    
final yMax=1,
    
final yMin=0,
    
final y_reset=iniDam)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor
    ;
  
Buildings.Controls.OBC.CDL.Reals.Switch cooDamPos
    ;
  
Buildings.Controls.OBC.CDL.Logical.Not not3
    ;
  
Buildings.Controls.OBC.CDL.Reals.Divide VDisSet_flowNor1
    ;
  
Buildings.Controls.OBC.CDL.Reals.PIDWithReset conHeaDam(
    
final controllerType=controllerTypeDam,
    
final k=kDam,
    
final Ti=TiDam,
    
final Td=TdDam,
    
final yMax=1,
    
final yMin=0,
    
final y_reset=iniDam)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Divide VDis_flowNor1
    ;
  
Buildings.Controls.OBC.CDL.Reals.Switch heaDamPos
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or or1
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1(
    
final realTrue=0,
    
final realFalse=1)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Multiply mul1
    ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.Constant cooMax1(
    
final k=VCooMax_flow)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.Constant heaMax1(
    
final k=VHeaMax_flow)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Max max2 ;
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(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(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;
 
Software switches to override setpoints
 
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:
- 
when oveFloSetequals to 1, force the zone airflow setpointVSet_flowto zero,
- 
when oveFloSetequals to 2, force the zone airflow setpointVSet_flowto zone cooling maximum airflow rateVCooMax_flow,
- 
when oveFloSetequals to 3, force the zone airflow setpointVSet_flowto zone minimum airflow setpointVMin_flow.
- 
when oveFloSetequals to 4, force the zone airflow setpointVSet_flowto zone heating maximum airflow setpointVHeaMax_flow.
- 
when oveCooDamPosequals to 1, force the cooling damper to full closed by settingyCooDamto 0,
- 
when oveCooDamPosequals to 2, force the cooling damper to full open by settingyCooDamto 1.
- 
when oveHeaDamPosequals to 1, force the heating damper to full closed by settingyHeaDamto 0,
- 
when oveHeaDamPosequals to 2, force the heating damper to full open by settingyHeaDamto 1.
Parameters
| Type | Name | Default | Description | 
|---|
| Real | VMin_flow |  | Design zone minimum airflow setpoint [m3/s] | 
| Real | VCooMax_flow |  | Design zone cooling maximum airflow rate [m3/s] | 
| Real | VHeaMax_flow |  | Design zone heating maximum airflow rate [m3/s] | 
Connectors
| Type | Name | Description | 
|---|
| input 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 | 
| input RealInput | VActSet_flow | Active airflow setpoint [m3/s] | 
| input IntegerInput | oveCooDamPos | Index of overriding cooling damper position, 1: set to close; 2: set to open | 
| input RealInput | uCooDam | Cooling damper commanded position [1] | 
| input IntegerInput | oveHeaDamPos | Index of overriding heating damper position, 1: set to close; 2: set to open | 
| input RealInput | uHeaDam | Heating damper commanded position [1] | 
| output RealOutput | VSet_flow | Airflow setpoint after considering override [m3/s] | 
| output RealOutput | yCooDam | Cooling damper commanded position, after considering override [1] | 
| output RealOutput | yHeaDam | Heating damper commanded position, after considering override [1] | 
Modelica definition
block Overrides 
  
parameter Real VMin_flow(
    
final quantity="VolumeFlowRate",
    
final unit="m3/s")
    ;
  
parameter Real VCooMax_flow(
    
final quantity="VolumeFlowRate",
    
final unit="m3/s")
    ;
  
parameter Real VHeaMax_flow(
    
final quantity="VolumeFlowRate",
    
final unit="m3/s")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput oveFloSet
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VActSet_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput oveCooDamPos
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput uCooDam(
    
final min=0,
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput oveHeaDamPos
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput uHeaDam(
    
final min=0,
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput VSet_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yCooDam(
    
final min=0,
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHeaDam(
    
final min=0,
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(
    
final k=1)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal forZerFlo ;
  
Buildings.Controls.OBC.CDL.Integers.Equal forCooMax
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1(
    
final k=2)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal forMinFlo
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt2(
    
final k=3)
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal zerFlo(
    
final realTrue=0)
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal cooMax(
    
final realTrue=VCooMax_flow)
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal minFlo(
    
final realTrue=VMin_flow)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Add add2 ;
  
Buildings.Controls.OBC.CDL.Reals.Add add1 ;
  
Buildings.Controls.OBC.CDL.Reals.Switch swi ;
  
Buildings.Controls.OBC.CDL.Logical.Or3 or3 ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt3(
    
final k=1)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal intEqu3
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal intEqu4
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt4(
    
final k=2)
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal cloDam(
    
final realTrue=0)
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal opeDam(
    
final realTrue=1)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Add add3 ;
  
Buildings.Controls.OBC.CDL.Logical.Or or2
    ;
  
Buildings.Controls.OBC.CDL.Reals.Switch swi1
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt5(
    
final k=4)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal forMinFlo1
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal heaMax(
    
final realTrue=VHeaMax_flow)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Add add4
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or or1
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt6(
    
final k=1)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal intEqu1
    ;
  
Buildings.Controls.OBC.CDL.Integers.Equal intEqu2
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt7(
    
final k=2)
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal cloDam1(
    
final realTrue=0)
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal opeDam1(
    
final realTrue=1)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Add add5
    ;
  
Buildings.Controls.OBC.CDL.Logical.Or or4
    ;
  
Buildings.Controls.OBC.CDL.Reals.Switch swi2
    ;
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;
 
Output system requests for dual-duct unit with cold-duct minimum control
 
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
- 
If the zone temperature TZonexceeds the zone cooling setpointTCooSetby 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).
- 
Else if the zone temperature TZonexceeds the zone cooling setpointTCooSetby 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).
- 
Else if the cooling loop uCoois greater than 95%, send 1 request
(yZonCooTemResReq=1) untiluCoois less than 85%.
- 
Else if uCoois less than 95%, send 0 request (yZonCooTemResReq=0).
Cold-duct static pressure reset requests yColDucPreResReq
- 
If the measured airflow VColDucDis_flowis less than 50% of setpointVColDuc_flow_Setwhile the setpoint is greater than zero and the damper positionuCooDamis greater than 95% for 1 minute, send 3 requests (yColDucPreResReq=3).
- 
Else if the measured airflow VColDucDis_flowis less than 70% of setpointVColDuc_flow_Setwhile the setpoint is greater than zero and the damper positionuCooDamis greater than 95% for 1 minute, send 2 requests (yColDucPreResReq=2).
- 
Else if the damper position uCooDamis greater than 95%, send 1 request
(yColDucPreResReq=1) untiluDamis less than 85%.
- 
Else if the damper position uCooDamis less than 95%, send 0 request
(yColDucPreResReq=0).
Heating SAT reset requests yZonHeaTemResReq
- 
If the zone temperature TZonis below the zone heating setpointTHeaSetby 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).
- 
Else if the zone temperature TZonis below the zone heating setpointTHeaSetby 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).
- 
Else if the heating loop uHeais greater than 95%, send 1 request
(yZonHeaTemResReq=1) untiluHeais less than 85%.
- 
Else if uHeais less than 95%, send 0 request (yZonHeaTemResReq=0).
Hot-duct static pressure reset requests yHotDucPreResReq
- 
If the measured airflow VHotDucDis_flowis less than 50% of setpointVHotDuc_flow_Setwhile the setpoint is greater than zero and the damper positionuHeaDamis greater than 95% for 1 minute, send 3 requests (yHotDucPreResReq=3).
- 
Else if the measured airflow VHotDucDis_flowis less than 70% of setpointVHotDuc_flow_Setwhile the setpoint is greater than zero and the damper positionuHeaDamis greater than 95% for 1 minute, send 2 requests (yHotDucPreResReq=2).
- 
Else if the damper position uHeaDamis greater than 95%, send 1 request
(yHotDucPreResReq=1) untiluHeaDamis less than 85%.
- 
Else if the damper position uHeaDamis 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:
- 
If the heating loop is greater than 15%, send 1 request until the heating loop is
less than 1%.
- 
Else if the heatling loop is less than 15%, send 0 requests.
Parameters
| Type | Name | Default | Description | 
|---|
| Real | thrTemDif | 3 | Threshold difference between zone temperature and cooling setpoint for generating 3 cooling SAT reset requests [K] | 
| Real | twoTemDif | 2 | Threshold difference between zone temperature and cooling setpoint for generating 2 cooling SAT reset requests [K] | 
| Duration times | 
| Real | durTimTem | 120 | Duration time of zone temperature exceeds setpoint [s] | 
| Real | durTimFlo | 60 | Duration time of airflow rate less than setpoint [s] | 
| Advanced | 
| Real | dTHys | 0.25 | Near zero temperature difference, below which the difference will be seen as zero [K] | 
| Real | floHys |  | Near zero flow rate, below which the flow rate or difference will be seen as zero [m3/s] | 
| Real | looHys |  | Loop output hysteresis below which the output will be seen as zero [1] | 
| Real | damPosHys |  | Near zero damper position, below which the damper will be seen as closed [1] | 
Connectors
| Type | Name | Description | 
|---|
| input BooleanInput | uAftSupCoo | After suppression period due to the cooling setpoint change | 
| input RealInput | TCooSet | Zone cooling setpoint temperature [K] | 
| input RealInput | TZon | Zone temperature [K] | 
| input RealInput | uCoo | Cooling loop signal [1] | 
| input RealInput | VColDuc_flow_Set | Cold duct discharge airflow rate setpoint [m3/s] | 
| input RealInput | VColDucDis_flow | Measured cold duct discharge airflow rate [m3/s] | 
| input RealInput | uCooDam | Cooling damper position setpoint [1] | 
| input BooleanInput | uAftSupHea | After suppression period due to the heating setpoint change | 
| input RealInput | THeaSet | Zone heating setpoint temperature [K] | 
| input RealInput | uHea | Heating loop signal [1] | 
| input RealInput | VHotDuc_flow_Set | Hot duct discharge airflow rate setpoint [m3/s] | 
| input RealInput | VHotDucDis_flow | Measured hot duct discharge airflow rate [m3/s] | 
| input RealInput | uHeaDam | Heating damper position setpoint [1] | 
| output IntegerOutput | yZonCooTemResReq | Zone cooling supply air temperature reset request | 
| output IntegerOutput | yColDucPreResReq | Cold duct static pressure reset requests | 
| output IntegerOutput | yZonHeaTemResReq | Zone heating supply air temperature reset request | 
| output IntegerOutput | yHotDucPreResReq | Hot duct static pressure reset requests | 
| output IntegerOutput | yHeaFanReq | Heating fan request | 
Modelica definition
block SystemRequests 
  
parameter Real thrTemDif(
    
final unit="K",
    
final quantity="TemperatureDifference")=3
    ;
  
parameter Real twoTemDif(
    
final unit="K",
    
final quantity="TemperatureDifference")=2
    ;
  
parameter Real durTimTem(
    
final unit="s",
    
final quantity="Time")=120
    ;
  
parameter Real durTimFlo(
    
final unit="s",
    
final quantity="Time")=60
    ;
  
parameter Real dTHys(
    
final unit="K",
    
final quantity="TemperatureDifference")=0.25
    ;
  
parameter Real floHys(
    
final quantity="VolumeFlowRate",
    
final unit="m3/s")
    ;
  
parameter Real looHys(unit="1")
    ;
  
parameter Real damPosHys(
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uAftSupCoo
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput TCooSet(
    
final unit="K",
    
final displayUnit="degC",
    
final quantity="ThermodynamicTemperature")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon(
    
final unit="K",
    
final displayUnit="degC",
    
final quantity="ThermodynamicTemperature")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput uCoo(
    
final min=0,
    
final max=1,
    
final unit="1") ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VColDuc_flow_Set(
    
final min=0,
    
final unit="m3/s",
    quantity="VolumeFlowRate") ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VColDucDis_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput uCooDam(
    
final min=0,
    
final max=1,
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uAftSupHea
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaSet(
    
final unit="K",
    
final displayUnit="degC",
    
final quantity="ThermodynamicTemperature")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput uHea(
    
final min=0,
    
final max=1,
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VHotDuc_flow_Set(
    
final min=0,
    
final unit="m3/s",
    quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput VHotDucDis_flow(
    
final min=0,
    
final unit="m3/s",
    
final quantity="VolumeFlowRate")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.RealInput uHeaDam(
    
final min=0,
    
final max=1,
    
final unit="1")
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yZonCooTemResReq
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yColDucPreResReq
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yZonHeaTemResReq
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHotDucPreResReq
    ;
  
Buildings.Controls.OBC.CDL.Interfaces.IntegerOutput yHeaFanReq
    ;
protected 
  Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1(
    
final t=thrTemDif,
    
final h=dTHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr2(
    
final t=twoTemDif,
    
final h=dTHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr3(
    
final t=0.95,
    
final h=damPosHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(
    
final t=0.95,
    
final h=looHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr4(
    
final t=floHys,
    
final h=0.5*floHys)
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt1
    ;
  
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(
    
final k=0.5)
    ;
  
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2(
    
final k=0.7)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Subtract sub2
    ;
  
Buildings.Controls.OBC.CDL.Reals.Subtract sub3
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and1
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and2
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and3
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and4
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant thrCooResReq(
    
final k=3)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant twoCooResReq(
    
final k=2) ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant thrPreResReq(
    
final k=3) ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant twoPreResReq(
    
final k=2)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Switch intSwi
    ;
  
Buildings.Controls.OBC.CDL.Integers.Switch intSwi1
    ;
  
Buildings.Controls.OBC.CDL.Integers.Switch swi4
    ;
  
Buildings.Controls.OBC.CDL.Integers.Switch swi5
    ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay tim1(
    
final delayTime=durTimTem) ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay tim2(
    
final delayTime=durTimTem) ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay tim3(
    
final delayTime=durTimFlo) ;
  
Buildings.Controls.OBC.CDL.Reals.Greater greEqu(
final h=floHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Greater greEqu1(
final h=floHys)
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and5
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr7(
    
final t=thrTemDif,
    
final h=dTHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr8(
    
final t=twoTemDif,
    
final h=dTHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr9(
    
final t=0.95,
    
final h=damPosHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr10(
    
final t=0.95,
    
final h=looHys) ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr11(
    
final t=floHys,
    
final h=0.5*floHys)
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt4
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt5
    ;
  
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3(
    
final k=0.5)
    ;
  
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai4(
    
final k=0.7)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Subtract sub1
    ;
  
Buildings.Controls.OBC.CDL.Reals.Subtract sub4
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and6
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and7
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and8
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and9
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant thrCooResReq1(
    
final k=3)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant twoCooResReq1(
    
final k=2)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant thrPreResReq1(
    
final k=3)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Sources.Constant twoPreResReq1(
    
final k=2)
    ;
  
Buildings.Controls.OBC.CDL.Integers.Switch intSwi4
    ;
  
Buildings.Controls.OBC.CDL.Integers.Switch intSwi5
    ;
  
Buildings.Controls.OBC.CDL.Integers.Switch swi1
    ;
  
Buildings.Controls.OBC.CDL.Integers.Switch swi2
    ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay tim6(
    
final delayTime=durTimTem)
    ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay tim7(
    
final delayTime=durTimTem)
    ;
  
Buildings.Controls.OBC.CDL.Logical.TrueDelay tim8(
    
final delayTime=durTimFlo)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Greater greEqu2(
final h=floHys)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Greater greEqu3(
final h=floHys)
    ;
  
Buildings.Controls.OBC.CDL.Logical.And and10
    ;
  
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr12(
    
final t=0.15,
    
final h=looHys)
    ;
  
Buildings.Controls.OBC.CDL.Logical.Latch lat ;
  
Buildings.Controls.OBC.CDL.Reals.LessThreshold lesThr(
    
final t=0.01,
    
final h=looHys)
    ;
  
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt6
    ;
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;