Buildings.Examples.ChillerPlant.Guideline36

Closed loop test of chiller plant sequences from ASHRAE Guideline36

Information

This package includes chiller plant that uses ASHRAE Guideline 36 sequences.

Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).

Package Content

Name Description
Buildings.Examples.ChillerPlant.Guideline36.ClosedLoop ClosedLoop  
Buildings.Examples.ChillerPlant.Guideline36.BaseClasses BaseClasses Package with base classes for chilled plant closed loop test model

Buildings.Examples.ChillerPlant.Guideline36.ClosedLoop Buildings.Examples.ChillerPlant.Guideline36.ClosedLoop


Buildings.Examples.ChillerPlant.Guideline36.ClosedLoop

Information

System Configuration

This example demonstrates the implementation of a primary-only chiller plant with two identical chillers, two headed variable speed chilled water pumps, and two headed constant speed condenser water pumps. The system schematics is as shown below.

image

The model makes following assumptions:

The chiller plant is controlled based on the ASHRAE Guideline 36, and implemented using the sequence Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Controller.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
TemperatureTRet301.15Room return air temperature [K]
MassFlowRatemAir_flow_nominal10Nominal mass flow rate of air [kg/s]
MassFlowRatemWater_flow_nominal6Nominal mass flow rate of water [kg/s]
ThermalConductanceUA_nominal4748Total thermal conductance at nominal flow, from textbook [W/K]

Connectors

TypeNameDescription
BusweaBusWeather data bus

Modelica definition

model ClosedLoop extends Modelica.Icons.Example; package MediumW = Buildings.Media.Water; package MediumA = Buildings.Media.Air; parameter Modelica.Media.Interfaces.Types.Temperature TRet=301.15 "Room return air temperature"; parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=10 "Nominal mass flow rate of air"; parameter Modelica.Units.SI.MassFlowRate mWater_flow_nominal=6 "Nominal mass flow rate of water"; parameter Modelica.Units.SI.ThermalConductance UA_nominal=4748 "Total thermal conductance at nominal flow, from textbook"; Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.Guideline36 chiPla( final mChi_flow_nominal=mWater_flow_nominal, final mCon_flow_nominal=mWater_flow_nominal, final dTChi=7) "Chiller plant with controller"; Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU cooCoi( redeclare package Medium1 = MediumW, redeclare package Medium2 = MediumA, final m1_flow_nominal=mWater_flow_nominal, final m2_flow_nominal=mAir_flow_nominal, final show_T=true, final dp1_nominal=3000, final dp2_nominal=600, final UA_nominal=UA_nominal) "Air handler unit cooling coil"; Buildings.Fluid.Sources.Boundary_pT sinAir( redeclare package Medium = MediumA, nPorts=1) "Air sink"; Buildings.BoundaryConditions.WeatherData.ReaderTMY3 weaDat( filNam=Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"), computeWetBulbTemperature=true) "Weather data reader"; Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus"; Buildings.Fluid.Actuators.Valves.TwoWayLinear cooCoiVal( redeclare package Medium = MediumW, final m_flow_nominal=mWater_flow_nominal, final show_T=true, final dpValve_nominal=20000, final dpFixed_nominal=60000) "Cooling coil valve"; Buildings.Fluid.FixedResistances.Junction mixAir( redeclare package Medium = MediumA, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, final m_flow_nominal={0.7*mAir_flow_nominal,mAir_flow_nominal,0.3*mAir_flow_nominal}, final dp_nominal=fill(0, 3)) "Mix return air and outdoor air"; Buildings.Fluid.Sources.MassFlowSource_T outAir( redeclare package Medium = MediumA, final m_flow=0.3*mAir_flow_nominal, final use_T_in=true, nPorts=1) "Outdoor air"; Buildings.Fluid.Sources.MassFlowSource_T retAir( redeclare package Medium = MediumA, final m_flow=0.7*mAir_flow_nominal, final T=TRet, nPorts=1) "Return air"; Buildings.Fluid.Sensors.TemperatureTwoPort supAirTem( redeclare package Medium = MediumA, final m_flow_nominal=mAir_flow_nominal) "Supply air temperature"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant airSupTemSet( final k=273.15 + 18) "Supply air temperature setpoint"; Buildings.Controls.OBC.CDL.Reals.Subtract temDif "Difference between supply air temperature and its setpoint"; Buildings.Controls.OBC.CDL.Reals.Hysteresis hys( uLow=2.9, uHigh=3.1) "Higher than setpoint by 3 degC"; Buildings.Controls.OBC.CDL.Reals.Hysteresis hys1( uLow=1.9, uHigh=2.1) "Higher than setpoint by 2 degC"; Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel( delayTime=120) "Check if the temperature has been higher than setpoint by sufficient time"; Buildings.Controls.OBC.CDL.Logical.TrueDelay truDel1( delayTime=120) "Check if the temperature has been higher than setpoint by sufficient time"; Buildings.Controls.OBC.CDL.Integers.Switch chiWatResReq "Chilled water reset request"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( final k=3) "Constant three"; Buildings.Controls.OBC.CDL.Integers.Switch intSwi1 "Chilled water reset request"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1( final k=2) "Constant two"; Buildings.Controls.OBC.CDL.Reals.PID conPID( k=0.1, Ti=5, final reverseActing=false) "Chilled water valve control"; Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr( t=0.95, h=0.1) "Send one request when the input is greater than threshold and it is less than threshold minus hysteresis"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt2( final k=1) "Constant one"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt3( final k=0) "Constant zero"; Buildings.Controls.OBC.CDL.Integers.Switch intSwi2 "Chilled water reset request"; Buildings.Fluid.Sources.Boundary_pT bou( redeclare package Medium = MediumW, nPorts=1) "Reference pressure"; Buildings.Controls.OBC.CDL.Integers.Switch chiPlaReq "Chiller plant request"; Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1( t=0.95, h=0.85) "Send one request when the input is greater than threshold and it is less than threshold minus hysteresis"; equation connect(weaDat.weaBus, weaBus); connect(chiPla.portCooCoiSup, cooCoiVal.port_a); connect(cooCoiVal.port_b, cooCoi.port_a1); connect(chiPla.portCooCoiRet, cooCoi.port_b1); connect(retAir.ports[1], mixAir.port_1); connect(outAir.ports[1], mixAir.port_3); connect(mixAir.port_2, cooCoi.port_a2); connect(weaBus.TDryBul, outAir.T_in); connect(cooCoi.port_b2, supAirTem.port_a); connect(supAirTem.port_b, sinAir.ports[1]); connect(conInt.y, chiWatResReq.u1); connect(truDel.y, chiWatResReq.u2); connect(temDif.y, hys.u); connect(temDif.y, hys1.u); connect(hys1.y, truDel1.u); connect(hys.y, truDel.u); connect(conInt1.y, intSwi1.u1); connect(truDel1.y, intSwi1.u2); connect(intSwi1.y, chiWatResReq.u3); connect(airSupTemSet.y, conPID.u_s); connect(conPID.y, greThr.u); connect(greThr.y, intSwi2.u2); connect(conInt2.y, intSwi2.u1); connect(conInt3.y, intSwi2.u3); connect(intSwi2.y, intSwi1.u3); connect(weaDat.weaBus, chiPla.weaBus); connect(cooCoi.port_b1, bou.ports[1]); connect(airSupTemSet.y, temDif.u2); connect(supAirTem.T, conPID.u_m); connect(supAirTem.T, temDif.u1); connect(conPID.y, cooCoiVal.y); connect(conPID.y, greThr1.u); connect(greThr1.y, chiPlaReq.u2); connect(conInt2.y, chiPlaReq.u1); connect(conInt3.y, chiPlaReq.u3); connect(chiPlaReq.y, chiPla.chiPlaReq); connect(chiWatResReq.y, chiPla.TChiWatSupResReq); end ClosedLoop;