modelMultiplePumpsDp
Model of multiple identical pumps in parallel with dp-controlled pump model
Extends from BaseClasses.PartialMultiplePumps (Base class for modeling multiple identical pumps in parallel).
Information
This model represents a set of identical dp-controlled variable speed pumps that are piped in parallel. 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)
y1: DO signal dedicated to each unit, with a dimensionality of one -
(Optionally if
have_varSetistrue) Differential pressure setpointdp_in: 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) | ||
| Boolean | have_varSet | true | Set to true for variable setpoint, false for constant setpoint (design value) |
| 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 | dp_in | Differential pressure setpoint |
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.