Buildings.DHC.Plants.Cooling

Package of models for central cooling production

Information

This package contains models for central plants producing chilled water.

Extends from Modelica.Icons.VariantsPackage (Icon for package containing variants).

Package Content

Name Description
Buildings.DHC.Plants.Cooling.ElectricChillerParallel ElectricChillerParallel District cooling plant model
Buildings.DHC.Plants.Cooling.StoragePlant StoragePlant Model of a storage plant with a chiller and a CHW tank
Buildings.DHC.Plants.Cooling.Controls Controls Package of control sequences for cooling plants
Buildings.DHC.Plants.Cooling.Subsystems Subsystems Package of models for subsystems of cooling plants
Buildings.DHC.Plants.Cooling.Examples Examples Example models integrating multiple components
Buildings.DHC.Plants.Cooling.BaseClasses BaseClasses Package containing base classes

Buildings.DHC.Plants.Cooling.ElectricChillerParallel Buildings.DHC.Plants.Cooling.ElectricChillerParallel

District cooling plant model

Buildings.DHC.Plants.Cooling.ElectricChillerParallel

Information

This model implements a generic district central cooling plant as illustrated in the schematics below.

The staging of the chillers is based on the calculated cooling load.

See Buildings.DHC.Plants.Cooling.Controls.ChillerStage for the detailed control logic.

System schematics.

Extends from Buildings.DHC.Plants.BaseClasses.PartialPlant (Partial class for modeling a plant).

Parameters

TypeNameDefaultDescription
replaceable package MediumWaterService side medium
replaceable package MediumHea_bWaterService side medium at heating supply
Genericfue[nFue] Fuel type
PressureDifferencedpCooTowVal_nominal Nominal pressure difference of the cooling tower valve [Pa]
Configuration
DistrictSystemTypetypBuildings.DHC.Types.District...Type of district system
Booleanhave_fantrueSet to true if fan power is computed
Booleanhave_pumtrueSet to true if pump power is computed
Booleanhave_eleHeafalseSet to true if the plant has electric heating system
IntegernFue0Number of fuel types (0 means no combustion system)
Booleanhave_eleCootrueSet to true if the plant has electric cooling system
Booleanhave_weaBustrueSet to true to use a weather bus
Chiller
GenericperChiredeclare parameter Building...Performance data of chiller
MassFlowRatemCHW_flow_nominal Nominal chilled water mass flow rate [kg/s]
PressuredpCHW_nominal Pressure difference at the chilled water side [Pa]
HeatFlowRateQChi_nominal Nominal cooling capacity of single chiller (negative means cooling) [W]
MassFlowRatemMin_flow Minimum mass flow rate of single chiller [kg/s]
Cooling Tower
MassFlowRatemCW_flow_nominal Nominal condenser water mass flow rate [kg/s]
PressuredpCW_nominal Pressure difference at the condenser water side [Pa]
TemperatureTAirInWB_nominal Nominal air wetbulb temperature [K]
TemperatureTCW_nominal Nominal condenser water temperature at tower inlet [K]
TemperatureDifferencedT_nominal Temperature difference between inlet and outlet of the tower [K]
TemperatureDifferencedTApp Approach temperature [K]
TemperatureTMin Minimum allowed water temperature entering chiller [K]
PowerPFan_nominal Fan power [W]
Pump
GenericperCHWPumredeclare parameter Building...Performance data of chilled water pump
GenericperCWPumredeclare parameter Building...Performance data of condenser water pump
PressuredpCHWPumVal_nominal Nominal pressure drop of chilled water pump valve [Pa]
PressuredpCWPumVal_nominal Nominal pressure drop of condenser water pump valve [Pa]
Control Settings
TimetWai Waiting time [s]
Assumptions
BooleanallowFlowReversalfalseSet to true to allow flow reversal in service lines
Dynamics
Pump
Timetau1Pump time constant at nominal flow (if energyDynamics <> SteadyState) [s]
Booleanuse_inputFilterfalse= true, if pump speed is filtered with a 2nd order CriticalDamping filter
TimeriseTimePump30Pump rise time of the filter (time to reach 99.6 % of the speed) [s]
InitinitModelica.Blocks.Types.Init.I...Type of initialization for pumps (no init/steady state/initial state/initial output)
RealyCHWP_start[numChi]fill(0, numChi)Initial value of CHW pump signals
RealyCWP_start[numChi]fill(0, numChi)Initial value of CW pump signals
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
Advanced
Dynamics
DynamicsmassDynamicsenergyDynamicsType of mass balance: dynamic (3 initialization options) or steady state, must be steady state if energyDynamics is steady state

Connectors

TypeNameDescription
FluidPort_aport_aSerAmbFluid connector for ambient water service supply line
FluidPort_bport_bSerAmbFluid connector for ambient water service return line
FluidPort_aport_aSerHeaFluid connector for heating service supply line
FluidPort_bport_bSerHeaFluid connector for heating service return line
FluidPort_aport_aSerCooFluid connector for cooling service supply line
FluidPort_bport_bSerCooFluid connector for cooling service return line
BusweaBusWeather data bus
output RealOutputPHeaPower drawn by heating system [W]
output RealOutputPCooPower drawn by cooling system [W]
output RealOutputPFanPower drawn by fan motors [W]
output RealOutputPPumPower drawn by pump motors [W]
output RealOutputQFue_flowFuel energy input rate [W]
input BooleanInputonOn signal of the plant
input RealInputTCHWSupSetSet point for chilled water supply temperature [K]

Modelica definition

model ElectricChillerParallel "District cooling plant model" extends Buildings.DHC.Plants.BaseClasses.PartialPlant( have_eleCoo=true, have_pum=true, have_fan=true, have_weaBus=true, typ=Buildings.DHC.Types.DistrictSystemType.Cooling); // chiller parameters final parameter Integer numChi=2 "Number of chillers"; replaceable parameter Buildings.Fluid.Chillers.Data.ElectricEIR.Generic perChi "Performance data of chiller"; parameter Modelica.Units.SI.MassFlowRate mCHW_flow_nominal "Nominal chilled water mass flow rate"; parameter Modelica.Units.SI.Pressure dpCHW_nominal "Pressure difference at the chilled water side"; parameter Modelica.Units.SI.HeatFlowRate QChi_nominal(max=0) "Nominal cooling capacity of single chiller (negative means cooling)"; parameter Modelica.Units.SI.MassFlowRate mMin_flow "Minimum mass flow rate of single chiller"; // cooling tower parameters parameter Modelica.Units.SI.MassFlowRate mCW_flow_nominal "Nominal condenser water mass flow rate"; parameter Modelica.Units.SI.Pressure dpCW_nominal "Pressure difference at the condenser water side"; parameter Modelica.Units.SI.Temperature TAirInWB_nominal "Nominal air wetbulb temperature"; parameter Modelica.Units.SI.Temperature TCW_nominal "Nominal condenser water temperature at tower inlet"; parameter Modelica.Units.SI.TemperatureDifference dT_nominal "Temperature difference between inlet and outlet of the tower"; parameter Modelica.Units.SI.TemperatureDifference dTApp "Approach temperature"; parameter Modelica.Units.SI.Temperature TMin "Minimum allowed water temperature entering chiller"; parameter Modelica.Units.SI.Power PFan_nominal "Fan power"; // pump parameters replaceable parameter Buildings.Fluid.Movers.Data.Generic perCHWPum constrainedby Buildings.Fluid.Movers.Data.Generic "Performance data of chilled water pump"; replaceable parameter Buildings.Fluid.Movers.Data.Generic perCWPum constrainedby Buildings.Fluid.Movers.Data.Generic "Performance data of condenser water pump"; parameter Modelica.Units.SI.Pressure dpCHWPumVal_nominal "Nominal pressure drop of chilled water pump valve"; parameter Modelica.Units.SI.Pressure dpCWPumVal_nominal "Nominal pressure drop of condenser water pump valve"; parameter Modelica.Units.SI.Time tau=1 "Pump time constant at nominal flow (if energyDynamics <> SteadyState)"; parameter Boolean use_inputFilter=false "= true, if pump speed is filtered with a 2nd order CriticalDamping filter"; parameter Modelica.Units.SI.Time riseTimePump=30 "Pump rise time of the filter (time to reach 99.6 % of the speed)"; parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput "Type of initialization for pumps (no init/steady state/initial state/initial output)"; parameter Real[numChi] yCHWP_start=fill(0,numChi) "Initial value of CHW pump signals"; parameter Real[numChi] yCWP_start=fill(0,numChi) "Initial value of CW pump signals"; parameter Modelica.Units.SI.PressureDifference dpCooTowVal_nominal "Nominal pressure difference of the cooling tower valve"; // control settings parameter Modelica.Units.SI.Time tWai "Waiting time"; // dynamics parameter Modelica.Fluid.Types.Dynamics energyDynamics= Modelica.Fluid.Types.Dynamics.DynamicFreeInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; parameter Modelica.Fluid.Types.Dynamics massDynamics=energyDynamics "Type of mass balance: dynamic (3 initialization options) or steady state, must be steady state if energyDynamics is steady state"; Modelica.Blocks.Interfaces.BooleanInput on "On signal of the plant"; Modelica.Blocks.Interfaces.RealInput TCHWSupSet( final unit="K", displayUnit="degC") "Set point for chilled water supply temperature"; Buildings.Applications.BaseClasses.Equipment.ElectricChillerParallel mulChiSys( final use_inputFilter=use_inputFilter, final per=fill( perChi, numChi), final m1_flow_nominal=mCW_flow_nominal, final m2_flow_nominal=mCHW_flow_nominal, final dp1_nominal=dpCW_nominal/2, final dp2_nominal=dpCHW_nominal, final num=numChi, redeclare final package Medium1=Medium, redeclare final package Medium2=Medium) "Chillers connected in parallel"; Buildings.DHC.Plants.Cooling.Subsystems.CoolingTowersWithBypass cooTowWitByp( redeclare final package Medium=Medium, final num=numChi, final m_flow_nominal=mCW_flow_nominal, final use_inputFilter=use_inputFilter, final dp_nominal=dpCW_nominal/2, final dpValve_nominal = dpCooTowVal_nominal, final TAirInWB_nominal=TAirInWB_nominal, final TWatIn_nominal=TCW_nominal, final dT_nominal=dT_nominal, final dTApp=dTApp, final PFan_nominal=PFan_nominal, final TMin=TMin) "Cooling towers with bypass valve"; Buildings.Applications.BaseClasses.Equipment.FlowMachine_y pumCHW( redeclare final package Medium=Medium, final per=fill( perCHWPum, numChi), yValve_start=fill( 1, numChi), final tau=tau, final use_inputFilter=use_inputFilter, final riseTimePump=riseTimePump, final init=init, final yPump_start=yCHWP_start, final energyDynamics=energyDynamics, final m_flow_nominal=mCHW_flow_nominal, final dpValve_nominal=dpCHWPumVal_nominal, final num=numChi) "Chilled water pumps"; Buildings.Applications.BaseClasses.Equipment.FlowMachine_m pumCW( redeclare final package Medium=Medium, final per=fill( perCWPum, numChi), final tau=tau, final use_inputFilter=use_inputFilter, final riseTimePump=riseTimePump, final init=init, final yPump_start=yCWP_start, final energyDynamics=energyDynamics, final m_flow_nominal=mCW_flow_nominal, final dpValve_nominal=dpCWPumVal_nominal, final num=numChi) "Condenser water pumps"; Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage valByp( redeclare final package Medium=Medium, final allowFlowReversal=false, final m_flow_nominal=mCHW_flow_nominal, final dpValve_nominal=dpCHWPumVal_nominal, final use_inputFilter=true, riseTime=60) "Chilled water bypass valve"; Buildings.Fluid.Sensors.TemperatureTwoPort senTCHWSup( redeclare final package Medium=Medium, final m_flow_nominal=mCHW_flow_nominal) "Chilled water supply temperature"; Buildings.DHC.Plants.Cooling.Controls.ChillerStage chiStaCon( final tWai=tWai, final QChi_nominal=QChi_nominal) "Chiller staging controller"; Buildings.Fluid.Sensors.TemperatureTwoPort senTCHWRet( redeclare final package Medium=Medium, final m_flow_nominal=mCHW_flow_nominal) "Chilled water return temperature"; Buildings.Fluid.Sources.Boundary_pT expTanCW( redeclare final package Medium=Medium, p=300000, nPorts=1) "Condenser water expansion tank"; Buildings.Fluid.Sources.Boundary_pT expTanCHW( redeclare final package Medium=Medium, p=300000, nPorts=1) "Chilled water expansion tank"; Buildings.Fluid.Sensors.MassFlowRate senMasFlo( redeclare final package Medium=Medium) "Chilled water return mass flow"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal chiOn[numChi] "Convert chiller on signal from boolean to real"; Buildings.Controls.OBC.CDL.Reals.MultiSum totPPum( nin=4) "Total pump power"; Buildings.Controls.OBC.CDL.Reals.MultiSum totPFan( nin=2) "Total fan power"; Buildings.Controls.OBC.CDL.Reals.MultiSum totPCoo( nin=2) "Total cooling power"; Buildings.Fluid.FixedResistances.Junction joiCHWRet( redeclare final package Medium=Medium, final m_flow_nominal=mCHW_flow_nominal .* {1,-1,1}, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, dp_nominal={0,0,0}) "Flow joint for the chilled water return side"; Buildings.Fluid.FixedResistances.Junction splCHWSup( redeclare final package Medium=Medium, final m_flow_nominal=mCHW_flow_nominal .* {1,-1,-1}, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, dp_nominal={0,0,0}) "Flow splitter for the chilled water supply side"; Buildings.DHC.Plants.Cooling.Controls.ChilledWaterBypass chiBypCon( final numChi=numChi, final mMin_flow=mMin_flow, k=1, Ti=120) "Chilled water bypass control"; Fluid.Sensors.MassFlowRate senMasFloCHW( redeclare final package Medium = Medium) "Total chilled water pump mass flow rate"; protected final parameter Medium.ThermodynamicState sta_default=Medium.setState_pTX( T=Medium.T_default, p=Medium.p_default, X=Medium.X_default) "Medium state at default properties"; final parameter Modelica.Units.SI.SpecificHeatCapacity cp_default= Medium.specificHeatCapacityCp(sta_default) "Specific heat capacity of the fluid"; initial equation assert(energyDynamics <> Modelica.Fluid.Types.Dynamics.SteadyState or massDynamics == Modelica.Fluid.Types.Dynamics.SteadyState, "In " + getInstanceName() + ": energyDynamics is selected as steady state, and therefore massDynamics must also be steady-state."); equation connect(cooTowWitByp.port_b,pumCW.port_a); connect(on,chiStaCon.on); connect(pumCHW.port_b,mulChiSys.port_a2); connect(pumCW.port_b,mulChiSys.port_a1); connect(mulChiSys.port_b1,cooTowWitByp.port_a); connect(expTanCW.ports[1],pumCW.port_a); connect(senTCHWRet.port_b,senMasFlo.port_a); connect(chiStaCon.y,mulChiSys.on); connect(chiStaCon.y,chiOn.u); connect(chiOn.y,pumCW.u); connect(chiStaCon.y,cooTowWitByp.on); connect(weaBus.TWetBul,cooTowWitByp.TWetBul); connect(port_aSerCoo,senTCHWRet.port_a); connect(senTCHWSup.port_b,port_bSerCoo); connect(TCHWSupSet,mulChiSys.TSet); connect(totPPum.y,PPum); connect(pumCW.P,totPPum.u[1:2]); connect(pumCHW.P,totPPum.u[3:4]); connect(totPFan.y,PFan); connect(cooTowWitByp.PFan,totPFan.u[1:2]); connect(totPCoo.y,PCoo); connect(mulChiSys.P,totPCoo.u[1:2]); connect(splCHWSup.port_3,senTCHWSup.port_a); connect(senTCHWRet.T,chiStaCon.TChiWatRet); connect(senTCHWSup.T,chiStaCon.TChiWatSup); connect(senMasFlo.m_flow,chiStaCon.mFloChiWat); connect(chiStaCon.y,chiBypCon.chiOn); connect(senMasFlo.port_b, joiCHWRet.port_3); connect(valByp.port_b, joiCHWRet.port_1); connect(senMasFloCHW.m_flow, chiBypCon.mFloChi); connect(valByp.port_a, splCHWSup.port_2); connect(joiCHWRet.port_2, pumCHW.port_a); connect(expTanCHW.ports[1], pumCHW.port_a); connect(mulChiSys.port_b2, senMasFloCHW.port_a); connect(senMasFloCHW.port_b, splCHWSup.port_1); connect(chiBypCon.y, valByp.y); connect(chiOn.y, pumCHW.u); end ElectricChillerParallel;

Buildings.DHC.Plants.Cooling.StoragePlant Buildings.DHC.Plants.Cooling.StoragePlant

Model of a storage plant with a chiller and a CHW tank

Buildings.DHC.Plants.Cooling.StoragePlant

Information

This model encompasses the components of a chilled water storage plant. It includes a flow-controlled primary pump, a stratefied storage tank, a reversible connection with the district network, and related controls to coordinate charging and discharging of the tank. The chiller is intentionally excluded in this component so that it can be otherwise chosen and configured. The tank in this plant can be charged by its local chiller or by a remote chiller on the same CHW district network.

System Concept Example

An example usage of this model within a district network is implemented in Buildings.DHC.Plants.Cooling.Examples.StoragePlantDualSource. Shown in the schematic below, it has two CHW plants and three users.

SystemConcept

Control Signals

The plants are controlled as follows:

ControlSignals

Implementation

The flow control of the storage plant is implemented as a state graph in Buildings.DHC.Plants.Cooling.Controls.FlowControl.

Extends from Buildings.Fluid.Interfaces.PartialFourPort (Partial model with four ports).

Parameters

TypeNameDefaultDescription
replaceable package Medium1PartialMediumMedium 1 in the component
replaceable package Medium2PartialMediumMedium 2 in the component
replaceable package MediumModelica.Media.Interfaces.Pa...Medium package
Nominal values
MassFlowRatem_flow_nominalmTan_flow_nominal + mChi_flo...Nominal mass flow rate [kg/s]
MassFlowRatemTan_flow_nominal Nominal mass flow rate for CHW tank branch [kg/s]
MassFlowRatemChi_flow_nominal Nominal mass flow rate for CHW chiller branch [kg/s]
PressureDifferencedpPum_nominal Nominal pressure difference for secondary pump sizing [Pa]
PressureDifferencedpVal_nominal Nominal pressure difference for return valve sizing [Pa]
TemperatureT_CHWS_nominal7 + 273.15Nominal temperature of CHW supply [K]
TemperatureT_CHWR_nominal12 + 273.15Nominal temperature of CHW return [K]
Assumptions
BooleanallowFlowReversal1true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1
BooleanallowFlowReversal2true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2

Connectors

TypeNameDescription
replaceable package Medium1Medium 1 in the component
replaceable package Medium2Medium 2 in the component
FluidPort_aport_a1Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)
FluidPort_bport_b1Fluid connector b1 (positive design flow direction is from port_a1 to port_b1)
FluidPort_aport_a2Fluid connector a2 (positive design flow direction is from port_a2 to port_b2)
FluidPort_bport_b2Fluid connector b2 (positive design flow direction is from port_a2 to port_b2)
replaceable package MediumMedium package
input BooleanInputchiEnaStaChiller enable status, true if chiller is enabled
input IntegerInputcomCommand: 1 = charge tank, 2 = no command, 3 = discharge from tank
input BooleanInputhasLoaSet to true if the district has a load
input RealInputyPumNormalized speed signal for the secondary pump [1]
output RealOutputdpPressure drop accross the connection (measured) [Pa]
output BooleanOutputisChaRemIs operated for remote charging

Modelica definition

model StoragePlant "Model of a storage plant with a chiller and a CHW tank" extends Buildings.Fluid.Interfaces.PartialFourPort( redeclare final package Medium1 = Medium, redeclare final package Medium2 = Medium); replaceable package Medium = Modelica.Media.Interfaces.PartialMedium "Medium package"; parameter Modelica.Units.SI.MassFlowRate m_flow_nominal= mTan_flow_nominal+mChi_flow_nominal "Nominal mass flow rate"; parameter Modelica.Units.SI.MassFlowRate mTan_flow_nominal(min=0) "Nominal mass flow rate for CHW tank branch"; parameter Modelica.Units.SI.MassFlowRate mChi_flow_nominal(min=0) "Nominal mass flow rate for CHW chiller branch"; parameter Modelica.Units.SI.PressureDifference dpPum_nominal "Nominal pressure difference for secondary pump sizing"; parameter Modelica.Units.SI.PressureDifference dpVal_nominal "Nominal pressure difference for return valve sizing"; parameter Modelica.Units.SI.Temperature T_CHWS_nominal( final displayUnit="degC")= 7+273.15 "Nominal temperature of CHW supply"; parameter Modelica.Units.SI.Temperature T_CHWR_nominal( final displayUnit="degC")= 12+273.15 "Nominal temperature of CHW return"; Buildings.Fluid.Movers.Preconfigured.FlowControlled_m_flow pumPri( redeclare final package Medium = Medium, final addPowerToMedium=false, final m_flow_nominal=mChi_flow_nominal, final dp_nominal=chi2PreDro.dp_nominal) "Primary CHW pump"; Buildings.Fluid.FixedResistances.PressureDrop chi2PreDro( redeclare final package Medium = Medium, final m_flow_nominal=mChi_flow_nominal, dp_nominal=0.1*dpPum_nominal) "Pressure drop of the chiller loop"; Buildings.DHC.Plants.Cooling.BaseClasses.TankBranch tanBra( redeclare final package Medium = Medium, final m_flow_nominal=m_flow_nominal, final mTan_flow_nominal=mTan_flow_nominal, final mChi_flow_nominal=mChi_flow_nominal, final T_CHWS_nominal=T_CHWS_nominal, final T_CHWR_nominal=T_CHWR_nominal, VTan=0.8, hTan=3, dIns=0.3) "Tank branch, tank can be charged remotely"; Buildings.DHC.Plants.Cooling.BaseClasses.ReversibleConnection revCon(redeclare final package Medium = Medium, final m_flow_nominal=m_flow_nominal, final mTan_flow_nominal=mTan_flow_nominal, final dpPum_nominal=dpPum_nominal, final dpVal_nominal=dpVal_nominal, final T_start=T_CHWS_nominal) "Reversible connection"; Buildings.DHC.Plants.Cooling.Controls.FlowControl floCon( final mChi_flow_nominal=mChi_flow_nominal, final mTan_flow_nominal=mTan_flow_nominal) "Control block for storage plant flows"; Buildings.DHC.Plants.Cooling.Controls.TankStatus tanSta( TLow=T_CHWS_nominal + 0.5, THig=T_CHWR_nominal - 0.5) "Tank status"; Modelica.Blocks.Interfaces.BooleanInput chiEnaSta "Chiller enable status, true if chiller is enabled"; Modelica.Blocks.Interfaces.IntegerInput com "Command: 1 = charge tank, 2 = no command, 3 = discharge from tank"; Modelica.Blocks.Interfaces.BooleanInput hasLoa "Set to true if the district has a load"; Modelica.Blocks.Interfaces.RealInput yPum(final unit="1") "Normalized speed signal for the secondary pump"; Buildings.Fluid.Sensors.RelativePressure senRelPre( redeclare final package Medium = Medium) "Relative pressure sensor"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput dp( final quantity="PressureDifference", final unit="Pa", final displayUnit="Pa") "Pressure drop accross the connection (measured)"; Modelica.Blocks.Interfaces.BooleanOutput isChaRem "Is operated for remote charging"; equation connect(tanSta.y, floCon.tanSta); connect(floCon.mPriPum_flow, pumPri.m_flow_in); connect(floCon.ySecPum,revCon. yPum); connect(floCon.yVal,revCon. yVal); connect(tanBra.TTan,tanSta. TTan); connect(chiEnaSta, floCon.chiEnaSta); connect(com, floCon.com); connect(hasLoa, floCon.hasLoa); connect(yPum, floCon.yPum); connect(port_b2, chi2PreDro.port_b); connect(tanBra.port_a2, port_a2); connect(revCon.port_b, port_b1); connect(port_a1, pumPri.port_a); connect(pumPri.port_b, tanBra.port_a1); connect(tanBra.port_b2, chi2PreDro.port_a); connect(tanBra.port_b1, revCon.port_a); connect(port_b1, senRelPre.port_a); connect(port_a2, senRelPre.port_b); connect(senRelPre.p_rel, dp); connect(floCon.isChaRem, isChaRem); end StoragePlant;