Buildings.Examples.ChillerPlant.Guideline36.BaseClasses

Package with base classes for chilled plant closed loop test model

Information

This package contains base classes that are used to construct the example model in Buildings.Examples.ChillerPlant.Guideline36.ClosedLoop.

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

Package Content

Name Description
Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.Guideline36 Guideline36 Chiller plant model with Guideline36 controller
Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.PartialChillerPlant PartialChillerPlant Partial model of the chiller plant for the closed-loop test
Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.YorkCalc YorkCalc Cooling tower with variable speed using the York calculation for the approach temperature and output the actual fan speed

Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.Guideline36 Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.Guideline36

Chiller plant model with Guideline36 controller

Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.Guideline36

Information

This model instantiates the chiller plant sequence Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Controller and connects it with the chiller plant system model Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.PartialChillerPlant.

Extends from Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.PartialChillerPlant (Partial model of the chiller plant for the closed-loop test).

Parameters

TypeNameDefaultDescription
MassFlowRatemChi_flow_nominal Nominal mass flow rate in chilled water loop [kg/s]
MassFlowRatemCon_flow_nominal Nominal mass flow rate in condenser water loop [kg/s]
GenericdatTow Performance data for cooling tower
TemperatureDifferencedTChi7Nominal chilled water supply and return temperature difference [K]
RealspeChe0.01Lower threshold value to check fan or pump speed
RealloaChe1Threshold for checking the chiller power to decide if it is operating
RealposChe0.001Position threshold value to check if the valve is open

Connectors

TypeNameDescription
input IntegerInputchiPlaReqNumber of chiller plant cooling requests
input IntegerInputTChiWatSupResReqChilled water supply temperature setpoint reset request
BusweaBusWeather data bus
FluidPort_bportCooCoiSupCooling coil loop supply
FluidPort_aportCooCoiRetCooling coil loop return

Modelica definition

model Guideline36 "Chiller plant model with Guideline36 controller" extends Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.PartialChillerPlant( senVolFlo(tau=10), chi1(energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial), chi2(energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial), chwIsoVal1(y_start=0), chwIsoVal2(y_start=0), cwIsoVal1(y_start=0), cwIsoVal2(y_start=0), cooTow2(yMin=0.05), cooTow1(yMin=0.05) ); // parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal = 10 // "Nominal mass flow rate in chilled water loop"; // parameter Modelica.Units.SI.MassFlowRate mCon_flow_nominal = 10 // "Nominal mass flow rate in condenser water loop"; parameter Modelica.Units.SI.TemperatureDifference dTChi = 7 "Nominal chilled water supply and return temperature difference"; parameter Real speChe=0.01 "Lower threshold value to check fan or pump speed"; parameter Real loaChe=1 "Threshold for checking the chiller power to decide if it is operating"; parameter Real posChe=0.001 "Position threshold value to check if the valve is open"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput chiPlaReq "Number of chiller plant cooling requests"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput TChiWatSupResReq "Chilled water supply temperature setpoint reset request"; Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Controller chiPlaCon( nChi=2, chiTyp={Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Types.ChillersAndStages.PositiveDisplacement, Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Types.ChillersAndStages.PositiveDisplacement}, TChiWatSupMin={278.15,278.15}, dTChiMinLif={12,12}, dTChiMaxLif={18,18}, nChiWatPum=2, nConWatPum=2, final conWatPumStaMat=[0,0; 1,1; 1,1], final staMat=[1,0; 1,1], cooTowAppDes=2, nPum_nominal=2, final dpChiWatMax={160000}, final chiDesCap={chiDesCap,chiDesCap}, final chiMinCap={chiDesCap*0.1,chiDesCap*0.1}, final have_WSE=false, final nSenChiWatPum=1, final have_fixSpeConWatPum=true, final desConWatPumSpe={0,0.5,0.75}, final towCelOnSet={0,2,2}, final nTowCel=2, final TiHeaPreCon=100, final minFloSet={0.1*mChi_flow_nominal/1000,0.1*mChi_flow_nominal/1000}, final maxFloSet={0.75*mChi_flow_nominal/1000,0.75*mChi_flow_nominal/1000}, final TiMinFloBypCon=100, final VChiWat_flow_nominal=mChi_flow_nominal/1000, final TiChiWatPum=100, have_modPosChiVal=true, chaChiWatIsoTim=120, TConWatSup_nominal={293.15,293.15}, TConWatRet_nominal={303.15,303.15}, final TiSupCon=100, chaTowCelIsoTim=120, watLevMin=0.7, watLevMax=1, final speChe=speChe) "Chiller plant controller"; Buildings.Controls.OBC.CDL.Reals.GreaterThreshold chiWatIso[2]( final t=fill(posChe, 2), final h=fill(0.5*posChe, 2)) "Chilled water isolation valve status"; Buildings.Controls.OBC.CDL.Reals.GreaterThreshold chiSta[2]( final t=fill(loaChe, 2), final h=fill(0.5*loaChe, 2)) "Chiller status, check if the chiller load is greater than zero "; Buildings.Controls.OBC.CDL.Reals.GreaterThreshold conWatPumSta[2]( final t=fill(speChe, 2), final h=fill(0.5*speChe, 2)) "Condenser water pump status"; Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus"; Modelica.Blocks.Routing.RealPassThrough TOut(y( final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC", min=0)); Modelica.Blocks.Routing.RealPassThrough TWetBul(y( final quantity="ThermodynamicTemperature", final unit="K", displayUnit="degC", min=0)) "Outdoor wet bulb temperature"; Buildings.Controls.OBC.CDL.Reals.GreaterThreshold chiWatPumSta[2]( final t=fill(speChe, 2), final h=fill(0.5*speChe, 2)) "Chilled water pump status"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant conWatLev( final k=0.9) "Constant cooling tower water level"; Modelica.Fluid.Interfaces.FluidPort_b portCooCoiSup( redeclare package Medium =MediumW) "Cooling coil loop supply"; Modelica.Fluid.Interfaces.FluidPort_a portCooCoiRet( redeclare package Medium =MediumW) "Cooling coil loop return"; Buildings.Templates.Components.Controls.StatusEmulator pre2[2] "Break algebraic loop"; Buildings.Templates.Components.Controls.StatusEmulator pre4[2] "Break algebraic loop"; Buildings.Templates.Components.Controls.StatusEmulator pre6[2] "Break algebraic loop"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant plaEna(final k=true) "Plant enable"; protected final parameter Modelica.Units.SI.SpecificHeatCapacity Cp = 4198 "Water specific heat capacity"; final parameter Modelica.Units.SI.HeatFlowRate chiDesCap = mChi_flow_nominal*dTChi*Cp "Chiller design capacity"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[2]( final realTrue=fill(0.9,2)) "Fixed condenser water pump speed"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1[2]( final realTrue=fill(1, 2)) "Tower cell enabling status"; Buildings.Controls.OBC.CDL.Reals.Multiply mul[2] "Cell Speed"; Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator towSpe(nout=2) "Tower cell speed"; Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator chiPumSpe(nout=2) "Chilled water pump speed"; Buildings.Controls.OBC.CDL.Reals.Multiply mul1[2] "Chilled water pump speed"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2[2] "Convert chilled water pump status"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea3[2]( final realTrue=fill(1, 2)) "Tower cell enabling status"; Buildings.Controls.OBC.CDL.Logical.Pre enaTow[2] "Tower cell enabling status"; equation connect(chwIsoVal1.y_actual, chiWatIso[1].u); connect(chwIsoVal2.y_actual, chiWatIso[2].u); connect(chi2.P, chiSta[2].u); connect(chiWatSupTem.T, chiPlaCon.TChiWatSup); connect(conWatPum1.y_actual, conWatPumSta[1].u); connect(conWatPum2.y_actual, conWatPumSta[2].u); connect(weaBus.TDryBul, TOut.u); connect(TOut.y, chiPlaCon.TOut); connect(weaBus.TWetBul, TWetBul.u); connect(TWetBul.y, cooTow2.TWetBul); connect(chiWatPum1.y_actual, chiWatPumSta[1].u); connect(chiWatPum2.y_actual, chiWatPumSta[2].u); connect(conWatLev.y, chiPlaCon.watLev); connect(chiPlaCon.yConWatIsoVal[1], cwIsoVal1.y); connect(chiPlaCon.yConWatIsoVal[2], cwIsoVal2.y); connect(chi1.P, chiSta[1].u); connect(conWatSupTem.T, chiPlaCon.TConWatSup); connect(TWetBul.y, cooTow1.TWetBul); connect(chiPlaCon.yMinValPosSet, valByp.y); connect(jun10.port_2, portCooCoiSup); connect(res.port_a, portCooCoiRet); connect(jun10.port_2, senRelPre.port_a); connect(senRelPre.port_b, res.port_a); connect(TChiWatSupResReq, chiPlaCon.TChiWatSupResReq); connect(chiPlaReq, chiPlaCon.chiPlaReq); connect(chiWatIso.y, pre2.y1); connect(chiSta.y, pre4.y1); connect(chiWatRet.T, chiPlaCon.TChiWatEntChi); connect(conWatPumSta.y, chiPlaCon.uConWatPum); connect(pre2.y1_actual, chiPlaCon.uChiWatReq); connect(pre2.y1_actual, chiPlaCon.uConWatReq); connect(pre4.y1_actual, chiPlaCon.uChi); connect(chiWatPumSta.y, pre6.y1); connect(pre6.y1_actual, chiPlaCon.uChiWatPum); connect(chiPlaCon.yChi[1], chi1.on); connect(chiPlaCon.yChi[2], chi2.on); connect(senRelPre.p_rel, chiPlaCon.dpChiWat_remote[1]); connect(senVolFlo.V_flow, chiPlaCon.VChiWat_flow); connect(chiPlaCon.TChiWatSupSet[1], chi1.TSet); connect(chiPlaCon.TChiWatSupSet[2], chi2.TSet); connect(plaEna.y, chiPlaCon.uPlaSchEna); connect(chiPlaCon.yConWatPum, booToRea.u); connect(booToRea[1].y, conWatPum1.y); connect(booToRea[2].y, conWatPum2.y); connect(conWatRetTem.T, chiPlaCon.TConWatTowRet); connect(chiConWatRetTem1.T, chiPlaCon.TConWatRet[1]); connect(chiConWatRetTem2.T, chiPlaCon.TConWatRet[2]); connect(chiPlaCon.yTowCel, booToRea1.u); connect(chiPlaCon.yTowFanSpe, towSpe.u); connect(booToRea1.y, mul.u1); connect(towSpe.y, mul.u2); connect(mul[1].y, cooTow1.y); connect(mul[2].y, cooTow2.y); connect(chiPlaCon.yChiWatPum, booToRea2.u); connect(chiPlaCon.yChiPumSpe, chiPumSpe.u); connect(chiPumSpe.y, mul1.u2); connect(booToRea2.y, mul1.u1); connect(mul1[1].y, chiWatPum1.y); connect(mul1[2].y, chiWatPum2.y); connect(chiWatSupTem1.T, chiPlaCon.TChiWatSupChi[1]); connect(chiWatSupTem2.T, chiPlaCon.TChiWatSupChi[2]); connect(chiPlaCon.yTowCelIsoVal, booToRea3.u); connect(booToRea3[1].y, towIsoVal1.y); connect(booToRea3[2].y, towIsoVal2.y); connect(chwIsoVal1.y_actual, chiPlaCon.uChiWatIsoVal[1]); connect(chwIsoVal2.y_actual, chiPlaCon.uChiWatIsoVal[2]); connect(chiPlaCon.yChiWatIsoVal[1], chwIsoVal1.y); connect(chiPlaCon.yChiWatIsoVal[2], chwIsoVal2.y); connect(chiPlaCon.yTowCelIsoVal, enaTow.u); connect(enaTow.y, chiPlaCon.uTowSta); end Guideline36;

Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.PartialChillerPlant

Partial model of the chiller plant for the closed-loop test

Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.PartialChillerPlant

Information

This is a partial model for a primary-only chiller plant with two parallel chillers. It has two headed variable speed chilled water pumps, two headed constant speed condenser water pumps, and two cooling tower units. Detailed description can be found in Buildings.Examples.ChillerPlant.Guideline36.ClosedLoop.

Parameters

TypeNameDefaultDescription
MassFlowRatemChi_flow_nominal Nominal mass flow rate in chilled water loop [kg/s]
MassFlowRatemCon_flow_nominal Nominal mass flow rate in condenser water loop [kg/s]
GenericdatTowdatTow(PFan_Q_flow_nominal=-...Performance data for cooling tower

Modelica definition

partial model PartialChillerPlant "Partial model of the chiller plant for the closed-loop test" package MediumW = Buildings.Media.Water; parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal "Nominal mass flow rate in chilled water loop"; final parameter Modelica.Units.SI.PressureDifference dpChi_nominal=80000+80000 "Nominal pressure difference in chilled water loop"; parameter Modelica.Units.SI.MassFlowRate mCon_flow_nominal "Nominal mass flow rate in condenser water loop"; final parameter Modelica.Units.SI.PressureDifference dpCon_nominal=50000+15000+75000 "Nominal pressure difference in condenser water loop"; parameter Fluid.HeatExchangers.CoolingTowers.Data.YorkCalc.Generic datTow( PFan_Q_flow_nominal=-6000/(mCon_flow_nominal*4200*6), Q_flow_nominal=-mCon_flow_nominal*4200*6, TCooIn_nominal=289.15 + 6, TCooOut_nominal=289.15, dp_nominal=15000 + 75000, TAirInWB_nominal(displayUnit="degC") = 283.15) "Performance data for cooling tower"; Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.YorkCalc cooTow1( redeclare package Medium = MediumW, final dat=datTow, final show_T=true, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Cooling tower"; Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.YorkCalc cooTow2( redeclare package Medium = MediumW, final dat=datTow, final show_T=true, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Cooling tower"; Buildings.Fluid.Movers.SpeedControlled_y conWatPum1( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, per(pressure(V_flow={0,mCon_flow_nominal,2*mCon_flow_nominal}/1.2, dp={2*dpCon_nominal,dpCon_nominal,0}))) "Condenser water pump"; Buildings.Fluid.Movers.SpeedControlled_y conWatPum2( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, per(pressure(V_flow={0,mCon_flow_nominal,2*mCon_flow_nominal}/1.2, dp={2*dpCon_nominal,dpCon_nominal,0}))) "Condenser water pump"; Buildings.Fluid.Actuators.Valves.TwoWayLinear cwIsoVal1( redeclare package Medium = MediumW, final m_flow_nominal=mCon_flow_nominal, final show_T=true, final dpValve_nominal=15000, final dpFixed_nominal=0) "Condenser water isolation valve"; Buildings.Fluid.Actuators.Valves.TwoWayLinear cwIsoVal2( redeclare package Medium = MediumW, final m_flow_nominal=mCon_flow_nominal, final show_T=true, final dpValve_nominal=15000, final dpFixed_nominal=0) "Condenser water isolation valve"; Buildings.Fluid.Actuators.Valves.TwoWayLinear chwIsoVal1( redeclare package Medium = MediumW, final m_flow_nominal=mChi_flow_nominal, final show_T=true, final dpValve_nominal=15000, final dpFixed_nominal=80000) "Chilled water isolation valve"; Buildings.Fluid.Actuators.Valves.TwoWayLinear chwIsoVal2( redeclare package Medium = MediumW, final m_flow_nominal=mChi_flow_nominal, final show_T=true, final dpValve_nominal=15000, final dpFixed_nominal=80000) "Chilled water isolation valve"; Buildings.Fluid.FixedResistances.Junction jun( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final m_flow_nominal={mCon_flow_nominal,mCon_flow_nominal,mCon_flow_nominal}, final dp_nominal={0,0,0}) "Flow junction"; Buildings.Fluid.FixedResistances.Junction jun1( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final m_flow_nominal={mCon_flow_nominal,mCon_flow_nominal,mCon_flow_nominal}, final dp_nominal={0,0,0}) "Flow junction"; Buildings.Fluid.FixedResistances.Junction jun2( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final m_flow_nominal={mCon_flow_nominal,mCon_flow_nominal,mCon_flow_nominal}, final dp_nominal={0,0,0}) "Flow junction"; Buildings.Fluid.FixedResistances.Junction jun3( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final m_flow_nominal={mCon_flow_nominal,mCon_flow_nominal,mCon_flow_nominal}, final dp_nominal={0,0,0}) "Flow junction"; Buildings.Fluid.FixedResistances.Junction jun4( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final m_flow_nominal={mCon_flow_nominal,mCon_flow_nominal,mCon_flow_nominal}, final dp_nominal={0,0,0}) "Flow junction"; Buildings.Fluid.Actuators.Valves.TwoWayLinear towIsoVal2( redeclare package Medium = MediumW, final m_flow_nominal=mCon_flow_nominal, final show_T=true, final dpValve_nominal=15000, final dpFixed_nominal=50000) "Cooling tower isolation valve"; Buildings.Fluid.Actuators.Valves.TwoWayLinear towIsoVal1( redeclare package Medium = MediumW, final m_flow_nominal=mCon_flow_nominal, final show_T=true, final dpValve_nominal=15000, final dpFixed_nominal=50000) "Cooling tower isolation valve"; Buildings.Fluid.FixedResistances.Junction jun5( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final m_flow_nominal={mCon_flow_nominal,mCon_flow_nominal,mCon_flow_nominal}, final dp_nominal={0,0,0}) "Flow junction"; Buildings.Fluid.FixedResistances.Junction jun6( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final m_flow_nominal={mChi_flow_nominal,mChi_flow_nominal,mChi_flow_nominal}, final dp_nominal={0,0,0}) "Flow junction"; Buildings.Fluid.FixedResistances.Junction jun7( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final m_flow_nominal={mChi_flow_nominal,mChi_flow_nominal,mChi_flow_nominal}, final dp_nominal={0,0,0}) "Flow junction"; Buildings.Fluid.Movers.SpeedControlled_y chiWatPum1( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, per(pressure(V_flow={0,mChi_flow_nominal,2*mChi_flow_nominal}/1.2, dp={2*dpChi_nominal,dpChi_nominal,0}))) "Chilled water pump"; Buildings.Fluid.Movers.SpeedControlled_y chiWatPum2( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, per(pressure(V_flow={0,mChi_flow_nominal,2*mChi_flow_nominal}/1.2, dp={2*dpChi_nominal,dpChi_nominal,0}))) "Chilled water pump"; Buildings.Fluid.FixedResistances.Junction jun8( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final m_flow_nominal={mChi_flow_nominal,mChi_flow_nominal,mChi_flow_nominal}, final dp_nominal={0,0,0}) "Flow junction"; Buildings.Fluid.FixedResistances.Junction jun9( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final m_flow_nominal={mChi_flow_nominal,mChi_flow_nominal,mChi_flow_nominal}, final dp_nominal={0,0,0}) "Flow junction"; Buildings.Fluid.FixedResistances.Junction jun10( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final m_flow_nominal={mChi_flow_nominal,mChi_flow_nominal,mChi_flow_nominal}, final dp_nominal={0,0,0}) "Flow junction"; Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage valByp( redeclare package Medium = MediumW, final m_flow_nominal=mChi_flow_nominal, final show_T=true, final dpValve_nominal=15000, final dpFixed_nominal=8000) "Bypass valve for chiller"; Buildings.Fluid.FixedResistances.Junction jun11( redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final m_flow_nominal={mChi_flow_nominal,mChi_flow_nominal,mChi_flow_nominal}, final dp_nominal={0,0,0}) "Flow junction"; Buildings.Fluid.Sensors.TemperatureTwoPort chiWatSupTem( redeclare package Medium = MediumW, final m_flow_nominal=mChi_flow_nominal) "Chilled water supply temperature"; Buildings.Fluid.Sensors.TemperatureTwoPort chiWatRet( redeclare package Medium = MediumW, final m_flow_nominal=mChi_flow_nominal) "Chilled water return temperature, after bypass"; Buildings.Fluid.Sensors.TemperatureTwoPort chiWatRet1( redeclare package Medium = MediumW, final m_flow_nominal=mChi_flow_nominal) "Chilled water return temperature, before bypass"; Buildings.Fluid.Sensors.VolumeFlowRate senVolFlo( redeclare package Medium = MediumW, final m_flow_nominal=mChi_flow_nominal) "Chilled water mass flow sensor"; Buildings.Fluid.Sensors.TemperatureTwoPort conWatSupTem( redeclare package Medium = MediumW, final m_flow_nominal=mCon_flow_nominal) "Condenser water supply temperature, to the chiller condenser"; Buildings.Fluid.Sensors.TemperatureTwoPort conWatRetTem( redeclare package Medium = MediumW, final m_flow_nominal=mCon_flow_nominal) "Condenser water return temperature, from the chiller condenser"; Buildings.Fluid.Sensors.RelativePressure senRelPre( redeclare package Medium = MediumW); Buildings.Fluid.FixedResistances.PressureDrop res( redeclare package Medium = MediumW, final m_flow_nominal=mChi_flow_nominal, final dp_nominal=80000); Buildings.Fluid.Chillers.ElectricEIR chi1( redeclare package Medium1 = MediumW, redeclare package Medium2 = MediumW, final m1_flow_nominal=mCon_flow_nominal, final m2_flow_nominal=mChi_flow_nominal, final dp1_nominal=0, final dp2_nominal=0, per=Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Carrier_19XR_742kW_5_42COP_VSD()) "Chiller one"; Buildings.Fluid.Chillers.ElectricEIR chi2( redeclare package Medium1 = MediumW, redeclare package Medium2 = MediumW, final m1_flow_nominal=mCon_flow_nominal, final m2_flow_nominal=mChi_flow_nominal, final dp1_nominal=0, final dp2_nominal=0, per=Buildings.Fluid.Chillers.Data.ElectricEIR.ElectricEIRChiller_Carrier_19XR_742kW_5_42COP_VSD()) "Chiller two"; Buildings.Fluid.Sources.Boundary_pT bou( redeclare package Medium = MediumW, nPorts=1) "Reference pressure"; Buildings.Fluid.FixedResistances.CheckValve cheVal( redeclare package Medium = MediumW, m_flow_nominal=mCon_flow_nominal, dpValve_nominal=3400, l=1e-4) "Check valve to avoid reverse flow"; Buildings.Fluid.FixedResistances.CheckValve cheVal1( redeclare package Medium = MediumW, m_flow_nominal=mCon_flow_nominal, dpValve_nominal=3400, l=1e-4) "Check valve to avoid reverse flow"; Buildings.Fluid.FixedResistances.CheckValve cheVal2( redeclare package Medium = MediumW, m_flow_nominal=mChi_flow_nominal, dpValve_nominal=3400, l=1e-4) "Check valve to avoid reverse flow"; Buildings.Fluid.FixedResistances.CheckValve cheVal3( redeclare package Medium = MediumW, m_flow_nominal=mChi_flow_nominal, dpValve_nominal=3400, l=1e-4) "Check valve to avoid reverse flow"; Buildings.Fluid.Sensors.TemperatureTwoPort chiConWatRetTem1( redeclare package Medium = MediumW, final m_flow_nominal=mCon_flow_nominal) "Condenser water return temperature, from the chiller condenser"; Buildings.Fluid.Sensors.TemperatureTwoPort chiConWatRetTem2( redeclare package Medium = MediumW, final m_flow_nominal=mCon_flow_nominal) "Condenser water return temperature, from the chiller condenser"; Buildings.Fluid.Sensors.TemperatureTwoPort chiWatSupTem1( redeclare package Medium = MediumW, final m_flow_nominal=mChi_flow_nominal) "Chilled water supply temperature, from the chiller evaporator"; Buildings.Fluid.Sensors.TemperatureTwoPort chiWatSupTem2( redeclare package Medium = MediumW, final m_flow_nominal=mChi_flow_nominal) "Chilled water supply temperature, from the chiller evaporator"; equation connect(jun3.port_1, cooTow1.port_b); connect(jun3.port_3, cooTow2.port_b); connect(cooTow1.port_a, towIsoVal1.port_b); connect(cooTow2.port_a, towIsoVal2.port_b); connect(jun5.port_2, towIsoVal1.port_a); connect(jun5.port_3, towIsoVal2.port_a); connect(chwIsoVal1.port_b, jun7.port_1); connect(jun7.port_3, chwIsoVal2.port_b); connect(jun7.port_2, jun8.port_1); connect(jun8.port_3,chiWatPum2. port_a); connect(jun8.port_2,chiWatPum1. port_a); connect(jun10.port_3, valByp.port_a); connect(valByp.port_b, jun11.port_3); connect(jun.port_1, jun2.port_2); connect(conWatPum2.port_a, jun1.port_2); connect(conWatPum1.port_a, jun1.port_3); connect(jun9.port_2, chiWatSupTem.port_a); connect(chiWatSupTem.port_b, jun10.port_1); connect(jun11.port_2, chiWatRet.port_a); connect(chiWatRet1.port_b, jun11.port_1); connect(senVolFlo.port_b, jun6.port_1); connect(jun1.port_1, conWatSupTem.port_b); connect(conWatSupTem.port_a, jun3.port_2); connect(jun4.port_2, conWatRetTem.port_a); connect(conWatRetTem.port_b, jun5.port_1); connect(chiWatRet1.port_a, res.port_b); connect(jun.port_3, chi1.port_a1); connect(chi1.port_b1, cwIsoVal1.port_a); connect(jun.port_2, chi2.port_a1); connect(chi2.port_b1, cwIsoVal2.port_a); connect(chi1.port_a2, jun6.port_2); connect(chi2.port_a2, jun6.port_3); connect(chiWatRet.port_b, senVolFlo.port_a); connect(jun4.port_2, bou.ports[1]); connect(conWatPum1.port_b, cheVal.port_a); connect(cheVal.port_b, jun2.port_3); connect(jun2.port_1, cheVal1.port_b); connect(cheVal1.port_a, conWatPum2.port_b); connect(chiWatPum1.port_b, cheVal2.port_a); connect(cheVal2.port_b, jun9.port_1); connect(chiWatPum2.port_b, cheVal3.port_a); connect(cheVal3.port_b, jun9.port_3); connect(cwIsoVal1.port_b, chiConWatRetTem1.port_a); connect(chiConWatRetTem1.port_b, jun4.port_3); connect(cwIsoVal2.port_b, chiConWatRetTem2.port_a); connect(chiConWatRetTem2.port_b, jun4.port_1); connect(chwIsoVal1.port_a, chiWatSupTem1.port_b); connect(chiWatSupTem1.port_a, chi1.port_b2); connect(chwIsoVal2.port_a, chiWatSupTem2.port_b); connect(chiWatSupTem2.port_a, chi2.port_b2); end PartialChillerPlant;

Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.YorkCalc Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.YorkCalc

Cooling tower with variable speed using the York calculation for the approach temperature and output the actual fan speed

Buildings.Examples.ChillerPlant.Guideline36.BaseClasses.YorkCalc

Information

This model extends Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc, with the output of the actual fan speed, which is the higher value between y and the tower minimum speed yMin.

Extends from Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc (Cooling tower with variable speed using the York calculation for the approach temperature).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
Genericdat Performance data
Fan
RealyMin0.3Minimum control signal until fan is switched off (used for smoothing between forced and free convection regime) [1]
Assumptions
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed
Flow resistance
Booleanfrom_dpfalse= true, use m_flow = f(dp) else dp = f(m_flow)
Realn2Flow exponent, n=1 for laminar, n=2 for turbulent
BooleanlinearizeFlowResistancefalse= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM0.1Fraction of nominal flow rate where flow transitions to laminar
Dynamics
Nominal condition
Timetau30Time constant at nominal flow (if energyDynamics <> SteadyState) [s]
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
Initialization
AbsolutePressurep_startMedium.p_defaultStart value of pressure [Pa]
TemperatureT_startMedium.T_defaultStart value of temperature [K]
MassFractionX_start[Medium.nX]Medium.X_defaultStart value of mass fractions m_i/m [kg/kg]
ExtraPropertyC_start[Medium.nC]fill(0, Medium.nC)Start value of trace substances

Connectors

TypeNameDescription
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
output RealOutputTLvgLeaving water temperature [K]
input RealInputyFan control signal [1]
output RealOutputPFanElectric power consumed by fan [W]
input RealInputTWetBulEntering air wet bulb temperature [K]
output RealOutputyFanSpeActual fan speed

Modelica definition

model YorkCalc "Cooling tower with variable speed using the York calculation for the approach temperature and output the actual fan speed" extends Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yFanSpe "Actual fan speed"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant minFanSpe( final k=yMin) "Minimum tower fan speed"; Buildings.Controls.OBC.CDL.Reals.Max actSpe "Actual fan speed"; equation connect(actSpe.y, yFanSpe); connect(y, actSpe.u1); connect(minFanSpe.y, actSpe.u2); end YorkCalc;