This package provides records for design and operating parameters.
Most of the parameters should be assigned through the sub-record
dedicated to the controller.
All parameters that are also needed to parameterize other plant
components are propagated from the controller sub-record
to the corresponding equipment sub-records.
Note that those parameter bindings are not final so they may be
overwritten in case a component is parameterized at nominal
conditions that differ from the design conditions specified
in the controller sub-record.
Type | Name | Default | Description |
HeatPumpPlant | cfg | | Configuration parameters |
Controls |
Controller | ctl | ctl(final cfg=cfg) | Controller |
Heat pumps |
HeatPumpGroup | hp | hp(final typ=cfg.typ, final ... | Heat pumps |
PressureDifference | dpBalHeaWatHp_nominal | 0 | HP HW balancing valve pressure drop at design HW flow [Pa] |
PressureDifference | dpBalChiWatHp_nominal | 0 | HP CHW balancing valve pressure drop at design CHW flow [Pa] |
Primary HW loop |
PumpMultiple | pumHeaWatPri | pumHeaWatPri(final nPum=cfg.... | Primary HW pumps |
PressureDifference | dpValCheHeaWat_nominal | Buildings.Templates.Data.Def... | Primary (HW or common HW and CHW) pump check valve pressure drop at design flow rate (selection conditions) [Pa] |
Valve | valHeaWatMinByp | valHeaWatMinByp(final typ=Bu... | HW minimum flow bypass valve |
Volume | VTanHeaWat | if cfg.have_heaWat then 240*... | Volume of HW buffer tank [m3] |
Secondary HW loop |
PumpMultiple | pumHeaWatSec | pumHeaWatSec(final nPum=cfg.... | Secondary HW pumps |
Primary CHW loop |
PumpMultiple | pumChiWatPri | pumChiWatPri(final nPum=cfg.... | Primary CHW pumps |
PressureDifference | dpValCheChiWat_nominal | Buildings.Templates.Data.Def... | Primary CHW pump check valve pressure drop at design CHW flow rate [Pa] |
Valve | valChiWatMinByp | valChiWatMinByp(final typ=Bu... | CHW minimum flow bypass valve |
Volume | VTanChiWat | if cfg.have_chiWat then 120*... | Volume of HW buffer tank [m3] |
Secondary CHW loop |
PumpMultiple | pumChiWatSec | pumChiWatSec(final nPum=cfg.... | Secondary CHW pumps |
Sidetream heat recovery chiller |
Chiller | hrc | hrc(typ=if cfg.have_hrc then... | Chiller |
PumpSingle | pumChiWatHrc | pumChiWatHrc(final rho_defau... | |
PumpSingle | pumHeaWatHrc | pumHeaWatHrc(final rho_defau... | HRC HW pump |
Advanced |
String | id | "" | System tag |
record HeatPumpPlant
extends Modelica.Icons.Record;
parameter Buildings.Templates.Plants.HeatPumps.Configuration.HeatPumpPlant cfg
;
parameter String id=""
;
parameter Buildings.Templates.Plants.HeatPumps.Components.Data.Controller ctl(
final cfg=cfg)
;
parameter Buildings.Templates.Plants.HeatPumps.Components.Data.HeatPumpGroup
hp(
final typ=cfg.typ,
final nHp=cfg.nHp,
final is_rev=cfg.is_rev,
final typMod=cfg.typMod,
final cpHeaWat_default=cfg.cpHeaWat_default,
final cpSou_default=cfg.cpSou_default,
TChiWatSupHp_nominal=ctl.TChiWatSup_nominal,
capCooHp_nominal=ctl.capCooHp_nominal,
mHeaWatHp_flow_nominal=ctl.VHeaWatHp_flow_nominal*cfg.rhoHeaWat_default,
capHeaHp_nominal=ctl.capHeaHp_nominal,
mChiWatHp_flow_nominal=ctl.VChiWatHp_flow_nominal*cfg.rhoChiWat_default,
THeaWatSupHp_nominal=ctl.THeaWatSup_nominal)
;
parameter Modelica.Units.SI.PressureDifference dpBalHeaWatHp_nominal(start=0)=0
;
parameter Modelica.Units.SI.PressureDifference dpBalChiWatHp_nominal(start=0)=0
;
parameter Buildings.Templates.Components.Data.PumpMultiple pumHeaWatPri(
final nPum=cfg.nPumHeaWatPri,
final rho_default=cfg.rhoHeaWat_default,
final typ=
if cfg.typPumHeaWatPri <> Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.None
then Buildings.Templates.Components.Types.Pump.Multiple
else Buildings.Templates.Components.Types.Pump.None,
m_flow_nominal=
fill(hp.nHp * (
if cfg.have_chiWat
and cfg.typPumChiWatPri==Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.None
then
max(hp.mHeaWatHp_flow_nominal, hp.mChiWatHp_flow_nominal)
else hp.mHeaWatHp_flow_nominal) /
max(cfg.nPumHeaWatPri, 1),
cfg.nPumHeaWatPri))
;
final parameter Buildings.Templates.Components.Data.PumpSingle pumHeaWatPriSin[
max(cfg.nPumHeaWatPri, 1)](
each typ=pumHeaWatPri.typ,
m_flow_nominal=
if pumHeaWatPri.typ == Buildings.Templates.Components.Types.Pump.None
then {0}
else pumHeaWatPri.m_flow_nominal,
dp_nominal=
if pumHeaWatPri.typ == Buildings.Templates.Components.Types.Pump.None
then {0}
else pumHeaWatPri.dp_nominal,
per(
pressure(
V_flow=
if pumHeaWatPri.typ == Buildings.Templates.Components.Types.Pump.None
then [0]
else pumHeaWatPri.per.pressure.V_flow,
dp=
if pumHeaWatPri.typ == Buildings.Templates.Components.Types.Pump.None
then [0]
else pumHeaWatPri.per.pressure.dp)),
each rho_default=pumHeaWatPri.rho_default)
;
parameter Modelica.Units.SI.PressureDifference dpValCheHeaWat_nominal(start=0)=
Buildings.Templates.Data.Defaults.dpValChe
;
parameter Buildings.Templates.Components.Data.Valve valHeaWatMinByp(
final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating,
m_flow_nominal=
if cfg.have_valHeaWatMinByp
then ctl.VHeaWatHp_flow_min * cfg.rhoHeaWat_default
else 0,
dpValve_nominal=Buildings.Templates.Data.Defaults.dpValBypMin)
;
parameter Modelica.Units.SI.Volume VTanHeaWat(start=0)=
if cfg.have_heaWat
then 240 * cfg.nHp * hp.mHeaWatHp_flow_nominal / cfg.rhoHeaWat_default
else 0
;
parameter Buildings.Templates.Components.Data.PumpMultiple pumHeaWatSec(
final nPum=cfg.nPumHeaWatSec,
final rho_default=cfg.rhoHeaWat_default,
final typ=
if cfg.typPumHeaWatSec == Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.Centralized
then Buildings.Templates.Components.Types.Pump.Multiple
else Buildings.Templates.Components.Types.Pump.None)
;
parameter Buildings.Templates.Components.Data.PumpMultiple pumChiWatPri(
final nPum=cfg.nPumChiWatPri,
final rho_default=cfg.rhoChiWat_default,
final typ=
if cfg.typPumChiWatPri <> Buildings.Templates.Plants.HeatPumps.Types.PumpsPrimary.None
then Buildings.Templates.Components.Types.Pump.Multiple
else Buildings.Templates.Components.Types.Pump.None,
m_flow_nominal=
fill(hp.mChiWatHp_flow_nominal * hp.nHp /
max(cfg.nPumChiWatPri, 1), cfg.nPumChiWatPri))
;
final parameter Buildings.Templates.Components.Data.PumpSingle pumChiWatPriSin[
max(cfg.nPumChiWatPri, 1)](
each typ=pumChiWatPri.typ,
m_flow_nominal=
if pumChiWatPri.typ == Buildings.Templates.Components.Types.Pump.None
then {0}
else pumChiWatPri.m_flow_nominal,
dp_nominal=
if pumChiWatPri.typ == Buildings.Templates.Components.Types.Pump.None
then {0}
else pumChiWatPri.dp_nominal,
per(
pressure(
V_flow=
if pumChiWatPri.typ == Buildings.Templates.Components.Types.Pump.None
then [0]
else pumChiWatPri.per.pressure.V_flow,
dp=
if pumChiWatPri.typ == Buildings.Templates.Components.Types.Pump.None
then [0]
else pumChiWatPri.per.pressure.dp)),
each rho_default=pumChiWatPri.rho_default)
;
parameter Modelica.Units.SI.PressureDifference dpValCheChiWat_nominal(start=0)=
Buildings.Templates.Data.Defaults.dpValChe
;
parameter Buildings.Templates.Components.Data.Valve valChiWatMinByp(
final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating,
m_flow_nominal=
if cfg.have_valChiWatMinByp
then ctl.VChiWatHp_flow_min * cfg.rhoChiWat_default
else 0,
dpValve_nominal=Buildings.Templates.Data.Defaults.dpValBypMin)
;
parameter Modelica.Units.SI.Volume VTanChiWat(start=0)=
if cfg.have_chiWat
then 120 * cfg.nHp * hp.mChiWatHp_flow_nominal / cfg.rhoChiWat_default
else 0
;
parameter Buildings.Templates.Components.Data.PumpMultiple pumChiWatSec(
final nPum=cfg.nPumChiWatSec,
final rho_default=cfg.rhoChiWat_default,
final typ=
if cfg.typPumChiWatSec == Buildings.Templates.Plants.HeatPumps.Types.PumpsSecondary.Centralized
then Buildings.Templates.Components.Types.Pump.Multiple
else Buildings.Templates.Components.Types.Pump.None)
;
parameter Buildings.Templates.Components.Data.Chiller hrc(
typ=
if cfg.have_hrc
then Buildings.Templates.Components.Types.Chiller.WaterCooled
else Buildings.Templates.Components.Types.Chiller.None,
cpChiWat_default=cfg.cpChiWat_default,
cpCon_default=cfg.cpHeaWat_default,
COP_nominal=ctl.COPHeaHrc_nominal - 1,
TChiWatSup_nominal=ctl.TChiWatSup_nominal,
TChiWatSup_min=ctl.TChiWatSupHrc_min,
TConEnt_nominal=
if cfg.have_hrc
then
hrc.TConLvg_nominal - hrc.QCon_flow_nominal / hrc.mCon_flow_nominal / hrc.cpCon_default
else 273.15,
TConLvg_nominal=ctl.THeaWatSup_nominal,
TConLvg_max=ctl.THeaWatSupHrc_max,
PLR_min=
abs(ctl.capCooHrc_min / hrc.cap_nominal))
;
parameter Buildings.Templates.Components.Data.PumpSingle pumChiWatHrc(
final rho_default=cfg.rhoChiWat_default,
final typ=
if cfg.have_hrc
then Buildings.Templates.Components.Types.Pump.Single
else Buildings.Templates.Components.Types.Pump.None,
m_flow_nominal=hrc.mChiWat_flow_nominal,
dp_nominal=hrc.dpChiWat_nominal,
per(pressure(
V_flow=
if pumChiWatHrc.typ<>Buildings.Templates.Components.Types.Pump.None
then
{0, 1, 2} * pumChiWatHrc.m_flow_nominal / cfg.rhoChiWat_default
else {0,0,0},
dp=
if pumChiWatHrc.typ<>Buildings.Templates.Components.Types.Pump.None
then
{1.14, 1, 0.42} * pumChiWatHrc.dp_nominal
else {0,0,0})));
parameter Buildings.Templates.Components.Data.PumpSingle pumHeaWatHrc(
final rho_default=cfg.rhoHeaWat_default,
final typ=
if cfg.have_hrc
then Buildings.Templates.Components.Types.Pump.Single
else Buildings.Templates.Components.Types.Pump.None,
m_flow_nominal=hrc.mCon_flow_nominal,
dp_nominal=hrc.dpCon_nominal,
per(pressure(
V_flow=
if pumHeaWatHrc.typ<>Buildings.Templates.Components.Types.Pump.None
then
{0, 1, 2} * pumHeaWatHrc.m_flow_nominal / cfg.rhoHeaWat_default
else {0,0,0},
dp=
if pumHeaWatHrc.typ<>Buildings.Templates.Components.Types.Pump.None
then
{1.14, 1, 0.42} * pumHeaWatHrc.dp_nominal
else {0,0,0})))
;
end HeatPumpPlant;