Buildings.Examples.ChillerPlant.BaseClasses

Package with base classes for Buildings.Examples.ChillerPlant

Information

This package contains base classes that are used to construct the models in Buildings.Examples.ChillerPlant.

Extends from Modelica.Icons.BasesPackage (Icon for packages containing base classes).

Package Content

Name Description
Buildings.Examples.ChillerPlant.BaseClasses.DataCenter DataCenter Primary only chiller plant system with water-side economizer
Buildings.Examples.ChillerPlant.BaseClasses.DataCenterContinuousTimeControl DataCenterContinuousTimeControl  
Buildings.Examples.ChillerPlant.BaseClasses.SimplifiedRoom SimplifiedRoom Simplified data center room
Buildings.Examples.ChillerPlant.BaseClasses.Controls Controls Package with control components for Buildings.Examples.ChillerPlant

Buildings.Examples.ChillerPlant.BaseClasses.DataCenter Buildings.Examples.ChillerPlant.BaseClasses.DataCenter

Primary only chiller plant system with water-side economizer

Buildings.Examples.ChillerPlant.BaseClasses.DataCenter

Information

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.

Parameters

TypeNameDefaultDescription
replaceable package MediumABuildings.Media.AirMedium model
replaceable package MediumWBuildings.Media.WaterMedium model
MassFlowRatemAir_flow_nominalroo.QRoo_flow/(1005*15)Nominal mass flow rate at fan [kg/s]
PowerP_nominal80E3Nominal compressor power (at y=1) [W]
TemperatureDifferencedTEva_nominal10Temperature difference evaporator inlet-outlet [K]
TemperatureDifferencedTCon_nominal10Temperature difference condenser outlet-inlet [K]
RealCOPc_nominal3Chiller COP
MassFlowRatemCHW_flow_nominal2*roo.QRoo_flow/(4200*20)Nominal mass flow rate at chilled water [kg/s]
MassFlowRatemCW_flow_nominal2*roo.QRoo_flow/(4200*6)Nominal mass flow rate at condenser water [kg/s]
PressureDifferencedp_nominal500Nominal pressure difference [Pa]

Connectors

TypeNameDescription
replaceable package MediumAMedium model
replaceable package MediumWMedium model
BusweaBus 

Modelica definition

partial model DataCenter "Primary only chiller plant system with water-side economizer" replaceable package MediumA = Buildings.Media.Air "Medium model"; replaceable package MediumW = Buildings.Media.Water "Medium model"; parameter Modelica.SIunits.MassFlowRate mAir_flow_nominal=roo.QRoo_flow/(1005 *15) "Nominal mass flow rate at fan"; parameter Modelica.SIunits.Power P_nominal=80E3 "Nominal compressor power (at y=1)"; parameter Modelica.SIunits.TemperatureDifference dTEva_nominal=10 "Temperature difference evaporator inlet-outlet"; parameter Modelica.SIunits.TemperatureDifference dTCon_nominal=10 "Temperature difference condenser outlet-inlet"; parameter Real COPc_nominal=3 "Chiller COP"; parameter Modelica.SIunits.MassFlowRate mCHW_flow_nominal=2*roo.QRoo_flow/( 4200*20) "Nominal mass flow rate at chilled water"; parameter Modelica.SIunits.MassFlowRate mCW_flow_nominal=2*roo.QRoo_flow/( 4200*6) "Nominal mass flow rate at condenser water"; parameter Modelica.SIunits.PressureDifference dp_nominal=500 "Nominal pressure difference"; 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), use_inputFilter=false, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, T_start=293.15) "Fan for air flow through the data center"; 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.SteadyStateInitial, dp1_nominal(displayUnit="Pa") = 1000 + 89580) "Cooling coil"; Modelica.Blocks.Sources.Constant mFanFlo(k=mAir_flow_nominal) "Mass flow rate of fan"; BaseClasses.SimplifiedRoom roo( redeclare package Medium = MediumA, nPorts=2, rooLen=50, rooWid=30, rooHei=3, m_flow_nominal=mAir_flow_nominal, QRoo_flow=500000) "Room model"; 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), use_inputFilter=false, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Chilled water pump"; Buildings.Fluid.Storage.ExpansionVessel expVesCHW(redeclare package Medium = MediumW, V_start=1) "Expansion vessel"; 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.SteadyStateInitial) "Cooling tower"; Buildings.Fluid.Movers.FlowControlled_m_flow pumCW( redeclare package Medium = MediumW, m_flow_nominal=mCW_flow_nominal, dp(start=214992), use_inputFilter=false, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Condenser water pump"; 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) "Water side economizer (Heat exchanger)"; 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) "Control valve for condenser water loop of chiller"; Buildings.Fluid.Actuators.Valves.TwoWayLinear val1( redeclare package Medium = MediumW, m_flow_nominal=mCHW_flow_nominal, dpValve_nominal=20902, use_inputFilter=false) "Bypass control valve for economizer. 1: disable economizer, 0: enable economoizer"; 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) "Cooling tower approach"; 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.SteadyStateInitial); 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) "Control valve for chilled water leaving from chiller"; Buildings.Examples.ChillerPlant.BaseClasses.Controls.ChillerSwitch chiSwi( deaBan(displayUnit="K") = 2.2) "Control unit switching chiller on or off "; 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) "Translate the control signal for chiller setpoint reset"; Modelica.Blocks.Sources.Constant TAirSet(k=273.15 + 27) "Set temperature for air supply to the room"; Modelica.Blocks.Math.BooleanToReal chiCon "Contorl signal for chiller"; 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) "Control valve for condenser water loop of economizer"; Buildings.Fluid.Sensors.TemperatureTwoPort TAirSup(redeclare package Medium = MediumA, m_flow_nominal=mAir_flow_nominal) "Supply air temperature to data center"; Buildings.Fluid.Sensors.TemperatureTwoPort TCHWEntChi(redeclare package Medium = MediumW, m_flow_nominal=mCHW_flow_nominal) "Temperature of chilled water entering chiller"; Buildings.Fluid.Sensors.TemperatureTwoPort TCWLeaTow(redeclare package Medium = MediumW, m_flow_nominal=mCW_flow_nominal) "Temperature of condenser water leaving the cooling tower"; Modelica.Blocks.Sources.Constant cooTowFanCon(k=1) "Control singal for cooling tower fan"; 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) "Bypass valve for chiller."; 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) "Control valve for economizer. 0: disable economizer, 1: enable economoizer"; Buildings.Fluid.Sensors.TemperatureTwoPort TCHWLeaCoi(redeclare package Medium = MediumW, m_flow_nominal=mCHW_flow_nominal) "Temperature of chilled water leaving the cooling coil"; 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) "Mass flow rate of condenser loop"; Modelica.Blocks.Sources.RealExpression PHVAC(y=fan.P + pumCHW.P + pumCW.P + cooTow.PFan + chi.P) "Power consumed by HVAC system"; Modelica.Blocks.Sources.RealExpression PIT(y=roo.QSou.Q_flow) "Power consumed by IT"; Modelica.Blocks.Continuous.Integrator EHVAC(initType=Modelica.Blocks.Types.Init.InitialState, y_start=0) "Energy consumed by HVAC"; Modelica.Blocks.Continuous.Integrator EIT(initType=Modelica.Blocks.Types.Init.InitialState, y_start=0) "Energy consumed by IT"; 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;

Buildings.Examples.ChillerPlant.BaseClasses.DataCenterContinuousTimeControl Buildings.Examples.ChillerPlant.BaseClasses.DataCenterContinuousTimeControl


Buildings.Examples.ChillerPlant.BaseClasses.DataCenterContinuousTimeControl

Information

Extends from Buildings.Examples.ChillerPlant.DataCenterContinuousTimeControl (Model of data center that approximates the trim and respond logic).

Parameters

TypeNameDefaultDescription
replaceable package MediumAAirMedium model
replaceable package MediumWWaterMedium model
MassFlowRatemAir_flow_nominalroo.QRoo_flow/(1005*15)Nominal mass flow rate at fan [kg/s]
PowerP_nominal80E3Nominal compressor power (at y=1) [W]
TemperatureDifferencedTEva_nominal10Temperature difference evaporator inlet-outlet [K]
TemperatureDifferencedTCon_nominal10Temperature difference condenser outlet-inlet [K]
RealCOPc_nominal3Chiller COP
MassFlowRatemCHW_flow_nominal2*roo.QRoo_flow/(4200*20)Nominal mass flow rate at chilled water [kg/s]
MassFlowRatemCW_flow_nominal2*roo.QRoo_flow/(4200*6)Nominal mass flow rate at condenser water [kg/s]
PressureDifferencedp_nominal500Nominal pressure difference [Pa]

Connectors

TypeNameDescription
BusweaBus 
output RealOutputPACAlternate current power required for IT
output RealOutputPDCDirect current power required for IT

Modelica definition

model DataCenterContinuousTimeControl extends Buildings.Examples.ChillerPlant.DataCenterContinuousTimeControl; Modelica.Blocks.Interfaces.RealOutput PAC "Alternate current power required for IT"; Modelica.Blocks.Interfaces.RealOutput PDC "Direct current power required for IT"; equation connect(PHVAC.y, PAC); connect(PIT.y, PDC); end DataCenterContinuousTimeControl;

Buildings.Examples.ChillerPlant.BaseClasses.SimplifiedRoom Buildings.Examples.ChillerPlant.BaseClasses.SimplifiedRoom

Simplified data center room

Buildings.Examples.ChillerPlant.BaseClasses.SimplifiedRoom

Information

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.

Extends from Buildings.BaseClasses.BaseIcon (Base icon).

Parameters

TypeNameDefaultDescription
replaceable package MediumModelica.Media.Interfaces.Pa...Medium model
LengthrooLen Length of the room [m]
LengthrooWid Width of the room [m]
HeightrooHei Height of the room [m]
PowerQRoo_flow Heat generation of the computer room [W]
MassFlowRatem_flow_nominal Nominal mass flow rate [kg/s]

Connectors

TypeNameDescription
replaceable package MediumMedium model
VesselFluidPorts_bairPorts[nPorts]Fluid inlets and outlets
output RealOutputTRooAirRoom air temperature [K]

Modelica definition

model SimplifiedRoom "Simplified data center room" extends Buildings.BaseClasses.BaseIcon; replaceable package Medium = Modelica.Media.Interfaces.PartialMedium "Medium model"; parameter Integer nPorts=0 "Number of parts"; parameter Modelica.SIunits.Length rooLen "Length of the room"; parameter Modelica.SIunits.Length rooWid "Width of the room"; parameter Modelica.SIunits.Height rooHei "Height of the room"; parameter Modelica.SIunits.Power QRoo_flow "Heat generation of the computer room"; Buildings.Fluid.MixingVolumes.MixingVolume rooVol( redeclare package Medium = Medium, nPorts=nPorts, V=rooLen*rooWid*rooHei, m_flow_nominal=m_flow_nominal, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final T_start=293.15, final prescribedHeatFlowRate=true) "Volume of air in the room"; Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b airPorts[nPorts]( redeclare each package Medium = Medium) "Fluid inlets and outlets"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow QSou "Heat source of the room"; Modelica.Blocks.Sources.Ramp ramp( height=QRoo_flow, offset=0, duration=36000, startTime=0); parameter Modelica.SIunits.MassFlowRate m_flow_nominal "Nominal mass flow rate"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TAir "Room air temperature"; Modelica.Blocks.Interfaces.RealOutput TRooAir(unit="K", displayUnit="degC") "Room air temperature"; equation connect(rooVol.ports, airPorts); connect(QSou.port, rooVol.heatPort); connect(ramp.y, QSou.Q_flow); connect(TAir.port, rooVol.heatPort); connect(TAir.T, TRooAir); end SimplifiedRoom;