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

Output setpoints for AHU control

Information

This package contains sequences generating setpoints for single zone VAV AHU control.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.ExhaustDamper ExhaustDamper Control of actuated exhaust dampers without fans
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.OutsideAirFlow OutsideAirFlow Output the minimum outdoor airflow rate setpoint for systems with a single zone
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.Supply Supply Supply air set point for single zone VAV system
Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.Validation Validation Collection of validation models

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

Control of actuated exhaust dampers without fans

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

Information

Control sequence for exhaust dampers without fans. It is implemented according to ASHRAE Guidline 35 (G36), PART 5.N.8.(for multi zone VAV AHU), PART 5.P.6 and PART3.2B.3 (for single zone VAV AHU).

Single zone VAV AHU: Control of actuated exhaust dampers without fans (PART 5.P.6)

  1. Exhaust damper position setpoints (PART3.2B.3)
    • minExhDamPos is the exhaust damper position that maintains a building pressure of 12 Pa (0.05 inchWC) while the system is at minOutPosMin (i.e., the economizer damper is positioned to provide minimum outdoor air while the supply fan is at minimum speed).
    • maxExhDamPos is the exhaust damper position that maintains a building pressure of 12 Pa (0.05 inchWC) while the economizer damper is fully open and the fan speed is at cooling maximum.
  2. The exhaust damper is enabled when the associated supply fan is proven on and any outdoor air damper is open uOutDamPos > 0 and disabled and closed otherwise.
  3. The exhaust damper position is reset linearly from minExhDamPos to maxExhDamPos as the commanded economizer damper position goes from minOutPosMin to outDamPhyPosMax.

The control sequence is as follows:

Image of the exhaust damper control chart for single zone AHU

Parameters

TypeNameDefaultDescription
Nominal parameters
RealminExhDamPos0.2Exhaust damper position maintaining building static pressure at setpoint when the system is at minPosMin [1]
RealmaxExhDamPos0.9Exhaust damper position maintaining building static pressure at setpoint when outdoor air damper is fully open and fan speed is at cooling maximum [1]
RealminOutPosMin0.4Outdoor air damper position when fan operating at minimum speed to supply minimum outdoor air flow [1]
RealoutDamPhyPosMax1Physical or at the comissioning fixed maximum position of the outdoor air damper [1]

Connectors

TypeNameDescription
input BooleanInputuSupFanSupply fan status
input RealInputuOutDamPosOutdoor air damper position [1]
output RealOutputyExhDamPosExhaust damper position [1]

Modelica definition

block ExhaustDamper "Control of actuated exhaust dampers without fans" parameter Real minExhDamPos( min=0, max=1, final unit="1") = 0.2 "Exhaust damper position maintaining building static pressure at setpoint when the system is at minPosMin"; parameter Real maxExhDamPos( min=0, max=1, final unit="1") = 0.9 "Exhaust damper position maintaining building static pressure at setpoint when outdoor air damper is fully open and fan speed is at cooling maximum"; parameter Real minOutPosMin( min=0, max=1, final unit="1") = 0.4 "Outdoor air damper position when fan operating at minimum speed to supply minimum outdoor air flow"; parameter Real outDamPhyPosMax( min=0, max=1, final unit="1")=1 "Physical or at the comissioning fixed maximum position of the outdoor air damper"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan status"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDamPos( min=0, max=1, final unit="1") "Outdoor air damper position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yExhDamPos( min=0, max=1, final unit="1") "Exhaust damper position"; Buildings.Controls.OBC.CDL.Continuous.Line exhDamPos "Linearly map exhaust damper position to the outdoor air damper position"; Buildings.Controls.OBC.CDL.Logical.Switch swi1 "Check if exhaust damper should be open"; Buildings.Controls.OBC.CDL.Continuous.Hysteresis greThr( final uLow=0.02, final uHigh=0.05) "Check if outdoor air damper is open"; Buildings.Controls.OBC.CDL.Logical.And and2 "Check if exhaust damper should be activated"; protected Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerDam( final k=0) "Close damper when disabled"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minExhDam( final k=minExhDamPos) "Exhaust damper position maintaining building static pressure at setpoint while the system is at minPosMin"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxExhDam( final k=maxExhDamPos) "Exhaust damper position maintaining building static pressure at setpoint when outdoor air damper is fully open and fan speed is at cooling maximum"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minPosAtMinSpd( final k=minOutPosMin) "Outdoor air damper position when fan operating at minimum speed to supply minimum outdoor air flow"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig( final k=outDamPhyPosMax) "Physical or at the comissioning fixed maximum position of the outdoor air damper"; equation connect(outDamPhyPosMaxSig.y, exhDamPos.x2); connect(maxExhDam.y, exhDamPos.f2); connect(uOutDamPos, exhDamPos.u); connect(zerDam.y, swi1.u3); connect(and2.y, swi1.u2); connect(minPosAtMinSpd.y, exhDamPos.x1); connect(minExhDam.y, exhDamPos.f1); connect(uOutDamPos, greThr.u); connect(uSupFan, and2.u2); connect(greThr.y, and2.u1); connect(exhDamPos.y, swi1.u1); connect(swi1.y, yExhDamPos); end ExhaustDamper;

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.OutsideAirFlow Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.OutsideAirFlow

Output the minimum outdoor airflow rate setpoint for systems with a single zone

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.OutsideAirFlow

Information

This atomic sequence sets the minimum outdoor airflow setpoint for compliance with the ventilation rate procedure of ASHRAE 62.1-2013. The implementation is according to ASHRAE Guidline 36 (G36), PART 5.P.4.b, PART 5.B.2.b, PART3.1-D.2.a.

Step 1: Minimum breathing zone outdoor airflow required breZon

The number of occupant occCou could be retrieved directly from occupancy sensor nOcc if the sensor exists (have_occSen=true), or using the default occupant density occDen to find it AFlo*occDen. The occupant density can be found from Table 6.2.2.1 in ASHRAE Standard 62.1-2013.

Step 2: Zone air-distribution effectiveness zonDisEff

Table 6.2.2.2 in ASHRAE 62.1-2013 lists some typical values for setting the effectiveness. Depending on difference between zone space temperature TZon and supply air temperature TDis, Warm-air effectiveness zonDisEffHea or Cool-air effectiveness zonDisEffCoo should be applied.

Step 3: Minimum required zone outdoor airflow zonOutAirRate

For each zone in any mode other than occupied mode and for zones that have window switches and the window is open, zonOutAirRate shall be zero. Otherwise, the required zone outdoor airflow zonOutAirRate shall be calculated as follows:

If the zone is populated, or if there is no occupancy sensor: If the zone has an occupancy sensor and is unpopulated:

For the single zone system, the required minimum outdoor airflow setpoint VOutMinSet_flow equals to the zonOutAirRate.

Parameters

TypeNameDefaultDescription
Booleanhave_occSen Set to true if zones have occupancy sensor
RealoccDen0.05Default number of person in unit area [1/m2]
RealzonDisEffHea0.8Zone air distribution effectiveness during heating [1]
RealzonDisEffCoo1.0Zone air distribution effectiveness during cooling [1]
Nominal condition
RealVOutPerAre_flow3e-4Outdoor air rate per unit area [m3/(s.m2)]
RealVOutPerPer_flow2.5e-3Outdoor air rate per person [m3/s]
RealAFloAFlo(final unit="m2", final ...Floor area [m2]
Advanced
RealuLow-0.5If zone space temperature minus supply air temperature is less than uLow, then it should use heating supply air distribution effectiveness [K]
RealuHig0.5If zone space temperature minus supply air temperature is more than uHig, then it should use cooling supply air distribution effectiveness [K]

Connectors

TypeNameDescription
input RealInputnOccNumber of occupants [1]
input RealInputTZonMeasured zone air temperature [K]
input RealInputTDisMeasured discharge air temperature [K]
input IntegerInputuOpeModAHU operation mode status signal
input BooleanInputuSupFanSupply fan status, true if on, false if off
input BooleanInputuWinWindow status, true if open, false if closed
output RealOutputVOutMinSet_flowEffective minimum outdoor airflow setpoint [m3/s]

Modelica definition

block OutsideAirFlow "Output the minimum outdoor airflow rate setpoint for systems with a single zone" parameter Real VOutPerAre_flow( final unit="m3/(s.m2)") = 3e-4 "Outdoor air rate per unit area"; parameter Real VOutPerPer_flow( final unit="m3/s", final quantity="VolumeFlowRate")= 2.5e-3 "Outdoor air rate per person"; parameter Real AFlo( final unit="m2", final quantity="Area") "Floor area"; parameter Boolean have_occSen "Set to true if zones have occupancy sensor"; parameter Real occDen(final unit="1/m2") = 0.05 "Default number of person in unit area"; parameter Real zonDisEffHea(final unit="1") = 0.8 "Zone air distribution effectiveness during heating"; parameter Real zonDisEffCoo(final unit="1") = 1.0 "Zone air distribution effectiveness during cooling"; parameter Real uLow( final unit="K", final displayUnit="K", final quantity="TemperatureDifference") = -0.5 "If zone space temperature minus supply air temperature is less than uLow, then it should use heating supply air distribution effectiveness"; parameter Real uHig( final unit="K", final displayUnit="K", final quantity="TemperatureDifference") = 0.5 "If zone space temperature minus supply air temperature is more than uHig, then it should use cooling supply air distribution effectiveness"; Buildings.Controls.OBC.CDL.Interfaces.RealInput nOcc(final unit="1") if have_occSen "Number of occupants"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Measured zone air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TDis( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Measured discharge air temperature"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "AHU operation mode status signal"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSupFan "Supply fan status, true if on, false if off"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWin "Window status, true if open, false if closed"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VOutMinSet_flow( min=0, final unit="m3/s", final quantity="VolumeFlowRate") "Effective minimum outdoor airflow setpoint"; protected Buildings.Controls.OBC.CDL.Continuous.Add breZon "Breathing zone airflow"; Buildings.Controls.OBC.CDL.Continuous.Add add2(final k1=+1, final k2=-1) "Zone space temperature minus supply air temperature"; Buildings.Controls.OBC.CDL.Continuous.Gain gai(final k=VOutPerPer_flow) if have_occSen "Outdoor airflow rate per person"; Buildings.Controls.OBC.CDL.Logical.Switch swi "Switch for enabling occupancy sensor input"; Buildings.Controls.OBC.CDL.Logical.Switch swi1 "Switch between cooling or heating distribution effectiveness"; Buildings.Controls.OBC.CDL.Continuous.Division zonOutAirRate "Required zone outdoor airflow rate"; Buildings.Controls.OBC.CDL.Logical.Switch swi2 "If window is open or it is not in occupied mode, the required outdoor airflow rate should be zero"; Buildings.Controls.OBC.CDL.Logical.Switch swi3 "If supply fan is off, then outdoor airflow rate should be zero."; Buildings.Controls.OBC.CDL.Continuous.Hysteresis hys( uLow=uLow, uHigh=uHig, pre_y_start=true) "Check if cooling or heating air distribution effectiveness should be applied, with 1 degC deadband"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant occSen( final k=have_occSen) "Boolean constant to indicate if there is occupancy sensor"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerOutAir( final k=0) "Zero required outdoor airflow rate when window open or zone is not in occupied mode"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disEffHea( final k=zonDisEffHea) "Zone distribution effectiveness during heating"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant disEffCoo( final k=zonDisEffCoo) "Zone distribution effectiveness for cooling"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant breZonAre( final k=VOutPerAre_flow*AFlo) "Area component of the breathing zone outdoor airflow"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant breZonPop( final k=VOutPerPer_flow*AFlo*occDen) "Population component of the breathing zone outdoor airflow"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 "Check if operation mode is occupied"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant occMod( final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "Occupied mode index"; Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and"; Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerOcc(final k=0) if not have_occSen "Zero occupant when there is no occupancy sensor"; equation connect(breZonAre.y, breZon.u1); connect(gai.y, swi.u1); connect(breZonPop.y, swi.u3); connect(swi.y, breZon.u2); connect(disEffCoo.y, swi1.u1); connect(disEffHea.y, swi1.u3); connect(breZon.y, zonOutAirRate.u1); connect(swi1.y, zonOutAirRate.u2); connect(uWin, swi2.u2); connect(zerOutAir.y, swi2.u1); connect(zonOutAirRate.y, swi2.u3); connect(swi.u2, occSen.y); connect(nOcc, gai.u); connect(swi3.y, VOutMinSet_flow); connect(TZon, add2.u1); connect(TDis, add2.u2); connect(add2.y, hys.u); connect(hys.y, swi1.u2); connect(swi2.y, swi3.u3); connect(zerOutAir.y, swi3.u1); connect(and1.y, not1.u); connect(not1.y, swi3.u2); connect(uSupFan, and1.u1); connect(intEqu1.y, and1.u2); connect(uOpeMod, intEqu1.u1); connect(occMod.y, intEqu1.u2); connect(swi.u1, zerOcc.y); end OutsideAirFlow;

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.Supply Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.Supply

Supply air set point for single zone VAV system

Buildings.Controls.OBC.ASHRAE.G36_PR1.AHUs.SingleZone.VAV.SetPoints.Supply

Information

Block that outputs the set points for the supply air temperature for cooling, heating and economizer control, and the fan speed for a single zone VAV system.

For the temperature set points, the parameters are the maximum supply air temperature TSupSetMax, and the minimum supply air temperature for cooling TSupSetMin. The deadband temperature is equal to the average set point for the zone temperature for heating and cooling, as obtained from the input TZonSet, constraint to be within 21°C (≈70 F) and 24°C (≈75 F). The setpoints are computed as shown in the figure below. Note that the setpoint for the supply air temperature for heating and for economizer control is the same, and this setpoint is lower than TSupSetMin when the heating loop signal is zero and the economizer is in cooling mode, as shown in the figure.

For the fan speed set point, the parameters are the maximu fan speed at heating yHeaMax, the minimum fan speed yMin and the maximum fan speed for cooling yCooMax. For a cooling control signal of uCoo > 0.25, the speed is faster increased the larger the difference is between the zone temperature minus outdoor temperature TZon-TOut. The figure below shows the sequence.

Image of set point reset

The output TSupCoo is to be used to control the cooling coil, and the output TSupHeaEco is to be used to control the heating coil and the economizer dampers.

Note that the inputs uHea and uCoo must be computed based on the same temperature sensors and control loops.

Parameters

TypeNameDefaultDescription
Temperatures
RealTSupSetMaxTSupSetMax(final unit="K", f...Maximum supply air temperature for heating [K]
RealTSupSetMinTSupSetMin(final unit="K", f...Minimum supply air temperature for cooling [K]
Speed
RealyHeaMaxyHeaMax(min=0, max=1, unit="...Maximum fan speed for heating [1]
RealyMinyMin(min=0, max=1, unit="1")Minimum fan speed [1]
RealyCooMax1Maximum fan speed for cooling [1]

Connectors

TypeNameDescription
input RealInputuHeaHeating control signal [1]
input RealInputuCooCooling control signal [1]
input RealInputTZonSetAverage of heating and cooling setpoints for zone temperature [K]
input RealInputTZonZone temperature [K]
input RealInputTOutOutdoor air temperature [K]
output RealOutputTSupHeaEcoTemperature setpoint for heating coil and for economizer [K]
output RealOutputTSupCooCooling supply air temperature setpoint [K]
output RealOutputyFan speed [1]
input BooleanInputuFanSupply fan status

Modelica definition

block Supply "Supply air set point for single zone VAV system" parameter Real TSupSetMax( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Maximum supply air temperature for heating"; parameter Real TSupSetMin( final unit="K", final displayUnit="degC", final quantity="ThermodynamicTemperature") "Minimum supply air temperature for cooling"; parameter Real yHeaMax(min=0, max=1, unit="1") "Maximum fan speed for heating"; parameter Real yMin(min=0, max=1, unit="1") "Minimum fan speed"; parameter Real yCooMax(min=0, max=1, unit="1") = 1 "Maximum fan speed for cooling"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uHea(min=0, max=1, unit="1") "Heating control signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uCoo(min=0, max=1, unit="1") "Cooling control signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZonSet(unit="K", displayUnit="degC") "Average of heating and cooling setpoints for zone temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TZon(unit="K", displayUnit="degC") "Zone temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut(unit="K", displayUnit="degC") "Outdoor air temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupHeaEco(unit="K", displayUnit="degC") "Temperature setpoint for heating coil and for economizer"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TSupCoo(unit="K", displayUnit="degC") "Cooling supply air temperature setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput y(min=0, max=1, unit="1") "Fan speed"; CDL.Interfaces.BooleanInput uFan "Supply fan status"; CDL.Logical.Switch switch "Switch to assign control signal"; CDL.Continuous.Sources.Constant fanOff(k=0) "Fan off status"; protected Buildings.Controls.OBC.CDL.Continuous.Line TSetCooHig "Table to compute the setpoint for cooling for uCoo = 0...1"; Buildings.Controls.OBC.CDL.Continuous.Line offSetTSetHea "Table to compute the setpoint offset for heating for uCoo = 0...1"; Buildings.Controls.OBC.CDL.Continuous.Add addTHe "Adder for heating setpoint calculation"; Buildings.Controls.OBC.CDL.Continuous.Line offSetTSetCoo "Table to compute the setpoint offset for cooling for uHea = 0...1"; Buildings.Controls.OBC.CDL.Continuous.Add addTSupCoo "Adder for cooling setpoint calculation"; Buildings.Controls.OBC.CDL.Continuous.Add dT(final k2=-1) "Difference zone minus outdoor temperature"; Buildings.Controls.OBC.CDL.Continuous.AddParameter yMed( final p=yCooMax - (yMin - yCooMax)/(0.56 - 5.6)*5.6, final k=(yMin - yCooMax)/(0.56 - 5.6)) "Fan speed at medium cooling load"; Buildings.Controls.OBC.CDL.Continuous.Limiter yMedLim( final uMax=yCooMax, final uMin=yMin) "Limiter for yMed"; Buildings.Controls.OBC.CDL.Continuous.Limiter TDea( final uMax=24 + 273.15, final uMin=21 + 273.15) "Limiter that outputs the dead band value for the supply air temperature"; Buildings.Controls.OBC.CDL.Continuous.Line TSetHeaHig "Block to compute the setpoint for heating for uHea = 0...1"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con0( final k=0) "Contant that outputs zero"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con25( final k=0.25) "Contant that outputs 0.25"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con05( final k=0.5) "Contant that outputs 0.5"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con75( final k=0.75) "Contant that outputs 0.75"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTSupSetMax( final k=TSupSetMax) "Constant that outputs TSupSetMax"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conTSupSetMin( final k=TSupSetMin) "Constant that outputs TSupSetMin"; Buildings.Controls.OBC.CDL.Continuous.Add TDeaTSupSetMin( final k2=-1) "Outputs TDea-TSupSetMin"; Buildings.Controls.OBC.CDL.Continuous.AddParameter addTDea( final p=-1.1, final k=-1) "Adds constant offset"; Buildings.Controls.OBC.CDL.Continuous.Add TSupSetMaxTDea( final k2=-1) "Outputs TSupSetMax-TDea"; Buildings.Controls.OBC.CDL.Continuous.Line yHea "Fan speed for heating"; Buildings.Controls.OBC.CDL.Continuous.Line lin050( final limitBelow=true, final limitAbove=true) "Linear increase in control signal for 0 < yCoo < 0.75"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con025( final k=0.25) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1( final k=0.5) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con2( final k=1) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con3( final k=0) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con4( final k=yCooMax - yMin) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.Add dY075( final k2=-1, final k1=1) "Change in control signal above yMedLim for y > 0.75"; Buildings.Controls.OBC.CDL.Continuous.Line lin075( final limitBelow=true, final limitAbove=true) "Linear increase in control signal for 0.75 < yCoo"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con5( final k=0.75) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con6( final k=0) "Constant signal"; Buildings.Controls.OBC.CDL.Continuous.AddParameter yOffSet( final p=-yMin, k=1) "Subtract yMin so that all control signals can be added"; Buildings.Controls.OBC.CDL.Continuous.Add addHeaCoo( final k1=1, final k2=1) "Add heating control signal and offset due to cooling"; Buildings.Controls.OBC.CDL.Continuous.Add offCoo( final k1=1, final k2=1) "Offset of control signal (relative to heating signal) for cooling"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con7(final k=0.5) "Contant that outputs 0.5"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSpe(final k=yMin) "Contant that outputs minimum fan speed"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conOne(final k=1) "Contant that outputs 1"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxHeaSpe(final k=yHeaMax) "Contant that outputs maximum fan speed for heating"; equation connect(offSetTSetHea.u, uCoo); connect(offSetTSetHea.y, addTHe.u2); connect(addTHe.y, TSupHeaEco); connect(TSetCooHig.y, addTSupCoo.u1); connect(offSetTSetCoo.y, addTSupCoo.u2); connect(TSetCooHig.u, uCoo); connect(offSetTSetCoo.u, uHea); connect(addTSupCoo.y, TSupCoo); connect(dT.u1, TZon); connect(dT.u2, TOut); connect(dT.y, yMed.u); connect(yMedLim.u, yMed.y); connect(TDea.u, TZonSet); connect(TDea.y, TSetHeaHig.f1); connect(con05.y, TSetHeaHig.x2); connect(conTSupSetMax.y, TSetHeaHig.f2); connect(uHea, TSetHeaHig.u); connect(TSetHeaHig.y, addTHe.u1); connect(con0.y, offSetTSetHea.x1); connect(con25.y, offSetTSetHea.x2); connect(con0.y, offSetTSetHea.f1); connect(TDea.y, TDeaTSupSetMin.u1); connect(conTSupSetMin.y, TDeaTSupSetMin.u2); connect(TDeaTSupSetMin.y, addTDea.u); connect(addTDea.y, offSetTSetHea.f2); connect(TSetCooHig.x1, con05.y); connect(TSetCooHig.f1, TDea.y); connect(TSetCooHig.x2, con75.y); connect(TSetCooHig.f2, conTSupSetMin.y); connect(offSetTSetCoo.f1, con0.y); connect(offSetTSetCoo.x1, con0.y); connect(offSetTSetCoo.x2, con05.y); connect(TSupSetMaxTDea.u1, conTSupSetMax.y); connect(TDea.y, TSupSetMaxTDea.u2); connect(TSupSetMaxTDea.y, offSetTSetCoo.f2); connect(uCoo, lin050.u); connect(dY075.u1, con4.y); connect(lin075.x2, con2.y); connect(lin075.x1, con5.y); connect(uCoo, lin075.u); connect(yMedLim.y, yOffSet.u); connect(dY075.u2, yOffSet.y); connect(offCoo.u1, lin050.y); connect(offCoo.u2, lin075.y); connect(offCoo.y, addHeaCoo.u2); connect(lin050.x2, con1.y); connect(con025.y, lin050.x1); connect(lin050.f2, yOffSet.y); connect(con3.y, lin050.f1); connect(dY075.y, lin075.f2); connect(con6.y, lin075.f1); connect(TSetHeaHig.x1, con0.y); connect(con7.y, yHea.x1); connect(minSpe.y, yHea.f1); connect(uHea, yHea.u); connect(conOne.y, yHea.x2); connect(maxHeaSpe.y, yHea.f2); connect(yHea.y, addHeaCoo.u1); connect(uFan, switch.u2); connect(addHeaCoo.y, switch.u1); connect(fanOff.y, switch.u3); connect(switch.y, y); end Supply;