modelPumpSpeedControlled

Pump model with speed control, onOff-Switch and bounding of speed instead of pump delivery head.

Extends from AixLib.Fluid.Interfaces.PartialTwoPortInterface.

Information

Overview

Simple model for a pump that uses polynomial functions to calculate pump head (headUnbound), power, efficiency. Pump speed (n) will be given by the pumpBus.rpm_Input variable. The variableLimiter will limit n to the maximum and minimum value of speed (which depends upon current volume flow rate). Pump speed is limited by pumpParam.nMin, pumpParam.nMax as well as a maximum (and minimum) pump speed curve (pumpParam.maxMinSpeedCurves). Those curves are normally derived from an electronic power limitation of a pump.

On-/Off Switch

The pump can be switched on/off by a boolean input (pumpBus.onOff_Input, TRUE = On). The switch between on and off is not filtered.

Controlling the pump (pumpBus.rpm_Input)

The pump must be controlled by setting the pump speed (pumpBus.rpm_Input).

Power and Efficiency calculation

The power and the efficiency of the pump can be calculated, with the help of polynomial aproximations. Only use them if you have correct / complete data about the pump.


See the examples under package "Examples".

Hints

Qnom

Qnom, the nominal or design volume flow rate of the pump, is given in m³/h and should be selected by the engineer. A good default value would be 67 % of Qmax .The default value, however, is set to 0.5*max(pumpParam.maxMinSpeedCurves[:, 1]). max(pumpParam.maxMinSpeedCurves[:, 1]) is the maximum value found in column 1 of table maxMinSpeedCurves. This however, is more than the real maximum volume flow rate of the pump as the the table is extended by additional rows for proper extrapolation of table values. In order to compensate for this excess value Qnom is by default only at 50 5 of the maxMinSpeedCurves value. Please refer to the referenceDataQHPN matrix to find the real Qmax value. A simple alternative for the given assumption could be to introduce a parameter Qmax in the pump record that contains the exact value.

Assumption and limitations

Note assumptions such as a specific definition ranges for the model, possible medium models, allowed combinations with other models etc. There might be limitations of the model such as reduced accuracy under specific circumstances. Please note all those limitations you know of so a potential user won't make too serious mistakes

Dynamics

Describe which states and dynamics are present in the model and which parameters may be used to influence them. This need not be added in partial classes.

Validation

Describe whether the validation was done using analytical validation, comparative model validation or empirical validation.

Parameters

TypeNameDefaultDescription
AixLib.DataBase.Pumps.PumpPolynomialBased.PumpBaseRecordpumpParamAixLib.DataBase.Pumps.PumpPolynomialBased.PumpBaseRecord()pump parameter record
Modelica.Units.SI.Densityrho_defaultMedium.density_pTX(p = Medium.p_default, T = Medium.T_default, X = Medium.X_default)Default medium density
Nominal design point › Design point of pump. Used for start value calculation.
RealQnom0.67*max(pumpParam.maxMinSpeedCurves[:, 1])Nominal volume flow rate in m³/h (~0.67*Qmax). Qmax is taken from pumpParam.maxMinSpeedCurves.
Modelica.Units.NonSI.AngularVelocity_rpmNnomModelica.Math.Vectors.interpolate(x = pumpParam.maxMinSpeedCurves[:, 1], y = pumpParam.maxMinSpeedCurves[:, 2], xi = Qnom)Pump speed in design point (Qnom,Hnom). Default is maximum speed at Qnom from pumpParam.maxMinSpeedCurves. Note that N is defined only on [nMin, nMax]. Due to power limitation N might be smaller than nMax for higher Q.
Modelica.Units.SI.HeightHnomAixLib.Fluid.Movers.PumpsPolynomialBased.BaseClasses.polynomial2D(pumpParam.cHQN, Qnom, Nnom)Nominal pump head in m (water). Will by default be calculated automatically from Qnom and Nnom. If you change the value make sure to also set a feasible Qnom.
Initialization › Pressure
Modelica.Units.SI.HeightHstartHnom Start value of pump head. Will be used to initialize criticalDamping.
Modelica.Media.Interfaces.Types.AbsolutePressurep_startMedium.p_defaultStart value of pressure
Initialization › Temperature
Modelica.Media.Interfaces.Types.TemperatureT_startMedium.T_defaultStart value of temperature
Dynamics › Equations
Modelica.Fluid.Types.DynamicsenergyDynamicsModelica.Fluid.Types.Dynamics.DynamicFreeInitialType of energy balance: dynamic (3 initialization options) or steady state
Modelica.Fluid.Types.DynamicsmassDynamicsenergyDynamicsType of mass balance: dynamic (3 initialization options) or steady state
Assumptions
Modelica.Units.SI.VolumeV0Volume inside the pump
General › Power and Efficiency
BooleancalculatePowertruecalc. power consumption?
BooleancalculateEfficiencyfalsecalc. efficency? (eta = f(H, Q, P))

Components

TypeNameDefaultDescription
Modelica.Units.SI.PressureDifferencedp_pumpPressure increase
Modelica.Blocks.Interfaces.RealOutputheadPump head
Modelica.Blocks.Interfaces.RealOutputnlimited pump speed calculated from volume flow and head n=f(Q,H)
Modelica.Blocks.Interfaces.RealOutputpowerelectical power
Modelica.Blocks.Interfaces.RealOutputetaefficiency
Modelica.Blocks.Sources.RealExpressionVflow_m3hconversion of mass flow rate to volume flow rate
Modelica.Blocks.Tables.CombiTable1DvmaxMinTableOutputs max [1] and min [2] pump speed for the current value of volume flow rate.
Modelica.Blocks.Routing.DeMultiplex2deMultiplex2Seperate max/min pump head curve signal
BaseClasses.VariableLimitervariableLimiterLimit pump speed to max/min curve
BaseClasses.PumpBuspumpBus
Modelica.Blocks.Logical.SwitchonOffHeadturns head variable off or on.
Modelica.Blocks.Logical.SwitchonOffnturns speed variable n off or on.
Modelica.Blocks.Sources.RealExpressionheadUnbound
AixLib.Fluid.Movers.BaseClasses.IdealSourceidealSource
MixingVolumes.MixingVolumevol

Contents

NameDescription
efficiencyCharacteristic

Revisions

  • 2019-09-18 by Alexander Kümpel:
    Renaming, restructuring and bug fixes.
  • 2018-05-08 by Peter Matthes:
    Changes initialization of criticalDamping to Types.Init.InitialOutput. "Noinit" could lead to always zero output.
  • 2018-03-12 by Peter Matthes:
    * Adds start values for m_flow and Vflow_m3h.
    * Removes assignment "Vflow_m3h(y=if noEvent(port_b.m_flow > 0) then 0 else -port_b.m_flow/medium.d*3600)".
    * Comments out an assert statement for positive mass flow as that will provoke events when pump gets turned off and lead to stalled simulations.
    * Adds min and max attribbutes to dp_pump, head, headUnbound, criticalDamping.y and m_flow and Vflow_m3h should help to avoid negative pump delivery head or mass flow.
  • 2018-03-01 by Peter Matthes:
    Improved parameter setup of pump model. Ordering in GUI, disabled some parameters that should be used not as input but rather as outputs (m_flow_start, p_a_start and p_b_start) and much more description in the parameter doc strings to help the user make better decisions.
  • 2018-02-01 by Peter Matthes:
    * When pump is turned off the model will also turn pump speed (n) off as well. So far the pump speed stayed at the lower limit given by the variableLimiter.
    * The pump speed n is mapped onto the bus as "rpm_Act".
    * RealOutput v_dot_m3h has been changed into a formula block with the signal now being Vflow_m3h.y. This change improves model checking, as the former RealOutput had not defining connection but rather an attached equation. Dymola was not able to correctly reckognize this and threw a warning. This would have reduced the ability to debug the code as futher checks by Dymola would be avoided at that point.
    * Fixes calculation of power and efficiency. As power values near zero were possible, eta could get insanely high values. power and eta are now limited to more sensible values. However, there is no transition between the lowest possible value and zero any more. If that behaviour would be needed try implementing a transition function.
  • 2018-01-30 by Peter Matthes:
    * Renamed speed controlled pump model (red) from PumpNbound into PumpN as well as PumpPhysicsNbound into PumpPhysicsN. "N" stands for pump speed.
    * Moved efficiencyCharacteristic package directly into BaseClasses. This is due to moving the older pump model and depencencies into the Deprecated folder.
  • 2018-01-29 by Peter Matthes:
    * Removes parameter useABCcurves as that is the default to calculate speed and is only needed in the blue pump (PumpH) to calculate power from speed and volume flow. Currently there is no other way to compute speed other than inverting function H = f(Q,N) . This can only be done with the quadratic ABC formula. Therefore, an assert statement has been implemented instead to give a warning when you want to compute power but you use more that the ABC coefficients in cHQN.
    * Removes parameter Nnom and replaces it with Nstart. As discussed with Wilo Nnom is not very useful and it can be replaced with a start value. The default value has been lowered to a medium speed to avoid collision with the speed/power limitation. For most pumps the maximum speed is limited for increasing volume flows to avoid excess power consumption.
    * Increases Qnom from 0.5*Qmax to 0.67*Qmax as this would be a more realistic value.
  • 2018-01-26 by Peter Matthes:
    Changes Nnom from 80 % to 100 % of Nmax.
  • 2018-01-16 by Peter Matthes:
    Fixes power and efficiency calculation by using truth value " n >= pumpParam.nMin*0.9 and  pumpBus.onOff_Input" instead of "head > 0.0".
  • 2018-01-15 by Peter Matthes:
    Changes minimum mass flow rate in ports to +/- 1.5*max (pumpParam.maxMinSpeedCurves[:, 1]) in order to reduce search space.
  • 2017-12-13 by Peter Matthes:
    Adds assertions to check for unset pump record and improves the checks for cHQN matrix.
  • 2017-12-12 by Peter Matthes:
    * Changed Qnom from 1 m³/h to " 0.5*max (pumpParam.maxMinSpeedCurves[:,1])".
    * Changed parameter name n_start to Nnom as it was only used to determin Hnom.
    * Changed m_flow_start value from 1 to "Qnom* Medium.density_pTX (p_b_start, T_start, X_start)/3600".
    * Changed p_b_start from system.p_start to "p_a_start + Hnom*system.g_n* Medium.density_pTX (p_b_start, T_start, X_start)" and changed p_start in medium state to p_b_start.
    * Added assertions to check initialization parameters.
  • 2017-12-01 by Peter Matthes:
    Implemented.