Buildings.DHC.Plants.Combined.Subsystems.Validation.BaseClasses
Package with base classes
Information
This package contains base classes that are used for validation purposes.
Extends from Modelica.Icons.BasesPackage (Icon for packages containing base classes).
Package Content
| Name | Description | 
|---|---|
|  PartialMultiplePumps | Base class for validating the multiple pumps model | 
 Buildings.DHC.Plants.Combined.Subsystems.Validation.BaseClasses.PartialMultiplePumps
Buildings.DHC.Plants.Combined.Subsystems.Validation.BaseClasses.PartialMultiplePumps
Base class for validating the multiple pumps model
 
Information
This base class is used to construct validation models for the various multiple-pump models within Buildings.DHC.Plants.Combined.Subsystems.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
| Type | Name | Default | Description | 
|---|---|---|---|
| Integer | nPum | 2 | Number of pumps | 
| Pressure | p_min | 2E5 | Circuit minimum pressure [Pa] | 
| PressureDifference | dp_nominal | dpPum_nominal | Circuit total pressure drop at design conditions [Pa] | 
| MultiplePumpsSpeed | pum | redeclare Buildings.DHC.Plan... | Multiple pumps in parallel - Speed controlled | 
| SpeedControlled_y | pum1 | redeclare Fluid.Movers.Speed... | Pump | 
| SpeedControlled_y | pum2 | redeclare Fluid.Movers.Speed... | Pump | 
| Nominal condition | |||
| MassFlowRate | mPum_flow_nominal | 1 | Pump mass flow rate (each pump) [kg/s] | 
| PressureDifference | dpPum_nominal | 1E5 | Pump head (each pump) [Pa] | 
Modelica definition
partial model PartialMultiplePumps
  "Base class for validating the multiple pumps model"
  extends Modelica.Icons.Example;
  package Medium = Buildings.Media.Water
    "Medium model for hot water";
  parameter Integer nPum(
    final min=1)=2
    "Number of pumps";
  parameter Modelica.Units.SI.MassFlowRate mPum_flow_nominal=1
    "Pump mass flow rate (each pump)";
  parameter Modelica.Units.SI.PressureDifference dpPum_nominal = 1E5
    "Pump head (each pump)";
  final parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=
    nPum * mPum_flow_nominal
    "Circuit mass flow rate at design conditions";
  parameter Modelica.Units.SI.Pressure p_min = 2E5
    "Circuit minimum pressure";
  parameter Modelica.Units.SI.PressureDifference dp_nominal = dpPum_nominal
    "Circuit total pressure drop at design conditions";
  Fluid.Sources.Boundary_pT bou(
    redeclare final package Medium = Medium,
    final p=p_min,
    nPorts=2)
    "Pressure boundary condition";
  replaceable Buildings.DHC.Plants.Combined.Subsystems.MultiplePumpsSpeed pum
    constrainedby Buildings.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps
                                                                             (
    redeclare final package Medium = Medium,
    final nPum=nPum,
    final mPum_flow_nominal=mPum_flow_nominal,
    final dpPum_nominal=dpPum_nominal,
    use_riseTime=false,
    energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
    "Multiple pumps in parallel - Speed controlled";
  Fluid.Sensors.RelativePressure senRelPre(redeclare package Medium = Medium)
    "Differential pressure sensor";
  Fluid.Sensors.MassFlowRate senMasFlo(redeclare package Medium = Medium)
    "Mass flow rate sensor";
  Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ope(
    height=0.8,
    duration=300,
    offset=0.2,
    startTime=200)
    "Valve opening signal";
  Fluid.Actuators.Valves.TwoWayEqualPercentage val(
    redeclare package Medium = Medium,
    m_flow_nominal=m_flow_nominal,
    dpValve_nominal=5000,
    dpFixed_nominal=dp_nominal - val.dpValve_nominal)
    "Modulating valve";
  Buildings.Controls.OBC.CDL.Logical.Sources.TimeTable y1Pum(
    table=[0,0,0; 1,0,0; 1,1,0; 4,1,1; 4,1,1; 10,1,1],
    timeScale=100,
    period=1000) "Pump Start signal";
  replaceable Fluid.Movers.SpeedControlled_y pum1 constrainedby Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine
                                                         (
    redeclare final package Medium = Medium,
    final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
    use_riseTime=false,
    final per=pum.per,
    addPowerToMedium=false) "Pump";
  Fluid.FixedResistances.CheckValve cheVal1(
    redeclare final package Medium = Medium,
    final m_flow_nominal=mPum_flow_nominal,
    final dpValve_nominal=pum.dpValve_nominal)
    "Check valve";
  replaceable Fluid.Movers.SpeedControlled_y pum2 constrainedby Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine
                                                         (
    redeclare final package Medium = Medium,
    energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
    use_riseTime=false,
    final per=pum.per,
    addPowerToMedium=false) "Pump";
  Fluid.FixedResistances.CheckValve cheVal2(
    redeclare final package Medium = Medium,
    final m_flow_nominal=mPum_flow_nominal,
    final dpValve_nominal=pum.dpValve_nominal)
    "Check valve";
  Fluid.Actuators.Valves.TwoWayEqualPercentage val1(
    redeclare package Medium = Medium,
    m_flow_nominal=m_flow_nominal,
    dpValve_nominal=5000,
    dpFixed_nominal=dp_nominal - val.dpValve_nominal)
    "Modulating valve";
  Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea[2]
    "Convert to real";
  Fluid.Sensors.RelativePressure senRelPre1(redeclare package Medium = Medium)
    "Differential pressure sensor";
  Fluid.Sensors.MassFlowRate senMasFlo1(redeclare package Medium = Medium)
    "Mass flow rate sensor";
  Buildings.Controls.OBC.CDL.Reals.Multiply inp1
    "Compute pump input signal";
  Buildings.Controls.OBC.CDL.Reals.Multiply inp2
    "Compute pump input signal";
equation 
  connect(bou.ports[1], pum.port_a);
  connect(val.port_b, pum.port_a);
  connect(pum.port_b, senRelPre.port_a);
  connect(ope.y, val.y);
  connect(y1Pum.y, pum.y1);
  connect(pum.port_b, senMasFlo.port_a);
  connect(senMasFlo.port_b, val.port_a);
  connect(senRelPre.port_b, pum.port_a);
  connect(pum1.port_b, cheVal1.port_a);
  connect(pum2.port_b, cheVal2.port_a);
  connect(val1.port_b, pum2.port_a);
  connect(val1.port_b, pum1.port_a);
  connect(val1.port_b, bou.ports[2]);
  connect(y1Pum.y, booToRea.u);
  connect(cheVal2.port_b, senMasFlo1.port_a);
  connect(senMasFlo1.port_b, val1.port_a);
  connect(cheVal1.port_b, senMasFlo1.port_a);
  connect(senRelPre1.port_a, senMasFlo1.port_a);
  connect(senRelPre1.port_b, pum2.port_a);
  connect(booToRea[1].y, inp1.u2);
  connect(ope.y, val1.y);
  connect(booToRea[2].y, inp2.u2);
end PartialMultiplePumps;
