modelIntegratedPrimarySecondary
Extends from Buildings.Applications.DataCenters.ChillerCooled.Equipment.BaseClasses.PartialChillerWSE (Partial model for chiller and WSE package).
Information
This model implements an integrated water-side economizer (WSE) on the load side of the primary-secondary chilled water system, as shown in the following figure. In the configuration, users can model multiple chillers with only one integrated WSE.
Implementation
The WSE located on the load side can see the warmest return chilled water, and hence can maximize the hours when the WSE can operate. Also it allows the primary pumps to be shut off when the WSE can handle the entire load. This system have three operation modes: free cooling (FC) mode, partial mechanical cooling (PMC) mode and fully mechanical cooling (FMC) mode.
There are 5 valves for on/off use only, which can be controlled in order to switch among FC, PMC and FMC mode.
- V1 and V2 are associated with the chiller. When the chiller is commanded to run, V1 and V2 will be open, and vice versa. Note that when the number of chillers are larger than 1, V1 and V2 are vectored models with the same dimension as the chillers.
- V2 and V3 are associated with the WSE. When the WSE is commanded to run, V3 and V4 will be open, and vice versa.
- V5 is for FMC only. When FMC is on, V5 is commanded to on. Otherwise, V5 is off.
The details about how to switch among different cooling modes are shown as:
For Free Cooling (FC) Mode:
- V1 and V2 are closed, and V3 and V4 are open;
- V5 is closed;
For Partially Mechanical Cooling (PMC) Mode:
- V1 and V2 are open, and V3 and V4 are open;
- V5 is closed;
For Fully Mechanical Cooling (FMC) Mode:
- V1 and V2 are open, and V3 and V4 are closed;
- V5 is open;
Reference
- Stein, Jeff. 2009. Waterside Economizing in Data Centers: Design and Control Considerations.ASHRAE Transactions, 115(2).
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | num (from PartialChillerWSEInterface) | 2 | Total number of chillers and waterside economizer |
| Boolean | use_controller (from PartialControllerInterface) | true | Set to ture if the built-in controller is enabled to maintain the outlet temperature on the load side of a heat exchanger |
| Integer | numVal (from ValvesParameters) | Number of valves | |
| Integer | numAct (from SignalFilterParameters) | 4 | Number of filters |
| Boolean | activate_ThrWayVal (from ThreeWayValveParameters) | Activate the use of three-way valve: True-use three-way valve; False-not use the three-way valve | |
| Boolean | homotopyInitialization (from PartialChillerWSE) | true | = true, use homotopy method |
| Assumptions | |||
| Boolean | allowFlowReversal1 (from PartialFourPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1 |
| Boolean | allowFlowReversal2 (from PartialFourPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2 |
| Chiller | |||
| Modelica.Units.SI.MassFlowRate | m1_flow_chi_nominal (from PartialChillerWSEInterface) | Nominal mass flow rate on the medium 1 side in the chiller | |
| Modelica.Units.SI.MassFlowRate | m2_flow_chi_nominal (from PartialChillerWSEInterface) | Nominal mass flow rate on the medium 2 side in the chiller | |
| Modelica.Units.SI.PressureDifference | dp1_chi_nominal (from FourPortResistanceChillerWSE) | Pressure difference on medium 1 side in the chillers | |
| Modelica.Units.SI.PressureDifference | dp2_chi_nominal (from FourPortResistanceChillerWSE) | Pressure difference on medium 2 side in the chillers | |
| Integer | numChi (from PartialChillerWSE) | Number of chillers | |
| Buildings.Fluid.Chillers.Data.ElectricEIR.Generic[numChi] | perChi (from PartialChillerWSE) | Performance data for chillers | |
| Waterside economizer | |||
| Modelica.Units.SI.MassFlowRate | m1_flow_wse_nominal (from PartialChillerWSEInterface) | Nominal mass flow rate on the medium 1 side in the waterside economizer | |
| Modelica.Units.SI.MassFlowRate | m2_flow_wse_nominal (from PartialChillerWSEInterface) | Nominal mass flow rate on the medium 2 side in the waterside economizer | |
| Modelica.Units.SI.PressureDifference | dp1_wse_nominal (from FourPortResistanceChillerWSE) | Pressure difference on medium 1 side in the waterside economizer | |
| Modelica.Units.SI.PressureDifference | dp2_wse_nominal (from FourPortResistanceChillerWSE) | Pressure difference on medium 2 side in the waterside economizer | |
| Modelica.Units.SI.Efficiency | eta (from PartialChillerWSE) | 0.8 | Heat exchange effectiveness |
| Advanced | |||
| Medium1.MassFlowRate | m1_flow_small (from PartialChillerWSEInterface) | 1E-4*abs(m1_flow_chi_nominal) | Small mass flow rate for regularization of zero flow |
| Medium2.MassFlowRate | m2_flow_small (from PartialChillerWSEInterface) | 1E-4*abs(m2_flow_chi_nominal) | Small mass flow rate for regularization of zero flow |
| Modelica.Fluid.Types.PortFlowDirection | portFlowDirection_1 (from ThreeWayValveParameters) | Modelica.Fluid.Types.PortFlowDirection.Bidirectional | Flow direction for port_1 in the three-way valve |
| Modelica.Fluid.Types.PortFlowDirection | portFlowDirection_2 (from ThreeWayValveParameters) | Modelica.Fluid.Types.PortFlowDirection.Bidirectional | Flow direction for port_2 in the three-way valve |
| Modelica.Fluid.Types.PortFlowDirection | portFlowDirection_3 (from ThreeWayValveParameters) | Modelica.Fluid.Types.PortFlowDirection.Bidirectional | Flow direction for port_3 in the three-way valve |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialChillerWSEInterface) | false | = true, if actual temperature at port is computed |
| Flow resistance › Medium 1 | |||
| Boolean | computeFlowResistance1 (from FourPortResistanceChillerWSE) | true | =true, compute flow resistance. Set to false to assume no friction |
| Boolean | from_dp1 (from FourPortResistanceChillerWSE) | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Boolean | linearizeFlowResistance1 (from FourPortResistanceChillerWSE) | false | = true, use linear relation between m_flow and dp for any flow rate |
| Real | deltaM1 (from FourPortResistanceChillerWSE) | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
| Flow resistance › Medium 2 | |||
| Boolean | computeFlowResistance2 (from FourPortResistanceChillerWSE) | true | =true, compute flow resistance. Set to false to assume no friction |
| Boolean | from_dp2 (from FourPortResistanceChillerWSE) | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Boolean | linearizeFlowResistance2 (from FourPortResistanceChillerWSE) | false | = true, use linear relation between m_flow and dp for any flow rate |
| Real | deltaM2 (from FourPortResistanceChillerWSE) | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
| Controller | |||
| Modelica.Blocks.Types.SimpleController | controllerType (from PartialControllerInterface) | Modelica.Blocks.Types.SimpleController.PID | Type of controller |
| Real | k (from PartialControllerInterface) | 1 | Gain of controller |
| Modelica.Units.SI.Time | Ti (from PartialControllerInterface) | 0.5 | Time constant of integrator block |
| Modelica.Units.SI.Time | Td (from PartialControllerInterface) | 0.1 | Time constant of derivative block |
| Real | yMax (from PartialControllerInterface) | 1 | Upper limit of output |
| Real | yMin (from PartialControllerInterface) | 0 | Lower limit of output |
| Real | wp (from PartialControllerInterface) | 1 | Set-point weight for Proportional block (0..1) |
| Real | wd (from PartialControllerInterface) | 0 | Set-point weight for Derivative block (0..1) |
| Real | Ni (from PartialControllerInterface) | 0.9 | Ni*Ti is time constant of anti-windup compensation |
| Real | Nd (from PartialControllerInterface) | 10 | The higher Nd, the more ideal the derivative block |
| Boolean | reverseActing (from PartialControllerInterface) | false | Set to true for throttling the water flow rate through a cooling coil controller |
| Controller › Initialization | |||
| Modelica.Blocks.Types.Init | initType (from PartialControllerInterface) | Modelica.Blocks.Types.Init.InitialState | Type of initialization (1: no init, 2: steady state, 3: initial state, 4: initial output) |
| Real | xi_start (from PartialControllerInterface) | 0 | Initial or guess value value for integrator output (= integrator state) |
| Real | xd_start (from PartialControllerInterface) | 0 | Initial or guess value for state of derivative block |
| Real | yCon_start (from PartialControllerInterface) | 0 | Initial value of output from the controller |
| Controller › Integrator reset | |||
| Buildings.Types.Reset | reset (from PartialControllerInterface) | Buildings.Types.Reset.Disabled | Type of controller output reset |
| Real | y_reset (from PartialControllerInterface) | xi_start | Value to which the controller output is reset if the boolean trigger has a rising edge, used if reset == Buildings.Types.Reset.Parameter |
| Two-way valve | |||
| Buildings.Fluid.Types.CvTypes | CvData (from ValvesParameters) | Buildings.Fluid.Types.CvTypes.OpPoint | Selection of flow coefficient |
| Real | Kv (from ValvesParameters) | Kv (metric) flow coefficient [m3/h/(bar)^(1/2)] | |
| Real | Cv (from ValvesParameters) | Cv (US) flow coefficient [USG/min/(psi)^(1/2)] | |
| Modelica.Units.SI.Area | Av (from ValvesParameters) | Av (metric) flow coefficient | |
| Modelica.Units.SI.MassFlowRate | m_flow_nominal (from ValvesParameters) | Nominal mass flow rate | |
| Modelica.Units.SI.PressureDifference | dpValve_nominal (from ValvesParameters) | fill(6000, numVal) | Nominal pressure drop of fully open valve, used if CvData=Buildings.Fluid.Types.CvTypes.OpPoint |
| Real | lValChi (from PartialChillerWSE) | {0.0001, 0.0001} | Valve leakage, l=Kv(y=0)/Kv(y=1) |
| Real | lValWSE (from PartialChillerWSE) | {0.0001, 0.0001} | Valve leakage, l=Kv(y=0)/Kv(y=1) |
| Pressure-flow linearization | |||
| Real | deltaM (from ValvesParameters) | 0.02 | Fraction of nominal flow rate where linearization starts, if y=1 |
| Advanced › Two-way valve | |||
| Modelica.Units.SI.Density | rhoStd (from ValvesParameters) | Inlet density for which valve coefficients are defined | |
| Dynamics › Time needed to open or close valve | |||
| Boolean | use_strokeTime (from SignalFilterParameters) | false | = true, if opening is filtered to avoid a step change in actuator position |
| Modelica.Units.SI.Time | strokeTime (from SignalFilterParameters) | 30 | Time needed to open or close valve |
| Modelica.Blocks.Types.Init | initValve (from SignalFilterParameters) | Modelica.Blocks.Types.Init.InitialOutput | Type of initialization (no init/steady state/initial state/initial output) |
| Real | yValve_start (from SignalFilterParameters) | fill(1, numAct) | Initial value of output:0-closed, 1-fully opened |
| Real | yValChi_start (from PartialChillerWSE) | fill(0, numChi) | Initial value of output from on/off valves in chillers |
| Real | yValWSE_start (from PartialChillerWSE) | 0 | Initial value of output from on/off valve in WSE |
| Real | yThrWayValWSE_start (from PartialChillerWSE) | 0 | Initial value of output from three-way bypass valve in WSE |
| Real | yValPum_start | fill(0, numPum) | Initial value of output:0-closed, 1-fully opened |
| Real | yVal5_start | 0 | Initial value of output from valve 5:0-closed, 1-fully opened |
| Three-way Valve | |||
| Modelica.Units.SI.PressureDifference | dpThrWayVal_nominal (from ThreeWayValveParameters) | 6000 | Nominal pressure drop of fully open valve |
| Real | fraK_ThrWayVal (from ThreeWayValveParameters) | 0.7 | Fraction Kv(port_3→port_2)/Kv(port_1→port_2)for the three-way valve |
| Real[2] | l_ThrWayVal (from ThreeWayValveParameters) | {0.0001, 0.0001} | Bypass valve leakage, l=Kv(y=0)/Kv(y=1) |
| Real | R (from ThreeWayValveParameters) | 50 | Rangeability, R=50...100 typically for the three-way valve |
| Real | delta0 (from ThreeWayValveParameters) | 0.01 | Range of significant deviation from equal percentage law for the three-way valve |
| Dynamics › Conservation equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics (from PartialChillerWSE) | Modelica.Fluid.Types.Dynamics.DynamicFreeInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Dynamics › Chiller | |||
| Modelica.Units.SI.Time | tauChi1 (from PartialChillerWSE) | 30 | Time constant at nominal flow in chillers |
| Modelica.Units.SI.Time | tauChi2 (from PartialChillerWSE) | 30 | Time constant at nominal flow in chillers |
| Dynamics › Waterside economizer | |||
| Modelica.Units.SI.Time | tauWSE (from PartialChillerWSE) | 10 | Time constant at nominal flow for dynamic energy and momentum balance of the three-way valve |
| Initialization › Medium 1 | |||
| Medium1.AbsolutePressure | p1_start (from PartialChillerWSE) | Medium1.p_default | Start value of pressure |
| Medium1.Temperature | T1_start (from PartialChillerWSE) | Medium1.T_default | Start value of temperature |
| Medium1.MassFraction[Medium1.nX] | X1_start (from PartialChillerWSE) | Medium1.X_default | Start value of mass fractions m_i/m |
| Medium1.ExtraProperty[Medium1.nC] | C1_start (from PartialChillerWSE) | fill(0, Medium1.nC) | Start value of trace substances |
| Medium1.ExtraProperty[Medium1.nC] | C1_nominal (from PartialChillerWSE) | fill(1E-2, Medium1.nC) | Nominal value of trace substances. (Set to typical order of magnitude.) |
| Initialization › Medium 2 | |||
| Medium2.AbsolutePressure | p2_start (from PartialChillerWSE) | Medium2.p_default | Start value of pressure |
| Medium2.Temperature | T2_start (from PartialChillerWSE) | Medium2.T_default | Start value of temperature |
| Medium2.MassFraction[Medium2.nX] | X2_start (from PartialChillerWSE) | Medium2.X_default | Start value of mass fractions m_i/m |
| Medium2.ExtraProperty[Medium2.nC] | C2_start (from PartialChillerWSE) | fill(0, Medium2.nC) | Start value of trace substances |
| Medium2.ExtraProperty[Medium2.nC] | C2_nominal (from PartialChillerWSE) | fill(1E-2, Medium2.nC) | Nominal value of trace substances. (Set to typical order of magnitude.) |
| Dynamics › Temperature Sensor | |||
| Modelica.Units.SI.Time | tauSenT (from PartialChillerWSE) | 1 | Time constant at nominal flow rate (use tau=0 for steady-state sensor, but see user guide for potential problems) |
| Modelica.Blocks.Types.Init | initTSenor (from PartialChillerWSE) | Modelica.Blocks.Types.Init.InitialState | Type of initialization of the temperature sensor (InitialState and InitialOutput are identical) |
| Dynamics › Pump | |||
| Modelica.Units.SI.Time | tauPump | 1 | Time constant of fluid volume for nominal flow in pumps, used if energy or mass balance is dynamic |
| Pump | |||
| Integer | numPum | numChi | Number of pumps |
| Modelica.Units.SI.MassFlowRate | m_flow_pum_nominal | m2_flow_chi_nominal | Nominal flow rate of the pump |
| Buildings.Fluid.Movers.Data.Generic[numPum] | perPum | Performance data for primary pumps | |
| Boolean | addPowerToMedium | true | Set to false to avoid any power (=heat and flow work) being added to medium (may give simpler equations) |
| Real | lValPum | 0.0001 | Valve leakage, l=Kv(y=0)/Kv(y=1) |
| Modelica.Units.SI.PressureDifference | dpValPum_nominal | 6000 | Nominal differential pressure of the shutoff valves for primary pumps |
| Dynamics › Filtered flowrate | |||
| Boolean | use_riseTime | true | Set to true to continuously change motor speed |
| Modelica.Units.SI.Time | riseTime | 30 | Time needed to change motor speed between zero and full speed |
| Modelica.Blocks.Types.Init | initPum | initValve | Type of initialization (no init/steady state/initial state/initial output) |
| Real | yPum_start | fill(0, numPum) | Initial value of output from pumps:0-off, 1-on |
| Real | m_flow_start | fill(0, numPum) | Initial value of output from pumps |
| Shutoff valve | |||
| Real | lVal5 | 0.0001 | Valve 5 leakage, l=Kv(y=0)/Kv(y=1) |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Fluid.Interfaces.FluidPort_a | port_a1 (from PartialFourPort) | Fluid connector a1 (positive design flow direction is from port_a1 to port_b1) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b1 (from PartialFourPort) | Fluid connector b1 (positive design flow direction is from port_a1 to port_b1) | |
| Modelica.Fluid.Interfaces.FluidPort_a | port_a2 (from PartialFourPort) | Fluid connector a2 (positive design flow direction is from port_a2 to port_b2) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b2 (from PartialFourPort) | Fluid connector b2 (positive design flow direction is from port_a2 to port_b2) | |
| Modelica.Blocks.Interfaces.RealInput | TSet (from PartialChillerWSEInterface) | Set point for leaving water temperature | |
| Modelica.Blocks.Interfaces.BooleanInput[num] | on (from PartialChillerWSEInterface) | Set to true to enable equipment, or false to disable equipment | |
| Modelica.Blocks.Interfaces.BooleanInput | trigger (from PartialControllerInterface) | Resets the controller output when trigger becomes true | |
| Modelica.Blocks.Interfaces.RealInput | y_reset_in (from PartialControllerInterface) | Input signal for state to which integrator is reset, enabled if reset = Buildings.Types.Reset.Input | |
| Modelica.Blocks.Interfaces.RealOutput | TCHWSupWSE (from PartialChillerWSE) | Chilled water supply temperature in the waterside economizer | |
| Modelica.Blocks.Interfaces.RealOutput[numChi] | powChi (from PartialChillerWSE) | Electric power consumed by chiller compressor | |
| Modelica.Blocks.Interfaces.RealInput[numPum] | yPum | Prescribed normalized flowrate for primary pumps: 1 - nominal flowrate, 0 - no flowrate | |
| Modelica.Blocks.Interfaces.RealInput | yVal5 | Actuator position for valve 5 (0: closed, 1: open) | |
| Modelica.Blocks.Interfaces.RealOutput[numPum] | powPum | Electrical power consumed by the pumps |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Medium1.MassFlowRate | m1_flow (from PartialChillerWSEInterface) | port_a1.m_flow | Mass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp1 (from PartialChillerWSEInterface) | port_a1.p - port_b1.p | Pressure difference between port_a1 and port_b1 |
| Medium2.MassFlowRate | m2_flow (from PartialChillerWSEInterface) | port_a2.m_flow | Mass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp2 (from PartialChillerWSEInterface) | port_a2.p - port_b2.p | Pressure difference between port_a2 and port_b2 |
| Medium1.ThermodynamicState | sta_a1 (from PartialChillerWSEInterface) | Medium1.setState_phX(port_a1.p, noEvent(actualStream(port_a1.h_outflow)), noEvent(actualStream(port_a1.Xi_outflow))) | Medium properties in port_a1 |
| Medium1.ThermodynamicState | sta_b1 (from PartialChillerWSEInterface) | Medium1.setState_phX(port_b1.p, noEvent(actualStream(port_b1.h_outflow)), noEvent(actualStream(port_b1.Xi_outflow))) | Medium properties in port_b1 |
| Medium2.ThermodynamicState | sta_a2 (from PartialChillerWSEInterface) | Medium2.setState_phX(port_a2.p, noEvent(actualStream(port_a2.h_outflow)), noEvent(actualStream(port_a2.Xi_outflow))) | Medium properties in port_a2 |
| Medium2.ThermodynamicState | sta_b2 (from PartialChillerWSEInterface) | Medium2.setState_phX(port_b2.p, noEvent(actualStream(port_b2.h_outflow)), noEvent(actualStream(port_b2.Xi_outflow))) | Medium properties in port_b2 |
| Buildings.Applications.BaseClasses.Equipment.ElectricChillerParallel | chiPar (from PartialChillerWSE) | Chillers with identical nominal parameters but different performance curves | |
| Buildings.Applications.DataCenters.ChillerCooled.Equipment.WatersideEconomizer | wse (from PartialChillerWSE) | Waterside economizer | |
| Buildings.Fluid.Sensors.TemperatureTwoPort | senTem (from PartialChillerWSE) | Temperature sensor | |
| Fluid.FixedResistances.Junction | spl1 (from PartialChillerWSE) | Splitter | |
| Fluid.FixedResistances.Junction | jun1 (from PartialChillerWSE) | Junction | |
| Buildings.Fluid.Actuators.Valves.TwoWayLinear | val5 | Bypass valve: closed when fully mechanic cooling is activated; open when fully mechanic cooling is activated | |
| Buildings.Applications.BaseClasses.Equipment.FlowMachine_m | pum | Constant speed pumps | |
| Buildings.Fluid.Sensors.MassFlowRate | bypFlo | Bypass water mass flowrate | |
| Fluid.FixedResistances.Junction | jun2 | Junction | |
| Fluid.FixedResistances.Junction | spl2 | Splitter | |
| Fluid.FixedResistances.Junction | jun3 | Junction |
Revisions
-
April 26, 2021, by Kathryn Hinkelman:
Added junctions and removedkFixedredundancies.
See IBPSA, #1472. -
January 12, 2019, by Michael Wetter:
Removed wrongeach. -
December 1, 2017, by Yangyang Fu:
Changed the input connectorm_flow_inintoyPumto avoid multipling mass flowrate twice in thepum. This is for #1080. -
July 1, 2017, by Yangyang Fu:
First implementation.