Collection of validation models
Information
This package contains validation models.
Package Content
| Name |
Description |
AssertMinimumRuntime
|
Validation model for the assertion of minimum runtime and off-time |
EquipmentAvailability
|
Validation model for the evaluation of equipment availability |
EventSequencingMultiple
|
Validation model for staging event sequencing of a group of heat pumps |
EventSequencingSingle
|
Validation model for event sequencing logic |
RoutingPrimaryPumpStatus
|
Validation model for primary pump status signal routing |
SelectModeState
|
Validation model for equipment mode selection |
Validation model for the assertion of minimum runtime and off-time
Information
This model validates
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.AssertMinimumRuntime
for the following configurations, each with a minimum runtime or off-time
dt_min=15 s.
-
Reversible HP with minimum runtime assertion enabled: component
assRunTim.
-
Heating-only HP with minimum off-time assertion enabled: component
assOffTim.
Modelica definition
model AssertMinimumRuntime
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.AssertMinimumRuntime
assRunTim(
have_chiWat=true,
use_runTim=true,
nUni=2,
dt_min=15)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1(
table=[0, 1, 0; 10, 1, 1; 60, 0, 1; 80, 0, 0],
timeScale=1,
period=100)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1Hea(
table=[0, 0, 1; 1, 1, 0; 3, 1, 0; 4, 1, 1; 6, 0, 0; 7, 0, 0],
timeScale=10,
period=100)
;
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.AssertMinimumRuntime
assOffTim(
have_chiWat=false,
use_runTim=false,
nUni=1,
dt_min=15)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1Off(
table=[0, 1; 20, 0; 30, 1; 40, 0; 60, 1],
timeScale=1,
period=100)
;
equation
connect(u1.y, assRunTim.u1);
connect(u1Off.y, assOffTim.u1);
connect(u1Hea.y, assRunTim.u1Hea);
end AssertMinimumRuntime;
Validation model for the evaluation of equipment availability
Information
This model validates
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.EquipmentAvailability
for heating-only applications (component avaHeaCoo) and heating
and cooling applications (component avaHea).
Modelica definition
model EquipmentAvailability
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.EquipmentAvailability
avaHeaCoo(
have_heaWat=true,
have_chiWat=true)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1Ava(
table=[0, 1; 8.1, 0; 9, 1],
timeScale=1000,
period=10000)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1Coo(
table=[0, 0; 5, 1; 8, 0; 9.7, 1],
timeScale=1000,
period=10000)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1Hea(
table=[0, 1; 1, 0; 2.5, 1; 4.2, 0; 8.5, 1; 9.7, 0],
timeScale=1000,
period=10000)
;
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.EquipmentAvailability
avaHea(
have_heaWat=true,
have_chiWat=false)
;
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.EquipmentAvailability
avaCoo(
have_heaWat=false,
have_chiWat=true)
;
equation
connect(u1Ava.y[1], avaHeaCoo.u1Ava);
connect(u1Ava.y[1], avaHea.u1Ava);
connect(u1Hea.y[1], avaHea.u1EnaHea);
connect(u1Hea.y[1], avaHeaCoo.u1EnaHea);
connect(u1Coo.y[1], avaHeaCoo.u1EnaCoo);
connect(u1Ava.y[1], avaCoo.u1Ava);
connect(u1Coo.y[1], avaCoo.u1EnaCoo);
end EquipmentAvailability;
Validation model for staging event sequencing of a group of heat pumps
Information
This model validates
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.EventSequencingMultiple
in a configuration with one reversible heat pump and one polyvalent heat
pump, with dedicated primary pumps and isolation valves at the HP inlet and
at the polyvalent HP outlet.
Parameters
| Type | Name | Default | Description |
| Integer | nHp | 1 | Number of reversible heat pumps |
| Integer | nPhp | 1 | Number of polyvalent units |
Modelica definition
model EventSequencingMultiple
parameter Integer nHp = 1
;
parameter Integer nPhp = 1
;
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.EventSequencingMultiple
seqEve(
final nHp=nHp,
final nPhp=nPhp,
have_heaWat=true,
have_chiWat=true,
have_valHpInlIso=true,
have_valHpOutIso=false,
have_valPhpInlIso=false,
have_valPhpOutIso=true,
have_pumPriHdr=false,
have_pumChiWatPriDedHp=false,
nPumHeaWatPri=nHp + nPhp,
nPumChiWatPri=nPhp,
dtVal=10,
dtOff=10)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1HeaHpPhp(
table=[0, 1, 0; 30, 1, 1; 50, 1, 0; 70, 0, 0],
timeScale=1,
period=100)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1CooHpPhp(
table=[0, 0, 0; 70, 0, 1; 80, 1, 1],
timeScale=1,
period=100)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1ShcPhp(
table=[0, 0; 50, 1; 70, 0],
timeScale=1,
period=100)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1PumHeaWatPriDed(
table=[0, 0, 0; 5, 1, 1],
timeScale=1,
period=100)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1PumChiWatPriDed(
table=[0, 0; 62, 1],
timeScale=1,
period=100)
;
equation
connect(u1HeaHpPhp.y, seqEve.u1HeaHpPhp);
connect(u1CooHpPhp.y, seqEve.u1CooHpPhp);
connect(u1ShcPhp.y, seqEve.u1ShcPhp);
connect(u1PumHeaWatPriDed.y, seqEve.u1PumHeaWatPriDed_actual);
connect(u1PumChiWatPriDed.y, seqEve.u1PumChiWatPriDed_actual);
end EventSequencingMultiple;
Validation model for event sequencing logic
Information
This model validates
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.EventSequencingSingle
for the following configurations.
-
Heating-only plant with primary-secondary distribution (component
seqEveHea)
-
Heating and cooling plant with primary-only distribution (component
seqEveHeaCoo)
Modelica definition
model EventSequencingSingle
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.EventSequencingSingle
seqEveHea(
have_heaWat=true,
have_chiWat=false,
have_valInlIso=true,
have_valOutIso=false,
have_pumHeaWatPri=true)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1(
table=[0, 0, 0; 1, 1, 0; 2, 0, 0; 3, 0, 1; 4, 0, 0; 5, 0, 0],
timeScale=900,
period=4500)
;
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.EventSequencingSingle
seqEveHeaCoo(
have_heaWat=true,
have_chiWat=true,
have_valInlIso=true,
have_valOutIso=true,
have_pumHeaWatPri=true,
have_pumChiWatPri=false)
;
Components.Controls.StatusEmulator y1Pum_actual
;
Components.Controls.StatusEmulator y1Pum_actual1
;
equation
connect(u1.y[1], seqEveHea.u1Hea);
connect(u1.y[1], seqEveHeaCoo.u1Hea);
connect(u1.y[2], seqEveHeaCoo.u1Coo);
connect(seqEveHea.y1PumHeaWatPri, y1Pum_actual.y1);
connect(y1Pum_actual.y1_actual, seqEveHea.u1PumHeaWatPri_actual);
connect(seqEveHeaCoo.y1PumHeaWatPri, y1Pum_actual1.y1);
connect(y1Pum_actual1.y1_actual, seqEveHeaCoo.u1PumHeaWatPri_actual);
end EventSequencingSingle;
Validation model for primary pump status signal routing
Information
This model validates
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.RoutingPrimaryPumpStatus
for the following configurations, each with two primary pumps.
- Headered primary pumps: component
rouPumHdr.
-
Dedicated primary pumps serving reversible HP only: component
rouPumDedHp.
-
Dedicated primary pumps serving one reversible HP and one polyvalent HP:
component
rouPumDedHpPhp.
Modelica definition
model RoutingPrimaryPumpStatus
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.RoutingPrimaryPumpStatus
rouPumHdr(
have_pumPriHdr=true,
nPumPriDedHp=0,
nPumPriDedPhp=0,
nPumPri=2)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1PumHdr(
table=[0, 1, 0; 40, 1, 1],
timeScale=1,
period=100)
;
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.RoutingPrimaryPumpStatus
rouPumDedHp(
have_pumPriHdr=false,
nPumPriDedHp=2,
nPumPriDedPhp=0,
nPumPri=2)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1PumDedHp(
table=[0, 0, 0; 20, 1, 1],
timeScale=1,
period=100)
;
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.RoutingPrimaryPumpStatus
rouPumDedHpPhp(
have_pumPriHdr=false,
nPumPriDedHp=1,
nPumPriDedPhp=1,
nPumPri=2)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1PumDedHpMix(
table=[0, 0; 30, 1],
timeScale=1,
period=100)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1PumDedPhpMix(
table=[0, 0; 60, 1],
timeScale=1,
period=100)
;
equation
connect(u1PumHdr.y, rouPumHdr.u1PumPriHdr_actual);
connect(u1PumDedHp.y, rouPumDedHp.u1PumPriDedHp_actual);
connect(u1PumDedHpMix.y, rouPumDedHpPhp.u1PumPriDedHp_actual);
connect(u1PumDedPhpMix.y, rouPumDedHpPhp.u1PumPriDedPhp_actual);
end RoutingPrimaryPumpStatus;
Validation model for equipment mode selection
Information
This model validates
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.SelectModeState
in a configuration with two reversible heat pumps and two polyvalent heat
pumps.
The heating stage index is stepped from stage
0 to stage 4 and the cooling stage index is stepped from stage
0 to stage 3, each independently over time, to exercise
equipment selection at each stage. The runtime order of the polyvalent heat
pumps is set to the reverse of that of the reversible heat pumps, so that
selection by priority order can be observed.
Parameters
| Type | Name | Default | Description |
| Integer | nHp | 2 | Number of reversible heat pumps |
| Integer | nPhp | 2 | Number of polyvalent units |
Modelica definition
model SelectModeState
parameter Integer nHp = 2
;
parameter Integer nPhp = 2
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1AvaHp(
table=[0, 1, 1; 80, 0, 1],
timeScale=1,
period=100)
;
Buildings.Templates.Plants.Controls.HeatPumps.Subsequences.SelectModeState selMod(
have_chiWat=true,
final nHp=nHp,
final nPhp=nPhp)
;
Buildings.Controls.OBC.CDL.Integers.Sources.TimeTable uStaHea(
table=[0, 0, 0; 10, 1, 2; 20, 2, 2; 30, 3, 1; 40, 4, 3],
timeScale=1,
period=50)
;
PolyvalentHeatPumps.StagingParameters staPhp(
final nHp=nHp,
final nPhp=nPhp)
;
PolyvalentHeatPumps.ExtractStagingMatrix extStaHea(
final sta=staPhp.staHea,
is_transpose=true)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1AvaPhp1(
table=[0, 1, 1],
timeScale=1,
period=100)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable u1AvaPhp2(
table=[0, 1, 1],
timeScale=1,
period=100)
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant idxSorHp[nHp](
k={i
for i
in 1:nHp})
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant idxSorPhp[nPhp](
k={i
for i
in nPhp:-1:1})
;
Buildings.Controls.OBC.CDL.Integers.Sources.TimeTable uStaCoo(
table=[0, 0; 60, 3],
timeScale=1,
period=100)
;
PolyvalentHeatPumps.ExtractStagingMatrix extStaCoo(
final sta=staPhp.staCoo,
is_transpose=true)
;
equation
connect(uStaHea.y[1], selMod.uStaHea);
connect(extStaHea.y, selMod.staTraHea);
connect(u1AvaHp.y, selMod.u1AvaHeaHp);
connect(u1AvaPhp1.y, selMod.u1AvaHeaPhp);
connect(u1AvaPhp2.y, selMod.u1AvaShcPhp);
connect(idxSorHp.y, selMod.uIdxSorHp);
connect(idxSorPhp.y, selMod.uIdxSorPhp);
connect(uStaCoo.y[1], extStaHea.u);
connect(u1AvaPhp1.y, selMod.u1AvaCooPhp);
connect(u1AvaHp.y, selMod.u1AvaCooHp);
connect(extStaCoo.y, selMod.staTraCoo);
connect(uStaHea.y[1], extStaCoo.u);
connect(uStaCoo.y[1], selMod.uStaCoo);
end SelectModeState;