This model is the chilled water plant with discrete time control and
trim and respond logic for a data center. The model is described at
Buildings.Examples.ChillerPlant.
partial model DataCenter
replaceable package MediumA =
Buildings.Media.Air ;
replaceable package MediumW =
Buildings.Media.Water ;
parameter Modelica.SIunits.MassFlowRate mAir_flow_nominal=roo.QRoo_flow/(1005
*15) ;
parameter Modelica.SIunits.Power P_nominal=80E3
;
parameter Modelica.SIunits.TemperatureDifference dTEva_nominal=10
;
parameter Modelica.SIunits.TemperatureDifference dTCon_nominal=10
;
parameter Real COPc_nominal=3 ;
parameter Modelica.SIunits.MassFlowRate mCHW_flow_nominal=2*roo.QRoo_flow/(
4200*20) ;
parameter Modelica.SIunits.MassFlowRate mCW_flow_nominal=2*roo.QRoo_flow/(
4200*6) ;
parameter Modelica.SIunits.PressureDifference dp_nominal=500
;
Buildings.Fluid.Movers.FlowControlled_m_flow fan(
redeclare package Medium =
MediumA,
m_flow_nominal=mAir_flow_nominal,
dp(start=249),
m_flow(start=mAir_flow_nominal),
nominalValuesDefineDefaultPressureCurve=true,
use_inputFilter=false,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
T_start=293.15,
dp_nominal=750) ;
Buildings.Fluid.HeatExchangers.DryCoilCounterFlow cooCoi(
redeclare package Medium1 =
MediumW,
redeclare package Medium2 =
MediumA,
m2_flow_nominal=mAir_flow_nominal,
m1_flow_nominal=mCHW_flow_nominal,
m1_flow(start=mCHW_flow_nominal),
m2_flow(start=mAir_flow_nominal),
dp2_nominal=249*3,
UA_nominal=mAir_flow_nominal*1006*5,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
dp1_nominal(displayUnit="Pa") = 1000 + 89580)
;
Modelica.Blocks.Sources.Constant mFanFlo(k=mAir_flow_nominal)
;
BaseClasses.SimplifiedRoom roo(
redeclare package Medium =
MediumA,
nPorts=2,
rooLen=50,
rooWid=30,
rooHei=3,
m_flow_nominal=mAir_flow_nominal,
QRoo_flow=500000) ;
Buildings.Fluid.Movers.FlowControlled_dp pumCHW(
redeclare package Medium =
MediumW,
m_flow_nominal=mCHW_flow_nominal,
m_flow(start=mCHW_flow_nominal),
dp(start=325474),
nominalValuesDefineDefaultPressureCurve=true,
use_inputFilter=false,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
dp_nominal=130000)
;
Buildings.Fluid.Storage.ExpansionVessel expVesCHW(
redeclare package Medium =
MediumW, V_start=1) ;
Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc cooTow(
redeclare package Medium =
MediumW,
m_flow_nominal=mCW_flow_nominal,
PFan_nominal=6000,
TAirInWB_nominal(displayUnit="degC") = 283.15,
TApp_nominal=6,
dp_nominal=14930 + 14930 + 74650,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Buildings.Fluid.Movers.FlowControlled_m_flow pumCW(
redeclare package Medium =
MediumW,
m_flow_nominal=mCW_flow_nominal,
dp(start=214992),
nominalValuesDefineDefaultPressureCurve=true,
use_inputFilter=false,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
dp_nominal=130000)
;
Buildings.Fluid.HeatExchangers.ConstantEffectiveness wse(
redeclare package Medium1 =
MediumW,
redeclare package Medium2 =
MediumW,
m1_flow_nominal=mCW_flow_nominal,
m2_flow_nominal=mCHW_flow_nominal,
eps=0.8,
dp2_nominal=0,
dp1_nominal=0) ;
Buildings.Fluid.Actuators.Valves.TwoWayLinear val5(
redeclare package Medium =
MediumW,
m_flow_nominal=mCW_flow_nominal,
dpValve_nominal=20902,
dpFixed_nominal=89580,
y_start=1,
use_inputFilter=false) ;
Buildings.Fluid.Actuators.Valves.TwoWayLinear val1(
redeclare package Medium =
MediumW,
m_flow_nominal=mCHW_flow_nominal,
dpValve_nominal=20902,
use_inputFilter=false)
;
Buildings.Fluid.Storage.ExpansionVessel expVesChi(
redeclare package Medium =
MediumW, V_start=1);
Buildings.Examples.ChillerPlant.BaseClasses.Controls.WSEControl wseCon;
Modelica.Blocks.Sources.RealExpression expTowTApp(y=cooTow.TApp_nominal)
;
Buildings.Fluid.Chillers.ElectricEIR chi(
redeclare package Medium1 =
MediumW,
redeclare package Medium2 =
MediumW,
m1_flow_nominal=mCW_flow_nominal,
m2_flow_nominal=mCHW_flow_nominal,
dp2_nominal=0,
dp1_nominal=0,
per=
Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Carrier_19XR_742kW_5_42COP_VSD(),
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial);
Buildings.Fluid.Actuators.Valves.TwoWayLinear val6(
redeclare package Medium =
MediumW,
m_flow_nominal=mCHW_flow_nominal,
dpValve_nominal=20902,
dpFixed_nominal=14930 + 89580,
y_start=1,
use_inputFilter=false,
from_dp=true)
;
Buildings.Examples.ChillerPlant.BaseClasses.Controls.ChillerSwitch chiSwi(
deaBan(displayUnit="K") = 2.2)
;
Buildings.Examples.ChillerPlant.BaseClasses.Controls.LinearPiecewiseTwo
linPieTwo(
x0=0,
x2=1,
x1=0.5,
y11=1,
y21=273.15 + 5.56,
y10=0.2,
y20=273.15 + 22) ;
Modelica.Blocks.Sources.Constant TAirSet(k=273.15 + 27)
;
Modelica.Blocks.Math.BooleanToReal chiCon ;
Buildings.Fluid.Actuators.Valves.TwoWayLinear val4(
redeclare package Medium =
MediumW,
m_flow_nominal=mCW_flow_nominal,
dpValve_nominal=20902,
dpFixed_nominal=59720,
y_start=0,
use_inputFilter=false)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TAirSup(
redeclare package Medium =
MediumA, m_flow_nominal=mAir_flow_nominal)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TCHWEntChi(
redeclare package
Medium =
MediumW, m_flow_nominal=mCHW_flow_nominal)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TCWLeaTow(
redeclare package Medium =
MediumW, m_flow_nominal=mCW_flow_nominal)
;
Modelica.Blocks.Sources.Constant cooTowFanCon(k=1)
;
Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage valByp(
redeclare package Medium =
MediumW,
m_flow_nominal=mCHW_flow_nominal,
dpValve_nominal=20902,
dpFixed_nominal=14930,
y_start=0,
use_inputFilter=false,
from_dp=true) ;
Buildings.Examples.ChillerPlant.BaseClasses.Controls.KMinusU KMinusU(k=1);
Buildings.Fluid.Actuators.Valves.TwoWayLinear val3(
redeclare package Medium =
MediumW,
m_flow_nominal=mCHW_flow_nominal,
dpValve_nominal=20902,
dpFixed_nominal=59720 + 1000,
use_inputFilter=false)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TCHWLeaCoi(
redeclare package
Medium =
MediumW, m_flow_nominal=mCHW_flow_nominal)
;
Buildings.BoundaryConditions.WeatherData.ReaderTMY3 weaData(filNam=
Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos"));
BoundaryConditions.WeatherData.Bus weaBus;
Modelica.Blocks.Math.Gain gain(k=20*6485);
Modelica.Blocks.Math.Feedback feedback;
Modelica.Blocks.Logical.GreaterThreshold greaterThreshold;
Modelica.Blocks.Logical.Or or1;
Modelica.Blocks.Math.BooleanToReal mCWFlo(realTrue=mCW_flow_nominal)
;
Modelica.Blocks.Sources.RealExpression PHVAC(y=fan.P + pumCHW.P + pumCW.P +
cooTow.PFan + chi.P) ;
Modelica.Blocks.Sources.RealExpression PIT(y=roo.QSou.Q_flow)
;
Modelica.Blocks.Continuous.Integrator EHVAC(initType=Modelica.Blocks.Types.Init.InitialState,
y_start=0) ;
Modelica.Blocks.Continuous.Integrator EIT(initType=Modelica.Blocks.Types.Init.InitialState,
y_start=0) ;
equation
connect(expVesCHW.port_a, cooCoi.port_b1);
connect(expTowTApp.y, wseCon.towTApp);
connect(chiSwi.y, chiCon.u);
connect(cooTow.port_b, pumCW.port_a);
connect(val5.port_a, chi.port_b1);
connect(expVesChi.port_a, chi.port_b1);
connect(val4.port_a, wse.port_b1);
connect(chiSwi.y, chi.on);
connect(linPieTwo.y[2], chi.TSet);
connect(chiCon.y, val5.y);
connect(linPieTwo.y[2], chiSwi.TSet);
connect(cooTowFanCon.y, cooTow.y);
connect(cooCoi.port_b2, fan.port_a);
connect(mFanFlo.y, fan.m_flow_in);
connect(wse.port_a2, val3.port_b);
connect(wseCon.y2, val1.y);
connect(wseCon.y1, val3.y);
connect(wseCon.y1, val4.y);
connect(TAirSup.port_a, fan.port_b);
connect(roo.airPorts[1],TAirSup. port_b);
connect(roo.airPorts[2], cooCoi.port_a2);
connect(TCHWLeaCoi.port_a, pumCHW.port_b);
connect(TCHWEntChi.port_b, valByp.port_a);
connect(TCHWEntChi.port_a, val1.port_b);
connect(val1.port_a, TCHWLeaCoi.port_b);
connect(val3.port_a, TCHWLeaCoi.port_b);
connect(TCWLeaTow.port_b, chi.port_a1);
connect(TCWLeaTow.port_b, wse.port_a1);
connect(TCHWEntChi.T, chiSwi.chiCHWST);
connect(wseCon.wseCWST, TCWLeaTow.T);
connect(wseCon.wseCHWST, TCHWLeaCoi.T);
connect(weaData.weaBus, weaBus);
connect(wseCon.TWetBul, weaBus.TWetBul);
connect(cooTow.TAir, weaBus.TWetBul);
connect(TCHWEntChi.port_a, wse.port_b2);
connect(valByp.port_b, val6.port_b);
connect(TCHWEntChi.port_b, chi.port_a2);
connect(val5.port_b, cooTow.port_a);
connect(val4.port_b, cooTow.port_a);
connect(pumCW.port_b, TCWLeaTow.port_a);
connect(chiCon.y, KMinusU.u);
connect(KMinusU.y, valByp.y);
connect(chiCon.y, val6.y);
connect(linPieTwo.y[1], gain.u);
connect(gain.y, pumCHW.dp_in);
connect(TAirSet.y, feedback.u2);
connect(TAirSup.T, feedback.u1);
connect(chi.port_b2, val6.port_a);
connect(pumCHW.port_a, cooCoi.port_b1);
connect(greaterThreshold.u, wseCon.y1);
connect(or1.u1, greaterThreshold.y);
connect(or1.u2, chiSwi.y);
connect(or1.y, mCWFlo.u);
connect(mCWFlo.y, pumCW.m_flow_in);
connect(PHVAC.y, EHVAC.u);
connect(PIT.y, EIT.u);
connect(cooCoi.port_a1, val6.port_b);
end DataCenter;
This is a simplified room model for a data center. There is no heat exchange between the room and ambient environment through the building envelope since it is negligible compared to the heat released by the servers.