Collection of models that illustrate model use and test models
Information
This package contains examples for the use of models that can be found in
Buildings.Fluid.HeatPumps.ModularReversible.
Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).
Package Content
| Name |
Description |
AirToWater2D_OneRoomRadiator
|
Reversible heat pump with EN 2D data connected to a simple room model with radiator |
CarnotWithLosses_OneRoomRadiator
|
Reversible heat pump with Carnot approach connected to a simple room model with radiator |
LargeScaleWaterToWater_OneRoomRadiator
|
Large scale water to water heat pump connected to a simple room model with radiator |
Modular_OneRoomRadiator
|
Modular reversible heat pump connected to a simple room model with radiator |
TableData2DLoadDep
|
Validation model for heat pump component with ideal controls |
TableData2DLoadDepSHC1And2
|
Example of a primary-secondary plant with four-pipe heat pump |
TableData2DLoadDepSHC1Only
|
Example of a primary-only plant with four-pipe heat pump |
BaseClasses
|
Bases package for examples |
Reversible heat pump with EN 2D data connected to a simple room model with radiator
Information
This example demonstrates how to use the
Buildings.Fluid.HeatPumps.ModularReversible.AirToWaterTableData2D
heat pump model. Please check the associated documentation for
further information.
Please check the documentation of
Buildings.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator
for further information on the example.
Extends from Buildings.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator (Simple room model with radiator, without a heat pump), Modelica.Icons.Example (Icon for runnable examples).
Parameters
| Type | Name | Default | Description |
| replaceable package MediumAir | Air | Medium model for air |
| replaceable package MediumWat | Water | Medium model for water |
| replaceable package MediumEva | Water | Medium model for evaporator-side fluid |
| HeatFlowRate | Q_flow_nominal | 20000 | Nominal heat flow rate of radiator [W] |
| Temperature | TRadSup_nominal | 273.15 + 50 | Radiator nominal supply water temperature [K] |
| Temperature | TRadRet_nominal | 273.15 + 45 | Radiator nominal return water temperature [K] |
| MassFlowRate | mCon_flow_nominal | heaPum.mCon_flow_nominal | Heat pump nominal mass flow rate in condenser [kg/s] |
| MassFlowRate | mEva_flow_nominal | heaPum.mEva_flow_nominal | Heat pump nominal mass flow rate in evaporator [kg/s] |
| Volume | V | 6*10*3 | Room volume [m3] |
| MassFlowRate | mAirRoo_flow_nominal | V*1.2*6/3600 | Nominal mass flow rate of room air [kg/s] |
| HeatFlowRate | QRooInt_flow | Q_flow_nominal/5 | Internal heat gains of the room [W] |
| Boolean | witCoo | true | =true to simulate cooling behaviour |
Connectors
| Type | Name | Description |
| replaceable package MediumEva | Medium model for evaporator-side fluid |
| Bus | weaBus | Weather data bus |
Modelica definition
model AirToWater2D_OneRoomRadiator
extends Buildings.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator
(
redeclare package MediumEva =
MediumAir,
mEva_flow_nominal=heaPum.mEva_flow_nominal,
mCon_flow_nominal=heaPum.mCon_flow_nominal,
sin(nPorts=1),
booToReaPumEva(realTrue=heaPum.mEva_flow_nominal),
pumHeaPumSou(
dp_nominal=heaPum.dpEva_nominal),
sou(use_T_in=true),
pumHeaPum(dp_nominal=heaPum.dpCon_nominal));
Buildings.Fluid.HeatPumps.ModularReversible.AirToWaterTableData2D
heaPum(
redeclare package MediumCon =
MediumWat,
redeclare package MediumEva =
MediumEva,
TCon_start=TRadSup_nominal,
QHea_flow_nominal=Q_flow_nominal,
use_intSafCtr=true,
dpCon_nominal(displayUnit="Pa") = 2000,
dpEva_nominal(displayUnit="Pa") = 200,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
TConHea_nominal=rad.TRad_nominal,
TEvaHea_nominal=283.15,
TConCoo_nominal=oneRooRadHeaPumCtr.TRadMinSup,
TEvaCoo_nominal=303.15,
redeclare Buildings.Fluid.HeatPumps.ModularReversible.Data.TableData2D.EN14511.Vitocal251A08
datTabHea,
redeclare Buildings.Fluid.Chillers.ModularReversible.Data.TableData2D.EN14511.Vitocal251A08
datTabCoo,
redeclare Buildings.Fluid.HeatPumps.ModularReversible.Controls.Safety.Data.Wuellhorst2021
safCtrPar(
use_minOnTime=true,
minOnTime=300,
use_minOffTime=true,
minOffTime=300,
use_maxCycRat=true)) ;
extends Modelica.Icons.Example;
Modelica.Blocks.Sources.Pulse TAirSouSte(
amplitude=20,
width=10,
period=86400,
offset=283.15,
startTime=86400/2)
if witCoo ;
equation
connect(heaPum.port_b2, sin.ports[1]);
connect(heaPum.port_a2, pumHeaPumSou.port_b);
connect(heaPum.port_b1, pumHeaPum.port_a);
connect(heaPum.port_a1, temRet.port_b);
connect(oneRooRadHeaPumCtr.ySet, heaPum.ySet);
connect(heaPum.hea, oneRooRadHeaPumCtr.hea);
connect(TAirSouSte.y, sou.T_in);
end AirToWater2D_OneRoomRadiator;
Reversible heat pump with Carnot approach connected to a simple room model with radiator
Information
This example demonstrates how to use the
Buildings.Fluid.HeatPumps.ModularReversible.CarnotWithLosses
heat pump model. Please check the associated documentation for
further information.
Please check the documentation of
Buildings.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator
for further information on the example.
Extends from Buildings.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator (Simple room model with radiator, without a heat pump), Modelica.Icons.Example (Icon for runnable examples).
Parameters
| Type | Name | Default | Description |
| replaceable package MediumAir | Air | Medium model for air |
| replaceable package MediumWat | Water | Medium model for water |
| replaceable package MediumEva | Water | Medium model for evaporator-side fluid |
| HeatFlowRate | Q_flow_nominal | 20000 | Nominal heat flow rate of radiator [W] |
| Temperature | TRadSup_nominal | 273.15 + 50 | Radiator nominal supply water temperature [K] |
| Temperature | TRadRet_nominal | 273.15 + 45 | Radiator nominal return water temperature [K] |
| MassFlowRate | mCon_flow_nominal | heaPum.mCon_flow_nominal | Heat pump nominal mass flow rate in condenser [kg/s] |
| MassFlowRate | mEva_flow_nominal | heaPum.mEva_flow_nominal | Heat pump nominal mass flow rate in evaporator [kg/s] |
| Volume | V | 6*10*3 | Room volume [m3] |
| MassFlowRate | mAirRoo_flow_nominal | V*1.2*6/3600 | Nominal mass flow rate of room air [kg/s] |
| HeatFlowRate | QRooInt_flow | Q_flow_nominal/5 | Internal heat gains of the room [W] |
| Boolean | witCoo | true | =true to simulate cooling behaviour |
| Real | perHeaLos | 0.01 | Percentage of heat losses in the heat exchangers to the nominal heating output |
Connectors
| Type | Name | Description |
| Bus | weaBus | Weather data bus |
Modelica definition
model CarnotWithLosses_OneRoomRadiator
extends Buildings.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator(
mEva_flow_nominal=heaPum.mEva_flow_nominal,
mCon_flow_nominal=heaPum.mCon_flow_nominal,
sin(nPorts=1),
booToReaPumEva(realTrue=heaPum.mEva_flow_nominal),
pumHeaPumSou(dp_nominal=heaPum.dpEva_nominal),
pumHeaPum(dp_nominal=heaPum.dpCon_nominal));
extends Modelica.Icons.Example;
parameter Real perHeaLos=0.01
;
Buildings.Fluid.HeatPumps.ModularReversible.CarnotWithLosses heaPum(
redeclare package MediumCon =
MediumWat,
redeclare package MediumEva =
MediumEva,
QHea_flow_nominal=Q_flow_nominal,
use_rev=true,
use_intSafCtr=true,
TConHea_nominal=TRadSup_nominal,
dTCon_nominal=TRadSup_nominal - TRadRet_nominal,
dpCon_nominal(displayUnit="Pa") = 2000,
CCon=5000,
GConOut=perHeaLos*Q_flow_nominal/(TRadSup_nominal - temAmbBas.k),
GConIns=20000,
TEvaHea_nominal=sou.T,
dTEva_nominal=5,
dpEva_nominal(displayUnit="Pa") = 2000,
CEva=5000,
GEvaOut=perHeaLos*Q_flow_nominal/(temAmbBas.k - sou.T),
GEvaIns=20000,
TConCoo_nominal=oneRooRadHeaPumCtr.TRadMinSup,
TEvaCoo_nominal=sou.T + 10,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
redeclare Buildings.Fluid.HeatPumps.ModularReversible.Controls.Safety.Data.Wuellhorst2021
safCtrPar,
etaCarnot_nominal=0.4)
;
Modelica.Blocks.Sources.Constant temAmbBas(
final k(
final unit="K",
displayUnit="degC") = 291.15)
;
equation
connect(heaPum.port_b2, sin.ports[1]);
connect(heaPum.port_a2, pumHeaPumSou.port_b);
connect(heaPum.port_b1, pumHeaPum.port_a);
connect(heaPum.port_a1, temRet.port_b);
connect(temAmbBas.y, heaPum.TEvaAmb);
connect(temAmbBas.y, heaPum.TConAmb);
connect(oneRooRadHeaPumCtr.hea, heaPum.hea);
connect(oneRooRadHeaPumCtr.ySet, heaPum.ySet);
end CarnotWithLosses_OneRoomRadiator;
Large scale water to water heat pump connected to a simple room model with radiator
Information
This example demonstrates how to use the
Buildings.Fluid.HeatPumps.ModularReversible.LargeScaleWaterToWater
heat pump model. Please check the associated documentation for
further information.
Contrary to the other models, parameters for heat exchanger
inertia (tau) and mass flow rates are calculated
automatically based on the heat demand.
Furthermore, this example demonstrates the warnings which
are raised if two devices are combined with different sizes, leading
to different scaling factors for heating and cooling operation.
If the default QCoo_flow_nominal is used (leading to
the same scaling factors), the mass flow rates will differ.
Setting the parameter allowDifferentDeviceIdentifiers to false,
an additional warning is raised, indicating that the table data for cooling and
heating operation do not originate from the same real device.
Please check the documentation of
Buildings.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator
for further information on the example.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator (Simple room model with radiator, without a heat pump).
Parameters
| Type | Name | Default | Description |
| replaceable package MediumAir | Air | Medium model for air |
| replaceable package MediumWat | Water | Medium model for water |
| replaceable package MediumEva | Water | Medium model for evaporator-side fluid |
| HeatFlowRate | Q_flow_nominal | 200000 | Nominal heat flow rate of radiator [W] |
| Temperature | TRadSup_nominal | 273.15 + 50 | Radiator nominal supply water temperature [K] |
| Temperature | TRadRet_nominal | 273.15 + 45 | Radiator nominal return water temperature [K] |
| MassFlowRate | mCon_flow_nominal | heaPum.mCon_flow_nominal | Heat pump nominal mass flow rate in condenser [kg/s] |
| MassFlowRate | mEva_flow_nominal | heaPum.mEva_flow_nominal | Heat pump nominal mass flow rate in evaporator [kg/s] |
| Volume | V | 6*100*3 | Room volume [m3] |
| MassFlowRate | mAirRoo_flow_nominal | V*1.2*6/3600*10 | Nominal mass flow rate of room air [kg/s] |
| HeatFlowRate | QRooInt_flow | Q_flow_nominal/5 | Internal heat gains of the room [W] |
| Boolean | witCoo | true | =true to simulate cooling behaviour |
Connectors
| Type | Name | Description |
| Bus | weaBus | Weather data bus |
Modelica definition
model LargeScaleWaterToWater_OneRoomRadiator
extends Modelica.Icons.Example;
extends Buildings.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator(
mEva_flow_nominal=heaPum.mEva_flow_nominal,
mCon_flow_nominal=heaPum.mCon_flow_nominal,
V=6*100*3,
witCoo=true,
mAirRoo_flow_nominal=V*1.2*6/3600*10,
Q_flow_nominal=200000,
sin(nPorts=1),
booToReaPumEva(realTrue=heaPum.mEva_flow_nominal),
pumHeaPumSou(dp_nominal=150000),
pumHeaPum(dp_nominal=150000),
sou(use_T_in=true));
Buildings.Fluid.HeatPumps.ModularReversible.LargeScaleWaterToWater heaPum(
allowDifferentDeviceIdentifiers=true,
QHea_flow_nominal=Q_flow_nominal,
use_intSafCtr=true,
QCoo_flow_nominal=-Q_flow_nominal/2,
TConHea_nominal=TRadSup_nominal,
dpCon_nominal(displayUnit="Pa"),
TEvaHea_nominal=sou.T,
dpEva_nominal(displayUnit="Pa"),
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
redeclare Buildings.Fluid.HeatPumps.ModularReversible.Controls.Safety.Data.Wuellhorst2021
safCtrPar,
TConCoo_nominal=oneRooRadHeaPumCtr.TRadMinSup,
TEvaCoo_nominal=sou.T + 30,
redeclare Buildings.Fluid.HeatPumps.ModularReversible.Data.TableData2D.EN14511.WAMAK_WaterToWater_220kW
datTabHea,
redeclare Buildings.Fluid.Chillers.ModularReversible.Data.TableData2D.EN14511.Carrier30XWP1012_1MW
datTabCoo)
;
Modelica.Blocks.Sources.Pulse TAirSouSte(
amplitude=20,
width=10,
period=86400,
offset=283.15,
startTime=86400/2)
if witCoo ;
equation
connect(heaPum.port_b2, sin.ports[1]);
connect(heaPum.port_a2, pumHeaPumSou.port_b);
connect(heaPum.port_b1, pumHeaPum.port_a);
connect(heaPum.port_a1, temRet.port_b);
connect(oneRooRadHeaPumCtr.ySet, heaPum.ySet);
connect(oneRooRadHeaPumCtr.hea, heaPum.hea);
connect(TAirSouSte.y, sou.T_in);
end LargeScaleWaterToWater_OneRoomRadiator;
Modular reversible heat pump connected to a simple room model with radiator
Information
This example demonstrates how to use the
Buildings.Fluid.HeatPumps.ModularReversible.Modular
heat pump model directly. Please check the associated documentation for
further information.
Correct replacement of the replaceable submodels
and, thus, flexible aggregation to a new model
approach is demonstrated.
Please check the documentation of
Buildings.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator
for further information on the example.
Extends from Buildings.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator (Simple room model with radiator, without a heat pump), Modelica.Icons.Example (Icon for runnable examples).
Parameters
| Type | Name | Default | Description |
| replaceable package MediumAir | Air | Medium model for air |
| replaceable package MediumWat | Water | Medium model for water |
| replaceable package MediumEva | Water | Medium model for evaporator-side fluid |
| HeatFlowRate | Q_flow_nominal | 20000 | Nominal heat flow rate of radiator [W] |
| Temperature | TRadSup_nominal | 273.15 + 50 | Radiator nominal supply water temperature [K] |
| Temperature | TRadRet_nominal | 273.15 + 45 | Radiator nominal return water temperature [K] |
| MassFlowRate | mCon_flow_nominal | Q_flow_nominal/4200/5 | Heat pump nominal mass flow rate in condenser [kg/s] |
| MassFlowRate | mEva_flow_nominal | heaPum.mEva_flow_nominal | Heat pump nominal mass flow rate in evaporator [kg/s] |
| Volume | V | 6*10*3 | Room volume [m3] |
| MassFlowRate | mAirRoo_flow_nominal | V*1.2*6/3600 | Nominal mass flow rate of room air [kg/s] |
| HeatFlowRate | QRooInt_flow | Q_flow_nominal/5 | Internal heat gains of the room [W] |
| Boolean | witCoo | true | =true to simulate cooling behaviour |
Connectors
| Type | Name | Description |
| replaceable package MediumEva | Medium model for evaporator-side fluid |
| Bus | weaBus | Weather data bus |
Modelica definition
model Modular_OneRoomRadiator
extends Buildings.Fluid.HeatPumps.ModularReversible.Examples.BaseClasses.PartialOneRoomRadiator
(
redeclare package MediumEva =
MediumAir,
mEva_flow_nominal=heaPum.mEva_flow_nominal,
sin(nPorts=1),
pumHeaPumSou(
dp_nominal=heaPum.dpEva_nominal),
booToReaPumEva(realTrue=heaPum.mEva_flow_nominal),
pumHeaPum(dp_nominal=heaPum.dpCon_nominal));
extends Modelica.Icons.Example;
Buildings.Fluid.HeatPumps.ModularReversible.Modular heaPum(
redeclare package MediumCon =
MediumWat,
redeclare package MediumEva =
MediumAir,
use_rev=true,
allowDifferentDeviceIdentifiers=true,
QHea_flow_nominal=Q_flow_nominal,
redeclare model RefrigerantCycleInertia =
Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.Inertias.NoInertia,
use_intSafCtr=true,
TConHea_nominal=TRadSup_nominal,
TConCoo_nominal=oneRooRadHeaPumCtr.TRadMinSup,
dTCon_nominal=TRadSup_nominal - TRadRet_nominal,
dpCon_nominal(displayUnit="Pa") = 2000,
use_conCap=true,
CCon=3000,
GConOut=100,
GConIns=1000,
TEvaHea_nominal=sou.T,
TEvaCoo_nominal=303.15,
dTEva_nominal=2,
dpEva_nominal(displayUnit="Pa") = 200,
use_evaCap=false,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
redeclare model RefrigerantCycleHeatPumpHeating =
Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.ConstantCarnotEffectiveness(
redeclare Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.Frosting.NoFrosting
iceFacCal,
TAppCon_nominal=0,
TAppEva_nominal=0),
redeclare model RefrigerantCycleHeatPumpCooling =
Buildings.Fluid.Chillers.ModularReversible.RefrigerantCycle.TableData2D(
redeclare Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.Frosting.NoFrosting
iceFacCal,
mCon_flow_nominal=heaPum.mCon_flow_nominal,
mEva_flow_nominal=heaPum.mEva_flow_nominal,
datTab=
Buildings.Fluid.Chillers.ModularReversible.Data.TableData2D.EN14511.Vitocal251A08()),
redeclare Buildings.Fluid.HeatPumps.ModularReversible.Controls.Safety.Data.Wuellhorst2021
safCtrPar(
use_TConOutHea=true,
use_TEvaOutHea=false,
use_antFre=true,
TAntFre=275.15),
QCoo_flow_nominal=-Q_flow_nominal*0.5)
;
Modelica.Blocks.Sources.Constant temAmbBas(
final k(
final unit="K",
displayUnit="degC") = 291.15)
;
equation
connect(heaPum.port_b2, sin.ports[1]);
connect(heaPum.port_a2, pumHeaPumSou.port_b);
connect(heaPum.port_b1, pumHeaPum.port_a);
connect(heaPum.port_a1, temRet.port_b);
connect(temAmbBas.y, heaPum.TConAmb);
connect(heaPum.hea, oneRooRadHeaPumCtr.hea);
connect(oneRooRadHeaPumCtr.ySet, heaPum.ySet);
end Modular_OneRoomRadiator;
Validation model for heat pump component with ideal controls
Information
This model illustrates the use of
Buildings.Fluid.HeatPumps.ModularReversible.TableData2DLoadDep
in a configuration in which water-to-water heat pump components are
exposed to a constant differential pressure and a varying return temperature
on the load side.
The heat pump components are configured to represent either a non-reversible
heat pump (component hpNrv) or a reversible heat pump
(component hp) that switches between cooling and heating mode.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
| Type | Name | Default | Description |
| replaceable package Medium | Buildings.Media.Water | HW or CHW medium |
| GenericHeatPump | datHea | datHea(fileName=Modelica.Uti... | Heat pump performance data |
| Generic | datCoo | datCoo(fileName=Modelica.Uti... | Chiller performance data |
| Dynamics |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Connectors
| Type | Name | Description |
| replaceable package Medium | HW or CHW medium |
Modelica definition
model TableData2DLoadDep
extends Modelica.Icons.Example;
replaceable package Medium=
Buildings.Media.Water
constrainedby Modelica.Media.Interfaces.PartialMedium
;
parameter Modelica.Fluid.Types.Dynamics energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial
;
final parameter Modelica.Units.SI.Temperature THeaWatRet_nominal=hp.TConHea_nominal -
hp.dTCon_nominal;
final parameter Modelica.Units.SI.Temperature TChiWatRet_nominal=hp.TConCoo_nominal +
hp.dTEva_nominal;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet(
k=hp.TConCoo_nominal,
y(
final unit="K",
displayUnit="degC"))
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupSet(
k=hp.TConHea_nominal,
y(
final unit="K",
displayUnit="degC"))
;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin THeaWatRet(
amplitude=hp.TConHea_nominal - THeaWatRet_nominal,
freqHz=3 / 3000,
y(
final unit="K",
displayUnit="degC"),
offset=THeaWatRet_nominal,
startTime=0)
;
Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1(
table=[
0, 1, 1;
30, 0, 1;
45, 1, 0;
75, 0, 0],
timeScale=60,
period=5400)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin TChiWatRet(
amplitude=TChiWatRet_nominal - hp.TConCoo_nominal,
freqHz=3 / 3000,
y(
final unit="K",
displayUnit="degC"),
offset=TChiWatRet_nominal,
startTime=0)
;
Fluid.Sources.Boundary_pT inlHp(
redeclare final package Medium=
Medium,
use_p_in=true,
use_T_in=true,
nPorts=1)
;
Buildings.Controls.OBC.CDL.Reals.Switch TRetAct
;
Buildings.Controls.OBC.CDL.Reals.Switch pInl_rel
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant pHeaWatInl(
k=sup.p + hp.dpCon_nominal)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant pChiWatInl(
k=sup.p + hp.dpCon_nominal *(hp.mEva_flow_nominal / hp.mCon_flow_nominal) ^ 2)
;
Fluid.Sensors.TemperatureTwoPort TRet(
redeclare final package Medium=
Medium,
final m_flow_nominal=hp.mCon_flow_nominal)
;
Fluid.Sensors.TemperatureTwoPort TSup(
redeclare final package Medium=
Medium,
final m_flow_nominal=hp.mCon_flow_nominal)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TAmbHea(
y(
final unit="K",
displayUnit="degC"),
height=4,
duration=500,
offset=hp.TEvaHea_nominal,
startTime=2400) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp TAmbCoo(
y(
final unit="K",
displayUnit="degC"),
height=- 4,
duration=500,
offset=hp.TEvaCoo_nominal,
startTime=1400) ;
Buildings.Controls.OBC.CDL.Reals.Switch TAmbAct
;
Buildings.Controls.OBC.CDL.Reals.Switch pInl_rel1
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant pAmbInlHea(
k=retAmb.p + hp.dpEva_nominal) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant pAmbInlCoo(
k=retAmb.p + hp.dpCon_nominal) ;
Fluid.Sources.Boundary_pT inlHpAmb(
redeclare final package Medium=
Medium,
use_p_in=true,
use_T_in=true,
nPorts=1) ;
Fluid.Sources.Boundary_pT retAmb(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=2) ;
Buildings.Fluid.HeatPumps.ModularReversible.TableData2DLoadDep hp(
show_T=true,
redeclare final package MediumCon=
Medium,
redeclare final package MediumEva=
Medium,
use_rev=true,
use_intSafCtr=false,
mCon_flow_nominal=datHea.mCon_flow_nominal,
QHea_flow_nominal=890E3,
QCoo_flow_nominal=- 630E3,
datCoo=datCoo,
P_min=50,
TConHea_nominal=336.15,
CCon=0,
GConOut=0,
GConIns=0,
TEvaHea_nominal=279.15,
mEva_flow_nominal=datHea.mEva_flow_nominal,
use_conCap=false,
CEva=0,
GEvaOut=0,
GEvaIns=0,
TEva_start=290.15,
use_evaCap=false,
final energyDynamics=energyDynamics,
final datHea=datHea,
TConCoo_nominal=279.15,
TEvaCoo_nominal=336.15)
;
parameter Data.TableData2DLoadDep.GenericHeatPump datHea(
fileName=
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/Data/Fluid/HeatPumps/ModularReversible/Examples/TableData2DLoadDep_HP.txt"),
PLRSup={0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.9,1.0},
PLRCyc_min=0.2,
mCon_flow_nominal=45,
mEva_flow_nominal=30,
dpCon_nominal=40E3,
dpEva_nominal=37E3,
devIde="30XW852",
use_TEvaOutForTab=true,
use_TConOutForTab=true,
tabUppBou=[
276.45, 336.15;
303.15, 336.15],
use_TConOutForOpeEnv=true,
use_TEvaOutForOpeEnv=true)
;
Sources.Boundary_pT sup(
redeclare final package Medium=
Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=2)
;
parameter Buildings.Fluid.Chillers.ModularReversible.Data.TableData2DLoadDep.Generic
datCoo(
fileName=
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/Data/Fluid/HeatPumps/ModularReversible/Examples/TableData2DLoadDep_Chiller.txt"),
PLRSup={0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.9,1.0},
PLRCyc_min=0.2,
mCon_flow_nominal=45,
mEva_flow_nominal=30,
dpCon_nominal=40E3,
dpEva_nominal=37E3,
devIde="30XW852",
use_TEvaOutForTab=true,
use_TConOutForTab=true,
tabLowBou=[
292.15, 276.45;
336.15, 276.45],
use_TConOutForOpeEnv=true,
use_TEvaOutForOpeEnv=true)
;
Sources.Boundary_pT inlHp1(
redeclare final package Medium=
Medium,
p=pHeaWatInl.k,
use_T_in=true,
nPorts=1)
;
Sensors.TemperatureTwoPort TRet1(
redeclare final package Medium=
Medium,
final m_flow_nominal=hp.mCon_flow_nominal)
;
Sensors.TemperatureTwoPort TSup1(
redeclare final package Medium=
Medium,
final m_flow_nominal=hp.mCon_flow_nominal)
;
Buildings.Fluid.HeatPumps.ModularReversible.TableData2DLoadDep hpNrv(
show_T=true,
redeclare final package MediumCon=
Medium,
redeclare final package MediumEva=
Medium,
use_rev=false,
use_intSafCtr=false,
mCon_flow_nominal=datHea.mCon_flow_nominal,
QHea_flow_nominal=890E3,
P_min=50,
TConHea_nominal=336.15,
CCon=0,
GConOut=0,
GConIns=0,
TEvaHea_nominal=279.15,
mEva_flow_nominal=datHea.mEva_flow_nominal,
use_conCap=false,
CEva=0,
GEvaOut=0,
GEvaIns=0,
TEva_start=290.15,
use_evaCap=false,
final energyDynamics=energyDynamics,
final datHea=datHea)
;
Sources.Boundary_pT inlHpAmb1(
redeclare final package Medium=
Medium,
p=pAmbInlHea.k,
use_T_in=true,
nPorts=1) ;
equation
connect(THeaWatRet.y, TRetAct.u1);
connect(TChiWatRet.y, TRetAct.u3);
connect(TRetAct.y, inlHp.T_in);
connect(pInl_rel.y, inlHp.p_in);
connect(pHeaWatInl.y, pInl_rel.u1);
connect(pChiWatInl.y, pInl_rel.u3);
connect(TAmbHea.y,TAmbAct. u1);
connect(TAmbCoo.y,TAmbAct. u3);
connect(pAmbInlHea.y, pInl_rel1.u1);
connect(pAmbInlCoo.y, pInl_rel1.u3);
connect(TAmbAct.y,inlHpAmb. T_in);
connect(pInl_rel1.y,inlHpAmb. p_in);
connect(TRet.port_b, hp.port_a1);
connect(TSup.port_a, hp.port_b1);
connect(TSup.port_b, sup.ports[1]);
connect(inlHpAmb.ports[1], hp.port_a2);
connect(retAmb.ports[1], hp.port_b2);
connect(y1.y[1], hp.on);
connect(inlHp.ports[1], TRet.port_a);
connect(TRet1.port_b, hpNrv.port_a1);
connect(TSup1.port_a, hpNrv.port_b1);
connect(y1.y[1], hpNrv.on);
connect(inlHp1.ports[1], TRet1.port_a);
connect(TSup1.port_b, sup.ports[2]);
connect(inlHpAmb1.ports[1], hpNrv.port_a2);
connect(hpNrv.port_b2,retAmb. ports[2]);
connect(TAmbHea.y,inlHpAmb1. T_in);
connect(THeaWatRet.y, inlHp1.T_in);
connect(THeaWatSupSet.y, hpNrv.THwSet);
connect(y1.y[2], TRetAct.u2);
connect(y1.y[2], pInl_rel.u2);
connect(y1.y[2], pInl_rel1.u2);
connect(y1.y[2], hp.hea);
connect(y1.y[2],TAmbAct. u2);
connect(TChiWatSupSet.y, hp.TChwSet);
connect(THeaWatSupSet.y, hp.THwSet);
end TableData2DLoadDep;
Example of a primary-secondary plant with four-pipe heat pump
Information
This model illustrates the use of
Buildings.Fluid.HeatPumps.ModularReversible.TableData2DLoadDepSHC
to model a primary-secondary heating and cooling plant.
The simulation covers a 24-hour period with overlapping heating and
cooling loads.
The heating loads reach their peak value first, the cooling loads reach it last.
The plant model includes the following components:
-
Modular four-pipe heat pump with three units.
-
HW and CHW isolation valves represented by an equivalent actuator.
-
Three headered constant-speed primary HW and CHW pumps.
-
HW and CHW common legs.
-
Three headered variable-speed secondary HW and CHW pumps.
A unique aggregated load is modeled on each loop by means of a cooling or heating component
controlled to maintain a constant ΔT and a modulating valve controlled to track
a prescribed flow rate.
The closed-loop controls use mostly the same logic as the one described in
Buildings.Fluid.HeatPumps.ModularReversible.Examples.TableData2DLoadDepSHC1Only.
Only the logic that differs is presented below.
Simulating this model shows how the plant responds to a varying load by
-
enabling or disabling the heating and cooling plants,
and switching the heat pump operating mode accordingly,
-
staging or unstaging the heat pump modules in various modes,
-
actuating the corresponding isolation valves,
-
staging and rotating the primary pumps, and
-
staging, rotating and controlling the secondary pumps to meet the
remote differential pressure setpoint.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
| Type | Name | Default | Description |
| Generic | dat | dat(PLRHeaSup={1}, PLRCooSup... | Performance data |
| Nominal condition |
| HeatFlowRate | QHea_flow_nominal | 1500E3 | Heating heat flow rate [W] |
| HeatFlowRate | QCoo_flow_nominal | -1500E3 | Cooling heat flow rate [W] |
| MassFlowRate | mHwSec_flow_nominal | abs(QHea_flow_nominal/(THwSu... | Secondary HW mass flow rate [kg/s] |
| MassFlowRate | mChwSec_flow_nominal | abs(QCoo_flow_nominal/(TChwS... | Secondary CHW mass flow rate [kg/s] |
| MassFlowRate | mHwPri_flow_nominal | mHwSec_flow_nominal/0.9 | Primary HW mass flow rate [kg/s] |
| MassFlowRate | mChwPri_flow_nominal | mChwSec_flow_nominal/0.9 | Primary CHW mass flow rate [kg/s] |
| Temperature | THwSup_nominal | Buildings.Templates.Data.Def... | HW supply temperature [K] |
| Temperature | TChwSup_nominal | Buildings.Templates.Data.Def... | CHW supply temperature [K] |
| Temperature | THwRet_nominal | Buildings.Templates.Data.Def... | HW return temperature [K] |
| Temperature | TChwRet_nominal | Buildings.Templates.Data.Def... | CHW return temperature [K] |
| PressureDifference | dpHwRemSet_max | Buildings.Templates.Data.Def... | Maximum HW differential pressure setpoint - At remote location [Pa] |
| PressureDifference | dpChwRemSet_max | Buildings.Templates.Data.Def... | Maximum CHW differential pressure setpoint - At remote location [Pa] |
| PressureDifference | dpHwLocSet_max | Buildings.Templates.Data.Def... | Maximum HW differential pressure setpoint - local to the plant [Pa] |
| PressureDifference | dpChwLocSet_max | Buildings.Templates.Data.Def... | Maximum CHW differential pressure setpoint - local to the plant [Pa] |
| Dynamics |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Connectors
| Type | Name | Description |
| Bus | busPumChwPri | Primary CHW pump control bus |
| Bus | busPumHwPri | Primary HW pump control bus |
| Bus | busPumHwSec | Secondary HW pump control bus |
| Bus | busPumChwPri1 | Primary CHW pump control bus |
Modelica definition
model TableData2DLoadDepSHC1And2
extends Modelica.Icons.Example;
package Medium=
Buildings.Media.Water
;
parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal=1500E3
;
parameter Modelica.Units.SI.HeatFlowRate QCoo_flow_nominal=-1500E3
;
parameter Modelica.Units.SI.MassFlowRate mHwSec_flow_nominal=
abs(
QHea_flow_nominal/(THwSup_nominal - THwRet_nominal))/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq
;
parameter Modelica.Units.SI.MassFlowRate mChwSec_flow_nominal=
abs(
QCoo_flow_nominal/(TChwSup_nominal - TChwRet_nominal))/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq
;
parameter Modelica.Units.SI.MassFlowRate mHwPri_flow_nominal=
mHwSec_flow_nominal / 0.9
;
parameter Modelica.Units.SI.MassFlowRate mChwPri_flow_nominal=
mChwSec_flow_nominal / 0.9
;
parameter Modelica.Units.SI.Temperature THwSup_nominal=
Buildings.Templates.Data.Defaults.THeaWatSupMed
;
parameter Modelica.Units.SI.Temperature TChwSup_nominal=
Buildings.Templates.Data.Defaults.TChiWatSup
;
parameter Modelica.Units.SI.Temperature THwRet_nominal=
Buildings.Templates.Data.Defaults.THeaWatRetMed
;
parameter Modelica.Units.SI.Temperature TChwRet_nominal=
Buildings.Templates.Data.Defaults.TChiWatRet
;
parameter Modelica.Units.SI.PressureDifference dpHwRemSet_max=
Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max
;
parameter Modelica.Units.SI.PressureDifference dpChwRemSet_max=
Buildings.Templates.Data.Defaults.dpChiWatRemSet_max
;
parameter Modelica.Units.SI.PressureDifference dpHwLocSet_max=
Buildings.Templates.Data.Defaults.dpHeaWatLocSet_max
;
parameter Modelica.Units.SI.PressureDifference dpChwLocSet_max=
Buildings.Templates.Data.Defaults.dpChiWatLocSet_max
;
parameter Modelica.Fluid.Types.Dynamics energyDynamics=
Modelica.Fluid.Types.Dynamics.FixedInitial
;
BoundaryConditions.WeatherData.ReaderTMY3 weaDat(
filNam=
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos"))
;
Fluid.HeatExchangers.SensibleCooler_T loaHw(
redeclare final package Medium = Medium,
final m_flow_nominal=mHwSec_flow_nominal,
show_T=true,
final dp_nominal=0,
final energyDynamics=energyDynamics,
tau=300,
QMin_flow=-QHea_flow_nominal)
;
Fluid.HeatExchangers.Heater_T loaChw(
redeclare final package Medium = Medium,
final m_flow_nominal=mChwSec_flow_nominal,
show_T=true,
final dp_nominal=0,
final energyDynamics=energyDynamics,
tau=300,
QMax_flow=-QCoo_flow_nominal)
;
Fluid.Actuators.Valves.TwoWayEqualPercentage valDisHw(
redeclare final package Medium = Medium,
m_flow_nominal=mHwSec_flow_nominal,
dpValve_nominal=3E4,
y_start=0,
dpFixed_nominal=dpHwRemSet_max - 3E4)
;
Fluid.Actuators.Valves.TwoWayEqualPercentage valDisChw(
redeclare final package Medium = Medium,
m_flow_nominal=mChwSec_flow_nominal,
dpValve_nominal=3E4,
y_start=0,
dpFixed_nominal=dpChwRemSet_max - 3E4)
;
Fluid.Sensors.RelativePressure dpHwRem(
redeclare final package Medium = Medium)
;
Fluid.Sensors.RelativePressure dpChwRem(
redeclare final package Medium = Medium)
;
Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ratFlo(table=[0,0,0; 5,0,0;
7,1,0; 12,0.4,0.4; 16,0,1; 22,0.1,0.1; 24,0,0],
timeScale=3600)
;
Buildings.Controls.OBC.CDL.Reals.PID ctlEquZon[2](
each k=0.1,
each Ti=60,
each final reverseActing=true) ;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter norFlo[2](k={1/
mHwSec_flow_nominal,1/mChwSec_flow_nominal}) ;
Fluid.Sensors.MassFlowRate mChw_flow(
redeclare final package Medium=Medium)
;
Fluid.Sensors.MassFlowRate mHw_flow(
redeclare final package Medium=Medium)
;
Buildings.Controls.OBC.CDL.Reals.AddParameter TChwRetPre(p=TChwRet_nominal -
TChwSup_nominal) ;
Buildings.Controls.OBC.CDL.Reals.AddParameter THwRetPre(p=THwRet_nominal -
THwSup_nominal) ;
Buildings.Controls.OBC.CDL.Reals.Max max2
;
Buildings.Controls.OBC.CDL.Reals.Min min1
;
Buildings.Fluid.FixedResistances.PressureDrop pipHw(
redeclare final package Medium = Medium,
final m_flow_nominal=mHwSec_flow_nominal,
final dp_nominal=dpHwLocSet_max - dpHwRemSet_max) ;
Buildings.Fluid.FixedResistances.PressureDrop pipChw(
redeclare final package Medium = Medium,
final m_flow_nominal=mChwSec_flow_nominal,
final dp_nominal=dpChwLocSet_max - dpChwRemSet_max) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(
k=293.15) ;
Buildings.Fluid.HeatPumps.ModularReversible.TableData2DLoadDepSHC hp(
redeclare final package MediumCon = Medium,
redeclare final package MediumEva = Medium,
final energyDynamics=energyDynamics,
final mCon_flow_nominal=mHwPri_flow_nominal,
final mEva_flow_nominal=mChwPri_flow_nominal,
nUni=3,
final use_preDro=false,
QHeaShc_flow_nominal=QHea_flow_nominal,
QCooShc_flow_nominal=QCoo_flow_nominal,
final dat=dat,
final QHea_flow_nominal=QHea_flow_nominal,
final QCoo_flow_nominal=QCoo_flow_nominal,
final TConHea_nominal=THwSup_nominal,
TEvaHea_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow,
final TConCoo_nominal=TChwSup_nominal,
TEvaCoo_nominal=Buildings.Templates.Data.Defaults.TOutHpCoo,
dpHw_nominal=30000,
dpChw_nominal=40000) ;
parameter Data.TableData2DLoadDepSHC.Generic dat(
PLRHeaSup={1},
PLRCooSup={1},
PLRShcSup={1},
fileNameHea=
Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/Data/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/Validation/AWHP_Heating.txt"),
fileNameCoo=
Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/Data/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/Validation/AWHP_Cooling.txt"),
fileNameShc=
Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/Data/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/Validation/AWHP_SHC.txt"),
mCon_flow_nominal=1.7,
mEva_flow_nominal=3.5,
dpCon_nominal=30E3,
dpEva_nominal=40E3,
devIde="",
use_TEvaOutForTab=true,
use_TConOutForTab=true) ;
Sensors.TemperatureTwoPort TChwSup(
redeclare final package Medium = Medium,
final m_flow_nominal=mChwSec_flow_nominal,
initType=Modelica.Blocks.Types.Init.InitialOutput,
T_start=TChwSup_nominal) ;
Sensors.TemperatureTwoPort THwSup(
redeclare final package Medium = Medium,
final m_flow_nominal=mHwSec_flow_nominal,
initType=Modelica.Blocks.Types.Init.InitialOutput,
T_start=THwSup_nominal) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet[2](k={
THwSup_nominal,TChwSup_nominal}) ;
Sources.Boundary_pT pChwRet(
redeclare final package Medium = Medium,
p=Buildings.Templates.Data.Defaults.pChiWat_rel_nominal + 101325,
nPorts=1) ;
Sources.Boundary_pT pHwRet(
redeclare final package Medium = Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=1) ;
Actuators.Valves.TwoWayTable valHwIso(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mCon_flow_nominal,
flowCharacteristics=hp.chaValHwIso,
dpValve_nominal=hp.dpValIso_nominal,
init=Modelica.Blocks.Types.Init.InitialState,
dpFixed_nominal=hp.dpHw_nominal)
;
Actuators.Valves.TwoWayTable valChwIso(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mEva_flow_nominal,
dpValve_nominal=hp.dpValIso_nominal,
init=Modelica.Blocks.Types.Init.InitialState,
dpFixed_nominal=hp.dpChw_nominal,
flowCharacteristics=hp.chaValChwIso)
;
Buildings.Controls.OBC.CDL.Integers.MultiSum sumNumUni(nin=3)
;
Buildings.Controls.OBC.CDL.Utilities.Assert assMes(
message="Number of enabled modules exceeds number of modules")
;
Buildings.Controls.OBC.CDL.Integers.LessEqualThreshold intLesEquThr(t=hp.nUni)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpHeaSet[2](k={hp.dpHw_nominal,
hp.dpChw_nominal}) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpRemSet[2](k={
dpHwRemSet_max,dpChwRemSet_max}) ;
Sensors.TemperatureTwoPort THwRetPla(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mCon_flow_nominal) ;
Sensors.TemperatureTwoPort TChwRetPla(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mEva_flow_nominal) ;
Sensors.TemperatureTwoPort TChwRet(
redeclare final package Medium = Medium,
final
m_flow_nominal=mChwSec_flow_nominal) ;
Sensors.TemperatureTwoPort THwRet(
redeclare final package Medium = Medium,
final
m_flow_nominal=mHwSec_flow_nominal) ;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold valChwReq(t=1E-1, h=5E-2)
;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold valHwReq(t=1E-1, h=5E-2)
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger reqHea
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger reqCoo
;
Templates.Plants.Controls.Enabling.Enable enaHea(typ=Buildings.Templates.Plants.Controls.Types.Application.Heating,
TOutLck=295.15) ;
Templates.Plants.Controls.Enabling.Enable enaCoo(typ=Buildings.Templates.Plants.Controls.Types.Application.Cooling,
TOutLck=290.15) ;
Templates.Components.Routing.SingleToMultiple inlPumChwPri(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final nPorts=pumChwPri.nPum,
final m_flow_nominal=hp.mEva_flow_nominal)
;
Templates.Components.Pumps.Multiple pumChwPri(
have_var=false,
redeclare final package Medium=Medium,
final energyDynamics=energyDynamics,
dat(
m_flow_nominal=
fill(hp.mEva_flow_nominal/pumChwPri.nPum, pumChwPri.nPum),
dp_nominal=
fill(valChwIso.dpValve_nominal + valChwIso.dpFixed_nominal,
pumChwPri.nPum) .+ pumChwPri.dpValChe_nominal,
rho_default=Medium.d_const),
final nPum=hp.nUni)
;
Templates.Components.Interfaces.Bus busPumChwPri
;
Templates.Plants.Controls.Pumps.Generic.StagingHeadered staPumChwPri(
is_pri=true,
is_hdr=true,
is_ctlDp=false,
have_valInlIso=false,
have_valOutIso=true,
nEqu=hp.nUni,
nPum=pumChwPri.nPum,
nSenDp=1,
V_flow_nominal=hp.mEva_flow_nominal/Medium.d_const,
dtRun=5*60)
;
Templates.Components.Routing.SingleToMultiple inlPumHwPri(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final nPorts=pumHwPri.nPum,
final m_flow_nominal=hp.mCon_flow_nominal)
;
Templates.Components.Pumps.Multiple pumHwPri(
have_var=false,
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
dat(
m_flow_nominal=
fill(hp.mCon_flow_nominal/pumHwPri.nPum, pumHwPri.nPum),
dp_nominal=
fill(valHwIso.dpValve_nominal + valHwIso.dpFixed_nominal,
pumHwPri.nPum) .+ pumHwPri.dpValChe_nominal,
rho_default=Medium.d_const),
final nPum=hp.nUni)
;
Templates.Components.Routing.MultipleToSingle outPumHwPri(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final nPorts=pumHwPri.nPum,
final m_flow_nominal=hp.mCon_flow_nominal)
;
Sensors.VolumeFlowRate VHwPri(
redeclare final package Medium = Medium,
final
m_flow_nominal=hp.mCon_flow_nominal) ;
Templates.Plants.Controls.Pumps.Generic.StagingHeadered staPumHwPri(
is_pri=true,
is_hdr=true,
is_ctlDp=false,
have_valInlIso=false,
have_valOutIso=true,
nEqu=hp.nUni,
nPum=pumHwPri.nPum,
nSenDp=1,
V_flow_nominal=hp.mCon_flow_nominal/Medium.d_const,
dtRun=5*60) ;
Templates.Components.Interfaces.Bus busPumHwPri
;
Templates.Components.Pumps.Multiple pumHwSec(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
dat(
m_flow_nominal=
fill(mHwSec_flow_nominal/pumHwSec.nPum, pumHwSec.nPum),
dp_nominal=
fill(dpHwLocSet_max, pumHwSec.nPum),
rho_default=Medium.d_const),
final nPum=hp.nUni)
;
Templates.Plants.Controls.Pumps.Generic.ControlDifferentialPressure ctlPumHwSec(
have_senDpRemWir=true,
nPum=pumHwSec.nPum,
nSenDpRem=1,
k=0.1) ;
Templates.Plants.Controls.Pumps.Generic.StagingHeadered staPumHwSec(
is_pri=false,
is_hdr=true,
is_ctlDp=true,
have_valInlIso=false,
have_valOutIso=true,
nEqu=hp.nUni,
nPum=pumHwSec.nPum,
nSenDp=1,
V_flow_nominal=mHwSec_flow_nominal/Medium.d_const,
dtRun=5*60) ;
Templates.Components.Interfaces.Bus busPumHwSec
;
Templates.Components.Routing.SingleToMultiple inlPumHwSec(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final nPorts=pumHwSec.nPum,
final m_flow_nominal=mHwSec_flow_nominal)
;
Templates.Components.Routing.MultipleToSingle outPumHwSec(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final nPorts=pumHwSec.nPum,
final m_flow_nominal=mHwSec_flow_nominal)
;
Templates.Components.Routing.SingleToMultiple inlPumChwSec(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final nPorts=pumChwSec.nPum,
final m_flow_nominal=mChwSec_flow_nominal)
;
Templates.Components.Pumps.Multiple pumChwSec(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
dat(
m_flow_nominal=
fill(mChwSec_flow_nominal/pumChwSec.nPum, pumChwSec.nPum),
dp_nominal=
fill(dpChwLocSet_max, pumChwSec.nPum),
rho_default=Medium.d_const),
final nPum=hp.nUni) ;
Templates.Components.Routing.MultipleToSingle outPumChwSec(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final nPorts=pumChwSec.nPum,
final m_flow_nominal=mChwSec_flow_nominal)
;
Templates.Plants.Controls.Pumps.Generic.ControlDifferentialPressure
ctlPumChwSec(
have_senDpRemWir=true,
nPum=pumChwSec.nPum,
nSenDpRem=1,
k=0.1) ;
Templates.Plants.Controls.Pumps.Generic.StagingHeadered staPumChwSec(
is_pri=false,
is_hdr=true,
is_ctlDp=true,
have_valInlIso=false,
have_valOutIso=true,
nEqu=hp.nUni,
nPum=pumChwSec.nPum,
nSenDp=1,
V_flow_nominal=mChwSec_flow_nominal/Medium.d_const,
dtRun=5*60) ;
Templates.Components.Interfaces.Bus busPumChwPri1
;
Sensors.VolumeFlowRate VChwSec(
redeclare final package Medium = Medium,
final m_flow_nominal=mChwSec_flow_nominal) ;
Sensors.VolumeFlowRate VHwSec(
redeclare final package Medium = Medium,
final
m_flow_nominal=mHwSec_flow_nominal) ;
Sensors.VolumeFlowRate VChwPri(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mEva_flow_nominal) ;
Sensors.TemperatureTwoPort TChwSupPri(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mEva_flow_nominal,
initType=Modelica.Blocks.Types.Init.InitialOutput,
T_start=TChwSup_nominal) ;
Sensors.TemperatureTwoPort THwSupPri(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mCon_flow_nominal,
initType=Modelica.Blocks.Types.Init.InitialOutput,
T_start=THwSup_nominal) ;
FixedResistances.Junction junChwBypSup(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final m_flow_nominal=mChwPri_flow_nominal*{1,-1,-1},
final dp_nominal=
fill(0, 3)) ;
FixedResistances.Junction junChwBypRet(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final m_flow_nominal=mChwPri_flow_nominal*{1,-1,1},
final dp_nominal=
fill(0, 3)) ;
FixedResistances.Junction junHwBypSup(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final m_flow_nominal=mHwPri_flow_nominal*{1,-1,-1},
final dp_nominal=
fill(0, 3)) ;
FixedResistances.Junction junHwBypRet(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final m_flow_nominal=mHwPri_flow_nominal*{1,-1,1},
final dp_nominal=
fill(0, 3)) ;
Templates.Components.Routing.MultipleToSingle outPumChwPri(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final nPorts=pumChwPri.nPum,
final m_flow_nominal=hp.mEva_flow_nominal)
;
equation
connect(loaChw.port_b, valDisChw.port_a);
connect(loaHw.port_b, valDisHw.port_a);
connect(valDisChw.port_b, mChw_flow.port_a);
connect(valDisHw.port_b, mHw_flow.port_a);
connect(mHw_flow.m_flow, norFlo[1].u);
connect(mChw_flow.m_flow, norFlo[2].u);
connect(norFlo.y, ctlEquZon.u_m);
connect(ctlEquZon[2].y, valDisChw.y);
connect(ctlEquZon[1].y, valDisHw.y);
connect(TChwRetPre.y, min1.u1);
connect(min1.y, loaChw.TSet);
connect(max2.y, loaHw.TSet);
connect(con.y, min1.u2);
connect(con.y, max2.u1);
connect(THwRetPre.y, max2.u2);
connect(weaDat.weaBus, hp.weaBus);
connect(ratFlo.y, ctlEquZon.u_s);
connect(TSupSet[1].y, hp.THwSet);
connect(TSupSet[2].y, hp.TChwSet);
connect(dpChwRem.port_a, loaChw.port_a);
connect(dpChwRem.port_b, pipChw.port_a);
connect(dpHwRem.port_b, pipHw.port_a);
connect(dpHwRem.port_a, loaHw.port_a);
connect(pHwRet.ports[1], hp.port_a1);
connect(hp.port_b1, valHwIso.port_a);
connect(hp.yValHwIso, valHwIso.y);
connect(hp.port_b2, valChwIso.port_a);
connect(hp.yValChwIso, valChwIso.y);
connect(sumNumUni.y,intLesEquThr. u);
connect(intLesEquThr.y,assMes. u);
connect(hp.nUniShc, sumNumUni.u[1]);
connect(hp.nUniCoo, sumNumUni.u[2]);
connect(hp.nUniHea, sumNumUni.u[3]);
connect(pChwRet.ports[1], hp.port_a2);
connect(THwRetPla.port_b, hp.port_a1);
connect(TChwRetPla.port_b, hp.port_a2);
connect(mChw_flow.port_b, TChwRet.port_a);
connect(TChwRet.port_b, pipChw.port_a);
connect(mHw_flow.port_b, THwRet.port_a);
connect(THwRet.port_b, pipHw.port_a);
connect(TChwSup.T, TChwRetPre.u);
connect(THwSup.T, THwRetPre.u);
connect(valDisChw.y_actual, valChwReq.u);
connect(valDisHw.y_actual, valHwReq.u);
connect(valHwReq.y, reqHea.u);
connect(valChwReq.y, reqCoo.u);
connect(reqHea.y, enaHea.nReqPla);
connect(reqCoo.y, enaCoo.nReqPla);
connect(con.y, enaHea.TOut);
connect(con.y, enaCoo.TOut);
connect(inlPumChwPri.ports_b, pumChwPri.ports_a);
connect(busPumChwPri, pumChwPri.bus);
connect(staPumChwPri.y1, busPumChwPri.y1);
connect(hp.y1ChwValIsoPumPri, staPumChwPri.u1ValOutIso);
connect(busPumChwPri.y1_actual, staPumChwPri.u1Pum_actual);
connect(inlPumHwPri.ports_b, pumHwPri.ports_a);
connect(pumHwPri.ports_b, outPumHwPri.ports_a);
connect(inlPumHwPri.port_a, VHwPri.port_b);
connect(staPumHwPri.y1, busPumHwPri.y1);
connect(busPumHwPri, pumHwPri.bus);
connect(busPumHwPri.y1_actual, staPumHwPri.u1Pum_actual);
connect(hp.y1HwValIsoPumPri, staPumHwPri.u1ValOutIso);
connect(ctlPumHwSec.y, busPumHwSec.y);
connect(staPumHwSec.y1, busPumHwSec.y1);
connect(busPumHwSec, pumHwSec.bus);
connect(busPumHwSec.y1_actual, ctlPumHwSec.y1_actual);
connect(busPumHwSec.y, staPumHwSec.y);
connect(busPumHwSec.y1_actual, staPumHwSec.u1Pum_actual);
connect(dpHwRem.p_rel, ctlPumHwSec.dpRem[1]);
connect(dpHwRem.p_rel, staPumHwSec.dp[1]);
connect(hp.y1HwValIsoPumPri, staPumHwPri.u1Pum);
connect(pumHwSec.ports_b, outPumHwSec.ports_a);
connect(inlPumHwSec.ports_b, pumHwSec.ports_a);
connect(inlPumChwSec.ports_b, pumChwSec.ports_a);
connect(pumChwSec.ports_b, outPumChwSec.ports_a);
connect(hp.y1ChwValIsoPumPri, staPumChwPri.u1Pum);
connect(ctlPumChwSec.y, busPumChwPri1.y);
connect(busPumChwPri1.y1_actual,ctlPumChwSec. y1_actual);
connect(dpChwRem.p_rel,ctlPumChwSec. dpRem[1]);
connect(staPumChwSec.y1, busPumChwPri1.y1);
connect(busPumChwPri1.y1_actual, staPumChwSec.u1Pum_actual);
connect(busPumChwPri1.y, staPumChwSec.y);
connect(dpChwRem.p_rel, staPumChwSec.dp[1]);
connect(outPumChwSec.port_b, VChwSec.port_a);
connect(VChwSec.V_flow, staPumChwSec.V_flow);
connect(outPumHwSec.port_b, VHwSec.port_a);
connect(inlPumChwPri.port_a, VChwPri.port_b);
connect(dpRemSet[2].y, staPumChwSec.dpSet[1]);
connect(dpRemSet[2].y,ctlPumChwSec. dpRemSet[1]);
connect(dpRemSet[1].y, staPumHwSec.dpSet[1]);
connect(dpRemSet[1].y, ctlPumHwSec.dpRemSet[1]);
connect(busPumChwPri1, pumChwSec.bus);
connect(VHwSec.V_flow, staPumHwSec.V_flow);
connect(VChwSec.port_b, TChwSup.port_a);
connect(TChwSup.port_b, loaChw.port_a);
connect(VHwSec.port_b, THwSup.port_a);
connect(THwSup.port_b, loaHw.port_a);
connect(valChwIso.port_b, TChwSupPri.port_a);
connect(TChwSupPri.port_b, VChwPri.port_a);
connect(valHwIso.port_b, THwSupPri.port_a);
connect(THwSupPri.port_b, VHwPri.port_a);
connect(pipChw.port_b, junChwBypRet.port_1);
connect(junChwBypRet.port_2, TChwRetPla.port_a);
connect(pumChwPri.ports_b, outPumChwPri.ports_a);
connect(outPumHwPri.port_b, junHwBypSup.port_1);
connect(inlPumHwSec.port_a, junHwBypSup.port_2);
connect(outPumChwPri.port_b, junChwBypSup.port_1);
connect(inlPumChwSec.port_a, junChwBypSup.port_2);
connect(pipHw.port_b, junHwBypRet.port_1);
connect(junHwBypRet.port_2, THwRetPla.port_a);
connect(junChwBypSup.port_3, junChwBypRet.port_3);
connect(junHwBypSup.port_3, junHwBypRet.port_3);
connect(enaHea.y1, hp.onHea);
connect(enaCoo.y1, hp.onCoo);
connect(enaCoo.y1, staPumChwSec.u1Pla);
connect(enaHea.y1, staPumHwSec.u1Pla);
end TableData2DLoadDepSHC1And2;
Example of a primary-only plant with four-pipe heat pump
Information
This model illustrates the use of
Buildings.Fluid.HeatPumps.ModularReversible.TableData2DLoadDepSHC
to model a primary-only heating and cooling plant.
The simulation covers a 24-hour period with overlapping heating and
cooling loads.
The heating loads reach their peak value first, the cooling loads reach it last.
The plant model includes the following components.
-
Modular four-pipe heat pump with three units
-
HW and CHW isolation valves represented by an equivalent actuator
-
Three headered variable-speed primary HW and CHW pumps
-
HW and CHW minimum flow bypass valves
A unique aggregated load is modeled on each loop by means of a cooling or heating component
controlled to maintain a constant ΔT and a modulating valve controlled to track
a prescribed flow rate.
The closed-loop controls includes the following logic.
-
Heating and cooling plant enable: See
Buildings.Templates.Plants.Controls.Enabling.Enable.
The HW and CHW plant requests used in this logic are generated
based on an opening threshold of 10 % of the equivalent
terminal valves.
-
Heat pump operating mode:
When the heating plant is enabled and the cooling plant is disabled, the heat
pump is commanded in heating-only mode.
When the cooling plant is enabled and the heating plant is disabled, the heat
pump is commanded in cooling-only mode.
When both the cooling plant and the heating plant are enabled, the heat
pump is commanded in simultaneous heating and cooling mode.
When both the cooling plant and the heating plant are disabled, the heat
pump is commanded off.
-
HW and CHW supply temperature:
The heat pump is controlled with constant setpoints equal to the design values.
-
Primary HW and CHW pumps controlled to maintain a remote differential pressure setpoint:
See
Buildings.Templates.Plants.Controls.Pumps.Generic.StagingHeadered
for the staging and rotation logic, and
Buildings.Templates.Plants.Controls.Pumps.Generic.ControlDifferentialPressure
for the control logic.
-
Minimum flow HW and CHW bypass valves controlled to maintain the differential pressure
across the heat pump HW and CHW headers at design value.
Simulating this model shows how the plant responds to a varying load by
-
enabling or disabling the heating and cooling plants,
and switching the heat pump operating mode accordingly,
-
staging or unstaging the heat pump modules in various modes,
-
actuating the corresponding isolation valves,
-
staging, rotating and controlling the primary pumps to meet the
remote differential pressure setpoint.
-
modulating the minimum flow bypass valve to keep the header differential pressure
at its design value, which, in conjunction with the isolation valves' control,
effectively results in a flowrate through the heat pump heat exchangers varying
linearly with the number of enabled modules on each loop.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
| Type | Name | Default | Description |
| Generic | dat | dat(PLRHeaSup={1}, PLRCooSup... | Performance data |
| Nominal condition |
| HeatFlowRate | QHea_flow_nominal | 1500E3 | Heating heat flow rate [W] |
| HeatFlowRate | QCoo_flow_nominal | -1500E3 | Cooling heat flow rate [W] |
| MassFlowRate | mHw_flow_nominal | abs(QHea_flow_nominal/(THwSu... | HW mass flow rate [kg/s] |
| MassFlowRate | mChw_flow_nominal | abs(QCoo_flow_nominal/(TChwS... | CHW mass flow rate [kg/s] |
| Temperature | THwSup_nominal | Buildings.Templates.Data.Def... | HW supply temperature [K] |
| Temperature | TChwSup_nominal | Buildings.Templates.Data.Def... | CHW supply temperature [K] |
| Temperature | THwRet_nominal | Buildings.Templates.Data.Def... | HW return temperature [K] |
| Temperature | TChwRet_nominal | Buildings.Templates.Data.Def... | CHW return temperature [K] |
| PressureDifference | dpHwRemSet_max | Buildings.Templates.Data.Def... | Maximum HW differential pressure setpoint - At remote location [Pa] |
| PressureDifference | dpChwRemSet_max | Buildings.Templates.Data.Def... | Maximum CHW differential pressure setpoint - At remote location [Pa] |
| PressureDifference | dpHwLocSet_max | Buildings.Templates.Data.Def... | Maximum HW differential pressure setpoint - local to the plant [Pa] |
| PressureDifference | dpChwLocSet_max | Buildings.Templates.Data.Def... | Maximum CHW differential pressure setpoint - local to the plant [Pa] |
| Dynamics |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Connectors
| Type | Name | Description |
| Bus | busPumChwPri | Primary CHW pump control bus |
| Bus | busPumHwPri | Primary HW pump control bus |
Modelica definition
model TableData2DLoadDepSHC1Only
extends Modelica.Icons.Example;
package Medium=
Buildings.Media.Water
;
parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal=1500E3
;
parameter Modelica.Units.SI.HeatFlowRate QCoo_flow_nominal=-1500E3
;
parameter Modelica.Units.SI.MassFlowRate mHw_flow_nominal=
abs(QHea_flow_nominal / (THwSup_nominal - THwRet_nominal)) /
Buildings.Utilities.Psychrometrics.Constants.cpWatLiq
;
parameter Modelica.Units.SI.MassFlowRate mChw_flow_nominal=
abs(QCoo_flow_nominal / (TChwSup_nominal - TChwRet_nominal)) /
Buildings.Utilities.Psychrometrics.Constants.cpWatLiq
;
parameter Modelica.Units.SI.Temperature THwSup_nominal=
Buildings.Templates.Data.Defaults.THeaWatSupMed
;
parameter Modelica.Units.SI.Temperature TChwSup_nominal=
Buildings.Templates.Data.Defaults.TChiWatSup
;
parameter Modelica.Units.SI.Temperature THwRet_nominal=
Buildings.Templates.Data.Defaults.THeaWatRetMed
;
parameter Modelica.Units.SI.Temperature TChwRet_nominal=
Buildings.Templates.Data.Defaults.TChiWatRet
;
parameter Modelica.Units.SI.PressureDifference dpHwRemSet_max=
Buildings.Templates.Data.Defaults.dpHeaWatRemSet_max
;
parameter Modelica.Units.SI.PressureDifference dpChwRemSet_max=
Buildings.Templates.Data.Defaults.dpChiWatRemSet_max
;
parameter Modelica.Units.SI.PressureDifference dpHwLocSet_max=
Buildings.Templates.Data.Defaults.dpHeaWatLocSet_max
;
parameter Modelica.Units.SI.PressureDifference dpChwLocSet_max=
Buildings.Templates.Data.Defaults.dpChiWatLocSet_max
;
parameter Modelica.Fluid.Types.Dynamics energyDynamics=
Modelica.Fluid.Types.Dynamics.FixedInitial
;
BoundaryConditions.WeatherData.ReaderTMY3 weaDat(
filNam=
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos"))
;
Fluid.HeatExchangers.SensibleCooler_T loaHw(
redeclare final package Medium=Medium,
final m_flow_nominal=mHw_flow_nominal,
show_T=true,
final dp_nominal=0,
final energyDynamics=energyDynamics,
tau=300,
QMin_flow=-QHea_flow_nominal)
;
Fluid.HeatExchangers.Heater_T loaChw(
redeclare final package Medium=Medium,
final m_flow_nominal=mChw_flow_nominal,
show_T=true,
final dp_nominal=0,
final energyDynamics=energyDynamics,
tau=300,
QMax_flow=-QCoo_flow_nominal)
;
Fluid.Actuators.Valves.TwoWayEqualPercentage valDisHw(
redeclare final package Medium=Medium,
m_flow_nominal=mHw_flow_nominal,
dpValve_nominal=3E4,
y_start=0,
dpFixed_nominal=dpHwRemSet_max - 3E4)
;
Fluid.Actuators.Valves.TwoWayEqualPercentage valDisChw(
redeclare final package Medium=Medium,
m_flow_nominal=mChw_flow_nominal,
dpValve_nominal=3E4,
y_start=0,
dpFixed_nominal=dpChwRemSet_max - 3E4)
;
Fluid.Sensors.RelativePressure dpHwRem(
redeclare final package Medium = Medium)
;
Fluid.Sensors.RelativePressure dpChwRem(
redeclare final package Medium = Medium)
;
Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable ratFlo(table=[0,0,0; 5,0,0;
7,1,0; 12,0.4,0.4; 16,0,1; 22,0.1,0.1; 24,0,0],
timeScale=3600)
;
Buildings.Controls.OBC.CDL.Reals.PID ctlEquZon[2](
each k=0.1,
each Ti=60,
each final reverseActing=true) ;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter norFlo[2](
k={1/mHw_flow_nominal,
1/mChw_flow_nominal}) ;
Fluid.Sensors.MassFlowRate mChw_flow(
redeclare final package Medium=Medium)
;
Fluid.Sensors.MassFlowRate mHw_flow(
redeclare final package Medium=Medium)
;
Buildings.Controls.OBC.CDL.Reals.AddParameter TChwRetPre(p=TChwRet_nominal -
TChwSup_nominal) ;
Buildings.Controls.OBC.CDL.Reals.AddParameter THwRetPre(p=THwRet_nominal -
THwSup_nominal) ;
Buildings.Controls.OBC.CDL.Reals.Max max2
;
Buildings.Controls.OBC.CDL.Reals.Min min1
;
Buildings.Fluid.FixedResistances.PressureDrop pipHw(
redeclare final package Medium=Medium,
final m_flow_nominal=mHw_flow_nominal,
final dp_nominal=dpHwLocSet_max - dpHwRemSet_max)
;
Buildings.Fluid.FixedResistances.PressureDrop pipChw(
redeclare final package Medium=Medium,
final m_flow_nominal=mChw_flow_nominal,
final dp_nominal=dpChwLocSet_max - dpChwRemSet_max)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant con(
k=293.15) ;
Buildings.Fluid.HeatPumps.ModularReversible.TableData2DLoadDepSHC hp(
redeclare final package MediumCon=Medium,
redeclare final package MediumEva=Medium,
final energyDynamics=energyDynamics,
final mCon_flow_nominal=mHw_flow_nominal,
final mEva_flow_nominal=mChw_flow_nominal,
nUni=3,
final use_preDro=false,
QHeaShc_flow_nominal=QHea_flow_nominal,
QCooShc_flow_nominal=QCoo_flow_nominal,
final dat=dat,
final QHea_flow_nominal=QHea_flow_nominal,
final QCoo_flow_nominal=QCoo_flow_nominal,
final TConHea_nominal=THwSup_nominal,
TEvaHea_nominal=Buildings.Templates.Data.Defaults.TOutHpHeaLow,
final TConCoo_nominal=TChwSup_nominal,
TEvaCoo_nominal=Buildings.Templates.Data.Defaults.TOutHpCoo,
dpHw_nominal=30000,
dpChw_nominal=40000)
;
parameter Data.TableData2DLoadDepSHC.Generic dat(
PLRHeaSup={1},
PLRCooSup={1},
PLRShcSup={1},
fileNameHea=
Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/Data/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/Validation/AWHP_Heating.txt"),
fileNameCoo=
Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/Data/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/Validation/AWHP_Cooling.txt"),
fileNameShc=
Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/Data/Fluid/HeatPumps/ModularReversible/RefrigerantCycle/BaseClasses/Validation/AWHP_SHC.txt"),
mCon_flow_nominal=1.7,
mEva_flow_nominal=3.5,
dpCon_nominal=30E3,
dpEva_nominal=40E3,
devIde="",
use_TEvaOutForTab=true,
use_TConOutForTab=true) ;
Sensors.TemperatureTwoPort TChwSup(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mEva_flow_nominal,
initType=Modelica.Blocks.Types.Init.InitialOutput,
T_start=TChwSup_nominal) ;
Sensors.TemperatureTwoPort THwSup(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mCon_flow_nominal,
initType=Modelica.Blocks.Types.Init.InitialOutput,
T_start=THwSup_nominal) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant TSupSet[2](k={
THwSup_nominal,TChwSup_nominal}) ;
Sources.Boundary_pT pChwRet(
redeclare final package Medium = Medium,
p=Buildings.Templates.Data.Defaults.pChiWat_rel_nominal + 101325,
nPorts=1) ;
Sources.Boundary_pT pHwRet(
redeclare final package Medium = Medium,
p=Buildings.Templates.Data.Defaults.pHeaWat_rel_nominal + 101325,
nPorts=1) ;
Actuators.Valves.TwoWayTable valHwIso(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mCon_flow_nominal,
flowCharacteristics=hp.chaValHwIso,
dpValve_nominal=hp.dpValIso_nominal,
init=Modelica.Blocks.Types.Init.InitialState,
dpFixed_nominal=hp.dpHw_nominal)
;
Actuators.Valves.TwoWayTable valChwIso(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mEva_flow_nominal,
dpValve_nominal=hp.dpValIso_nominal,
init=Modelica.Blocks.Types.Init.InitialState,
dpFixed_nominal=hp.dpChw_nominal,
flowCharacteristics=hp.chaValChwIso)
;
Buildings.Controls.OBC.CDL.Integers.MultiSum sumNumUni(nin=3)
;
Buildings.Controls.OBC.CDL.Utilities.Assert assMes(message="Number of enabled modules exceeds number of modules")
;
Buildings.Controls.OBC.CDL.Integers.LessEqualThreshold intLesEquThr(t=hp.nUni)
;
Sensors.RelativePressure dpChwHea(
redeclare final package Medium = Medium)
;
Sensors.RelativePressure dpHwHea(
redeclare final package Medium = Medium)
;
Actuators.Valves.TwoWayLinear valChwByp(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mEva_flow_nominal/hp.nUni,
from_dp=true,
dpValve_nominal=hp.dpChw_nominal,
init=Modelica.Blocks.Types.Init.InitialState)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpHeaSet[2](k={hp.dpHw_nominal,
hp.dpChw_nominal}) ;
Buildings.Controls.OBC.Utilities.PIDWithEnable ctlValChwByp(
k=1,
Ti=60,
r=hp.dpChw_nominal,
y_reset=1,
y_neutral=1)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant dpRemSet[2](k={
dpHwRemSet_max,dpChwRemSet_max}) ;
Sensors.TemperatureTwoPort THwRetPla(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mCon_flow_nominal) ;
Sensors.TemperatureTwoPort TChwRetPla(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mEva_flow_nominal) ;
Actuators.Valves.TwoWayLinear valHwByp(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mCon_flow_nominal/hp.nUni,
from_dp=true,
dpValve_nominal=hp.dpHw_nominal,
init=Modelica.Blocks.Types.Init.InitialState)
;
Buildings.Controls.OBC.Utilities.PIDWithEnable ctlValHwByp(
k=1,
Ti=60,
r=hp.dpHw_nominal,
y_reset=1,
y_neutral=1)
;
Sensors.TemperatureTwoPort TChwRet(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mEva_flow_nominal) ;
Sensors.TemperatureTwoPort THwRet(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mCon_flow_nominal) ;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold valChwReq(t=1E-1, h=5E-2)
;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold valHwReq(t=1E-1, h=5E-2)
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger reqHea
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger reqCoo
;
Templates.Plants.Controls.Enabling.Enable enaHea(typ=Buildings.Templates.Plants.Controls.Types.Application.Heating,
TOutLck=295.15) ;
Templates.Plants.Controls.Enabling.Enable enaCoo(typ=Buildings.Templates.Plants.Controls.Types.Application.Cooling,
TOutLck=290.15) ;
Templates.Components.Routing.SingleToMultiple inlPumChwPri(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final nPorts=pumChwPri.nPum,
final m_flow_nominal=hp.mEva_flow_nominal)
;
Templates.Components.Pumps.Multiple pumChwPri(
redeclare final package Medium=Medium,
final energyDynamics=energyDynamics,
dat(
m_flow_nominal=
fill(hp.mEva_flow_nominal/pumChwPri.nPum, pumChwPri.nPum),
dp_nominal=
fill(dpChwLocSet_max + valChwIso.dpFixed_nominal + valChwIso.dpValve_nominal,
pumChwPri.nPum) .+ pumChwPri.dpValChe_nominal,
rho_default=Medium.d_const),
final nPum=hp.nUni) ;
Templates.Components.Routing.MultipleToSingle outPumChwPri(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final nPorts=pumChwPri.nPum,
final m_flow_nominal=hp.mEva_flow_nominal)
;
Templates.Plants.Controls.Pumps.Generic.ControlDifferentialPressure
ctlPumChwPri(
have_senDpRemWir=true,
nPum=pumChwPri.nPum,
nSenDpRem=1,
k=0.1) ;
Templates.Components.Interfaces.Bus busPumChwPri
;
Sensors.VolumeFlowRate VChwPri(
redeclare final package Medium = Medium,
final m_flow_nominal=hp.mEva_flow_nominal)
;
Templates.Plants.Controls.Pumps.Generic.StagingHeadered staPumChwPri(
is_pri=true,
is_hdr=true,
is_ctlDp=true,
have_valInlIso=false,
have_valOutIso=true,
nEqu=hp.nUni,
nPum=pumChwPri.nPum,
nSenDp=1,
V_flow_nominal=hp.mEva_flow_nominal/Medium.d_const,
dtRun=5*60) ;
Templates.Components.Routing.SingleToMultiple inlPumHwPri(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final nPorts=pumHwPri.nPum,
final m_flow_nominal=hp.mCon_flow_nominal)
;
Templates.Components.Pumps.Multiple pumHwPri(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
dat(
m_flow_nominal=
fill(hp.mCon_flow_nominal/pumHwPri.nPum, pumHwPri.nPum),
dp_nominal=
fill(dpHwLocSet_max + valHwIso.dpFixed_nominal + valHwIso.dpFixed_nominal,
pumHwPri.nPum) .+ pumHwPri.dpValChe_nominal,
rho_default=Medium.d_const),
final nPum=hp.nUni) ;
Templates.Components.Routing.MultipleToSingle outPumHwPri(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final nPorts=pumHwPri.nPum,
final m_flow_nominal=hp.mCon_flow_nominal)
;
Sensors.VolumeFlowRate VHwPri(
redeclare final package Medium = Medium,
final
m_flow_nominal=hp.mCon_flow_nominal) ;
Templates.Plants.Controls.Pumps.Generic.ControlDifferentialPressure ctlPumHwPri(
have_senDpRemWir=true,
nPum=pumHwPri.nPum,
nSenDpRem=1,
k=0.1) ;
Templates.Plants.Controls.Pumps.Generic.StagingHeadered staPumHwPri(
is_pri=true,
is_hdr=true,
is_ctlDp=true,
have_valInlIso=false,
have_valOutIso=true,
nEqu=hp.nUni,
nPum=pumHwPri.nPum,
nSenDp=1,
V_flow_nominal=hp.mCon_flow_nominal/Medium.d_const,
dtRun=5*60) ;
Templates.Components.Interfaces.Bus busPumHwPri ;
Buildings.Controls.OBC.CDL.Logical.MultiOr anyPumHwPri(nin=pumHwPri.nPum)
;
Buildings.Controls.OBC.CDL.Logical.MultiOr anyPumChwPri(nin=pumChwPri.nPum)
;
FixedResistances.Junction junChwBypSup(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final m_flow_nominal=mChw_flow_nominal*{1,-1,-1},
final dp_nominal=
fill(0, 3)) ;
FixedResistances.Junction junChwBypRet(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final m_flow_nominal=mChw_flow_nominal*{1,-1,1},
final dp_nominal=
fill(0, 3)) ;
FixedResistances.Junction junHwBypSup(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final m_flow_nominal=mHw_flow_nominal*{1,-1,-1},
final dp_nominal=
fill(0, 3)) ;
FixedResistances.Junction junHwBypRet(
redeclare final package Medium = Medium,
final energyDynamics=energyDynamics,
final m_flow_nominal=mHw_flow_nominal*{1,-1,1},
final dp_nominal=
fill(0, 3)) ;
equation
connect(loaChw.port_b, valDisChw.port_a);
connect(loaHw.port_b, valDisHw.port_a);
connect(valDisChw.port_b, mChw_flow.port_a);
connect(valDisHw.port_b, mHw_flow.port_a);
connect(mHw_flow.m_flow, norFlo[1].u);
connect(mChw_flow.m_flow, norFlo[2].u);
connect(norFlo.y, ctlEquZon.u_m);
connect(ctlEquZon[2].y, valDisChw.y);
connect(ctlEquZon[1].y, valDisHw.y);
connect(TChwRetPre.y, min1.u1);
connect(min1.y, loaChw.TSet);
connect(max2.y, loaHw.TSet);
connect(con.y, min1.u2);
connect(con.y, max2.u1);
connect(THwRetPre.y, max2.u2);
connect(weaDat.weaBus, hp.weaBus);
connect(ratFlo.y, ctlEquZon.u_s);
connect(TSupSet[1].y, hp.THwSet);
connect(TSupSet[2].y, hp.TChwSet);
connect(dpChwRem.port_a, loaChw.port_a);
connect(dpChwRem.port_b, pipChw.port_a);
connect(dpHwRem.port_b, pipHw.port_a);
connect(dpHwRem.port_a, loaHw.port_a);
connect(pHwRet.ports[1], hp.port_a1);
connect(hp.port_b1, valHwIso.port_a);
connect(valHwIso.port_b, THwSup.port_a);
connect(hp.yValHwIso, valHwIso.y);
connect(valChwIso.port_b, TChwSup.port_a);
connect(hp.port_b2, valChwIso.port_a);
connect(hp.yValChwIso, valChwIso.y);
connect(sumNumUni.y,intLesEquThr. u);
connect(intLesEquThr.y,assMes. u);
connect(hp.nUniShc, sumNumUni.u[1]);
connect(hp.nUniCoo, sumNumUni.u[2]);
connect(hp.nUniHea, sumNumUni.u[3]);
connect(dpHeaSet[2].y, ctlValChwByp.u_s);
connect(ctlValChwByp.y, valChwByp.y);
connect(dpChwHea.p_rel, ctlValChwByp.u_m);
connect(pChwRet.ports[1], hp.port_a2);
connect(THwRetPla.port_b, hp.port_a1);
connect(TChwRetPla.port_b, hp.port_a2);
connect(dpHwHea.p_rel, ctlValHwByp.u_m);
connect(ctlValHwByp.y, valHwByp.y);
connect(dpHeaSet[1].y, ctlValHwByp.u_s);
connect(dpChwHea.port_a, TChwRetPla.port_a);
connect(valChwIso.port_b, dpChwHea.port_b);
connect(dpHwHea.port_a, THwRetPla.port_a);
connect(valHwIso.port_b, dpHwHea.port_b);
connect(mChw_flow.port_b, TChwRet.port_a);
connect(TChwRet.port_b, pipChw.port_a);
connect(mHw_flow.port_b, THwRet.port_a);
connect(THwRet.port_b, pipHw.port_a);
connect(TChwSup.T, TChwRetPre.u);
connect(THwSup.T, THwRetPre.u);
connect(valDisChw.y_actual, valChwReq.u);
connect(valDisHw.y_actual, valHwReq.u);
connect(valHwReq.y, reqHea.u);
connect(valChwReq.y, reqCoo.u);
connect(reqHea.y, enaHea.nReqPla);
connect(reqCoo.y, enaCoo.nReqPla);
connect(con.y, enaHea.TOut);
connect(con.y, enaCoo.TOut);
connect(ctlPumChwPri.y, busPumChwPri.y);
connect(busPumChwPri, pumChwPri.bus);
connect(busPumChwPri.y1_actual, ctlPumChwPri.y1_actual);
connect(TChwSup.port_b, VChwPri.port_a);
connect(VChwPri.port_b, inlPumChwPri.port_a);
connect(dpRemSet[2].y, ctlPumChwPri.dpRemSet[1]);
connect(dpChwRem.p_rel, ctlPumChwPri.dpRem[1]);
connect(staPumChwPri.y1, busPumChwPri.y1);
connect(hp.y1ChwValIsoPumPri, staPumChwPri.u1ValOutIso);
connect(VChwPri.V_flow, staPumChwPri.V_flow);
connect(dpRemSet[2].y, staPumChwPri.dpSet[1]);
connect(busPumChwPri.y1_actual, staPumChwPri.u1Pum_actual);
connect(busPumChwPri.y, staPumChwPri.y);
connect(dpChwRem.p_rel, staPumChwPri.dp[1]);
connect(inlPumHwPri.ports_b, pumHwPri.ports_a);
connect(pumHwPri.ports_b, outPumHwPri.ports_a);
connect(inlPumHwPri.port_a, VHwPri.port_b);
connect(THwSup.port_b, VHwPri.port_a);
connect(ctlPumHwPri.y, busPumHwPri.y);
connect(staPumHwPri.y1, busPumHwPri.y1);
connect(busPumHwPri, pumHwPri.bus);
connect(busPumHwPri.y1_actual, ctlPumHwPri.y1_actual);
connect(busPumHwPri.y, staPumHwPri.y);
connect(busPumHwPri.y1_actual, staPumHwPri.u1Pum_actual);
connect(hp.y1HwValIsoPumPri, staPumHwPri.u1ValOutIso);
connect(VHwPri.V_flow, staPumHwPri.V_flow);
connect(dpHwRem.p_rel, ctlPumHwPri.dpRem[1]);
connect(dpHwRem.p_rel, staPumHwPri.dp[1]);
connect(dpRemSet[1].y, staPumHwPri.dpSet[1]);
connect(dpRemSet[1].y, ctlPumHwPri.dpRemSet[1]);
connect(staPumHwPri.y1_actual, anyPumHwPri.u);
connect(anyPumHwPri.y, ctlValHwByp.uEna);
connect(staPumChwPri.y1_actual, anyPumChwPri.u);
connect(anyPumChwPri.y, ctlValChwByp.uEna);
connect(valChwByp.port_a, junChwBypSup.port_3);
connect(outPumChwPri.port_b, junChwBypSup.port_1);
connect(junChwBypSup.port_2, loaChw.port_a);
connect(pipChw.port_b, junChwBypRet.port_1);
connect(junChwBypRet.port_3, valChwByp.port_b);
connect(junChwBypRet.port_2, TChwRetPla.port_a);
connect(outPumHwPri.port_b, junHwBypSup.port_1);
connect(valHwByp.port_a, junHwBypSup.port_3);
connect(junHwBypSup.port_2, loaHw.port_a);
connect(valHwByp.port_b, junHwBypRet.port_3);
connect(pipHw.port_b, junHwBypRet.port_1);
connect(junHwBypRet.port_2, THwRetPla.port_a);
connect(inlPumChwPri.ports_b, pumChwPri.ports_a);
connect(outPumChwPri.ports_a, pumChwPri.ports_b);
connect(enaCoo.y1, hp.onCoo);
connect(enaHea.y1, hp.onHea);
end TableData2DLoadDepSHC1Only;