A load profile based on a whole building energy simulation is used to
represent realistic operating conditions.
The district water supply temperature varies on a monthly basis, with
a minimum in January and a maximum in August.
model HeatRecoveryHeatPump
extends Modelica.Icons.Example;
package Medium=
Buildings.Media.Water ;
parameter String filNam="modelica://Buildings/Resources/Data/DHC/Loads/Examples/MediumOffice-90.1-2010-5A.mos"
;
parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal=0.9*datHeaPum.mCon_flow_nominal
;
parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal=0.9*datHeaPum.mEva_flow_nominal
;
parameter Modelica.Units.SI.HeatFlowRate QCoo_flow_nominal(max=-Modelica.Constants.eps)=
Buildings.DHC.Loads.BaseClasses.getPeakLoad(
string="#Peak space cooling load",
filNam=
Modelica.Utilities.Files.loadResource(filNam))
;
parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal(min=Modelica.Constants.eps)=
Buildings.DHC.Loads.BaseClasses.getPeakLoad(
string="#Peak space heating load",
filNam=
Modelica.Utilities.Files.loadResource(filNam))
;
parameter Modelica.Units.SI.ThermodynamicTemperature TChiWatSup_nominal(
displayUnit="degC") = 7+273.15
;
parameter Modelica.Units.SI.TemperatureDifference dTChiWat_nominal = 5
;
parameter Modelica.Units.SI.ThermodynamicTemperature THeaWatSup_nominal(
displayUnit="degC") = 45+273.15
;
parameter Modelica.Units.SI.TemperatureDifference dTHeaWat_nominal = 10
;
parameter Buildings.DHC.ETS.Combined.Data.WAMAK_220kW datHeaPum(
PLRMin=0.2,
QHeaDes_flow_nominal=
max(QHea_flow_nominal,
abs(QCoo_flow_nominal)*1.2),
QCooDes_flow_nominal=QCoo_flow_nominal,
dTCon_nominal=dTHeaWat_nominal,
dTEva_nominal=dTChiWat_nominal,
THeaConLvg_nominal=THeaWatSup_nominal,
THeaEvaLvg_nominal=TChiWatSup_nominal,
TCooConLvg_nominal=273.15 + 31,
TCooEvaLvg_nominal=TChiWatSup_nominal) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaWatSupSet(
k=THeaWatSup_nominal,
y(
final unit="K",
displayUnit="degC"))
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant TChiWatSupSet(
k=TChiWatSup_nominal,
y(
final unit="K",
displayUnit="degC"))
;
Buildings.Fluid.Sensors.TemperatureTwoPort senTHeaWatSup(
redeclare package
Medium = Medium, m_flow_nominal=datHeaPum.mCon_flow_nominal)
;
Buildings.Fluid.Sensors.TemperatureTwoPort senTChiWatSup(
redeclare package
Medium = Medium, m_flow_nominal=datHeaPum.mEva_flow_nominal)
;
Buildings.DHC.ETS.Combined.HeatRecoveryHeatPump ets(
have_hotWat=false,
QChiWat_flow_nominal=QCoo_flow_nominal,
QHeaWat_flow_nominal=QHea_flow_nominal,
QHotWat_flow_nominal=0,
dp1Hex_nominal=40E3,
dp2Hex_nominal=40E3,
QHex_flow_nominal=QHea_flow_nominal,
T_a1Hex_nominal=283.65,
T_b1Hex_nominal=279.65,
T_a2Hex_nominal=276.65,
T_b2Hex_nominal=282.65,
QWSE_flow_nominal=QCoo_flow_nominal,
VTanHeaWat=datHeaPum.mCon_flow_nominal*dTHeaWat_nominal*5*60/1000,
VTanChiWat=datHeaPum.mEva_flow_nominal*dTChiWat_nominal*5*60/1000,
datDhw=datDhw,
TCon_start=THeaWatSup_nominal,
TEva_start=TChiWatSup_nominal,
datHeaPum=datHeaPum) ;
Buildings.Fluid.Sensors.TemperatureTwoPort senTHeaWatRet(
redeclare final package Medium = Medium,
m_flow_nominal=datHeaPum.mCon_flow_nominal)
;
Buildings.Fluid.Sensors.TemperatureTwoPort senTChiWatRet(
redeclare final package Medium = Medium,
m_flow_nominal=datHeaPum.mEva_flow_nominal)
;
Buildings.Fluid.Sources.Boundary_pT disWat(
redeclare package Medium = Medium,
use_T_in=true,
nPorts=2) ;
DHC.ETS.BaseClasses.Pump_m_flow pumChiWat(
redeclare package Medium = Medium,
final m_flow_nominal=mChiWat_flow_nominal,
dp_nominal=100E3) ;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2(
final k=
mChiWat_flow_nominal) ;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai1(
final k=
mHeaWat_flow_nominal) ;
DHC.ETS.BaseClasses.Pump_m_flow pumHeaWat(
redeclare package Medium = Medium,
final m_flow_nominal=mHeaWat_flow_nominal,
dp_nominal=100E3) ;
Buildings.Fluid.MixingVolumes.MixingVolume volHeaWat(
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
T_start=45 + 273.15,
final prescribedHeatFlowRate=true,
redeclare package Medium = Medium,
V=10,
final mSenFac=1,
final m_flow_nominal=mHeaWat_flow_nominal,
nPorts=2) ;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai3(
final k=-ets.QHeaWat_flow_nominal)
;
Buildings.HeatTransfer.Sources.PrescribedHeatFlow loaHea
;
Buildings.Fluid.MixingVolumes.MixingVolume volChiWat(
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
T_start=7 + 273.15,
final prescribedHeatFlowRate=true,
redeclare package Medium = Medium,
V=10,
final mSenFac=1,
final m_flow_nominal=mChiWat_flow_nominal,
nPorts=2) ;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai4(
final k=-ets.QChiWat_flow_nominal)
;
Buildings.HeatTransfer.Sources.PrescribedHeatFlow loaCoo
;
Modelica.Blocks.Sources.CombiTimeTable TDisWatSup(
tableName="tab1",
table=[
0,11;
1,12;
2,13;
3,14;
4,15;
5,16;
6,17;
7,18;
8,20;
9,18;
10,16;
11,13;
12,11],
timeScale=2592000,
offset={273.15},
columns={2},
extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic,
smoothness=Modelica.Blocks.Types.Smoothness.MonotoneContinuousDerivative1)
;
Modelica.Blocks.Sources.CombiTimeTable loa(
tableOnFile=true,
tableName="tab1",
fileName=
Modelica.Utilities.Files.loadResource(filNam),
timeScale=1,
extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic,
offset={0,0},
columns={2,3},
smoothness=Modelica.Blocks.Types.Smoothness.MonotoneContinuousDerivative1)
;
Buildings.Fluid.Sensors.TemperatureTwoPort senTDisWatSup(
redeclare final
package Medium = Medium,
final m_flow_nominal=ets.hex.m1_flow_nominal)
;
Modelica.Blocks.Continuous.Integrator EChi(
y(unit="J"))
;
Fluid.Sensors.TemperatureTwoPort senTDisWatRet(
redeclare final package Medium =
Medium,
final m_flow_nominal=ets.hex.m1_flow_nominal)
;
parameter Loads.HotWater.Data.GenericDomesticHotWaterWithHeatExchanger
datDhw(
VTan=datHeaPum.mCon_flow_nominal*dTHeaWat_nominal*5*60/1000,
mDom_flow_nominal=datDhw.QHex_flow_nominal/4200/(datDhw.TDom_nominal -
datDhw.TCol_nominal),
QHex_flow_nominal=
if ets.have_hotWat
then ets.QHotWat_flow_nominal
else ets.QHeaWat_flow_nominal,
TDom_nominal=323.15)
;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter loaNorHea(
k=1/ets.QHeaWat_flow_nominal)
;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter loaNorCoo(
k=1/ets.QChiWat_flow_nominal) ;
equation
connect(TChiWatSupSet.y,ets.TChiWatSupSet);
connect(THeaWatSupSet.y,ets.THeaWatSupSet);
connect(pumChiWat.port_a,senTChiWatSup.port_b);
connect(gai2.y,pumChiWat.m_flow_in);
connect(pumHeaWat.port_b,senTHeaWatSup.port_a);
connect(gai1.y,pumHeaWat.m_flow_in);
connect(gai3.y,loaHea.Q_flow);
connect(loaHea.port,volHeaWat.heatPort);
connect(pumChiWat.port_b,volChiWat.ports[1]);
connect(volChiWat.ports[2],senTChiWatRet.port_a);
connect(senTHeaWatSup.port_b,volHeaWat.ports[1]);
connect(gai4.y,loaCoo.Q_flow);
connect(loaCoo.port,volChiWat.heatPort);
connect(volHeaWat.ports[2],senTHeaWatRet.port_a);
connect(TDisWatSup.y[1],disWat.T_in);
connect(disWat.ports[1],senTDisWatSup.port_a);
connect(senTDisWatSup.port_b, ets.port_aSerAmb);
connect(ets.ports_bChiWat[1],senTChiWatSup.port_a);
connect(ets.ports_bHeaWat[1],pumHeaWat.port_a);
connect(senTHeaWatRet.port_b,ets.ports_aHeaWat[1]);
connect(senTChiWatRet.port_b,ets.ports_aChiWat[1]);
connect(ets.PCoo, EChi.u);
connect(ets.port_bSerAmb, senTDisWatRet.port_a);
connect(senTDisWatRet.port_b, disWat.ports[2]);
connect(loa.y[2],loaNorHea.u);
connect(loa.y[1],loaNorCoo.u);
connect(loaNorHea.y, gai3.u);
connect(loaNorHea.y, gai1.u);
connect(loaNorCoo.y, gai4.u);
connect(loaNorCoo.y, gai2.u);
end HeatRecoveryHeatPump;