Buildings.Experimental.DHC.EnergyTransferStations.Combined.Validation.BaseClasses
Package with base classes
Information
This package contains base classes that are used to construct the classes in Buildings.Experimental.DHC.EnergyTransferStations.Combined.Validation.
Extends from Modelica.Icons.BasesPackage (Icon for packages containing base classes).
Package Content
Name | Description |
---|---|
PartialChillerBorefield | Partial validation of the ETS model with heat recovery chiller and optional borefield |
Buildings.Experimental.DHC.EnergyTransferStations.Combined.Validation.BaseClasses.PartialChillerBorefield
Partial validation of the ETS model with heat recovery chiller and optional borefield
Information
This is a partial model used as a base class to construct the validation and example models.
- The building distribution pumps are variable speed and the flow rate is considered to vary linearly with the load (with no inferior limit).
- The Boolean enable signals for heating and cooling typically provided by the building automation system are here computed based on the condition that the load is greater than 1% of the nominal load.
- Simplified chiller performance data are used, which represent a linear variation of the EIR and the capacity with the evaporator outlet temperature and the condenser inlet temperature (no variation of the EIR at part load is considered).
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
---|---|---|---|
MassFlowRate | mHeaWat_flow_nominal | 0.9*datChi.mCon_flow_nominal | Nominal heating water mass flow rate [kg/s] |
MassFlowRate | mChiWat_flow_nominal | 0.9*datChi.mEva_flow_nominal | Nominal chilled water mass flow rate [kg/s] |
Generic | datChi | datChi(QEva_flow_nominal=QCo... | Chiller performance data |
Design parameter | |||
HeatFlowRate | QCoo_flow_nominal | -1e6 | Design cooling heat flow rate (<=0) [W] |
HeatFlowRate | QHea_flow_nominal | abs(QCoo_flow_nominal)*(1 + ... | Design heating heat flow rate (>=0) [W] |
Modelica definition
partial model PartialChillerBorefield
"Partial validation of the ETS model with heat recovery chiller and optional borefield"
extends Modelica.Icons.Example;
package Medium=Buildings.Media.Water
"Medium model";
parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal=0.9*datChi.mCon_flow_nominal
"Nominal heating water mass flow rate";
parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal=0.9*datChi.mEva_flow_nominal
"Nominal chilled water mass flow rate";
parameter Modelica.Units.SI.HeatFlowRate QCoo_flow_nominal(max=-Modelica.Constants.eps)=
-1e6 "Design cooling heat flow rate (<=0)";
parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal(min=Modelica.Constants.eps)=
abs(QCoo_flow_nominal)*(1 + 1/datChi.COP_nominal)
"Design heating heat flow rate (>=0)";
parameter Buildings.Fluid.Chillers.Data.ElectricEIR.Generic datChi(
QEva_flow_nominal=QCoo_flow_nominal,
COP_nominal=3,
PLRMax=1,
PLRMinUnl=0.3,
PLRMin=0.3,
etaMotor=1,
mEva_flow_nominal=abs(QCoo_flow_nominal)/5/4186,
mCon_flow_nominal=QHea_flow_nominal/5/4186,
TEvaLvg_nominal=277.15,
capFunT={1.72,0.02,0,-0.02,0,0},
EIRFunT={0.28,-0.02,0,0.02,0,0},
EIRFunPLR={0.1,0.9,0},
TEvaLvgMin=277.15,
TEvaLvgMax=288.15,
TConEnt_nominal=313.15,
TConEntMin=298.15,
TConEntMax=328.15) "Chiller performance data";
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant THeaWatSupSet(
k=45+273.15,
y(final unit="K",
displayUnit="degC"))
"Heating water supply temperature set point";
Buildings.Controls.OBC.CDL.Continuous.Sources.Constant TChiWatSupSet(
k=7+273.15,
y(final unit="K",
displayUnit="degC"))
"Chilled water supply temperature set point";
Buildings.Fluid.Sensors.TemperatureTwoPort senTHeaWatSup(redeclare package
Medium = Medium, m_flow_nominal=datChi.mCon_flow_nominal)
"Heating water supply temperature";
Buildings.Fluid.Sensors.TemperatureTwoPort senTChiWatSup(redeclare package
Medium = Medium, m_flow_nominal=datChi.mEva_flow_nominal)
"Chilled water supply temperature";
Buildings.Experimental.DHC.EnergyTransferStations.Combined.ChillerBorefield ets(
redeclare package MediumSer = Medium,
redeclare package MediumBui = Medium,
QChiWat_flow_nominal=QCoo_flow_nominal,
QHeaWat_flow_nominal=QHea_flow_nominal,
dp1Hex_nominal=40E3,
dp2Hex_nominal=40E3,
QHex_flow_nominal=-QCoo_flow_nominal,
T_a1Hex_nominal=284.15,
T_b1Hex_nominal=279.15,
T_a2Hex_nominal=277.15,
T_b2Hex_nominal=282.15,
QWSE_flow_nominal=QCoo_flow_nominal,
dpCon_nominal=40E3,
dpEva_nominal=40E3,
datChi=datChi,
nPorts_bChiWat=1,
nPorts_bHeaWat=1,
nPorts_aHeaWat=1,
nPorts_aChiWat=1)
"ETS";
Buildings.Fluid.Sensors.TemperatureTwoPort senTHeaWatRet(redeclare final
package Medium = Medium, m_flow_nominal=datChi.mCon_flow_nominal)
"Heating water return temperature";
Buildings.Fluid.Sensors.TemperatureTwoPort senTChiWatRet(redeclare final
package Medium = Medium, m_flow_nominal=datChi.mEva_flow_nominal)
"Chilled water return temperature";
Buildings.Fluid.Sources.Boundary_pT disWat(
redeclare package Medium = Medium,
use_T_in=true,
nPorts=2) "District water boundary conditions";
DHC.EnergyTransferStations.BaseClasses.Pump_m_flow pumChiWat(
redeclare package Medium = Medium,
final m_flow_nominal=mChiWat_flow_nominal,
dp_nominal=100E3) "Chilled water distribution pump";
Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai2(final k=
mChiWat_flow_nominal) "Scale to nominal mass flow rate";
Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai1(final k=
mHeaWat_flow_nominal) "Scale to nominal mass flow rate";
DHC.EnergyTransferStations.BaseClasses.Pump_m_flow pumHeaWat(
redeclare package Medium = Medium,
final m_flow_nominal=mHeaWat_flow_nominal,
dp_nominal=100E3) "Heating water distribution pump";
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) "Volume for heating water distribution circuit";
Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai3(final k=-ets.QHeaWat_flow_nominal)
"Scale to nominal heat flow rate";
Buildings.HeatTransfer.Sources.PrescribedHeatFlow loaHea
"Heating load as prescribed heat flow rate";
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) "Volume for chilled water distribution circuit";
Buildings.Controls.OBC.CDL.Continuous.MultiplyByParameter gai4(final k=-ets.QChiWat_flow_nominal)
"Scale to nominal heat flow rate";
Buildings.HeatTransfer.Sources.PrescribedHeatFlow loaCoo
"Cooling load as prescribed heat flow rate";
Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold uHea(
final t=0.01,
final h=0.005)
"Enable heating";
Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold uCoo(
final t=0.01,
final h=0.005)
"Enable cooling";
Modelica.Blocks.Routing.RealPassThrough heaLoaNor
"Connect with normalized heating load";
Modelica.Blocks.Routing.RealPassThrough loaCooNor
"Connect with normalized cooling load";
Modelica.Blocks.Sources.CombiTimeTable TDisWatSup(
tableName="tab1",
table=[
0,11;
49,11;
50,20;
100,20],
extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic,
timeScale=3600,
offset={273.15},
columns={2},
smoothness=Modelica.Blocks.Types.Smoothness.MonotoneContinuousDerivative1)
"District water supply temperature";
Modelica.Blocks.Sources.CombiTimeTable loa(
tableName="tab1",
table=[
0,0,0;
1,0,0;
2,0,1;
3,0,1;
4,0,0.5;
5,0,0.5;
6,0,0.1;
7,0,0.1;
8,0,0;
9,0,0;
10,0,0;
11,0,0;
12,1,0;
13,1,0;
14,0.5,0;
15,0.5,0;
16,0.1,0;
17,0.1,0;
18,0,0;
19,0,0;
20,0,0;
21,0,0;
22,1,1;
23,1,1;
24,0.5,0.5;
25,0.5,0.5;
26,0.1,0.1;
27,0.1,0.1;
28,0,0;
29,0,0;
30,0,0;
31,0,0;
32,0.1,1;
33,0.1,1;
34,0.5,0.5;
35,0.5,0.5;
36,1,0.1;
37,1,0.1;
38,0,0;
39,0,0;
40,0,0;
41,0,0;
42,0.1,0.3;
43,0.1,0.3;
44,0.3,0.1;
45,0.3,0.1;
46,0.1,0.1;
47,0.1,0.1;
48,0,0;
49,0,0],
extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic,
timeScale=3600,
offset={0,0},
columns={2,3},
smoothness=Modelica.Blocks.Types.Smoothness.MonotoneContinuousDerivative1)
"Thermal loads (y[1] is cooling load, y[2] is heating load)";
Buildings.Fluid.Sensors.TemperatureTwoPort senTDisWatSup(redeclare final
package Medium = Medium, final m_flow_nominal=ets.hex.m1_flow_nominal)
"District water supply temperature";
Modelica.Blocks.Continuous.Integrator EChi(
y(unit="J"))
"Chiller electricity use";
Fluid.Sensors.TemperatureTwoPort senTDisWatRet(redeclare final package Medium =
Medium, final m_flow_nominal=ets.hex.m1_flow_nominal)
"District water return temperature";
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(heaLoaNor.y,gai3.u);
connect(heaLoaNor.y,uHea.u);
connect(heaLoaNor.y,gai1.u);
connect(loaCooNor.y,gai4.u);
connect(loaCooNor.y,gai2.u);
connect(loaCooNor.y,uCoo.u);
connect(TDisWatSup.y[1],disWat.T_in);
connect(uCoo.y,ets.uCoo);
connect(uHea.y,ets.uHea);
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]);
end PartialChillerBorefield;