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 |
Guideline36
|
Chiller plant model with Guideline36 controller |
PartialChillerPlant
|
Partial model of the chiller plant for the closed-loop test |
YorkCalc
|
Cooling tower with variable speed using the York calculation for the approach temperature and output the actual fan speed |
Chiller plant model with Guideline36 controller
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
| Type | Name | Default | Description |
| MassFlowRate | mChi_flow_nominal | | Nominal mass flow rate in chilled water loop [kg/s] |
| MassFlowRate | mCon_flow_nominal | | Nominal mass flow rate in condenser water loop [kg/s] |
| Generic | datTow | | Performance data for cooling tower |
| TemperatureDifference | dTChi | 7 | Nominal chilled water supply and return temperature difference [K] |
| Real | speChe | 0.01 | Lower threshold value to check fan or pump speed |
| Real | loaChe | 1 | Threshold for checking the chiller power to decide if it is operating |
| Real | posChe | 0.001 | Position threshold value to check if the valve is open |
Connectors
| Type | Name | Description |
| input IntegerInput | chiPlaReq | Number of chiller plant cooling requests |
| input IntegerInput | TChiWatSupResReq | Chilled water supply temperature setpoint reset request |
| Bus | weaBus | Weather data bus |
| FluidPort_b | portCooCoiSup | Cooling coil loop supply |
| FluidPort_a | portCooCoiRet | Cooling coil loop return |
Modelica definition
model Guideline36
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.TemperatureDifference dTChi = 7
;
parameter Real speChe=0.01
;
parameter Real loaChe=1
;
parameter Real posChe=0.001
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput chiPlaReq
;
Buildings.Controls.OBC.CDL.Interfaces.IntegerInput TChiWatSupResReq
;
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)
;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold chiWatIso[2](
final t=
fill(posChe, 2),
final h=
fill(0.5*posChe, 2))
;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold chiSta[2](
final t=
fill(loaChe, 2),
final h=
fill(0.5*loaChe, 2))
;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold conWatPumSta[2](
final t=
fill(speChe, 2),
final h=
fill(0.5*speChe, 2))
;
Buildings.BoundaryConditions.WeatherData.Bus weaBus
;
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)) ;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold chiWatPumSta[2](
final t=
fill(speChe, 2),
final h=
fill(0.5*speChe, 2))
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant conWatLev(
final k=0.9) ;
Modelica.Fluid.Interfaces.FluidPort_b portCooCoiSup(
redeclare package Medium =MediumW)
;
Modelica.Fluid.Interfaces.FluidPort_a portCooCoiRet(
redeclare package Medium =MediumW)
;
Buildings.Templates.Components.Controls.StatusEmulator pre2[2] ;
Buildings.Templates.Components.Controls.StatusEmulator pre4[2] ;
Buildings.Templates.Components.Controls.StatusEmulator pre6[2] ;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant plaEna(
final k=true)
;
protected
final parameter Modelica.Units.SI.SpecificHeatCapacity Cp = 4198
;
final parameter Modelica.Units.SI.HeatFlowRate chiDesCap = mChi_flow_nominal*dTChi*Cp
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[2](
final realTrue=
fill(0.9,2))
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1[2](
final realTrue=
fill(1, 2))
;
Buildings.Controls.OBC.CDL.Reals.Multiply mul[2] ;
Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator towSpe(nout=2)
;
Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator chiPumSpe(nout=2)
;
Buildings.Controls.OBC.CDL.Reals.Multiply mul1[2] ;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea2[2]
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea3[2](
final realTrue=
fill(1, 2))
;
Buildings.Controls.OBC.CDL.Logical.Pre enaTow[2]
;
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;
Partial model of the chiller plant for the closed-loop test
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
| Type | Name | Default | Description |
| MassFlowRate | mChi_flow_nominal | | Nominal mass flow rate in chilled water loop [kg/s] |
| MassFlowRate | mCon_flow_nominal | | Nominal mass flow rate in condenser water loop [kg/s] |
| Generic | datTow | datTow(PFan_Q_flow_nominal=-... | Performance data for cooling tower |
Modelica definition
partial model PartialChillerPlant
package MediumW =
Buildings.Media.Water;
parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal
;
final parameter Modelica.Units.SI.PressureDifference dpChi_nominal=80000+80000
;
parameter Modelica.Units.SI.MassFlowRate mCon_flow_nominal
;
final parameter Modelica.Units.SI.PressureDifference dpCon_nominal=50000+15000+75000
;
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)
;
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)
;
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)
;
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})))
;
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})))
;
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)
;
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)
;
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)
;
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)
;
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}) ;
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}) ;
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}) ;
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}) ;
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}) ;
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)
;
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)
;
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}) ;
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}) ;
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}) ;
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})))
;
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})))
;
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}) ;
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}) ;
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}) ;
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)
;
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}) ;
Buildings.Fluid.Sensors.TemperatureTwoPort chiWatSupTem(
redeclare package Medium = MediumW,
final m_flow_nominal=mChi_flow_nominal)
;
Buildings.Fluid.Sensors.TemperatureTwoPort chiWatRet(
redeclare package Medium = MediumW,
final m_flow_nominal=mChi_flow_nominal)
;
Buildings.Fluid.Sensors.TemperatureTwoPort chiWatRet1(
redeclare package Medium = MediumW,
final m_flow_nominal=mChi_flow_nominal)
;
Buildings.Fluid.Sensors.VolumeFlowRate senVolFlo(
redeclare package Medium = MediumW,
final m_flow_nominal=mChi_flow_nominal) ;
Buildings.Fluid.Sensors.TemperatureTwoPort conWatSupTem(
redeclare package Medium = MediumW,
final m_flow_nominal=mCon_flow_nominal)
;
Buildings.Fluid.Sensors.TemperatureTwoPort conWatRetTem(
redeclare package Medium = MediumW,
final m_flow_nominal=mCon_flow_nominal)
;
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())
;
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())
;
Buildings.Fluid.Sources.Boundary_pT bou(
redeclare package Medium = MediumW,
nPorts=1)
;
Buildings.Fluid.FixedResistances.CheckValve cheVal(
redeclare package Medium = MediumW,
m_flow_nominal=mCon_flow_nominal,
dpValve_nominal=3400,
l=1e-4)
;
Buildings.Fluid.FixedResistances.CheckValve cheVal1(
redeclare package Medium = MediumW,
m_flow_nominal=mCon_flow_nominal,
dpValve_nominal=3400,
l=1e-4)
;
Buildings.Fluid.FixedResistances.CheckValve cheVal2(
redeclare package Medium = MediumW,
m_flow_nominal=mChi_flow_nominal,
dpValve_nominal=3400,
l=1e-4)
;
Buildings.Fluid.FixedResistances.CheckValve cheVal3(
redeclare package Medium = MediumW,
m_flow_nominal=mChi_flow_nominal,
dpValve_nominal=3400,
l=1e-4)
;
Buildings.Fluid.Sensors.TemperatureTwoPort chiConWatRetTem1(
redeclare package Medium = MediumW,
final m_flow_nominal=mCon_flow_nominal)
;
Buildings.Fluid.Sensors.TemperatureTwoPort chiConWatRetTem2(
redeclare package Medium = MediumW,
final m_flow_nominal=mCon_flow_nominal)
;
Buildings.Fluid.Sensors.TemperatureTwoPort chiWatSupTem1(
redeclare package Medium = MediumW,
final m_flow_nominal=mChi_flow_nominal)
;
Buildings.Fluid.Sensors.TemperatureTwoPort chiWatSupTem2(
redeclare package Medium = MediumW,
final m_flow_nominal=mChi_flow_nominal)
;
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;
Cooling tower with variable speed using the York calculation for the approach temperature and output the actual fan speed
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
| Type | Name | Default | Description |
| replaceable package Medium | PartialMedium | Medium in the component |
| Generic | dat | | Performance data |
| Fan |
| Real | yMin | 0.3 | Minimum control signal until fan is switched off (used for smoothing
between forced and free convection regime) [1] |
| Assumptions |
| Boolean | allowFlowReversal | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
| Advanced |
| MassFlowRate | m_flow_small | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow [kg/s] |
| Diagnostics |
| Boolean | show_T | false | = true, if actual temperature at port is computed |
| Flow resistance |
| Boolean | from_dp | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Real | n | 2 | Flow exponent, n=1 for laminar, n=2 for turbulent |
| Boolean | linearizeFlowResistance | false | = true, use linear relation between m_flow and dp for any flow rate |
| Real | deltaM | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
| Dynamics |
| Nominal condition |
| Time | tau | 30 | Time constant at nominal flow (if energyDynamics <> SteadyState) [s] |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
| Initialization |
| AbsolutePressure | p_start | Medium.p_default | Start value of pressure [Pa] |
| Temperature | T_start | Medium.T_default | Start value of temperature [K] |
| MassFraction | X_start[Medium.nX] | Medium.X_default | Start value of mass fractions m_i/m [kg/kg] |
| ExtraProperty | C_start[Medium.nC] | fill(0, Medium.nC) | Start value of trace substances |
Connectors
| Type | Name | Description |
| FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
| FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
| output RealOutput | TLvg | Leaving water temperature [K] |
| input RealInput | y | Fan control signal [1] |
| output RealOutput | PFan | Electric power consumed by fan [W] |
| input RealInput | TWetBul | Entering air wet bulb temperature [K] |
| output RealOutput | yFanSpe | Actual fan speed |
Modelica definition