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.
Only identical heat pumps are currently supported.
| Type | Name | Default | Description |
| HeatPumpPlant | cfg | | Configuration parameters |
| Controls |
| Controller | ctl | ctl(final cfg=cfg, VChiWatHp... | Controller |
| Heat pumps and polyvalent units |
| HeatPumpGroup | hp | hp(final have_hp=cfg.have_hp... | Nominal conditions and performance data |
| 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] |
| PressureDifference | dpBalHeaWatPhp_nominal | 0 | Polyvalent unit HW balancing valve pressure drop at design HW flow [Pa] |
| PressureDifference | dpBalChiWatPhp_nominal | 0 | Polyvalent unit 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[cfg.nPumHeaWatPri] | fill(Buildings.Templates.Dat... | Primary (HW or common HW and CHW) pump check valve pressure drop at design flow rate (selection conditions) – Each unit [Pa] |
| Valve | valHeaWatMinByp | valHeaWatMinByp(final typ=Bu... | HW minimum flow bypass valve |
| Volume | VTanHeaWat | if cfg.have_heaWat then 4*60... | 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[cfg.nPumChiWatPri] | fill(Buildings.Templates.Dat... | Primary CHW pump check valve pressure drop at design flow rate (selection conditions) – Each unit [Pa] |
| Valve | valChiWatMinByp | valChiWatMinByp(final typ=Bu... | CHW minimum flow bypass valve |
| Volume | VTanChiWat | if cfg.have_chiWat then 2*60... | 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... | HRC CHW pump |
| 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,
VChiWatHp_flow_nominal=hp.mChiWatHp_flow_nominal / cfg.rhoChiWat_default,
VChiWatPhp_flow_nominal=hp.mChiWatPhp_flow_nominal / cfg.rhoChiWat_default,
VHeaWatHp_flow_nominal=hp.mHeaWatHp_flow_nominal / cfg.rhoHeaWat_default,
VHeaWatPhp_flow_nominal=hp.mHeaWatPhp_flow_nominal / cfg.rhoHeaWat_default)
;
parameter Buildings.Templates.Plants.HeatPumps.Components.Data.HeatPumpGroup hp(
final have_hp=cfg.have_hp,
final have_php=cfg.have_php,
final typHp=cfg.typHp,
final is_rev=cfg.is_rev,
final cpHeaWat_default=cfg.cpHeaWat_default,
final cpChiWatPhp_default=cfg.cpChiWat_default,
final cpSou_default=cfg.cpSou_default,
capCooHp_nominal=ctl.capCooHp_nominal,
capCooPhp_nominal=ctl.capCooPhp_nominal,
capCooShcPhp_nominal=ctl.capCooShcPhp_nominal,
capHeaHp_nominal=ctl.capHeaHp_nominal,
capHeaPhp_nominal=ctl.capHeaPhp_nominal,
capHeaShcPhp_nominal=ctl.capHeaShcPhp_nominal,
TChiWatSupHp_nominal=ctl.TChiWatSup_nominal,
TChiWatSupPhp_nominal=ctl.TChiWatSup_nominal,
THeaWatSupHp_nominal=ctl.THeaWatSup_nominal,
THeaWatSupPhp_nominal=ctl.THeaWatSup_nominal)
;
parameter Modelica.Units.SI.PressureDifference dpBalHeaWatHp_nominal(
final min=0,
start=0) = 0
;
parameter Modelica.Units.SI.PressureDifference dpBalChiWatHp_nominal(
final min=0,
start=0) = 0
;
parameter Modelica.Units.SI.PressureDifference dpBalHeaWatPhp_nominal(
final min=0,
start=0) = 0
;
parameter Modelica.Units.SI.PressureDifference dpBalChiWatPhp_nominal(
final min=0,
start=0) = 0
;
final parameter Modelica.Units.SI.MassFlowRate mPumHeaWatPriDed_flow_nominal[cfg.nPumHeaWatPri] =
{
if i <= cfg.nHp
then (
if cfg.have_pumChiWatPriDedHp
then hp.mHeaWatHp_flow_nominal
else max(hp.mHeaWatHp_flow_nominal, hp.mChiWatHp_flow_nominal))
else hp.mHeaWatPhp_flow_nominal
for i
in 1:cfg.nPumHeaWatPri}
;
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=
if cfg.typArrPumPri ==
Buildings.Templates.Components.Types.PumpArrangement.Dedicated
then mPumHeaWatPriDed_flow_nominal
else fill(
(cfg.nHp * hp.mHeaWatHp_flow_nominal + cfg.nPhp *
hp.mHeaWatPhp_flow_nominal) /
max(cfg.nPumHeaWatPri, 1),
cfg.nPumHeaWatPri))
;
parameter Modelica.Units.SI.PressureDifference dpValCheHeaWat_nominal[cfg.nPumHeaWatPri](
each start=0) =
fill(
Buildings.Templates.Data.Defaults.dpValChe, cfg.nPumHeaWatPri)
;
parameter Buildings.Templates.Components.Data.Valve valHeaWatMinByp(
final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating,
m_flow_nominal=
if cfg.have_valHeaWatMinByp
then max(ctl.VHeaWatHp_flow_min, ctl.VHeaWatPhp_flow_min) *
cfg.rhoHeaWat_default
else max(hp.mHeaWatHp_flow_nominal, hp.mHeaWatPhp_flow_nominal),
dpValve_nominal=Buildings.Templates.Data.Defaults.dpValBypMin)
;
parameter Modelica.Units.SI.Volume VTanHeaWat(start=0) =
if cfg.have_heaWat
then 4 * 60 * (cfg.nHp * hp.mHeaWatHp_flow_nominal + cfg.nPhp *
hp.mHeaWatPhp_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,
m_flow_nominal=
fill(
ctl.VHeaWatSec_flow_nominal * cfg.rhoHeaWat_default /
max(
1, cfg.nPumHeaWatSec),
cfg.nPumHeaWatSec))
;
final parameter Modelica.Units.SI.MassFlowRate mPumChiWatPriDed_flow_nominal[cfg.nPumChiWatPri] =
{
if i >= cfg.nPumChiWatPri - cfg.nPhp + 1
then hp.mChiWatPhp_flow_nominal
else hp.mChiWatHp_flow_nominal
for i
in 1:cfg.nPumChiWatPri}
;
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=
if cfg.typArrPumPri ==
Buildings.Templates.Components.Types.PumpArrangement.Dedicated
then mPumChiWatPriDed_flow_nominal
else fill(
(hp.mChiWatHp_flow_nominal * cfg.nHp + hp.mChiWatPhp_flow_nominal *
cfg.nPhp) /
max(cfg.nPumChiWatPri, 1),
cfg.nPumChiWatPri))
;
parameter Modelica.Units.SI.PressureDifference dpValCheChiWat_nominal[cfg.nPumChiWatPri](
each start=0) =
fill(
Buildings.Templates.Data.Defaults.dpValChe, cfg.nPumChiWatPri)
;
parameter Buildings.Templates.Components.Data.Valve valChiWatMinByp(
final typ=Buildings.Templates.Components.Types.Valve.TwoWayModulating,
m_flow_nominal=
if cfg.have_valChiWatMinByp
then max(ctl.VChiWatHp_flow_min, ctl.VChiWatPhp_flow_min) *
cfg.rhoChiWat_default
else max(hp.mChiWatHp_flow_nominal, hp.mChiWatPhp_flow_nominal),
dpValve_nominal=Buildings.Templates.Data.Defaults.dpValBypMin)
;
parameter Modelica.Units.SI.Volume VTanChiWat(start=0) =
if cfg.have_chiWat
then 2 * 60 * (cfg.nHp * hp.mChiWatHp_flow_nominal + cfg.nPhp *
hp.mChiWatPhp_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,
m_flow_nominal=
fill(
ctl.VChiWatSec_flow_nominal * cfg.rhoChiWat_default /
max(
1, cfg.nPumChiWatSec),
cfg.nPumChiWatSec))
;
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,
TChiWatSup_nominal=ctl.TChiWatSup_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)
;
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)
;
end HeatPumpPlant;