Description: "Package with base classes for Buildings.Examples.ChillerPlant"

- Home > Modelica

## 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
--- | ---
DataCenter | Primary only chiller plant system with water-side economizer
DataCenterContinuousTimeControl |
SimplifiedRoom | Simplified data center room
Controls | Package with control components for Buildings.Examples.ChillerPlant

## Buildings.Examples.ChillerPlant.BaseClasses.DataCenter

Primary only chiller plant system with water-side economizer

### Information

This model is the chilled water plant with discrete time control and trim and response logic for a data center. The model is described at Buildings.Examples.ChillerPlant.

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package MediumA | Buildings.Media.Air | Medium model
replaceable package MediumW | Buildings.Media.Water | Medium model
MassFlowRate | mAir_flow_nominal | roo.QRoo_flow/(1005*15) | Nominal mass flow rate at fan [kg/s]
Power | P_nominal | 80E3 | Nominal compressor power (at y=1) [W]
TemperatureDifference | dTEva_nominal | 10 | Temperature difference evaporator inlet-outlet [K]
TemperatureDifference | dTCon_nominal | 10 | Temperature difference condenser outlet-inlet [K]
Real | COPc_nominal | 3 | Chiller COP
MassFlowRate | mCHW_flow_nominal | 2*roo.QRoo_flow/(4200*20) | Nominal mass flow rate at chilled water [kg/s]
MassFlowRate | mCW_flow_nominal | 2*roo.QRoo_flow/(4200*6) | Nominal mass flow rate at condenser water [kg/s]
Pressure | dp_nominal | 500 | Nominal pressure difference [Pa]

### Connectors

Type | Name | Description
--- | --- | ---
replaceable package MediumA | Medium model
replaceable package MediumW | Medium model
Bus | weaBus |

### 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.Pressure 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), filteredSpeed=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), dp1_nominal(displayUnit="Pa") = 1000, dp2_nominal=249*3, UA_nominal=mAir_flow_nominal*1006*5, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyStateInitial) "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"; Fluid.Movers.FlowControlled_dp pumCHW( redeclare package Medium = MediumW, m_flow_nominal=mCHW_flow_nominal, m_flow(start=mCHW_flow_nominal), dp(start=325474), filteredSpeed=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), filteredSpeed=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)"; Fluid.Actuators.Valves.TwoWayLinear val5( redeclare package Medium = MediumW, m_flow_nominal=mCW_flow_nominal, dpValve_nominal=20902, dpFixed_nominal=89580, y_start=1, filteredOpening=false) "Control valve for condenser water loop of chiller"; Fluid.Actuators.Valves.TwoWayLinear val1( redeclare package Medium = MediumW, m_flow_nominal=mCHW_flow_nominal, dpValve_nominal=20902, filteredOpening=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"; 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); 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, filteredOpening=false) "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"; Fluid.Actuators.Valves.TwoWayLinear val4( redeclare package Medium = MediumW, m_flow_nominal=mCW_flow_nominal, dpValve_nominal=20902, dpFixed_nominal=59720, y_start=0, filteredOpening=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"; Fluid.Actuators.Valves.TwoWayEqualPercentage valByp( redeclare package Medium = MediumW, m_flow_nominal=mCHW_flow_nominal, dpValve_nominal=20902, dpFixed_nominal=14930, y_start=0, filteredOpening=false) "Bypass valve for chiller."; Buildings.Examples.ChillerPlant.BaseClasses.Controls.KMinusU KMinusU(k=1); Fluid.Actuators.Valves.TwoWayLinear val3( redeclare package Medium = MediumW, m_flow_nominal=mCHW_flow_nominal, dpValve_nominal=20902, dpFixed_nominal=59720 + 1000, filteredOpening=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://Buildings/Resources/weatherdata/USA_CA_San.Francisco.Intl.AP.724940_TMY3.mos"); BoundaryConditions.WeatherData.Bus weaBus; Fluid.FixedResistances.FixedResistanceDpM res( redeclare package Medium = MediumW, m_flow_nominal=mCHW_flow_nominal, dp_nominal=89580); 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 condensor 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(cooCoi.port_a1, res.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(res.port_b, val6.port_b); 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); end DataCenter;

## Buildings.Examples.ChillerPlant.BaseClasses.DataCenterContinuousTimeControl

### Information

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

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package MediumA | Air | Medium model
replaceable package MediumW | Water | Medium model
MassFlowRate | mAir_flow_nominal | roo.QRoo_flow/(1005*15) | Nominal mass flow rate at fan [kg/s]
Power | P_nominal | 80E3 | Nominal compressor power (at y=1) [W]
TemperatureDifference | dTEva_nominal | 10 | Temperature difference evaporator inlet-outlet [K]
TemperatureDifference | dTCon_nominal | 10 | Temperature difference condenser outlet-inlet [K]
Real | COPc_nominal | 3 | Chiller COP
MassFlowRate | mCHW_flow_nominal | 2*roo.QRoo_flow/(4200*20) | Nominal mass flow rate at chilled water [kg/s]
MassFlowRate | mCW_flow_nominal | 2*roo.QRoo_flow/(4200*6) | Nominal mass flow rate at condenser water [kg/s]
Pressure | dp_nominal | 500 | Nominal pressure difference [Pa]

### Connectors

Type | Name | Description
--- | --- | ---
Bus | weaBus |
output RealOutput | PAC | Alternate current power required for IT
output RealOutput | PDC | Direct 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

Simplified data center room

### 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.BaseIconLow (Base icon with model name below the icon).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | Modelica.Media.Interfaces.Pa... | Medium model
Length | rooLen |  | Length of the room [m]
Length | rooWid |  | Width of the room [m]
Height | rooHei |  | Height of the room [m]
Power | QRoo_flow |  | Heat generation of the computer room [W]
MassFlowRate | m_flow_nominal |  | Nominal mass flow rate [kg/s]

### Connectors

Type | Name | Description
--- | --- | ---
replaceable package Medium | Medium model
VesselFluidPorts_b | airPorts[nPorts] | Fluid inlets and outlets

### Modelica definition

model SimplifiedRoom "Simplified data center room" extends Buildings.BaseClasses.BaseIconLow; 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( nPorts=nPorts, redeclare each package Medium = Medium, V=rooLen*rooWid*rooHei, m_flow_nominal=m_flow_nominal, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final T_start=293.15) "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"; equation connect(rooVol.ports, airPorts); connect(QSou.port, rooVol.heatPort); connect(ramp.y, QSou.Q_flow); end SimplifiedRoom;