Package of sequences to calculate the damper position limits of the economizer
Information
The package contains the calculation of economizer dampers position limits.
Package Content
Name |
Description |
Common
|
Outdoor air and return air damper position limits for units with common damper |
SeparateWithAFMS
|
Outdoor air and return air damper position limits for units with separated minimum outdoor air damper and airflow measurement |
SeparateWithDP
|
Outdoor air and return air damper position limits for units with separated minimum outdoor air damper and differential pressure control |
Validation
|
Collection of validation models |
Outdoor air and return air damper position limits for units with common damper
Information
This block models the multi zone VAV AHU minimum outdoor air control with a single
common damper for minimum outdoor air and economizer functions based on outdoor airflow
measurement, designed in line with the Section 5.16.6 of the ASHRAE Guideline 36, May 2020.
The controller is enabled when the supply fan is proven on (u1SupFan=true
) and
the AHU operation mode
Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes equals occupied
.
Otherwise the damper position limits are set to their corresponding maximum and minimum physical or at
commissioning fixed limits. The state machine chart below illustrates listed conditions:
The controller sets the outdoor and return damper position limits so
that the outdoor airflow rate VOut_flow
stays equal or above the
minimum outdoor air setpoint VOutMinSet_flow
. The fraction of the controller
output signal between yMin
and uRetDam_min
is
linearly mapped to the outdoor air damper minimal position yOutDam_min
while the fraction of the controller output between uRetDam_min
and
yMax
is linearly mapped to the return air damper maximum position
yRetDam_max
. Thus the dampers are not interlocked.
The following control charts show the input/output structure and an expected damper position
limits for a well configured controller.
The expected damper position limits vs. the control loop signal are as follows:
Parameters
Type | Name | Default | Description |
Controller |
SimpleController | controllerType | Buildings.Controls.OBC.CDL.T... | Type of controller |
Real | k | 0.05 | Gain of damper limit controller [1] |
Real | Ti | 120 | Time constant of damper limit controller integrator block [s] |
Real | Td | 0.1 | Time constant of damper limit controller derivative block [s] |
Commissioning |
Controller |
Real | uRetDam_min | 0.5 | Loop signal value to start decreasing the maximum return air damper position [1] |
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] |
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] |
Connectors
Type | Name | Description |
input RealInput | VOut_flow_normalized | Measured outdoor volumetric airflow rate, normalized by design minimum outdoor airflow rate [1] |
input RealInput | VOutMinSet_flow_normalized | Effective minimum outdoor airflow setpoint, normalized by design minimum outdoor airflow rate [1] |
input IntegerInput | uOpeMod | AHU operation mode status signal |
input BooleanInput | u1SupFan | Supply fan proven on |
output RealOutput | yOutDam_min | Minimum outdoor air damper position limit [1] |
output RealOutput | yOutDam_max | Maximum outdoor air damper position limit [1] |
output RealOutput | yRetDam_min | Minimum return air damper position limit [1] |
output RealOutput | yRetDam_max | Maximum return air damper position limit [1] |
output RealOutput | yRetDamPhy_max | Physical maximum return air damper position limit. Required as an input for the economizer enable disable sequence [1] |
output BooleanOutput | yEnaMinOut | True: enable minimum outdoor air control loop |
Modelica definition
block Common
parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType=
Buildings.Controls.OBC.CDL.Types.SimpleController.PI
;
parameter Real k(
final unit="1")=0.05 ;
parameter Real Ti(
final unit="s",
final quantity="Time")=120
;
parameter Real Td(
final unit="s",
final quantity="Time")=0.1
;
parameter Real uRetDam_min(
final min=yMin,
final max=yMax,
final unit="1") = 0.5
;
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
;
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
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput VOut_flow_normalized(
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput VOutMinSet_flow_normalized(
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod
;
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")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDam_min(
final min=retDamPhy_min,
final max=retDamPhy_max,
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 yRetDamPhy_max(
final min=0,
final max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yEnaMinOut
;
Buildings.Controls.OBC.CDL.Continuous.PIDWithReset damLimCon(
final controllerType=controllerType,
final k=k,
final Ti=Ti,
final Td=Td,
final yMax=yMax,
final yMin=yMin)
;
protected
parameter Real yMin=0 ;
parameter Real yMax=1 ;
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 retDamPhyPosMinSig(
final k=retDamPhy_min)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMaxSig(
final k=retDamPhy_max)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minSigLim(
final k=yMin)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxSigLim(
final k=yMax)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant sigFraForOutDam(
final k=uRetDam_min) ;
Buildings.Controls.OBC.CDL.Continuous.Line minOutDam(
final limitBelow=true,
final limitAbove=true)
;
Buildings.Controls.OBC.CDL.Continuous.Line minRetDam(
final limitBelow=true,
final limitAbove=true)
;
Buildings.Controls.OBC.CDL.Continuous.Switch retDamPosMinSwitch
;
Buildings.Controls.OBC.CDL.Continuous.Switch outDamPosMaxSwitch
;
Buildings.Controls.OBC.CDL.Logical.Not not1 ;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1(
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied)
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu
;
Buildings.Controls.OBC.CDL.Logical.And and3 ;
equation
connect(minRetDam.y, yRetDam_max);
connect(retDamPosMinSwitch.y, minRetDam.f2);
connect(sigFraForOutDam.y, minRetDam.x1);
connect(maxSigLim.y, minRetDam.x2);
connect(VOut_flow_normalized, damLimCon.u_m);
connect(VOutMinSet_flow_normalized, damLimCon.u_s);
connect(damLimCon.y, minRetDam.u);
connect(outDamPosMaxSwitch.y, minOutDam.f2);
connect(minSigLim.y, minOutDam.x1);
connect(sigFraForOutDam.y, minOutDam.x2);
connect(damLimCon.y, minOutDam.u);
connect(outDamPosMaxSwitch.y, yOutDam_max);
connect(minOutDam.y, yOutDam_min);
connect(retDamPhyPosMaxSig.y, retDamPosMinSwitch.u1);
connect(retDamPhyPosMaxSig.y, minRetDam.f1);
connect(retDamPhyPosMinSig.y, retDamPosMinSwitch.u3);
connect(outDamPhyPosMaxSig.y, outDamPosMaxSwitch.u3);
connect(outDamPhyPosMinSig.y, outDamPosMaxSwitch.u1);
connect(outDamPhyPosMinSig.y, minOutDam.f1);
connect(not1.y, retDamPosMinSwitch.u2);
connect(not1.y, outDamPosMaxSwitch.u2);
connect(retDamPosMinSwitch.y, yRetDam_min);
connect(retDamPhyPosMaxSig.y, yRetDamPhy_max);
connect(uOpeMod, intEqu.u1);
connect(conInt1.y, intEqu.u2);
connect(damLimCon.trigger, u1SupFan);
connect(and3.y, not1.u);
connect(intEqu.y, and3.u2);
connect(u1SupFan, and3.u1);
connect(and3.y, yEnaMinOut);
end Common;
Outdoor air and return air damper position limits for units with separated minimum outdoor air damper and airflow measurement
Information
Block that outputs the position limits of the return and outdoor air damper for units
with a separated minimum outdoor air damper and airflow measurement.
It is implemented according to Section 5.16.5 of the ASHRAE Guideline 36, May 2020.
Minimum outdoor air set point
Calculate the outdoor air set point with
Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.
Minimum outdoor air control loop
Minimum outdoor air control loop is enabled when the supply fan is proven ON
(u1SupFan=true
) and in occupied mode, and disabled and output set to
zero otherwise
The minimum outdoor airflow rate shall be maintained at the minimum outdoor air
set point by a reverse-acting control loop whose output is 0% to 100%.
From 0% to 50% loop output, the minimum outdoor air damper is opened from 0%
(minOutDamPhy_min
) to 100% (minOutDamPhy_max
).
Return air damper
-
Return air damper minimum outdoor air control is enabled when the minimum outdoor
air damper is fully open and the economizer outdoor air damper is less than a projected
position limit, which is 5% when supply fan speed is at 100% design speed proportionally
up to 80% when the fan is at minimum speed.
-
Return air damper minimum outdoor air control is disabled when the minimum outdoor
air damper is not fully open or the economizer outdoor air damper is 10% above the projected
position limit as determined above.
-
When enabled, the maximum return air damper set point is reduced from 100%
(
retDamPhy_max
) to 0% (retDamPhy_min
)
as the minimum outdoor air loop output rises from 50% to 100%.
Parameters
Type | Name | Default | Description |
Real | minSpe | | Minimum supply fan speed [1] |
Minimum OA control |
SimpleController | minOAConTyp | Buildings.Controls.OBC.CDL.T... | Type of minimum outdoor air controller |
Real | kMinOA | 1 | Gain of controller [1] |
Real | TiMinOA | 0.5 | Time constant of integrator block [s] |
Real | TdMinOA | 0.1 | Time constant of derivative block [s] |
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] |
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] |
Real | minOutDamPhy_max | 1 | Physically fixed maximum position of the minimum outdoor air damper [1] |
Real | minOutDamPhy_min | 0 | Physically fixed minimum position of the minimum outdoor air damper [1] |
Connectors
Type | Name | Description |
input RealInput | VOutMinSet_flow_normalized | Effective minimum outdoor airflow setpoint, normalized by design minimum outdoor airflow rate [1] |
input RealInput | VOut_flow_normalized | Measured outdoor volumetric airflow rate, normalized by design minimum outdoor airflow rate [1] |
input BooleanInput | u1SupFan | Supply fan proven on |
input IntegerInput | uOpeMod | AHU operation mode status signal |
input RealInput | uOutDam | Economizer outdoor air damper commanded position [1] |
input RealInput | uSupFan_actual | Actual supply fan speed [1] |
output RealOutput | yMinOutDam | Minimum outdoor air damper commanded position [1] |
output BooleanOutput | yEnaMinOut | True: enable minimum outdoor air control loop |
output RealOutput | yOutDam_min | Physically minimum outdoor air damper position limit [1] |
output RealOutput | yOutDam_max | Physically maximum outdoor air damper position limit [1] |
output RealOutput | yRetDam_min | Minimum return air damper position limit [1] |
output RealOutput | yRetDam_max | Maximum return air damper position limit [1] |
output RealOutput | yRetDamPhy_max | Physical maximum return air damper position limit. Required as an input for the economizer enable disable sequence [1] |
Modelica definition
block SeparateWithAFMS
parameter Real minSpe(
final unit="1",
final min=0,
final max=1)
;
parameter Buildings.Controls.OBC.CDL.Types.SimpleController minOAConTyp=
Buildings.Controls.OBC.CDL.Types.SimpleController.PI
;
parameter Real kMinOA(
final unit="1")=1 ;
parameter Real TiMinOA(
final unit="s",
final quantity="Time")=0.5 ;
parameter Real TdMinOA(
final unit="s",
final quantity="Time")=0.1 ;
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
;
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 minOutDamPhy_max(
final min=0,
final max=1,
final unit="1") = 1
;
parameter Real minOutDamPhy_min(
final min=0,
final max=1,
final unit="1") = 0
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput VOutMinSet_flow_normalized(
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput VOut_flow_normalized(
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1SupFan
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDam(
final min=0,
final max=1,
final unit="1") ;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uSupFan_actual(
final min=0,
final max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yMinOutDam(
final min=0,
final max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yEnaMinOut
;
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")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDam_min(
final min=retDamPhy_min,
final max=retDamPhy_max,
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 yRetDamPhy_max(
final min=0,
final max=1,
final unit="1")
;
protected
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1(
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied)
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu
;
Buildings.Controls.OBC.CDL.Logical.And enaMinCon
;
Buildings.Controls.OBC.CDL.Continuous.PIDWithReset minOACon(
final controllerType=minOAConTyp,
final k=kMinOA,
final Ti=TiMinOA,
final Td=TdMinOA,
final yMax=minOutDamPhy_max,
final yMin=minOutDamPhy_min)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zer(
final k=0) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(
final k=0.5) ;
Buildings.Controls.OBC.CDL.Continuous.Line minOutDamPos(
final limitBelow=true,
final limitAbove=true)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minOutDamPhyPosMinSig(
final k=minOutDamPhy_min)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minOutDamPhyPosMaxSig(
final k=minOutDamPhy_max)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(
final k=1) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1(
final k=0.05) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con2(
final k=0.8) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minFanSpe(
final k=minSpe) ;
Buildings.Controls.OBC.CDL.Continuous.Line moaP(
final limitBelow=true,
final limitAbove=true)
;
Buildings.Controls.OBC.CDL.Continuous.Less les(
final h=0.05)
;
Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(
final t=0.98,
final h=0.01)
;
Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(
final k=1.1)
;
Buildings.Controls.OBC.CDL.Continuous.Greater gre(
final h=0.05)
;
Buildings.Controls.OBC.CDL.Logical.And enaRetDamMin
;
Buildings.Controls.OBC.CDL.Logical.Latch enaDis
;
Buildings.Controls.OBC.CDL.Logical.Not cloMinDam
;
Buildings.Controls.OBC.CDL.Logical.Or disRetDamMin
;
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 retDamPhyPosMinSig(
final k=retDamPhy_min)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMaxSig(
final k=retDamPhy_max)
;
Buildings.Controls.OBC.CDL.Continuous.Switch retDamPosMinSwi
;
Buildings.Controls.OBC.CDL.Continuous.Switch retDamPosMaxSwi
;
Buildings.Controls.OBC.CDL.Continuous.Line maxRetDamPos(
final limitBelow=true,
final limitAbove=true)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con3(
final k=0.5) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con4(
final k=1) ;
equation
connect(uOpeMod, intEqu.u1);
connect(conInt1.y, intEqu.u2);
connect(intEqu.y, enaMinCon.u2);
connect(VOutMinSet_flow_normalized, minOACon.u_s);
connect(VOut_flow_normalized, minOACon.u_m);
connect(enaMinCon.y, minOACon.trigger);
connect(zer.y, minOutDamPos.x1);
connect(minOACon.y, minOutDamPos.u);
connect(minOutDamPhyPosMinSig.y, minOutDamPos.f1);
connect(con.y, minOutDamPos.x2);
connect(minOutDamPhyPosMaxSig.y, minOutDamPos.f2);
connect(minFanSpe.y, moaP.x1);
connect(con2.y, moaP.f1);
connect(uSupFan_actual, moaP.u);
connect(con1.y, moaP.f2);
connect(one.y, moaP.x2);
connect(uOutDam, les.u1);
connect(moaP.y, les.u2);
connect(moaP.y, gai.u);
connect(uOutDam, gre.u1);
connect(gai.y, gre.u2);
connect(minOutDamPos.y, greThr.u);
connect(les.y, enaRetDamMin.u2);
connect(greThr.y, enaRetDamMin.u1);
connect(greThr.y, cloMinDam.u);
connect(cloMinDam.y, disRetDamMin.u1);
connect(gre.y, disRetDamMin.u2);
connect(enaRetDamMin.y, enaDis.u);
connect(disRetDamMin.y, enaDis.clr);
connect(outDamPhyPosMinSig.y, yOutDam_min);
connect(outDamPhyPosMaxSig.y, yOutDam_max);
connect(retDamPhyPosMaxSig.y, yRetDamPhy_max);
connect(retDamPosMinSwi.y, yRetDam_min);
connect(con3.y, maxRetDamPos.x1);
connect(con4.y, maxRetDamPos.x2);
connect(retDamPhyPosMinSig.y, maxRetDamPos.f2);
connect(enaDis.y, retDamPosMaxSwi.u2);
connect(maxRetDamPos.y, retDamPosMaxSwi.u1);
connect(retDamPhyPosMinSig.y, retDamPosMaxSwi.u3);
connect(retDamPosMaxSwi.y, yRetDam_max);
connect(enaDis.y, retDamPosMinSwi.u2);
connect(retDamPhyPosMinSig.y, retDamPosMinSwi.u1);
connect(retDamPhyPosMaxSig.y, maxRetDamPos.f1);
connect(retDamPhyPosMaxSig.y, retDamPosMinSwi.u3);
connect(minOACon.y, maxRetDamPos.u);
connect(minOutDamPos.y, yMinOutDam);
connect(u1SupFan, enaMinCon.u1);
connect(enaMinCon.y, yEnaMinOut);
end SeparateWithAFMS;
Outdoor air and return air damper position limits for units with separated minimum outdoor air damper and differential pressure control
Information
Block that outputs the position limits of the return and outdoor air damper for units
with a separated minimum outdoor air damper and differential pressure control.
It is implemented according to Section 5.16.4 of the ASHRAE Guideline 36, May 2020.
Differential pressure setpoint across the minimum outdoor air damper
Open minimum outdoor air damper
Open minimum outdoor air damper when the supply air fan is proven ON and the system
is in occupied mode and the minimum differential pressure set point is greater
than zero. Damper shall be closed otherwise.
Return air damper
-
Return air damper minimum outdoor air control is enabled when the minimum outdoor
air damper is open and the economizer outdoor air damper is less than a projected
position limit, which is 5% when supply fan speed is at 100% design speed proportionally
up to 80% when the fan is at minimum speed.
-
Return air damper minimum outdoor air control is disabled when the minimum outdoor
air damper is closed or the economizer outdoor air damper is 10% above the projected
position limit as determined above.
-
When enabled, the maximum return air damper set point is modulated from 100% to 0%
to maintain the differential pressure across the minimum outdoor air damper at set
point.
Parameters
Type | Name | Default | Description |
VentilationStandard | venStd | | Ventilation standard, ASHRAE 62.1 or Title 24 |
Boolean | have_CO2Sen | false | True: some zones have CO2 sensor |
Real | dpAbsMinOutDam | 5 | Absolute minimum pressure difference across the minimum outdoor air damper. It provides the absolute minimum outdoor airflow [Pa] |
Real | dpDesMinOutDam | 20 | Design minimum pressure difference across the minimum outdoor air damper. It provides the design minimum outdoor airflow [Pa] |
Real | minSpe | | Minimum supply fan speed [1] |
DP control |
SimpleController | dpCon | Buildings.Controls.OBC.CDL.T... | Type of differential pressure setpoint controller |
Real | kDp | 1 | Gain of controller [1] |
Real | TiDp | 0.5 | Time constant of integrator block [s] |
Real | TdDp | 0.1 | Time constant of derivative block [s] |
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] |
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] |
Connectors
Type | Name | Description |
input RealInput | effAbsOutAir_normalized | Effective minimum outdoor airflow setpoint, normalized by the absolute outdoor airflow rate [1] |
input RealInput | uCO2Loo_max | Maximum zone CO2 control loop [1] |
input RealInput | effDesOutAir_normalized | Effective minimum outdoor airflow setpoint, normalized by the design outdoor airflow rate [1] |
input RealInput | dpMinOutDam | Measured pressure difference across the minimum outdoor air damper [Pa] |
input RealInput | VOutMinSet_flow_normalized | Effective minimum outdoor airflow setpoint, normalized by design minimum outdoor airflow rate [1] |
input BooleanInput | u1SupFan | Supply fan proven on |
input IntegerInput | uOpeMod | AHU operation mode status signal |
input RealInput | uOutDam | Economizer outdoor air damper commanded position [1] |
input RealInput | uSupFan_actual | Actual supply fan speed [1] |
output BooleanOutput | y1MinOutDam | Status of minimum outdoor air damper position, true means it's open |
output RealOutput | yOutDam_min | Physically minimum outdoor air damper position limit [1] |
output RealOutput | yOutDam_max | Physically maximum outdoor air damper position limit [1] |
output RealOutput | yRetDam_min | Minimum return air damper position limit [1] |
output RealOutput | yRetDam_max | Maximum return air damper position limit [1] |
output RealOutput | yRetDamPhy_max | Physical maximum return air damper position limit. Required as an input for the economizer enable disable sequence [1] |
Modelica definition
block SeparateWithDP
parameter Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard venStd
;
parameter Boolean have_CO2Sen=false
;
parameter Real dpAbsMinOutDam(
unit="Pa",
displayUnit="Pa")=5
;
parameter Real dpDesMinOutDam(
unit="Pa",
displayUnit="Pa")=20
;
parameter Real minSpe(unit="1")
;
parameter Buildings.Controls.OBC.CDL.Types.SimpleController dpCon=
Buildings.Controls.OBC.CDL.Types.SimpleController.PI
;
parameter Real kDp(unit="1")=1
;
parameter Real TiDp(unit="s")=0.5
;
parameter Real TdDp(unit="s")=0.1
;
parameter Real retDamPhy_max(unit="1")=1
;
parameter Real retDamPhy_min(unit="1")=0
;
parameter Real outDamPhy_max(unit="1")=1
;
parameter Real outDamPhy_min(unit="1")=0
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput effAbsOutAir_normalized(
final unit="1")
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uCO2Loo_max(
final unit="1")
if have_CO2Sen
and venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput effDesOutAir_normalized(
final unit="1")
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput dpMinOutDam(
final unit="Pa",
displayUnit="Pa",
final quantity="PressureDifference")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput VOutMinSet_flow_normalized(
final unit="1")
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1_2016
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1SupFan
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uOutDam(
final min=0,
final max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput uSupFan_actual(
final min=0,
final max=1,
final unit="1") ;
Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y1MinOutDam
;
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") ;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yRetDam_min(
final min=retDamPhy_min,
final max=retDamPhy_max,
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 yRetDamPhy_max(
final min=0,
final max=1,
final unit="1")
;
Buildings.Controls.OBC.CDL.Continuous.Multiply minDp
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1_2016
;
protected
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minDesDp(
final k=dpDesMinOutDam)
;
Buildings.Controls.OBC.CDL.Continuous.Multiply pro
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1_2016
;
Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(
final h=1)
;
Buildings.Controls.OBC.CDL.Continuous.Less les(
final h=0.05)
;
Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai(
final k=1.1)
;
Buildings.Controls.OBC.CDL.Continuous.Greater gre(
final h=0.05)
;
Buildings.Controls.OBC.CDL.Logical.Latch enaDis
;
Buildings.Controls.OBC.CDL.Logical.And enaRetDamMin
;
Buildings.Controls.OBC.CDL.Logical.Or disRetDamMin
;
Buildings.Controls.OBC.CDL.Logical.Not disMinDam ;
Buildings.Controls.OBC.CDL.Continuous.PIDWithReset maxRetDam(
final controllerType=dpCon,
final k=kDp,
final Ti=TiDp,
final Td=TdDp) ;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1(
final k=Buildings.Controls.OBC.ASHRAE.G36.Types.OperationModes.occupied)
;
Buildings.Controls.OBC.CDL.Integers.Equal intEqu
;
Buildings.Controls.OBC.CDL.Logical.And3 enaMinDam
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one(
final k=1) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minFanSpe(
final k=minSpe) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con(
final k=0.05) ;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant con1(
final k=0.8) ;
Buildings.Controls.OBC.CDL.Continuous.Line moaP(
final limitBelow=true,
final limitAbove=true)
;
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 retDamPhyPosMinSig(
final k=retDamPhy_min)
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant retDamPhyPosMaxSig(
final k=retDamPhy_max)
;
Buildings.Controls.OBC.CDL.Continuous.Switch retDamPosMaxSwi
;
Buildings.Controls.OBC.CDL.Continuous.Switch retDamPosMinSwi
;
Buildings.Controls.OBC.CDL.Continuous.Multiply pro1
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016
;
Buildings.Controls.OBC.CDL.Continuous.Multiply pro2
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minAbsDp(
final k=dpAbsMinOutDam)
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016
;
Buildings.Controls.OBC.CDL.Continuous.Line minDp1(
final limitAbove=true)
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one1(
final k=1)
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant hal(
final k=0.5)
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016
;
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant one2(
final k=1)
if not have_CO2Sen
and venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016
;
Buildings.Controls.OBC.CDL.Continuous.Multiply actAbsMinDp
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016
;
Buildings.Controls.OBC.CDL.Continuous.Multiply actDesMinDp
if venStd == Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.California_Title_24_2016
;
equation
connect(VOutMinSet_flow_normalized, pro.u1);
connect(VOutMinSet_flow_normalized, pro.u2);
connect(uOpeMod, intEqu.u1);
connect(conInt1.y, intEqu.u2);
connect(minDp.y, greThr.u);
connect(minFanSpe.y, moaP.x1);
connect(con1.y, moaP.f1);
connect(con.y, moaP.f2);
connect(one.y, moaP.x2);
connect(uSupFan_actual, moaP.u);
connect(uOutDam, les.u1);
connect(moaP.y, les.u2);
connect(uOutDam, gre.u1);
connect(gai.y, gre.u2);
connect(moaP.y, gai.u);
connect(enaMinDam.y, enaRetDamMin.u1);
connect(les.y, enaRetDamMin.u2);
connect(enaRetDamMin.y, enaDis.u);
connect(enaMinDam.y, disMinDam.u);
connect(disMinDam.y, disRetDamMin.u1);
connect(gre.y, disRetDamMin.u2);
connect(disRetDamMin.y, enaDis.clr);
connect(greThr.y, enaMinDam.u1);
connect(intEqu.y, enaMinDam.u3);
connect(minDp.y, maxRetDam.u_s);
connect(dpMinOutDam, maxRetDam.u_m);
connect(enaDis.y, maxRetDam.trigger);
connect(retDamPhyPosMaxSig.y, yRetDamPhy_max);
connect(enaDis.y, retDamPosMaxSwi.u2);
connect(maxRetDam.y, retDamPosMaxSwi.u1);
connect(retDamPosMaxSwi.y, yRetDam_max);
connect(retDamPhyPosMaxSig.y, retDamPosMaxSwi.u3);
connect(enaDis.y, retDamPosMinSwi.u2);
connect(retDamPhyPosMinSig.y, retDamPosMinSwi.u1);
connect(retDamPhyPosMaxSig.y, retDamPosMinSwi.u3);
connect(retDamPosMinSwi.y, yRetDam_min);
connect(outDamPhyPosMinSig.y, yOutDam_min);
connect(outDamPhyPosMaxSig.y, yOutDam_max);
connect(enaMinDam.y, y1MinOutDam);
connect(u1SupFan, enaMinDam.u2);
connect(effAbsOutAir_normalized, pro1.u1);
connect(effAbsOutAir_normalized, pro1.u2);
connect(effDesOutAir_normalized, pro2.u1);
connect(effDesOutAir_normalized, pro2.u2);
connect(pro1.y, actAbsMinDp.u2);
connect(minAbsDp.y, actAbsMinDp.u1);
connect(minDesDp.y, actDesMinDp.u2);
connect(pro2.y, actDesMinDp.u1);
connect(pro.y, minDp.u2);
connect(minDesDp.y, minDp.u1);
connect(uCO2Loo_max, minDp1.u);
connect(actAbsMinDp.y, minDp1.f1);
connect(actDesMinDp.y, minDp1.f2);
connect(hal.y, minDp1.x1);
connect(one1.y, minDp1.x2);
connect(minDp1.y, maxRetDam.u_s);
connect(minDp1.y, greThr.u);
connect(one2.y, minDp1.u);
end SeparateWithDP;