modelMultiplePumpsSpeed
Model of multiple identical pumps in parallel with speed-controlled pump model
Extends from Buildings.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps (Base class for modeling multiple identical pumps in parallel).
Information
This model represents a set of identical speed-controlled pumps that are piped in parallel. The model may be configured to represent either constant speed pumps or variable speed pumps. An optional check valve in series with each pump is included.
Control points
The following input and output points are available.
-
Start command (VFD Run for variable speed pumps or Starter contact for constant speed pumps)
y1: DO signal dedicated to each unit, with a dimensionality of one -
(Optionally if
have_varistrue) Speed commandy: AO signal common to all units, with a dimensionality of zero -
Pump status
y1_actual: DI signal dedicated to each unit, with a dimensionality of one
Details
See the base class Buildings.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps. for a description of the modeling approach.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | nPum (from PartialMultiplePumps) | Number of pumps | |
| Boolean | have_var (from PartialMultiplePumps) | true | Set to true for variable speed pumps, false for constant speed |
| Boolean | have_valve (from PartialMultiplePumps) | true | Set to true for inline check valve |
| Fluid.Movers.Data.Generic | per (from PartialMultiplePumps) | ||
| Dynamics › Conservation equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics (from LumpedVolumeDeclarations) | Modelica.Fluid.Types.Dynamics.DynamicFreeInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Modelica.Fluid.Types.Dynamics | substanceDynamics (from LumpedVolumeDeclarations) | energyDynamics | Type of independent mass fraction balance: dynamic (3 initialization options) or steady state |
| Modelica.Fluid.Types.Dynamics | traceDynamics (from LumpedVolumeDeclarations) | energyDynamics | Type of trace substance balance: dynamic (3 initialization options) or steady state |
| Advanced › Dynamics | |||
| Modelica.Fluid.Types.Dynamics | massDynamics (from LumpedVolumeDeclarations) | energyDynamics | Type of mass balance: dynamic (3 initialization options) or steady state, must be steady state if energyDynamics is steady state |
| Initialization | |||
| Medium.AbsolutePressure | p_start (from LumpedVolumeDeclarations) | Medium.p_default | Start value of pressure |
| Medium.Temperature | T_start (from LumpedVolumeDeclarations) | Medium.T_default | Start value of temperature |
| Medium.MassFraction[Medium.nX] | X_start (from LumpedVolumeDeclarations) | Medium.X_default | Start value of mass fractions m_i/m |
| Medium.ExtraProperty[Medium.nC] | C_start (from LumpedVolumeDeclarations) | fill(0, Medium.nC) | Start value of trace substances |
| Medium.ExtraProperty[Medium.nC] | C_nominal (from LumpedVolumeDeclarations) | fill(1E-2, Medium.nC) | Nominal value of trace substances. (Set to typical order of magnitude.) |
| Dynamics | |||
| Real | mSenFac (from LumpedVolumeDeclarations) | 1 | Factor for scaling the sensible thermal mass of the volume |
| Assumptions | |||
| Boolean | allowFlowReversal (from PartialTwoPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
| Nominal condition | |||
| Modelica.Units.SI.MassFlowRate | m_flow_nominal (from PartialTwoPortInterface) | Nominal mass flow rate | |
| Modelica.Units.SI.MassFlowRate | mPum_flow_nominal (from PartialMultiplePumps) | Design mass flow rate (each pump) | |
| Modelica.Units.SI.PressureDifference | dpPum_nominal (from PartialMultiplePumps) | Design head (each pump) | |
| Modelica.Units.SI.PressureDifference | dpValve_nominal (from PartialMultiplePumps) | 10000 | Pressure drop of check valve fully open |
| Advanced | |||
| Modelica.Units.SI.MassFlowRate | m_flow_small (from PartialTwoPortInterface) | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialTwoPortInterface) | false | = true, if actual temperature at port is computed |
| Dynamics › Nominal condition | |||
| Modelica.Units.SI.Time | tau (from PartialMultiplePumps) | 1 | Time constant of fluid volume for nominal flow, used if energy or mass balance is dynamic |
| Dynamics › Motor speed | |||
| Boolean | use_riseTime (from PartialMultiplePumps) | true | Set to true to continuously change motor speed |
| Modelica.Units.SI.Time | riseTime (from PartialMultiplePumps) | 30 | Time needed to change motor speed between zero and full speed |
| Modelica.Blocks.Types.Init | init (from PartialMultiplePumps) | Modelica.Blocks.Types.Init.InitialOutput | Type of initialization (no init/steady state/initial state/initial output) |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Fluid.Interfaces.FluidPort_a | port_a (from PartialTwoPort) | Fluid connector a (positive design flow direction is from port_a to port_b) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b (from PartialTwoPort) | Fluid connector b (positive design flow direction is from port_a to port_b) | |
| Buildings.Controls.OBC.CDL.Interfaces.BooleanInput[nPum] | y1 (from PartialMultiplePumps) | Start signal (VFD Run or motor starter contact) | |
| Buildings.Controls.OBC.CDL.Interfaces.RealOutput | P (from PartialMultiplePumps) | Total power (all pumps) | |
| Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput[nPum] | y1_actual (from PartialMultiplePumps) | Pump status | |
| Buildings.Controls.OBC.CDL.Interfaces.RealInput | y | Pump speed (common to all pumps) |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Units.SI.MassFlowRate | m_flow (from PartialTwoPortInterface) | port_a.m_flow | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp (from PartialTwoPortInterface) | port_a.p - port_b.p | Pressure difference between port_a and port_b |
| Medium.ThermodynamicState | sta_a (from PartialTwoPortInterface) | if allowFlowReversal then Medium.setState_phX(port_a.p, noEvent(actualStream(port_a.h_outflow)), noEvent(actualStream(port_a.Xi_outflow))) else Medium.setState_phX(port_a.p, noEvent(inStream(port_a.h_outflow)), noEvent(inStream(port_a.Xi_outflow))) | Medium properties in port_a |
| Medium.ThermodynamicState | sta_b (from PartialTwoPortInterface) | if allowFlowReversal then Medium.setState_phX(port_b.p, noEvent(actualStream(port_b.h_outflow)), noEvent(actualStream(port_b.Xi_outflow))) else Medium.setState_phX(port_b.p, noEvent(port_b.h_outflow), noEvent(port_b.Xi_outflow)) | Medium properties in port_b |
| Fluid.BaseClasses.MassFlowRateMultiplier | mulOut (from PartialMultiplePumps) | Flow rate multiplier | |
| Fluid.BaseClasses.MassFlowRateMultiplier | mulInl (from PartialMultiplePumps) | Flow rate multiplier | |
| Fluid.Movers.SpeedControlled_y | pum (from PartialMultiplePumps) | ||
| Buildings.Templates.Components.Controls.MultipleCommands | com (from PartialMultiplePumps) | Convert command signal | |
| Buildings.Controls.OBC.CDL.Conversions.BooleanToReal | booToRea (from PartialMultiplePumps) | Convert to real | |
| Buildings.Controls.OBC.CDL.Reals.Multiply | mul (from PartialMultiplePumps) | Compute total power | |
| Buildings.Controls.OBC.CDL.Reals.Multiply | inp (from PartialMultiplePumps) | Compute pump input signal | |
| Buildings.Controls.OBC.CDL.Reals.Sources.Constant | cst (from PartialMultiplePumps) | Constant setpoint | |
| Buildings.Controls.OBC.CDL.Reals.GreaterThreshold | isOpe (from PartialMultiplePumps) | Evaluate if pump is operating | |
| Fluid.FixedResistances.CheckValve | cheVal (from PartialMultiplePumps) | Check valve (optional) | |
| Buildings.DHC.Plants.Combined.Subsystems.BaseClasses.PassThroughFluid | pas (from PartialMultiplePumps) | Direct fluid pass-through (case without check valve) | |
| Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator | rep (from PartialMultiplePumps) | Replicate | |
| Buildings.Controls.OBC.CDL.Logical.Pre[nPum] | preY1 (from PartialMultiplePumps) | Left limit of signal avoiding direct feedback of status to controller |
Revisions
-
February 24, 2023, by Antoine Gautier:
First implementation.