Collection of validation models
Information
This package contains validation models.
Package Content
Name |
Description |
ControlDifferentialPressure
|
Validation model for the differential pressure control of variable speed pumps |
ResetLocalDifferentialPressure
|
Validation model for the local differential pressure reset |
StagingHeadered
|
Validation model for staging of headered pumps |
StagingHeaderedDeltaP
|
Validation model for staging of headered variable speed pumps using ∆p pump speed control |
Validation model for the differential pressure control of variable speed pumps
Information
This model validates
Buildings.Templates.Plants.Controls.Pumps.Generic.ControlDifferentialPressure
in a configuration with two pumps and two remote DP sensors that either are
hardwired to the controller (component ctlDpRem
)
or are not hardwired to the controller, which uses a local DP sensor instead
(component ctlDpLoc
).
The simulation of this model shows that when any pump is proven on,
the controller is enabled and its output is
initially set to the minimum pump speed y_min
.
The minimum pump speed sets the lower limit of the controller output
for the entire time that the controller is enabled.
The output of the controller ctlDpRem
is driven by the most
demanding remote DP control loop, e.g.,
the controller output only drops when both loop input measurements are
above setpoints.
Without remote sensors hardwired to the controller, the pump speed is
driven by the highest local DP setpoint.
When no pump is proven on, the controller is disabled and its output
is set to 0 %.
Parameters
Type | Name | Default | Description |
Integer | nPum | 4 | Number of primary pumps that operate at design conditions |
Real | VPri_flow_nominal | 0.1 | Design primary flow rate |
Modelica definition
model ControlDifferentialPressure
parameter Integer nPum=4
;
parameter Real VPri_flow_nominal=0.1
;
Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ratDp(
table=[
0, 0.1, 0.5;
1, 1, 0.5;
1.5, 1, 0.2;
2, 0.1, 0.1],
timeScale=3600)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1Pum(
table=[
0, 0, 0;
2000, 1, 0;
6000, 0, 1;
8000, 0, 0],
period=8400)
;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter dpRemSet[2](
k={3E4, 2E4})
;
Buildings.Templates.Plants.Controls.Pumps.Generic.ControlDifferentialPressure
ctlDpRem(
have_senDpRemWir=true,
nPum=2,
nSenDpRem=2)
;
Buildings.Controls.OBC.CDL.Reals.MultiMax mulMax(
nin=2)
;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter dpLoc(
final k=5)
;
Buildings.Templates.Plants.Controls.Pumps.Generic.ControlDifferentialPressure
ctlDpLoc(
have_senDpRemWir=false,
nPum=2,
nSenDpRem=2)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin[2](
amplitude=0.1 * dpRemSet.k,
freqHz={2 / 8000, 4 / 8000},
each phase=3.1415926535898)
;
Buildings.Controls.OBC.CDL.Reals.Add dpRem[2]
;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter dpLocSet[2](
each final k=5)
;
equation
connect(y1Pum.y, ctlDpRem.y1_actual);
connect(mulMax.y, dpLoc.u);
connect(y1Pum.y, ctlDpLoc.y1_actual);
connect(dpLoc.y, ctlDpLoc.dpLoc);
connect(ratDp.y, dpRemSet.u);
connect(sin.y, dpRem.u2);
connect(dpRemSet.y, dpRem.u1);
connect(dpRemSet.y, ctlDpRem.dpRemSet);
connect(dpRem.y, ctlDpRem.dpRem);
connect(dpRem.y, mulMax.u);
connect(dpRemSet.y, dpLocSet.u);
connect(dpLocSet.y, ctlDpLoc.dpLocSet);
end ControlDifferentialPressure;
Validation model for the local differential pressure reset
Information
This model validates
Buildings.Templates.Plants.Controls.Pumps.Generic.ResetLocalDifferentialPressure.
The simulation of this model shows how the local DP
setpoint is reset by the controller resDpLoc
based on the variation of the remote differential pressure
around its setpoint.
The local DP setpoint remains bounded by
resDpLoc.dpLocSet_min
and resDpLoc.dpLocSet_max
.
Parameters
Type | Name | Default | Description |
Integer | nPum | 4 | Number of primary pumps that operate at design conditions |
Real | VPri_flow_nominal | 0.1 | Design primary flow rate |
Modelica definition
model ResetLocalDifferentialPressure
parameter Integer nPum=4
;
parameter Real VPri_flow_nominal=0.1
;
Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ratDp(
table=[
0, 0.1;
1, 1;
1.5, 1;
2, 0.1],
timeScale=3600)
;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter dpRemSet(
k=3E4)
;
Buildings.Templates.Plants.Controls.Pumps.Generic.ResetLocalDifferentialPressure
resDpLoc(
dpLocSet_max=1E5,
Ti=10)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin(
amplitude=0.1 * dpRemSet.k,
freqHz=4 / 8000,
phase=3.1415926535898)
;
Buildings.Controls.OBC.CDL.Reals.Add dpRem
;
equation
connect(sin.y, dpRem.u2);
connect(dpRemSet.y, resDpLoc.dpRemSet);
connect(dpRem.y, resDpLoc.dpRem);
connect(dpRemSet.y, dpRem.u1);
connect(ratDp.y[1], dpRemSet.u);
end ResetLocalDifferentialPressure;
Validation model for staging of headered pumps
Information
This model validates
Buildings.Templates.Plants.Controls.Pumps.Generic.StagingHeadered
with three plant equipment and three pumps and for the following configurations.
-
Dedicated primary pumps (component
staPumPriDed
):
the number of pumps commanded on matches the number of operating
equipment with a one-to-one relationship.
-
Headered primary pumps without ∆p control (component
staPumPriNoDp
):
the number of pumps commanded on matches the number of operating
equipment without a one-to-one relationship.
-
Headered primary pumps with ∆p control (component
staPumPriDp
):
the number of pumps commanded on does not match the number of operating
equipment but is rather related to the fractional flow rate.
The simulation also exhibits the lead/lag rotation of the primary pumps.
-
Headered secondary pumps with ∆p control (component
staPumSecDp
):
the number of pumps commanded on does not match the number of operating
equipment but is rather related to the fractional flow rate.
All pumps are disabled when the plant is disabled.
Parameters
Type | Name | Default | Description |
Integer | nEqu | 3 | Number of plant equipment |
Integer | nPum | nEqu | Number of pumps that operate at design conditions |
Real | V_flow_nominal | 0.1 | Design flow rate |
Modelica definition
model StagingHeadered
parameter Integer nEqu=3
;
parameter Integer nPum=nEqu
;
parameter Real V_flow_nominal=0.1
;
Buildings.Templates.Plants.Controls.Pumps.Generic.StagingHeadered staPumPriDp(
is_pri=true,
is_hdr=true,
is_ctlDp=true,
have_valInlIso=true,
have_valOutIso=true,
final nEqu=nEqu,
final nPum=nPum,
final V_flow_nominal=V_flow_nominal)
;
Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ratFlo(table=[0,0; 1,1; 1.5,
1; 2,0], timeScale=3600) ;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter VPri_flow(
final k=
V_flow_nominal)
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nPum]
;
Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol[nPum](
each
samplePeriod=1)
;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr[nPum]
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1(
table=[0,0,0,0; 0.1,1,0,0; 0.5,1,1,0; 1,1,1,1; 1.5,1,1,1; 2,0,1,1; 2.5,0,0,1;
3,0,0,0],
timeScale=3600,
period=10800)
;
Buildings.Templates.Plants.Controls.Pumps.Generic.StagingHeadered staPumSecDp(
is_pri=false,
is_hdr=true,
is_ctlDp=true,
have_valInlIso=true,
have_valOutIso=true,
final nEqu=nEqu,
final nPum=nPum,
final V_flow_nominal=V_flow_nominal)
;
Buildings.Templates.Plants.Controls.Pumps.Generic.StagingHeadered staPumPriNoDp(
is_pri=true,
is_hdr=true,
is_ctlDp=false,
have_valInlIso=true,
have_valOutIso=false,
final nEqu=nEqu,
final nPum=nPum,
final V_flow_nominal=V_flow_nominal)
;
Buildings.Templates.Plants.Controls.Pumps.Generic.StagingHeadered staPumPriDed(
is_pri=true,
is_hdr=false,
is_ctlDp=false,
have_valInlIso=true,
have_valOutIso=false,
final nEqu=nEqu,
final nPum=nPum,
final V_flow_nominal=V_flow_nominal)
;
equation
connect(ratFlo.y[1],VPri_flow. u);
connect(VPri_flow.y, staPumPriDp.V_flow);
connect(booToRea.y,zerOrdHol. u);
connect(zerOrdHol.y,greThr. u);
connect(staPumPriDp.y1, booToRea.u);
connect(greThr.y, staPumPriDp.u1Pum_actual);
connect(u1.y, staPumPriDp.u1ValInlIso);
connect(u1.y, staPumPriDp.u1ValOutIso);
connect(u1.y[1], staPumSecDp.u1Pla);
connect(greThr.y, staPumSecDp.u1Pum_actual);
connect(VPri_flow.y, staPumSecDp.V_flow);
connect(u1.y, staPumPriNoDp.u1ValInlIso);
connect(u1.y, staPumPriNoDp.u1Pum);
connect(greThr.y, staPumPriNoDp.u1Pum_actual);
connect(u1.y, staPumPriDed.u1Pum);
connect(greThr.y, staPumPriDed.u1Pum_actual);
end StagingHeadered;
Validation model for staging of headered variable speed pumps using ∆p pump speed control
Information
This model validates
Buildings.Templates.Plants.Controls.Pumps.Generic.StagingHeaderedDeltaP
in a configuration with four pumps.
The simulation of this model shows that when the lead pump is enabled,
the output of the staging controller is greater than or equal to one.
The number of enabled pumps increases and decreases with the varying
flow rate and under the condition of a minimum runtime of 10 min.
It remains greater than or equal to one as long as the lead pump remains
enabled.
When the lead pump is disabled, the number of enabled pumps is set
to 0. This transition is not subject to the minimum runtime.
Parameters
Type | Name | Default | Description |
Integer | nPum | 4 | Number of pumps that operate at design conditions |
Real | V_flow_nominal | 0.1 | Design flow rate |
Modelica definition
model StagingHeaderedDeltaP
parameter Integer nPum=4
;
parameter Real V_flow_nominal=0.1
;
Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ratFlo(
table=[
0, 0;
1, 1;
1.5, 1;
2, 0],
timeScale=3600)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable enaLea(
table=[
0, 1;
8000, 0],
period=8400)
;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter VPri_flow(
final k=V_flow_nominal)
;
Buildings.Templates.Plants.Controls.Pumps.Generic.StagingHeaderedDeltaP staPum(
final nPum=nPum,
final V_flow_nominal=V_flow_nominal)
;
Utilities.StageIndex idxSta(
have_inpAva=false,
final nSta=nPum,
final dtRun=staPum.dtRun)
;
Buildings.Controls.OBC.CDL.Integers.GreaterEqualThreshold y1[nPum](
final t={i
for i
in 1:nPum})
;
Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator rep(
nout=nPum)
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[nPum]
;
Buildings.Controls.OBC.CDL.Discrete.ZeroOrderHold zerOrdHol[nPum](
each samplePeriod=1)
;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr[nPum]
;
equation
connect(ratFlo.y[1], VPri_flow.u);
connect(VPri_flow.y, staPum.V_flow);
connect(staPum.y1Up, idxSta.u1Up);
connect(staPum.y1Dow, idxSta.u1Dow);
connect(rep.y, y1.u);
connect(enaLea.y[1], idxSta.u1Lea);
connect(idxSta.y, rep.u);
connect(y1.y, booToRea.u);
connect(booToRea.y, zerOrdHol.u);
connect(zerOrdHol.y, greThr.u);
connect(greThr.y, staPum.u1_actual);
end StagingHeaderedDeltaP;