Collection of models that validate the Buildings.Applications.DataCenters.ChillerCooled package
Information
This package contains validation models for the classes in
Buildings.Applications.DataCenters.ChillerCooled.Equipment.
Note that most validation models contain simple input data
which may not be realistic, but for which the correct
output can be obtained through an analytic solution.
The examples plot various outputs, which have been verified against these
solutions. These model outputs are stored as reference data and
used for continuous validation whenever models in the library change.
Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).
Package Content
Name |
Description |
CoolingCoilHumidifyingHeating_ClosedLoop
|
Model of a air handling unit that tests temperature and humidity control |
CoolingCoilHumidifyingHeating_OpenLoop
|
Model of a air handling unit that tests variable mass flow rates |
ElectricChillerParallel
|
Model that test electric chiller parallel |
ElectricHeater
|
Test model for ElectricHeater |
HeatExchanger
|
Model that demonstrates use of a waterside economizer with outlet temperature control |
HeatExchanger_ResetController
|
Model that demonstrates use of a waterside economizer with outlet temperature control and temperature controller is reset after a predefined time period |
IntegratedPrimaryLoadSide
|
Integrated WSE on the load side in a primary-only chilled water system |
IntegratedPrimaryPlantSide
|
Integrated WSE on the plant side in a primary-only chilled water system |
IntegratedPrimarySecondary
|
Integrated WSE on the load side in a primary-secondary chilled water system |
NonIntegrated
|
Non-integrated WSE in a chilled water system |
PumpParallel
|
Example that tests the model pump parallels |
WatersideEconomizer
|
Validate model Buildings.Applications.DataCenters.ChillerCooled.Equipment.WatersideEconomizer |
BaseClasses
|
Package with base classes for Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation |
Model of a air handling unit that tests temperature and humidity control
Information
This model demonstrates the use of
Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating.
The valve on the water-side and
the electric heater on the air-side is regulated to track a setpoint temperature
for the air outlet based on the step changes in the inlet temperature on the waterside.
The humidifier on the air-side is manipulated to control the humidity
of the air outlet.
To avoid simultenous cooling (by opening the valve on the water side) and
heating (by turning on the heater), a built-in
controller is used to turn the reheater on and off. The detailed control logic can be found in
Buildings.Applications.DataCenters.ChillerCooled.Controls.Reheat.
A setting for this example is shown as following:
-
The switch point for the valve position,
yValSwi
is set as
yValSwi=yValMin + 0.1
, and a deadband
0.05
is used.
-
The switch point for the difference between the inlet temperature of
the reheater and the required outlet temperature setpoint,
dTSwi
is set to 0, and deaband temperature difference
0.5 Kelvin is used.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialAirHandlerControl (Partial model for testing air hanlders with temperature and humidity control).
Parameters
Type | Name | Default | Description |
MassFlowRate | m1_flow_nominal | 2.9 | Nominal mass flow rate [kg/s] |
MassFlowRate | m2_flow_nominal | 3.3 | Nominal mass flow rate [kg/s] |
Temperature | T_a1_nominal | 6 + 273.15 | Nominal water inlet temperature [K] |
Temperature | T_b1_nominal | 11 + 273.15 | Nominal water outlet temperature [K] |
Temperature | T_a2_nominal | 26 + 273.15 | Nominal air inlet temperature [K] |
Temperature | T_b2_nominal | 12 + 273.15 | Nominal air outlet temperature [K] |
ThermalConductance | UA_nominal | m2_flow_nominal*1006*(T_b2_n... | Thermal conductance at nominal flow for sensible heat, used to compute time constant [W/K] |
Real | yValMin | 0.4 | Minimum position of water-side valves |
Modelica definition
model CoolingCoilHumidifyingHeating_ClosedLoop
extends Modelica.Icons.Example;
extends Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialAirHandlerControl
(
relHum(k=0.5),
sou_1(p=500000),
sou_2(nPorts = 1),
masFra(
redeclare package Medium = Medium2),
TWat(
startTime=1200,
offset=273.15 + 13,
height=-6));
parameter Modelica.SIunits.ThermalConductance UA_nominal=m2_flow_nominal*1006*(T_b2_nominal-T_a2_nominal)/
Buildings.Fluid.HeatExchangers.BaseClasses.lmtd(
T_a1_nominal,
T_b1_nominal,
T_a2_nominal,
T_b2_nominal)
;
parameter Real yValMin = 0.4 ;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating
ahu(
redeclare package Medium1 = Medium1,
redeclare package Medium2 = Medium2,
allowFlowReversal1=true,
allowFlowReversal2=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
tauEleHea=1,
tauHum=1,
m1_flow_nominal=m1_flow_nominal,
m2_flow_nominal=m2_flow_nominal,
UA_nominal=UA_nominal,
dpValve_nominal=6000,
mWatMax_flow=0.01,
perFan(pressure(V_flow=m2_flow_nominal*{0,0.5,1}, dp=300*{1.2,1.12,1})),
yValve_start=1,
dp1_nominal=3000,
dp2_nominal=200,
use_inputFilterValve=false,
QHeaMax_flow=10000,
yValSwi=yValMin + 0.1,
yValDeaBan=0.05)
;
Modelica.Blocks.Sources.Constant uFan(k=1) ;
Modelica.Blocks.Sources.Constant masFraSet(k=0.011)
;
Buildings.Controls.Continuous.LimPID PID(
yMax=1,
reverseAction=true,
Td=120,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
yMin=yValMin,
k=0.5,
Ti=60)
;
equation
connect(ahu.port_a2, sou_2.ports[1]);
connect(uFan.y, ahu.uFan);
connect(ahu.port_b2, temSenAir2.port_a);
connect(temSenWat1.port_b, ahu.port_a1);
connect(TSet.y, PID.u_s);
connect(temSenAir2.T, PID.u_m);
connect(PID.y, ahu.uVal);
connect(masFraSet.y, ahu.XSet_w);
connect(TSet.y, ahu.TSet);
connect(ahu.port_b1, temSenWat2.port_a);
end CoolingCoilHumidifyingHeating_ClosedLoop;
Model of a air handling unit that tests variable mass flow rates
Information
This model demonstrates the use of
Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating
for different inlet conditions.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialAirHandlerMassFlow (Partial model for testing air handler at variable mass flowrate).
Parameters
Type | Name | Default | Description |
MassFlowRate | m1_flow_nominal | 2.9 | Nominal mass flow rate [kg/s] |
MassFlowRate | m2_flow_nominal | 3.3 | Nominal mass flow rate [kg/s] |
Temperature | T_a1_nominal | 6 + 273.15 | Nominal water inlet temperature [K] |
Temperature | T_b1_nominal | 11 + 273.15 | Nominal water outlet temperature [K] |
Temperature | T_a2_nominal | 26 + 273.15 | Nominal air inlet temperature [K] |
Temperature | T_b2_nominal | 12 + 273.15 | Nominal air outlet temperature [K] |
ThermalConductance | UA_nominal | m2_flow_nominal*1006*(12 - 2... | Thermal conductance at nominal flow for sensible heat, used to compute time constant [W/K] |
Real | yValMin | 0.4 | Minimum position of water-side valves |
Modelica definition
model CoolingCoilHumidifyingHeating_OpenLoop
extends Modelica.Icons.Example;
extends Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialAirHandlerMassFlow
( sou_2(nPorts=1), relHum(k=0.5));
parameter Modelica.SIunits.ThermalConductance UA_nominal=m2_flow_nominal*1006*(12-26)/
Buildings.Fluid.HeatExchangers.BaseClasses.lmtd(
T_a1_nominal,
T_b1_nominal,
T_a2_nominal,
T_b2_nominal)
;
parameter Real yValMin = 0.4 ;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating
ahu(
redeclare package Medium1 = Medium1,
redeclare package Medium2 = Medium2,
allowFlowReversal1=true,
allowFlowReversal2=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
yValve_start=0,
tauEleHea=1,
tauHum=1,
m1_flow_nominal=m1_flow_nominal,
m2_flow_nominal=m2_flow_nominal,
UA_nominal=UA_nominal,
dpValve_nominal=6000,
QHeaMax_flow=10000,
mWatMax_flow=0.01,
perFan(pressure(V_flow=m2_flow_nominal*{0,0.5,1}, dp=300*{1.2,1.12,1})),
dp1_nominal=3000,
dp2_nominal=200,
yValSwi=yValMin+0.05)
;
Buildings.Fluid.Sensors.RelativeHumidityTwoPort senRelHum(
redeclare package Medium = Medium2, m_flow_nominal=m2_flow_nominal)
;
Modelica.Blocks.Sources.Constant uVal(k=0.2)
;
Modelica.Blocks.Sources.Constant temSet(k=15 + 273.15)
;
Modelica.Blocks.Sources.Constant XSet(k=0.01) ;
Modelica.Blocks.Sources.Constant uFan(k=1) ;
equation
connect(ahu.port_a2, sou_2.ports[1]);
connect(ahu.port_b2, senRelHum.port_a);
connect(uVal.y, ahu.uVal);
connect(uFan.y, ahu.uFan);
connect(temSet.y, ahu.TSet);
connect(XSet.y, ahu.XSet_w);
connect(temSenAir2.port_a, senRelHum.port_b);
connect(temSenWat1.port_b, ahu.port_a1);
connect(temSenWat2.port_a, ahu.port_b1);
end CoolingCoilHumidifyingHeating_OpenLoop;
Model that test electric chiller parallel
Information
This example demonstrates how the chiller parallel can operate under different performance curves.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Fluid.Chillers.Examples.BaseClasses.PartialElectric (Base class for test model of chiller electric EIR).
Parameters
Modelica definition
model ElectricChillerParallel
extends Modelica.Icons.Example;
extends Buildings.Fluid.Chillers.Examples.BaseClasses.PartialElectric(
P_nominal=-per1.QEva_flow_nominal/per1.COP_nominal,
mEva_flow_nominal=per1.mEva_flow_nominal,
mCon_flow_nominal=per1.mCon_flow_nominal,
sou1(nPorts=1, m_flow=2*mCon_flow_nominal),
sou2(nPorts=1, m_flow=2*mEva_flow_nominal));
parameter Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_McQuay_WSC_471kW_5_89COP_Vanes
per1 ;
parameter Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_York_YT_563kW_10_61COP_Vanes
per2 ;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.ElectricChillerParallel
chiPar(
num=2,
redeclare package Medium1 = Medium1,
redeclare package Medium2 = Medium2,
m1_flow_nominal=mEva_flow_nominal,
m2_flow_nominal=mCon_flow_nominal,
dp1_nominal=6000,
dp2_nominal=6000,
dpValve_nominal={6000,6000},
per={per1,per2})
;
equation
connect(chiPar.port_b1, res1.port_a);
connect(chiPar.port_a1, sou1.ports[1]);
connect(res2.port_a, chiPar.port_b2);
connect(chiPar.port_a2, sou2.ports[1]);
connect(greaterThreshold.y, chiPar.on[1]);
connect(greaterThreshold.y, chiPar.on[2]);
connect(TSet.y, chiPar.TSet);
end ElectricChillerParallel;
Test model for ElectricHeater
Information
This model test the electric heater model:
Buildings.Applications.DataCenters.ChillerCooled.Equipment.ElectricHeater.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Fluid.HeatExchangers.Examples.BaseClasses.Heater (Base class for example model for the heater and cooler).
Parameters
Type | Name | Default | Description |
replaceable package Medium | PartialMedium | Medium model |
Volume | V | 6*6*2.7 | Volume [m3] |
MassFlowRate | m_flow_nominal | V*1.2*6/3600 | Nominal mass flow rate [kg/s] |
HeatFlowRate | Q_flow_nominal | 30*6*6 | Nominal heat loss of the room [W] |
Connectors
Type | Name | Description |
replaceable package Medium | Medium model |
Modelica definition
model ElectricHeater
extends Modelica.Icons.Example;
extends Buildings.Fluid.HeatExchangers.Examples.BaseClasses.Heater(
redeclare package Medium =
Buildings.Media.Air,
m_flow_nominal=V*1.2*6/3600,
Q_flow_nominal=30*6*6,
mov(nominalValuesDefineDefaultPressureCurve=true,
dp_nominal=1200));
Buildings.Applications.DataCenters.ChillerCooled.Equipment.ElectricHeater eleHea(
redeclare package Medium =
Medium,
m_flow_nominal=m_flow_nominal,
QMax_flow=Q_flow_nominal,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
dp_nominal=1000,
eta=0.95)
;
Buildings.Controls.SetPoints.Table tab(table=[0,273.15 + 15; 1,273.15 + 30])
;
Modelica.Blocks.Sources.BooleanStep uHea(startTime(displayUnit="min") = 60000)
;
equation
connect(mov.port_b, eleHea.port_a);
connect(eleHea.port_b, THeaOut.port_a);
connect(conPI.y, tab.u);
connect(tab.y, eleHea.TSet);
connect(uHea.y, eleHea.on);
end ElectricHeater;
Model that demonstrates use of a waterside economizer with outlet temperature control
Information
This example demonstrates how the parameter use_controller
influences
the temperautre at port_b2
. The temperature at port_b2
can be controlled in hex1
where the controller is activated.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
MassFlowRate | m1_flow_nominal | 1000*0.01035 | Nominal mass flow rate at evaporator [kg/s] |
MassFlowRate | m2_flow_nominal | 1000*0.01035 | Nominal mass flow rate at condenser [kg/s] |
Pressure | dp1_nominal | 60000 | Nominal pressure difference on medium 1 side [Pa] |
Pressure | dp2_nominal | 60000 | Nominal pressure difference on medium 2 side [Pa] |
Modelica definition
model HeatExchanger
extends Modelica.Icons.Example;
package MediumW =
Buildings.Media.Water ;
parameter Modelica.SIunits.MassFlowRate m1_flow_nominal=1000 * 0.01035
;
parameter Modelica.SIunits.MassFlowRate m2_flow_nominal=1000 * 0.01035
;
parameter Modelica.SIunits.Pressure dp1_nominal=60000
;
parameter Modelica.SIunits.Pressure dp2_nominal=60000
;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.HeatExchanger_TSet
hex1(
m1_flow_nominal=m1_flow_nominal,
m2_flow_nominal=m2_flow_nominal,
eta=0.8,
dp1_nominal=dp1_nominal,
dp2_nominal=dp2_nominal,
T_start=273.15 + 10,
use_controller=true,
redeclare package Medium1 = MediumW,
redeclare package Medium2 = MediumW,
Ti=40,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
k=0.1,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.HeatExchanger_TSet
hex2(
m1_flow_nominal=m1_flow_nominal,
m2_flow_nominal=m2_flow_nominal,
eta=0.8,
dp1_nominal=dp1_nominal,
dp2_nominal=dp2_nominal,
T_start=273.15 + 10,
redeclare package Medium1 = MediumW,
redeclare package Medium2 = MediumW,
use_controller=false)
;
Buildings.Fluid.Sources.Boundary_pT sin1(
nPorts=2,
redeclare package Medium = MediumW)
;
Buildings.Fluid.Sources.MassFlowSource_T sou1(
use_T_in=true,
nPorts=2,
redeclare package Medium = MediumW,
m_flow=2*m1_flow_nominal,
T=298.15)
;
Modelica.Blocks.Sources.TimeTable TCon_in(
table=[0,273.15 + 12.78;
7200,273.15 + 12.78;
7200,273.15 + 18.33;
14400,273.15 + 18.33;
14400,273.15 + 26.67],
offset=0,
startTime=0)
;
Buildings.Fluid.Sources.Boundary_pT sin2(
nPorts=2,
redeclare package Medium = MediumW)
;
Buildings.Fluid.Sources.MassFlowSource_T sou2_2(
nPorts=1,
redeclare package Medium = MediumW,
m_flow=m2_flow_nominal,
use_T_in=true)
;
Modelica.Blocks.Sources.Constant TEva_in(k=273.15 + 25.28)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TSen1(
m_flow_nominal=m2_flow_nominal,
redeclare package Medium = MediumW)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TSen2(
redeclare package Medium = MediumW,
m_flow_nominal=m2_flow_nominal)
;
Modelica.Blocks.Sources.Constant TSet(
k(unit="K",displayUnit="degC")=273.15+16.56)
;
Buildings.Fluid.Sources.MassFlowSource_T sou2_1(
nPorts=1,
redeclare package Medium = MediumW,
m_flow=m2_flow_nominal,
use_T_in=true)
;
Modelica.Blocks.Sources.Constant TEva_in1( k=273.15 + 25.28)
;
equation
connect(TSet.y, hex1.TSet);
connect(sou1.ports[1], hex1.port_a1);
connect(hex1.port_b1, sin1.ports[1]);
connect(TCon_in.y,sou1. T_in);
connect(sou2_2.T_in, TEva_in.y);
connect(hex1.port_b2, TSen1.port_a);
connect(TSen1.port_b, sin2.ports[1]);
connect(sou1.ports[2], hex2.port_a1);
connect(hex2.port_b2, TSen2.port_a);
connect(TSen2.port_b, sin2.ports[2]);
connect(hex2.port_b1, sin1.ports[2]);
connect(hex2.port_a2, sou2_2.ports[1]);
connect(hex1.port_a2, sou2_1.ports[1]);
connect(TEva_in1.y, sou2_1.T_in);
end HeatExchanger;
Model that demonstrates use of a waterside economizer with outlet temperature control and temperature controller is reset after a predefined time period
Information
This example demonstrates how the PID controller in the heat exchanger model can be reset. We compared three options:
(1) reset with a paramter value; (2) reset with an input signal; (3) without reset.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
MassFlowRate | m1_flow_nominal | 1000*0.01035 | Nominal mass flow rate at evaporator [kg/s] |
MassFlowRate | m2_flow_nominal | 1000*0.01035 | Nominal mass flow rate at condenser [kg/s] |
Pressure | dp1_nominal | 60000 | Nominal pressure difference on medium 1 side [Pa] |
Pressure | dp2_nominal | 60000 | Nominal pressure difference on medium 2 side [Pa] |
Modelica definition
model HeatExchanger_ResetController
extends Modelica.Icons.Example;
package MediumW =
Buildings.Media.Water ;
parameter Modelica.SIunits.MassFlowRate m1_flow_nominal=1000 * 0.01035
;
parameter Modelica.SIunits.MassFlowRate m2_flow_nominal=1000 * 0.01035
;
parameter Modelica.SIunits.Pressure dp1_nominal=60000
;
parameter Modelica.SIunits.Pressure dp2_nominal=60000
;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.HeatExchanger_TSet
hex1(
m1_flow_nominal=m1_flow_nominal,
m2_flow_nominal=m2_flow_nominal,
eta=0.8,
dp1_nominal=dp1_nominal,
dp2_nominal=dp2_nominal,
T_start=273.15 + 10,
use_controller=true,
redeclare package Medium1 = MediumW,
redeclare package Medium2 = MediumW,
Ti=40,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
k=0.1,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
reset=Buildings.Types.Reset.Parameter,
y_reset=0)
;
Buildings.Fluid.Sources.Boundary_pT sin1(
nPorts=3,
redeclare package Medium = MediumW)
;
Buildings.Fluid.Sources.MassFlowSource_T sou1(
use_T_in=true,
nPorts=3,
redeclare package Medium = MediumW,
m_flow=3*m1_flow_nominal,
T=298.15)
;
Modelica.Blocks.Sources.TimeTable TCon_in(
table=[0,273.15 + 12.78;
7200,273.15 + 12.78;
7200,273.15 + 18.33;
14400,273.15 + 18.33;
14400,273.15 + 26.67],
offset=0,
startTime=0)
;
Buildings.Fluid.Sources.Boundary_pT sin2(
nPorts=3,
redeclare package Medium = MediumW)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TSen1(
m_flow_nominal=m2_flow_nominal,
redeclare package Medium = MediumW)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TSen2(
redeclare package Medium = MediumW,
m_flow_nominal=m2_flow_nominal)
;
Modelica.Blocks.Sources.Constant TSet(
k(unit="K",displayUnit="degC")=273.15+16.56)
;
Buildings.Fluid.Sources.MassFlowSource_T sou2_1(
nPorts=3,
redeclare package Medium = MediumW,
use_T_in=true,
m_flow=3*m2_flow_nominal)
;
Modelica.Blocks.Sources.Constant TEva_in(k=273.15 + 25.28)
;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.HeatExchanger_TSet
hex2(
m1_flow_nominal=m1_flow_nominal,
m2_flow_nominal=m2_flow_nominal,
eta=0.8,
dp1_nominal=dp1_nominal,
dp2_nominal=dp2_nominal,
T_start=273.15 + 10,
use_controller=true,
redeclare package Medium1 = MediumW,
redeclare package Medium2 = MediumW,
Ti=40,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
k=0.1,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
reset=Buildings.Types.Reset.Input)
;
Modelica.Blocks.Sources.BooleanPulse tri(period=900)
;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.HeatExchanger_TSet
hex3(
m1_flow_nominal=m1_flow_nominal,
m2_flow_nominal=m2_flow_nominal,
eta=0.8,
dp1_nominal=dp1_nominal,
dp2_nominal=dp2_nominal,
T_start=273.15 + 10,
use_controller=true,
redeclare package Medium1 = MediumW,
redeclare package Medium2 = MediumW,
Ti=40,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
k=0.1,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TSen3(
redeclare package Medium =
MediumW, m_flow_nominal=m2_flow_nominal)
;
Modelica.Blocks.Sources.Constant yRes(k=0) ;
equation
connect(TSet.y, hex1.TSet);
connect(sou1.ports[1], hex1.port_a1);
connect(hex1.port_b1, sin1.ports[1]);
connect(TCon_in.y,sou1. T_in);
connect(hex1.port_b2, TSen1.port_a);
connect(TSen1.port_b, sin2.ports[1]);
connect(TSen2.port_b, sin2.ports[2]);
connect(hex1.port_a2, sou2_1.ports[1]);
connect(TEva_in.y, sou2_1.T_in);
connect(TSen2.port_a, hex2.port_b2);
connect(sou1.ports[2], hex2.port_a1);
connect(hex2.port_b1, sin1.ports[2]);
connect(TSet.y, hex2.TSet);
connect(tri.y, hex1.trigger);
connect(sou2_1.ports[2], hex2.port_a2);
connect(sin2.ports[3], TSen3.port_b);
connect(TSen3.port_a, hex3.port_b2);
connect(hex3.port_a1, sou1.ports[3]);
connect(hex3.port_b1, sin1.ports[3]);
connect(hex3.port_a2, sou2_1.ports[3]);
connect(TSet.y, hex3.TSet);
connect(tri.y, hex2.trigger);
connect(yRes.y, hex2.y_reset_in);
end HeatExchanger_ResetController;
Integrated WSE on the load side in a primary-only chilled water system
Information
This example demonstrates how the model responses
according to different cooling mode signals
(free cooling mode, partially mechanical cooling and fully mechanical cooling).
The reponses are also compared with a second case where the PI controller in the WSE
is reset every 1800s.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant (Partial examples for Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation).
Parameters
Type | Name | Default | Description |
MassFlowRate | mCHW_flow_nominal | 2567.1*1000/(4200*10) | Nominal mass flow rate at chilled water [kg/s] |
MassFlowRate | mCW_flow_nominal | 2567.1*1000/(4200*8.5) | Nominal mass flow rate at condenser water [kg/s] |
PressureDifference | dpCHW_nominal | 40000 | Nominal pressure [Pa] |
PressureDifference | dpCW_nominal | 40000 | Nominal pressure [Pa] |
Integer | numChi | 1 | Number of chillers |
Generic | perPum[numChi] | perPum(each pressure=Buildin... | Pump performance data |
Modelica definition
model IntegratedPrimaryLoadSide
extends Modelica.Icons.Example;
extends Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant
(
sou1(nPorts=2, m_flow=2*mCW_flow_nominal),
sin1(nPorts=2),
TSet(k=273.15 + 5.56),
TEva_in(k=273.15 + 15.28),
sin2(nPorts=2));
Buildings.Applications.DataCenters.ChillerCooled.Equipment.IntegratedPrimaryLoadSide
intWSEPri1(
m1_flow_chi_nominal=mCW_flow_nominal,
m2_flow_chi_nominal=mCHW_flow_nominal,
m1_flow_wse_nominal=mCW_flow_nominal,
m2_flow_wse_nominal=mCHW_flow_nominal,
redeclare package Medium1 = MediumCW,
redeclare package Medium2 = MediumCHW,
dp1_chi_nominal=dpCW_nominal,
dp1_wse_nominal=dpCW_nominal,
dp2_chi_nominal=dpCHW_nominal,
dp2_wse_nominal=dpCHW_nominal,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD
perChi,
k=0.4,
Ti=80,
perPum=perPum,
numChi=numChi,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Modelica.Blocks.Sources.Constant yPum(k=1)
;
Modelica.Blocks.Sources.RealExpression yVal5(
y=
if onChi.y
and not onWSE.y
then 1
else 0)
;
Modelica.Blocks.Sources.RealExpression yVal6(
y=
if not onChi.y
and onWSE.y
then 1
else 0)
;
Modelica.Blocks.Sources.BooleanStep onChi(startTime(displayUnit="h") = 7200)
;
Modelica.Blocks.Sources.BooleanStep onWSE(
startTime(displayUnit="h") = 14400,
startValue=true)
;
Buildings.Fluid.Sources.Boundary_pT sou2(
redeclare package Medium = MediumCHW,
nPorts=2,
use_T_in=true) ;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.IntegratedPrimaryLoadSide
intWSEPri2(
m1_flow_chi_nominal=mCW_flow_nominal,
m2_flow_chi_nominal=mCHW_flow_nominal,
m1_flow_wse_nominal=mCW_flow_nominal,
m2_flow_wse_nominal=mCHW_flow_nominal,
redeclare package Medium1 = MediumCW,
redeclare package Medium2 = MediumCHW,
dp1_chi_nominal=dpCW_nominal,
dp1_wse_nominal=dpCW_nominal,
dp2_chi_nominal=dpCHW_nominal,
dp2_wse_nominal=dpCHW_nominal,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD
perChi,
k=0.4,
Ti=80,
perPum=perPum,
numChi=numChi,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
reset=Buildings.Types.Reset.Parameter,
y_reset=0)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TSup2(
redeclare package Medium = MediumCHW,
m_flow_nominal=mCHW_flow_nominal);
Modelica.Blocks.Sources.BooleanPulse tri(period=1800)
;
parameter Fluid.Movers.Data.Generic[numChi] perPum(
each pressure=
Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParameters(
V_flow=mCHW_flow_nominal/1000*{0.2,0.6,1.0,1.2}, dp=dpCHW_nominal*{1.2,1.1,
1.0,0.6})) ;
equation
connect(onChi.y, intWSEPri1.on[1]);
connect(onWSE.y, intWSEPri1.on[2]);
connect(TSet.y, intWSEPri1.TSet);
connect(yVal5.y, intWSEPri1.yVal5);
connect(yVal6.y, intWSEPri1.yVal6);
connect(yPum.y, intWSEPri1.yPum[1]);
connect(intWSEPri1.port_a1, sou1.ports[1]);
connect(intWSEPri1.port_b2, TSup1.port_a);
connect(intWSEPri1.port_b1, sin1.ports[1]);
connect(intWSEPri1.port_a2, sou2.ports[1]);
connect(TEva_in.y, sou2.T_in);
connect(TSup2.port_a, intWSEPri2.port_b2);
connect(intWSEPri2.port_a2, sou2.ports[2]);
connect(intWSEPri2.port_b1, sin1.ports[2]);
connect(intWSEPri2.port_a1, sou1.ports[2]);
connect(TSup2.port_b, sin2.ports[2]);
connect(onChi.y, intWSEPri2.on[1]);
connect(onWSE.y, intWSEPri2.on[2]);
connect(TSet.y, intWSEPri2.TSet);
connect(yVal5.y, intWSEPri2.yVal5);
connect(yVal6.y, intWSEPri2.yVal6);
connect(yPum.y, intWSEPri2.yPum[1]);
connect(tri.y, intWSEPri2.trigger);
end IntegratedPrimaryLoadSide;
Integrated WSE on the plant side in a primary-only chilled water system
Information
This example demonstrates how the model responses
according to different cooling mode signals
(free cooling mode, partially mechanical cooling and fully mechanical cooling).
The reponses are also compared with a second case where the PI controller in the WSE
is reset every 1800s.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant (Partial examples for Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation).
Parameters
Type | Name | Default | Description |
MassFlowRate | mCHW_flow_nominal | 2567.1*1000/(4200*10) | Nominal mass flow rate at chilled water [kg/s] |
MassFlowRate | mCW_flow_nominal | 2567.1*1000/(4200*8.5) | Nominal mass flow rate at condenser water [kg/s] |
PressureDifference | dpCHW_nominal | 40000 | Nominal pressure [Pa] |
PressureDifference | dpCW_nominal | 40000 | Nominal pressure [Pa] |
Integer | numChi | 1 | Number of chillers |
Modelica definition
model IntegratedPrimaryPlantSide
extends Modelica.Icons.Example;
extends Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant
(
sou1(nPorts=2, m_flow=2*mCW_flow_nominal),
sin1(nPorts=2),
TSet(k=273.15 + 5.56),
TEva_in(k=273.15 + 15.28),
sin2(nPorts=2));
Buildings.Applications.DataCenters.ChillerCooled.Equipment.IntegratedPrimaryPlantSide
intWSEPri1(
m1_flow_chi_nominal=mCW_flow_nominal,
m2_flow_chi_nominal=mCHW_flow_nominal,
m1_flow_wse_nominal=mCW_flow_nominal,
m2_flow_wse_nominal=mCHW_flow_nominal,
redeclare package Medium1 = MediumCW,
redeclare package Medium2 = MediumCHW,
dp1_chi_nominal=dpCW_nominal,
dp1_wse_nominal=dpCW_nominal,
dp2_chi_nominal=dpCHW_nominal,
dp2_wse_nominal=dpCHW_nominal,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD
perChi,
k=0.4,
Ti=80,
numChi=numChi,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Modelica.Blocks.Sources.RealExpression yVal5(
y=
if onChi.y
and not onWSE.y
then 1
else 0)
;
Modelica.Blocks.Sources.RealExpression yVal6(
y=
if not onChi.y
and onWSE.y
then 1
else 0)
;
Buildings.Fluid.Sources.MassFlowSource_T sou2(
redeclare package Medium = MediumCHW,
nPorts=2,
use_T_in=true,
m_flow=2*mCHW_flow_nominal)
;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.IntegratedPrimaryPlantSide
intWSEPri2(
m1_flow_chi_nominal=mCW_flow_nominal,
m2_flow_chi_nominal=mCHW_flow_nominal,
m1_flow_wse_nominal=mCW_flow_nominal,
m2_flow_wse_nominal=mCHW_flow_nominal,
redeclare package Medium1 = MediumCW,
redeclare package Medium2 = MediumCHW,
dp1_chi_nominal=dpCW_nominal,
dp1_wse_nominal=dpCW_nominal,
dp2_chi_nominal=dpCHW_nominal,
dp2_wse_nominal=dpCHW_nominal,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD
perChi,
k=0.4,
Ti=80,
numChi=numChi,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
reset=Buildings.Types.Reset.Parameter,
y_reset=0)
;
Modelica.Blocks.Sources.BooleanPulse tri(period=1800)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TSup2(
redeclare package Medium =
MediumCHW, m_flow_nominal=mCHW_flow_nominal) ;
equation
connect(yVal5.y, intWSEPri1.yVal5);
connect(yVal6.y, intWSEPri1.yVal6);
connect(intWSEPri1.port_a1, sou1.ports[1]);
connect(intWSEPri1.port_b2, TSup1.port_a);
connect(intWSEPri1.port_b1, sin1.ports[1]);
connect(intWSEPri1.port_a2, sou2.ports[1]);
connect(TEva_in.y, sou2.T_in);
connect(TSet.y, intWSEPri1.TSet);
connect(onChi.y, intWSEPri1.on[1]);
connect(onWSE.y, intWSEPri1.on[2]);
connect(sou1.ports[2], intWSEPri2.port_a1);
connect(sou2.ports[2], intWSEPri2.port_a2);
connect(intWSEPri2.port_b1, sin1.ports[2]);
connect(TSet.y, intWSEPri2.TSet);
connect(onChi.y, intWSEPri2.on[1]);
connect(onWSE.y, intWSEPri2.on[2]);
connect(yVal5.y, intWSEPri2.yVal5);
connect(yVal6.y, intWSEPri2.yVal6);
connect(tri.y, intWSEPri2.trigger);
connect(sin2.ports[2], TSup2.port_b);
connect(TSup2.port_a, intWSEPri2.port_b2);
end IntegratedPrimaryPlantSide;
Integrated WSE on the load side in a primary-secondary chilled water system
Information
This example demonstrates how the model responses
according to different cooling mode signals
(free cooling mode, partially mechanical cooling and fully mechanical cooling).
The reponses are also compared with a second case where the PI controller in the WSE
is reset every 1800s.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant (Partial examples for Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation).
Parameters
Type | Name | Default | Description |
MassFlowRate | mCHW_flow_nominal | 2567.1*1000/(4200*10) | Nominal mass flow rate at chilled water [kg/s] |
MassFlowRate | mCW_flow_nominal | 2567.1*1000/(4200*8.5) | Nominal mass flow rate at condenser water [kg/s] |
PressureDifference | dpCHW_nominal | 40000 | Nominal pressure [Pa] |
PressureDifference | dpCW_nominal | 40000 | Nominal pressure [Pa] |
Integer | numChi | 1 | Number of chillers |
Generic | perPum[numChi] | perPum(each pressure=Buildin... | Pump performance data |
Modelica definition
model IntegratedPrimarySecondary
extends Modelica.Icons.Example;
extends Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant
(
sou1(nPorts=2, m_flow=2*mCW_flow_nominal),
sin1(nPorts=2),
TSet(k=273.15 + 5.56),
TEva_in(k=273.15 + 10.28),
sin2(nPorts=2));
Buildings.Applications.DataCenters.ChillerCooled.Equipment.IntegratedPrimarySecondary
intWSEPriSec1(
m1_flow_chi_nominal=mCW_flow_nominal,
m2_flow_chi_nominal=mCHW_flow_nominal,
m1_flow_wse_nominal=mCW_flow_nominal,
m2_flow_wse_nominal=mCHW_flow_nominal,
redeclare package Medium1 = MediumCW,
redeclare package Medium2 = MediumCHW,
dp1_chi_nominal=dpCW_nominal,
dp1_wse_nominal=dpCW_nominal,
dp2_chi_nominal=dpCHW_nominal,
dp2_wse_nominal=dpCHW_nominal,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD
perChi,
k=0.4,
Ti=80,
numChi=numChi,
addPowerToMedium=false,
show_T=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Modelica.Blocks.Sources.RealExpression yVal5(
y=
if onChi.y
and not onWSE.y
then 1
else 0)
;
Modelica.Blocks.Sources.RealExpression yPum(y=
if onChi.y
then 1
else 0)
;
Buildings.Fluid.Sources.MassFlowSource_T sou2(
redeclare package Medium = MediumCHW,
nPorts=2,
use_T_in=true,
m_flow=1.6*mCHW_flow_nominal)
;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.IntegratedPrimarySecondary
intWSEPriSec2(
m1_flow_chi_nominal=mCW_flow_nominal,
m2_flow_chi_nominal=mCHW_flow_nominal,
m1_flow_wse_nominal=mCW_flow_nominal,
m2_flow_wse_nominal=mCHW_flow_nominal,
redeclare package Medium1 = MediumCW,
redeclare package Medium2 = MediumCHW,
dp1_chi_nominal=dpCW_nominal,
dp1_wse_nominal=dpCW_nominal,
dp2_chi_nominal=dpCHW_nominal,
dp2_wse_nominal=dpCHW_nominal,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD
perChi,
k=0.4,
Ti=80,
numChi=numChi,
addPowerToMedium=false,
show_T=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
reset=Buildings.Types.Reset.Parameter,
y_reset=0)
;
Modelica.Blocks.Sources.BooleanPulse tri(period=1800)
;
parameter Buildings.Fluid.Movers.Data.Generic[numChi] perPum(
each pressure=
Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParameters(
V_flow=mCHW_flow_nominal/1000*{0.2,0.6,1.0,1.2}, dp=dpCHW_nominal*{1.2,1.1,
1.0,0.6})) ;
Buildings.Fluid.Sensors.TemperatureTwoPort TSup2(
redeclare package Medium =
MediumCHW, m_flow_nominal=mCHW_flow_nominal) ;
equation
connect(TSet.y, intWSEPriSec1.TSet);
connect(yVal5.y, intWSEPriSec1.yVal5);
connect(intWSEPriSec1.port_a1, sou1.ports[1]);
connect(intWSEPriSec1.port_b2, TSup1.port_a);
connect(intWSEPriSec1.port_b1, sin1.ports[1]);
connect(intWSEPriSec1.port_a2, sou2.ports[1]);
connect(yPum.y, intWSEPriSec1.yPum[1]);
connect(TEva_in.y, sou2.T_in);
connect(onChi.y, intWSEPriSec1.on[1]);
connect(onWSE.y, intWSEPriSec1.on[2]);
connect(TSet.y, intWSEPriSec2.TSet);
connect(onChi.y, intWSEPriSec2.on[1]);
connect(onWSE.y, intWSEPriSec2.on[2]);
connect(yVal5.y, intWSEPriSec2.yVal5);
connect(yPum.y, intWSEPriSec2.yPum[1]);
connect(sou1.ports[2], intWSEPriSec2.port_a1);
connect(sou2.ports[2], intWSEPriSec2.port_a2);
connect(intWSEPriSec2.port_b1, sin1.ports[2]);
connect(tri.y, intWSEPriSec2.trigger);
connect(sin2.ports[2], TSup2.port_b);
connect(TSup2.port_a, intWSEPriSec2.port_b2);
end IntegratedPrimarySecondary;
Non-integrated WSE in a chilled water system
Information
This example demonstrates how the model responses
according to different cooling mode signals
(free cooling mode, and fully mechanical cooling).
The reponses are also compared with a second case where the PI controller in the WSE
is reset every 1800s.
Extends from Modelica.Icons.Example (Icon for runnable examples), Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant (Partial examples for Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation).
Parameters
Type | Name | Default | Description |
MassFlowRate | mCHW_flow_nominal | 2567.1*1000/(4200*10) | Nominal mass flow rate at chilled water [kg/s] |
MassFlowRate | mCW_flow_nominal | 2567.1*1000/(4200*8.5) | Nominal mass flow rate at condenser water [kg/s] |
PressureDifference | dpCHW_nominal | 40000 | Nominal pressure [Pa] |
PressureDifference | dpCW_nominal | 40000 | Nominal pressure [Pa] |
Integer | numChi | 1 | Number of chillers |
Modelica definition
model NonIntegrated
extends Modelica.Icons.Example;
extends Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.BaseClasses.PartialPlant
(
sou1(nPorts=2, m_flow=2*mCW_flow_nominal),
sin1(nPorts=2),
TSet(k=273.15 + 5.56),
TEva_in(k=273.15 + 15.28),
onWSE(startTime=7200),
sin2(nPorts=2));
Buildings.Applications.DataCenters.ChillerCooled.Equipment.NonIntegrated nonIntWSE1(
m1_flow_chi_nominal=mCW_flow_nominal,
m2_flow_chi_nominal=mCHW_flow_nominal,
m1_flow_wse_nominal=mCW_flow_nominal,
m2_flow_wse_nominal=mCHW_flow_nominal,
redeclare package Medium1 = MediumCW,
redeclare package Medium2 = MediumCHW,
dp1_chi_nominal=dpCW_nominal,
dp1_wse_nominal=dpCW_nominal,
dp2_chi_nominal=dpCHW_nominal,
dp2_wse_nominal=dpCHW_nominal,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD
perChi,
k=0.4,
Ti=80,
numChi=numChi,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.Sources.MassFlowSource_T sou2(
redeclare package Medium = MediumCHW,
nPorts=2,
use_T_in=true,
m_flow=2*mCHW_flow_nominal)
;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.NonIntegrated nonIntWSE2(
m1_flow_chi_nominal=mCW_flow_nominal,
m2_flow_chi_nominal=mCHW_flow_nominal,
m1_flow_wse_nominal=mCW_flow_nominal,
m2_flow_wse_nominal=mCHW_flow_nominal,
redeclare package Medium1 = MediumCW,
redeclare package Medium2 = MediumCHW,
dp1_chi_nominal=dpCW_nominal,
dp1_wse_nominal=dpCW_nominal,
dp2_chi_nominal=dpCHW_nominal,
dp2_wse_nominal=dpCHW_nominal,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
redeclare Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Trane_CVHF_2567kW_11_77COP_VSD
perChi,
k=0.4,
Ti=80,
numChi=numChi,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
reset=Buildings.Types.Reset.Parameter,
y_reset=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort TSup2(
redeclare package Medium =
MediumCHW, m_flow_nominal=mCHW_flow_nominal) ;
Modelica.Blocks.Sources.BooleanPulse tri(period=1800)
;
equation
connect(TSet.y, nonIntWSE1.TSet);
connect(nonIntWSE1.port_a1, sou1.ports[1]);
connect(nonIntWSE1.port_b2, TSup1.port_a);
connect(nonIntWSE1.port_b1, sin1.ports[1]);
connect(nonIntWSE1.port_a2, sou2.ports[1]);
connect(TEva_in.y, sou2.T_in);
connect(onChi.y, nonIntWSE1.on[1]);
connect(onWSE.y, nonIntWSE1.on[2]);
connect(TSet.y, nonIntWSE2.TSet);
connect(onChi.y, nonIntWSE2.on[1]);
connect(onWSE.y, nonIntWSE2.on[2]);
connect(sou1.ports[2], nonIntWSE2.port_a1);
connect(sin1.ports[2], nonIntWSE2.port_b1);
connect(nonIntWSE2.port_a2, sou2.ports[2]);
connect(sin2.ports[2], TSup2.port_b);
connect(TSup2.port_a, nonIntWSE2.port_b2);
connect(tri.y, nonIntWSE2.trigger);
end NonIntegrated;
Example that tests the model pump parallels
Information
This example demonstrates the use of the flow model with two different configurations.
At steady-state, all flow models have the same mass flow rate and pressure difference.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
Integer | numPum | 2 | The number of pumps |
MassFlowRate | m_flow_nominal | 6000/3600*1.2 | Nominal mass flow rate [kg/s] |
Real | thr1 | 1E-4 | Threshold for shutoff valves in parallel 1 |
Real | thr2 | thr1*m_flow_nominal | Threshold for shutoff valves in parallel 2 |
Modelica definition
model PumpParallel
extends Modelica.Icons.Example;
package MediumW =
Buildings.Media.Water ;
parameter Integer numPum=2 ;
parameter Modelica.SIunits.MassFlowRate m_flow_nominal=6000/3600*1.2
;
parameter Real thr1=1E-4 ;
parameter Real thr2=thr1*m_flow_nominal ;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.FlowMachine_y pumPar1(
redeclare package Medium = MediumW,
num=numPum,
dpValve_nominal=6000,
redeclare Buildings.Fluid.Movers.Data.Pumps.Wilo.Stratos32slash1to12 per,
m_flow_nominal=m_flow_nominal,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
threshold=thr1,
tau=1,
use_inputFilter=false)
;
Buildings.Fluid.FixedResistances.PressureDrop dp2(
redeclare package Medium = MediumW,
dp_nominal=3000,
m_flow_nominal=6000/3600*1.2)
;
Buildings.Fluid.FixedResistances.PressureDrop dp1(
redeclare package Medium = MediumW,
m_flow_nominal=6000/3600*1.2,
dp_nominal=300)
;
Buildings.Fluid.Sources.Boundary_pT sou(
redeclare package Medium = MediumW,
use_p_in=false,
nPorts=2,
p=101325,
T=293.15)
;
Buildings.Fluid.Sources.Boundary_pT sin(
redeclare package Medium = MediumW,
use_p_in=false,
nPorts=2,
p=101325,
T=293.15)
;
Modelica.Blocks.Sources.Pulse y[numPum](
each amplitude=1,
each width=50,
each period=120,
each offset=0,
each startTime=0)
;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.FlowMachine_m pumPar2(
redeclare package Medium = MediumW,
num=numPum,
dpValve_nominal=6000,
redeclare Buildings.Fluid.Movers.Data.Pumps.Wilo.Stratos32slash1to12 per,
m_flow_nominal=m_flow_nominal,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
threshold=thr2,
tau=1)
;
Buildings.Fluid.FixedResistances.PressureDrop dp3(
redeclare package Medium = MediumW,
m_flow_nominal=6000/3600*1.2,
dp_nominal=300)
;
Buildings.Fluid.FixedResistances.PressureDrop dp4(
redeclare package Medium = MediumW,
dp_nominal=3000,
m_flow_nominal=6000/3600*1.2)
;
equation
connect(dp2.port_a, pumPar1.port_b);
connect(dp1.port_b, pumPar1.port_a);
connect(sou.ports[1], dp1.port_a);
connect(y.y, pumPar1.u);
connect(dp3.port_a, sou.ports[2]);
connect(dp3.port_b, pumPar2.port_a);
connect(pumPar2.port_b, dp4.port_a);
connect(dp4.port_b, sin.ports[1]);
connect(y.y, pumPar2.u);
connect(dp2.port_b, sin.ports[2]);
end PumpParallel;
Validate model Buildings.Applications.DataCenters.ChillerCooled.Equipment.WatersideEconomizer
Information
This example demonstrates that the temperature at port_b2 is controlled by setting
use_controller=true
.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
MassFlowRate | mCHW_flow_nominal | 2567.1*1000/(4200*10) | Nominal mass flow rate at chilled water [kg/s] |
MassFlowRate | mCW_flow_nominal | 2567.1*1000/(4200*8.5) | Nominal mass flow rate at condenser water [kg/s] |
PressureDifference | dpCHW_nominal | 40000 | Nominal pressure [Pa] |
PressureDifference | dpCW_nominal | 40000 | Nominal pressure [Pa] |
Integer | numChi | 1 | Number of chillers |
Modelica definition
model WatersideEconomizer
extends Modelica.Icons.Example;
package MediumCHW =
Buildings.Media.Water ;
package MediumCW =
Buildings.Media.Water ;
parameter Modelica.SIunits.MassFlowRate mCHW_flow_nominal=2567.1*1000/(
4200*10)
;
parameter Modelica.SIunits.MassFlowRate mCW_flow_nominal=2567.1*1000/ (
4200*8.5)
;
parameter Modelica.SIunits.PressureDifference dpCHW_nominal = 40000
;
parameter Modelica.SIunits.PressureDifference dpCW_nominal = 40000
;
parameter Integer numChi=1 ;
Buildings.Applications.DataCenters.ChillerCooled.Equipment.WatersideEconomizer
WSE(
redeclare package Medium1 = MediumCW,
redeclare package Medium2 = MediumCHW,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
k=0.4,
Ti=80,
m1_flow_nominal=mCW_flow_nominal,
m2_flow_nominal=mCHW_flow_nominal,
eta=0.8,
dp1_nominal=dpCW_nominal,
dp2_nominal=dpCHW_nominal,
use_controller=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.Sources.MassFlowSource_T sou2(
redeclare package Medium = MediumCHW,
m_flow=mCHW_flow_nominal,
nPorts=1,
use_T_in=true)
;
Buildings.Fluid.Sources.Boundary_pT sin1(
redeclare package Medium = MediumCW, nPorts=1)
;
Buildings.Fluid.Sources.MassFlowSource_T sou1(
use_T_in=true,
redeclare package Medium = MediumCW,
m_flow=mCW_flow_nominal,
T=298.15,
nPorts=1)
;
Modelica.Blocks.Sources.TimeTable TCon_in(
table=[0,273.15 + 12.78;
7200,273.15 + 12.78;
7200,273.15 + 18.33;
14400,273.15 + 18.33;
14400,273.15 + 26.67],
offset=0,
startTime=0)
;
Buildings.Fluid.Sources.Boundary_pT sin2(
nPorts=1,
redeclare package Medium = MediumCHW)
;
Modelica.Blocks.Sources.Constant TEva_in(
k(unit="K",
displayUnit="degC")=273.15 + 25.28)
;
Modelica.Blocks.Sources.Constant TSet(
k(unit="K",
displayUnit="degC") = 273.15 + 13.56)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TSup(
redeclare package Medium =
MediumCHW, m_flow_nominal=mCHW_flow_nominal) ;
Modelica.Blocks.Sources.BooleanStep onWSE(
startValue=true,
startTime=7200)
;
equation
connect(TSet.y, WSE.TSet);
connect(WSE.port_b2, TSup.port_a);
connect(WSE.port_a2, sou2.ports[1]);
connect(TEva_in.y, sou2.T_in);
connect(TCon_in.y,sou1. T_in);
connect(sin2.ports[1], TSup.port_b);
connect(onWSE.y, WSE.on[1]);
connect(sou1.ports[1], WSE.port_a1);
connect(WSE.port_b1, sin1.ports[1]);
end WatersideEconomizer;