Subsequences for economizer control
Information
This package contains subsequences for single zone VAV AHU economizer control.
Package Content
Name |
Description |
Enable
|
Single zone VAV AHU economizer enable/disable switch |
Limits
|
Single zone VAV AHU minimum outdoor air control - damper position limits |
Modulation
|
Outdoor and return air damper position modulation sequence for single zone VAV AHU |
Validation
|
Collection of validation models |
Single zone VAV AHU economizer enable/disable switch
Information
This is a single zone VAV AHU economizer enable/disable sequence
based on Section 5.18.7 and Section 5.1.17 of ASHRAE Guideline 36, May 2020. Additional
conditions included in the sequence are:
The economizer is disabled whenever the outdoor air conditions
exceed the economizer high limit cutoff setpoint plus the hysteresis low limit parameter
(TOutHigLimCutLow
or hOutHigLimCutLow
) as shown in the figure.
And the economizer is enabled whenever the outdoor air conditions are below the economizer
high limit cutoff setpoint plus the hysteresis high limit parameter (TOutHigLimCutHig
or
hOutHigLimCutHig
). This sequence allows for all device types listed in
ASHRAE 90.1-2013 and Title 24-2013.
In addition, the economizer is disabled without a delay whenever any of the
following is true
:
- supply fan is off,
-
zone state is
heating
,
-
freeze protection stage is not
0
.
The following state machine chart illustrates the transitions between enabling and disabling:
Parameters
Type | Name | Default | Description |
Conditional |
Boolean | use_enthalpy | true | Set to true to evaluate outdoor air (OA) enthalpy in addition to temperature |
Advanced |
Hysteresis |
Real | delTOutHys | 1 | Delta between the temperature hysteresis high and low limit [K] |
Real | delEntHys | 1000 | Delta between the enthalpy hysteresis high and low limits [J/kg] |
Commissioning |
Physical damper position limits |
Real | retDamPhy_max | 1 | Physically fixed maximum position of the return air damper [1] |
Real | retDamPhy_min | 0 | Physically fixed minimum position of the return air damper [1] |
Connectors
Type | Name | Description |
input RealInput | TOut | Outdoor air temperature [K] |
input RealInput | TCut | OA temperature high limit cutoff. For differential dry bulb temperature condition use return air temperature measurement [K] |
input RealInput | hOut | Outdoor air enthalpy [J/kg] |
input RealInput | hCut | OA enthalpy high limit cutoff. For differential enthalpy use return air enthalpy measurement [J/kg] |
input BooleanInput | u1SupFan | Supply fan on/off status signal |
input IntegerInput | uFreProSta | Freeze protection stage status signal |
input IntegerInput | uZonSta | Zone state status signal |
input RealInput | uOutDam_max | Maximum outdoor air damper position, get from damper position limits sequence [1] |
input RealInput | uOutDam_min | Minimum outdoor air damper position, get from damper position limits sequence [1] |
output RealOutput | yOutDam_max | Maximum outdoor air damper position [1] |
output RealOutput | yRetDam_max | Maximum return air damper position [1] |
output RealOutput | yRetDam_min | Minimum return air damper position [1] |
Modelica definition
block Enable
parameter Boolean use_enthalpy = true
;
parameter Real delTOutHys(
final unit="K",
final displayUnit="K",
final quantity="TemperatureDifference")=1
;
parameter Real delEntHys(
final unit="J/kg",
final quantity="SpecificEnergy")=1000
;
parameter Real retDamPhy_max(
final min=0,
final max=1,
final unit="1") = 1
;
parameter Real retDamPhy_min(
final min=0,
final max=1,
final unit="1") = 0
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TOut(
final unit="K",
final displayUnit="degC",
final quantity = "ThermodynamicTemperature")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TCut(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput hOut(
final unit="J/kg",
final quantity="SpecificEnergy")
if use_enthalpy
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput hCut(
final unit="J/kg",
final quantity="SpecificEnergy")
if use_enthalpy
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1SupFan
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uFreProSta
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uZonSta
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDam_max(
final unit="1",
final min=0,
final max=1)
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDam_min(
final unit="1",
final min=0,
final max=1)
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDam_max(
final min=0,
final max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDam_max(
final min=retDamPhy_min,
final max=retDamPhy_max,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDam_min(
final min=retDamPhy_min,
final max=retDamPhy_max,
final unit="1")
;
Buildings.Controls.OBC.CDL.Logical.And3 andEnaDis
;
Buildings.Controls.OBC.CDL.Logical.TrueFalseHold truFalHol(
trueHoldDuration=600) ;
protected
final parameter Real TOutHigLimCutHig(
final unit="K",
final displayUnit="K",
final quantity="TemperatureDifference") = 0
;
final parameter Real TOutHigLimCutLow = TOutHigLimCutHig - delTOutHys
;
final parameter Real hOutHigLimCutHig(
final unit="J/kg",
final quantity="SpecificEnergy") = 0
;
final parameter Real hOutHigLimCutLow = hOutHigLimCutHig - delEntHys
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant entSubst(
final k=false)
if not use_enthalpy
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyMin(
final k=retDamPhy_min)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyMax(
final k=retDamPhy_max)
;
Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutTem(
final uHigh=TOutHigLimCutHig,
final uLow=TOutHigLimCutLow)
;
Buildings.Controls.OBC.CDL.Continuous.Hysteresis hysOutEnt(
final uLow=hOutHigLimCutLow,
final uHigh=hOutHigLimCutHig)
if use_enthalpy
;
Buildings.Controls.OBC.CDL.Continuous.Subtract sub2
if use_enthalpy
;
Buildings.Controls.OBC.CDL.Continuous.Subtract sub1
;
Buildings.Controls.OBC.CDL.Continuous.Switch maxOutDam
;
Buildings.Controls.OBC.CDL.Continuous.Switch minRetDam
;
Buildings.Controls.OBC.CDL.Logical.Not not2
;
Buildings.Controls.OBC.CDL.Logical.And and1 ;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeProtectionStages.stage0)
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1(
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.ZoneStates.heating)
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu1
;
Buildings.Controls.OBC.CDL.Logical.Not not3
;
Buildings.Controls.OBC.CDL.Logical.Or or2
;
equation
connect(maxOutDam.y, yOutDam_max);
connect(TOut, sub1.u1);
connect(TCut, sub1.u2);
connect(sub1.y, hysOutTem.u);
connect(hOut, sub2.u1);
connect(hCut, sub2.u2);
connect(sub2.y, hysOutEnt.u);
connect(uOutDam_min, maxOutDam.u1);
connect(uOutDam_max, maxOutDam.u3);
connect(andEnaDis.y, not2.u);
connect(minRetDam.y, yRetDam_min);
connect(truFalHol.y, and1.u1);
connect(and1.y, andEnaDis.u1);
connect(u1SupFan, and1.u2);
connect(retDamPhyMax.y, minRetDam.u1);
connect(retDamPhyMin.y, minRetDam.u3);
connect(retDamPhyMax.y, yRetDam_max);
connect(not2.y, minRetDam.u2);
connect(not2.y, maxOutDam.u2);
connect(conInt.y,intEqu. u2);
connect(conInt1.y,intEqu1. u2);
connect(intEqu1.y,not3. u);
connect(uZonSta, intEqu1.u1);
connect(uFreProSta, intEqu.u1);
connect(intEqu.y, andEnaDis.u2);
connect(not3.y, andEnaDis.u3);
connect(hysOutTem.y, or2.u1);
connect(hysOutEnt.y, or2.u2);
connect(entSubst.y, or2.u2);
connect(or2.y, truFalHol.u);
end Enable;
Single zone VAV AHU minimum outdoor air control - damper position limits
Information
This block implements the single zone VAV AHU minimum outdoor air control with a single
common damper for minimum outdoor air and economizer functions based on outdoor airflow
setpoint (VOutMinSet_flow
) and supply fan speed (uSupFanSpe_actual
),
designed in line with Section 5.18.6 of ASHRAE Guidline 36, May 2020.
The controller is enabled when the supply fan is proven on (u1SupFan=true
),
the AHU operation mode uOpeMod
is Occupied, and Freeze protection stage
uFreProSta
is 1 or smaller. Otherwise the damper position limits are set to
their corresponding maximum and minimum physical or at commissioning fixed limits, as illustrated below:
If limit modulation is enabled, the outdoor air damper position yOutDamPosMin
is computed as
follows:
-
Calculate outdoor air damper position
yDam_VOutMin_curSpe
which ensures minimum outdoor airflow rate VOutMin_flow
at current supply fan speed uSupFanSpe_actual
as a linear
interpolation between the following values set at commissioning:
- minimum damper position at minimum fan speed for minimum outdoor airflow
outDamMinFloMinSpe
and
-
minimum damper position at maximum fan speed for minimum outdoor airflow
outDamMinFloMaxSpe
.
-
Calculate outdoor air damper position
yDam_VOutDes_curSpe
which ensures design outdoor airflow rate VOutDes_flow
at
current supply fan speed uSupFanSpe_actual
, as a linear
interpolation between the following values set at commissioning:
-
minimum damper position at minimum fan speed for design outdoor airflow
outDamDesFloMinSpe
and
-
minimum damper position at maximum fan speed for design outdoor airflow
outDamDesFloMaxSpe
.
-
Calculate outdoor air damper position
yOutDamPosMin
which ensures outdoor airflow setpoint VOutMinSet_flow
at current supply fan speed uSupFanSpe_actual
as a linear interpolation
between yDam_VOutMin_curSpe
and yDam_VOutDes_curSpe
, proportional to ratios of
VOutMinSet_flow
to VOutDes_flow
and VOutMin_flow
.
-
If outdoor airflow setpoint
VOutMinSet_flow
is zero, yOutDamPosMin
should be zero.
The chart below illustrates the OA damper position limit calculation:
Parameters
Type | Name | Default | Description |
Commissioning |
Damper position limits |
Real | supFanSpe_min | 0.1 | Minimum supply fan operation speed [1] |
Real | supFanSpe_max | 1 | Maximum supply fan operation speed [1] |
Real | outDamMinFloMinSpe | 0.4 | OA damper position to supply minimum outdoor airflow at minimum fan speed [1] |
Real | outDamMinFloMaxSpe | 0.3 | OA damper position to supply minimum outdoor airflow at maximum fan speed [1] |
Real | outDamDesFloMinSpe | 0.9 | OA damper position to supply design outdoor airflow at minimum fan speed [1] |
Real | outDamDesFloMaxSpe | 0.8 | OA damper position to supply design outdoor airflow at maximum fan speed [1] |
Real | VOutMin_flow | | Calculated minimum outdoor airflow rate [m3/s] |
Real | VOutDes_flow | | Calculated design outdoor airflow rate [m3/s] |
Physical damper position limits |
Real | outDamPhy_max | 1 | Physically fixed maximum position of the outdoor air damper [1] |
Real | outDamPhy_min | 0 | Physically fixed minimum position of the outdoor air damper [1] |
Advanced |
Real | floHys | 0.01 | Near zero flow rate, below which the flow rate or difference will be seen as zero [m3/s] |
Connectors
Type | Name | Description |
input RealInput | uSupFan_actual | Actual supply fan speed [1] |
input RealInput | VOutMinSet_flow | Minimum outdoor airflow setpoint [m3/s] |
input IntegerInput | uOpeMod | AHU operation mode status signal |
input IntegerInput | uFreProSta | Freeze protection status signal |
input BooleanInput | u1SupFan | Supply fan status signal |
output RealOutput | yOutDam_min | Minimum outdoor air damper position limit [1] |
output RealOutput | yOutDam_max | Maximum outdoor air damper position limit [1] |
Modelica definition
block Limits
parameter Real supFanSpe_min(
final min=0,
final max=1,
final unit="1") = 0.1 ;
parameter Real supFanSpe_max(
final min=0,
final max=1,
final unit="1") = 1 ;
parameter Real outDamMinFloMinSpe(
final min=outDamPhy_min,
final max=outDamPhy_max,
final unit="1") = 0.4
;
parameter Real outDamMinFloMaxSpe(
final min=outDamPhy_min,
final max=outDamPhy_max,
final unit="1") = 0.3
;
parameter Real outDamDesFloMinSpe(
final min=outDamMinFloMinSpe,
final max=outDamPhy_max,
final unit="1") = 0.9
;
parameter Real outDamDesFloMaxSpe(
final min=outDamMinFloMaxSpe,
final max=outDamPhy_max,
final unit="1") = 0.8
;
parameter Real VOutMin_flow(
final unit="m3/s",
final quantity="VolumeFlowRate") ;
parameter Real VOutDes_flow(
final unit="m3/s",
final quantity="VolumeFlowRate")
;
parameter Real outDamPhy_max(
final min=0,
final max=1,
final unit="1") = 1
;
parameter Real outDamPhy_min(
final min=0,
final max=1,
final unit="1") = 0
;
parameter Real floHys(
final unit="m3/s",
final quantity="VolumeFlowRate")=0.01
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uSupFan_actual(
final min=0,
final max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput VOutMinSet_flow(
final unit="m3/s",
final quantity="VolumeFlowRate",
final min=VOutMin_flow,
final max=VOutDes_flow)
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uFreProSta
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1SupFan
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDam_min(
final min=outDamPhy_min,
final max=outDamPhy_max,
final unit="1") ;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDam_max(
final min=outDamPhy_min,
final max=outDamPhy_max,
final unit="1") ;
protected
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanMinSig(
final k=supFanSpe_min) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMinSig(
final k=outDamPhy_min)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamPhyPosMaxSig(
final k=outDamPhy_max)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yFanMaxSig(
final k=supFanSpe_max) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutMin_minSpeSig(
final k=outDamMinFloMinSpe)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutDes_minSpeSig(
final k=outDamDesFloMinSpe)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutMin_maxSpeSig(
final k=outDamMinFloMaxSpe)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant yDam_VOutDes_maxSpeSig(
final k=outDamDesFloMaxSpe)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minVOutSig(
final k=VOutMin_flow) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant desVOutSig(
final k=VOutDes_flow) ;
Buildings.Controls.OBC.CDL.Continuous.Line yDam_VOutMin_curSpe(
final limitBelow=true,
final limitAbove=true)
;
Buildings.Controls.OBC.CDL.Continuous.Line yDam_VOutDes_curSpe(
final limitBelow=true,
final limitAbove=true)
;
Buildings.Controls.OBC.CDL.Continuous.Line minVOutSetCurFanSpePos(
final limitBelow=true,
final limitAbove=true)
;
Buildings.Controls.OBC.CDL.Continuous.Switch enaDis
;
Buildings.Controls.OBC.CDL.Logical.Not not1 ;
Buildings.Controls.OBC.CDL.Continuous.Switch enaDis1
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt(
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeProtectionStages.stage1)
;
Buildings.Controls.OBC.CDL.Integers.LessEqual intLesEqu
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1(
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied)
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 ;
Buildings.Controls.OBC.CDL.Logical.And3 and3 ;
Buildings.Controls.OBC.CDL.Continuous.Switch enaDis2
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(
final k=0)
;
Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold noZerMin(
final t=floHys,
final h=0.5*floHys) ;
equation
connect(minVOutSig.y, minVOutSetCurFanSpePos.x1);
connect(desVOutSig.y, minVOutSetCurFanSpePos.x2);
connect(yDam_VOutMin_curSpe.y, minVOutSetCurFanSpePos.f1);
connect(yDam_VOutDes_curSpe.y, minVOutSetCurFanSpePos.f2);
connect(yDam_VOutDes_minSpeSig.y, yDam_VOutDes_curSpe.f1);
connect(yDam_VOutDes_maxSpeSig.y, yDam_VOutDes_curSpe.f2);
connect(yDam_VOutMin_minSpeSig.y, yDam_VOutMin_curSpe.f1);
connect(yDam_VOutMin_maxSpeSig.y, yDam_VOutMin_curSpe.f2);
connect(uSupFan_actual, yDam_VOutMin_curSpe.u);
connect(yFanMaxSig.y, yDam_VOutMin_curSpe.x2);
connect(yFanMinSig.y, yDam_VOutMin_curSpe.x1);
connect(yFanMinSig.y, yDam_VOutDes_curSpe.x1);
connect(yFanMaxSig.y, yDam_VOutDes_curSpe.x2);
connect(VOutMinSet_flow, minVOutSetCurFanSpePos.u);
connect(uSupFan_actual, yDam_VOutDes_curSpe.u);
connect(not1.y, enaDis.u2);
connect(outDamPhyPosMinSig.y, enaDis.u1);
connect(minVOutSetCurFanSpePos.y, enaDis.u3);
connect(outDamPhyPosMinSig.y, enaDis1.u1);
connect(outDamPhyPosMaxSig.y, enaDis1.u3);
connect(enaDis1.y, yOutDam_max);
connect(not1.y, enaDis1.u2);
connect(uOpeMod, intEqu1.u1);
connect(conInt1.y, intEqu1.u2);
connect(intLesEqu.u2, conInt.y);
connect(uFreProSta, intLesEqu.u1);
connect(u1SupFan, and3.u1);
connect(intLesEqu.y, and3.u2);
connect(intEqu1.y, and3.u3);
connect(and3.y, not1.u);
connect(VOutMinSet_flow, noZerMin.u);
connect(noZerMin.y, enaDis2.u2);
connect(enaDis.y, enaDis2.u1);
connect(enaDis2.y, yOutDam_min);
connect(zer.y, enaDis2.u3);
end Limits;
Outdoor and return air damper position modulation sequence for single zone VAV AHU
Information
This is a single zone VAV AHU economizer modulation block. It calculates
the outdoor and return air damper positions based on the single zone VAV AHU
supply air temperature control loop signal. Economizer dampers are modulated
based on the calculated heating supply air temperature setpoint.
The implementation is in line with Section 5.18.5.1 and 5.18.5.2 of ASHRAE
Guidline 36, May 2020.
Damper positions are linearly mapped to
the supply air control loop signal. This is a final sequence in the
composite single zone VAV AHU economizer control sequence. Damper position
limits, which are the inputs to the sequence, are the outputs of
Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Limits and
Buildings.Controls.OBC.ASHRAE.G36.AHUs.SingleZone.VAV.Economizers.Subsequences.Enable
sequences.
When the economizer is enabled, the PI controller modulates the damper
positions. Return and outdoor damper are not interlocked. When the economizer is disabled,
the damper positions are set to the minimum outdoor air damper position limits.
The figures below show the input-output structure and an economizer damper
modulation sequence assuming a well configured controller.
Control diagram:
Single zone AHU economizer modulation control chart:
Parameters
Type | Name | Default | Description |
Boolean | have_heaCoi | true | True if the air handling unit has heating coil |
SimpleController | controllerType | Buildings.Controls.OBC.CDL.T... | Type of controller |
Real | k | 1 | Gain of controller [1/K] |
Real | Ti | 300 | Time constant of modulation controller integrator block [s] |
Real | Td | 0.1 | Time constant of derivative block for cooling control loop signal [s] |
Real | uMin | 0.1 | Lower limit of controller output uTSup at which the dampers are at their limits [1] |
Real | uMax | 0.9 | Upper limit of controller output uTSup at which the dampers are at their limits [1] |
Connectors
Type | Name | Description |
input RealInput | TSup | Measured supply air temperature [K] |
input RealInput | TSupHeaEcoSet | Supply air temperature heating setpoint [K] |
input BooleanInput | u1SupFan | Supply fan status |
input RealInput | uOutDam_min | Minimum economizer damper position limit as returned by the damper position limits sequence [1] |
input RealInput | uOutDam_max | Maximum economizer damper position limit as returned by the economizer enable-disable sequence.
If the economizer is disabled, this value equals uOutDamPosMin [1] |
input RealInput | uRetDam_min | Minimum return air damper position limit as returned by the economizer enable-disable sequence [1] |
input RealInput | uRetDam_max | Maximum return air damper position limit as returned by the economizer enable-disable sequence [1] |
output RealOutput | yHeaCoi | Heating coil commanded valve position [1] |
output RealOutput | yOutDam | Economizer damper commanded position [1] |
output RealOutput | yRetDam | Return air damper commanded position [1] |
Modelica definition
block Modulation
parameter Boolean have_heaCoi = true
;
parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType=
Buildings.Controls.OBC.CDL.Types.SimpleController.PI
;
parameter Real k(
final unit="1/K") = 1 ;
parameter Real Ti(
final unit="s",
final quantity="Time")=300
;
parameter Real Td(
final unit="s",
final quantity="Time")=0.1
;
parameter Real uMin(
final min=0.1,
final max=0.9,
final unit="1") = 0.1
;
parameter Real uMax(
final min=0.1,
final max=1,
final unit="1") = 0.9
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TSup(
final unit="K",
final displayUnit="degC",
final quantity = "ThermodynamicTemperature")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput TSupHeaEcoSet(
final unit="K",
final displayUnit="degC",
final quantity="ThermodynamicTemperature")
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1SupFan
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDam_min(
final min=0,
final max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDam_max(
final min=0,
final max=1,
final unit="1") ;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uRetDam_min(
final min=0,
final max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uRetDam_max(
final min=0,
final max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yHeaCoi(
final min=0,
final max=1,
final unit="1")
if have_heaCoi ;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yOutDam(
final min=0,
final max=1,
final unit="1") ;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDam(
final min=0,
final max=1,
final unit="1") ;
Buildings.Controls.OBC.CDL.Continuous.PIDWithReset uTSup(
final controllerType=controllerType,
final k=k,
final Ti=Ti,
final Td=Td,
final yMax=1,
final yMin=0)
;
protected
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant outDamMinLimSig(
final k=uMin) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamMaxLimSig(
final k=uMax) ;
Buildings.Controls.OBC.CDL.Continuous.Line outDamPos(
final limitBelow=true,
final limitAbove=true)
;
Buildings.Controls.OBC.CDL.Continuous.Line retDamPos(
final limitBelow=true,
final limitAbove=true)
;
Buildings.Controls.OBC.CDL.Continuous.Line HeaCoi(
final limitBelow=true,
final limitAbove=true)
if have_heaCoi
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoiMaxLimSig(
final k=1)
if have_heaCoi
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaCoiMinLimSig(
final k=0)
if have_heaCoi
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant uMaxHeaCoi(
final k=1)
;
Buildings.Controls.OBC.CDL.Continuous.Switch enaDis
if have_heaCoi
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant Off(
final k=0)
if have_heaCoi
;
equation
connect(retDamMaxLimSig.y,retDamPos. x2);
connect(uTSup.y, retDamPos.u);
connect(uTSup.y, outDamPos.u);
connect(outDamMinLimSig.y, outDamPos.x1);
connect(retDamMaxLimSig.y, outDamPos.x2);
connect(outDamMinLimSig.y, retDamPos.x1);
connect(HeaCoi.u, retDamPos.u);
connect(TSupHeaEcoSet, uTSup.u_s);
connect(TSup, uTSup.u_m);
connect(heaCoiMinLimSig.y, HeaCoi.f1);
connect(heaCoiMaxLimSig.y, HeaCoi.f2);
connect(retDamMaxLimSig.y, HeaCoi.x1);
connect(uMaxHeaCoi.y, HeaCoi.x2);
connect(uOutDam_min, outDamPos.f2);
connect(uRetDam_min, retDamPos.f1);
connect(uRetDam_max, retDamPos.f2);
connect(Off.y, enaDis.u3);
connect(u1SupFan, enaDis.u2);
connect(HeaCoi.y, enaDis.u1);
connect(enaDis.y, yHeaCoi);
connect(uOutDam_max, outDamPos.f1);
connect(retDamPos.y, yRetDam);
connect(outDamPos.y, yOutDam);
connect(u1SupFan, uTSup.trigger);
end Modulation;