Load models for validation
Information
This package contains models that represent thermal loads on hydronic
circuits. These models are designed for validation and testing purposes.
Extends from Modelica.Icons.VariantsPackage (Icon for package containing variants).
Package Content
| Name |
Description |
Load
|
Model of a load on a hydronic circuit |
LoadTwoWayValve
|
Model of a load on a hydronic circuit with flow rate modulation by a two-way valve |
Model of a load on a hydronic circuit
Information
This model represents a thermal load on a hydronic circuit, typically
a terminal unit with recirculating air such as a fan coil unit. It takes the
fraction of the design load u as input and returns the control
valve demand signal yVal as output.
Modeling assumptions
The design pressure drop on the source side may be specified with
the parameter dpLiq_nominal.
The inlet conditions on the load side are constant and equal
to the design conditions. The mass flow rate is modulated based on the input
signal u, with a minimum value of u_min.
Extends from Buildings.Fluid.Interfaces.PartialTwoPortInterface (Partial model with two ports and declaration of quantities that are used by many models).
Parameters
| Type | Name | Default | Description |
| replaceable package Medium | PartialMedium | Medium in the component |
| replaceable package MediumAir | Buildings.Media.Air | Medium model for air |
| replaceable package MediumLiq | Buildings.Media.Water | Medium model for liquid (CHW or HHW) |
| Control | typ | | Load type |
| MassFlowRate | mLiq_flow_nominal | 1 | Liquid mass flow rate at design conditions [kg/s] |
| PressureDifference | dpLiq_nominal | 0 | Liquid pressure drop at design conditions [Pa] |
| MassFlowRate | mAir_flow_nominal | abs(Q_flow_nominal)/10/cpAir... | Air mass flow rate at design conditions [kg/s] |
| Temperature | TAirEnt_nominal | if typ == Buildings.Fluid.Hy... | Air entering temperature at design conditions [K] |
| MassFraction | phiAirEnt_nominal | 0.5 | Air entering relative humidity at design conditions [1] |
| Temperature | TLiqEnt_nominal | if typ == Buildings.Fluid.Hy... | Liquid entering temperature at design conditions [K] |
| Temperature | TLiqLvg_nominal | TLiqEnt_nominal + (if typ ==... | Liquid leaving temperature at design conditions [K] |
| Real | u_min | 0.1 | Minimum fan speed [1] |
| Nominal condition |
| MassFlowRate | m_flow_nominal | mLiq_flow_nominal | Nominal mass flow rate [kg/s] |
| Valve controller |
| SimpleController | controllerType | Buildings.Controls.OBC.CDL.T... | Type of controller |
| Real | k | 0.1 | Gain of controller |
| Real | Ti | 10 | Time constant of integrator block [s] |
| Real | Td | 0.1 | Time constant of derivative block [s] |
| Assumptions |
| Boolean | allowFlowReversal | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
| Advanced |
| MassFlowRate | m_flow_small | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow [kg/s] |
| Diagnostics |
| Boolean | show_T | false | = true, if actual temperature at port is computed |
| Dynamics |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Connectors
| Type | Name | Description |
| replaceable package Medium | Medium in the component |
| FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
| FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
| replaceable package MediumAir | Medium model for air |
| replaceable package MediumLiq | Medium model for liquid (CHW or HHW) |
| input RealInput | u | Fraction of design load |
| input BooleanInput | u1 | System enable |
| output RealOutput | yVal | Valve demand signal [1] |
| output RealOutput | dTLiq | Liquid deltaT [K] |
| output RealOutput | Q_flow | Total heat flow rate transferred to the load [W] |
| output RealOutput | yLoa_actual | Actual load fraction met [1] |
Modelica definition
model Load
extends Buildings.Fluid.Interfaces.PartialTwoPortInterface(
redeclare final package Medium=
MediumLiq,
final m_flow_nominal=mLiq_flow_nominal);
replaceable package MediumAir =
Buildings.Media.Air ;
replaceable package MediumLiq =
Buildings.Media.Water
;
parameter Buildings.Fluid.HydronicConfigurations.Types.Control typ
;
parameter Modelica.Units.SI.MassFlowRate mLiq_flow_nominal = 1
;
parameter Modelica.Units.SI.PressureDifference dpLiq_nominal = 0
;
parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal =
abs(Q_flow_nominal) / 10 / cpAir_nominal
;
parameter Modelica.Units.SI.Temperature TAirEnt_nominal =
if typ == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating
then 20 + 273.15
else 26 + 273.15
;
parameter Modelica.Units.SI.MassFraction phiAirEnt_nominal = 0.5
;
final parameter Modelica.Units.SI.MassFraction XAirEnt_nominal =
Buildings.Utilities.Psychrometrics.Functions.X_pTphi(
MediumAir.p_default,
TAirEnt_nominal,
phiAirEnt_nominal)
;
final parameter Modelica.Units.SI.MassFraction xAirEnt_nominal =
XAirEnt_nominal / (1 - XAirEnt_nominal)
;
parameter Modelica.Units.SI.Temperature TLiqEnt_nominal =
if typ == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating
then 60 + 273.15
else 7 + 273.15
;
parameter Modelica.Units.SI.Temperature TLiqLvg_nominal =
TLiqEnt_nominal + (
if typ ==
Buildings.Fluid.HydronicConfigurations.Types.Control.Heating
then -10
else +5)
;
final parameter Modelica.Units.SI.HeatFlowRate Q_flow_nominal =
(
MediumLiq.specificEnthalpy_pTX(
MediumLiq.p_default,
TLiqEnt_nominal,
X=MediumLiq.X_default) -
MediumLiq.specificEnthalpy_pTX(
MediumLiq.p_default,
TLiqLvg_nominal,
X=MediumLiq.X_default)) * mLiq_flow_nominal
;
parameter Real u_min(
max=1,
min=0,
unit="1")=0.1
;
parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType =
Buildings.Controls.OBC.CDL.Types.SimpleController.PI
;
parameter Real k(min=100*Modelica.Constants.eps)=0.1
;
parameter Real Ti(unit="s")=10
;
parameter Real Td(unit="s")=0.1 ;
parameter Modelica.Fluid.Types.Dynamics energyDynamics =
Modelica.Fluid.Types.Dynamics.FixedInitial
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput u
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yVal(
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput dTLiq(
final unit="K",
displayUnit="K")
;
Buildings.Fluid.Sources.Boundary_pT outAir(
redeclare final package Medium=
MediumAir,
nPorts=1)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TAirLvg(
redeclare final package Medium=
MediumAir,
final m_flow_nominal=mAir_flow_nominal,
T_start=TAirEnt_nominal)
;
Buildings.Fluid.HeatExchangers.WetCoilEffectivenessNTU coi(
redeclare final package Medium1=
MediumLiq,
redeclare final package Medium2=
MediumAir,
final energyDynamics=energyDynamics,
final m1_flow_nominal=mLiq_flow_nominal,
final m2_flow_nominal=mAir_flow_nominal,
final dp1_nominal=dpLiq_nominal,
dp2_nominal=0,
configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow,
final use_Q_flow_nominal=true,
final Q_flow_nominal=Q_flow_nominal,
final T_a1_nominal=TLiqEnt_nominal,
final T_a2_nominal=TAirEnt_nominal,
final w_a2_nominal=xAirEnt_nominal)
;
Buildings.Fluid.Sources.MassFlowSource_T souAir(
redeclare final package Medium=
MediumAir,
final X={XAirEnt_nominal,1 - XAirEnt_nominal},
use_m_flow_in=true,
final T=TAirEnt_nominal,
nPorts=1)
;
Buildings.Controls.OBC.Utilities.PIDWithEnable conPID(
final controllerType=controllerType,
final k=k,
final Ti=Ti,
final Td=Td,
final reverseActing=true)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TLiqEnt(
redeclare final package Medium=
MediumLiq,
final m_flow_nominal=mLiq_flow_nominal,
T_start=TLiqEnt_nominal)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TLiqLvg(
redeclare final package Medium=
MediumLiq,
final m_flow_nominal=mLiq_flow_nominal,
T_start=TLiqEnt_nominal)
;
Buildings.Controls.OBC.CDL.Reals.Subtract dT
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput Q_flow(
final unit="W")
;
Modelica.Blocks.Sources.RealExpression heaFlo(y=coi.Q2_flow)
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yLoa_actual(
final unit="1")
;
Modelica.Blocks.Sources.RealExpression loaFra(y=Q_flow / Q_flow_nominal)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant uMin(
final k=u_min)
;
Buildings.Controls.OBC.CDL.Reals.Max max1
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal enaRea
;
Buildings.Controls.OBC.CDL.Reals.Multiply mul
;
Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter modMAir(
k=mAir_flow_nominal)
;
protected
final parameter Modelica.Units.SI.SpecificHeatCapacity cpLiq_nominal =
MediumLiq.specificHeatCapacityCp(
MediumLiq.setState_pTX(p=MediumLiq.p_default, T=TLiqEnt_nominal))
;
final parameter Modelica.Units.SI.SpecificHeatCapacity cpAir_nominal =
MediumAir.specificHeatCapacityCp(
MediumAir.setState_pTX(
p=MediumAir.p_default,
T=TLiqEnt_nominal,
X={XAirEnt_nominal, 1 - XAirEnt_nominal}))
;
initial equation
assert(
typ <> Buildings.Fluid.HydronicConfigurations.Types.Control.None
and typ <>
Buildings.Fluid.HydronicConfigurations.Types.Control.ChangeOver,
"In " +
getInstanceName() +
": The type of built-in controls cannot be None or Change-over: select any other valid option.");
equation
connect(souAir.ports[1], coi.port_a2);
connect(outAir.ports[1], TAirLvg.port_b);
connect(TAirLvg.port_a, coi.port_b2);
connect(conPID.y, yVal);
connect(port_a, TLiqEnt.port_a);
connect(TLiqEnt.port_b, coi.port_a1);
connect(coi.port_b1, TLiqLvg.port_a);
connect(TLiqLvg.port_b, port_b);
connect(dT.y, dTLiq);
connect(TLiqLvg.T, dT.u1);
connect(TLiqEnt.T, dT.u2);
connect(heaFlo.y, Q_flow);
connect(yLoa_actual, loaFra.y);
connect(u, conPID.u_s);
connect(loaFra.y, conPID.u_m);
connect(uMin.y, max1.u2);
connect(mul.y, modMAir.u);
connect(max1.y, mul.u2);
connect(enaRea.y, mul.u1);
connect(modMAir.y, souAir.m_flow_in);
connect(u1, conPID.uEna);
connect(u1, enaRea.u);
connect(conPID.y, max1.u1);
end Load;
Model of a load on a hydronic circuit with flow rate modulation by a two-way valve
Information
This model represents a thermal load on a hydronic circuit, composed
of
Buildings.Templates.Components.Loads.Load
and a two-way valve component that
is used to modulate the flow rate through the load component.
Extends from Buildings.Fluid.Interfaces.PartialTwoPortInterface (Partial model with two ports and declaration of quantities that are used by many models).
Parameters
| Type | Name | Default | Description |
| replaceable package Medium | PartialMedium | Medium in the component |
| replaceable package MediumAir | Buildings.Media.Air | Medium model for air |
| replaceable package MediumLiq | Buildings.Media.Water | Medium model for liquid (CHW or HHW) |
| Control | typ | | Load type |
| MassFlowRate | mLiq_flow_nominal | 1 | Liquid mass flow rate at design conditions [kg/s] |
| PressureDifference | dpTer_nominal | 3E4 | Liquid pressure drop across terminal unit at design conditions [Pa] |
| MassFlowRate | mAir_flow_nominal | abs(Q_flow_nominal)/10/1015 | Air mass flow rate at design conditions [kg/s] |
| Temperature | TAirEnt_nominal | if typ == Buildings.Fluid.Hy... | Air entering temperature at design conditions [K] |
| MassFraction | phiAirEnt_nominal | 0.5 | Air entering relative humidity at design conditions [1] |
| Temperature | TLiqEnt_nominal | if typ == Buildings.Fluid.Hy... | Liquid entering temperature at design conditions [K] |
| Temperature | TLiqLvg_nominal | TLiqEnt_nominal + (if typ ==... | Liquid leaving temperature at design conditions [K] |
| Real | u_min | 0.1 | Minimum fan speed [1] |
| Nominal condition |
| MassFlowRate | m_flow_nominal | mLiq_flow_nominal | Nominal mass flow rate [kg/s] |
| Control valve |
| PressureDifference | dpValve_nominal | dpTer_nominal | Control valve pressure drop at design conditions [Pa] |
| Balancing valves |
| PressureDifference | dpBal1_nominal | 0 | Balancing valve pressure drop at design conditions [Pa] |
| Valve controller |
| SimpleController | controllerType | Buildings.Controls.OBC.CDL.T... | Type of controller |
| Real | k | 0.1 | Gain of controller |
| Real | Ti | 10 | Time constant of integrator block [s] |
| Real | Td | 0.1 | Time constant of derivative block [s] |
| Assumptions |
| Boolean | allowFlowReversal | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
| Advanced |
| MassFlowRate | m_flow_small | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow [kg/s] |
| Diagnostics |
| Boolean | show_T | false | = true, if actual temperature at port is computed |
| Dynamics |
| Conservation equations |
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Connectors
| Type | Name | Description |
| replaceable package Medium | Medium in the component |
| FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
| FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
| replaceable package MediumAir | Medium model for air |
| replaceable package MediumLiq | Medium model for liquid (CHW or HHW) |
| input RealInput | u | Fraction of design load |
| input BooleanInput | u1 | System enable |
| output RealOutput | yLoa_actual | Actual load fraction met [1] |
| output RealOutput | Q_flow | Total heat flow rate transferred to the load [W] |
| output RealOutput | yVal_actual | Valve position feedback [1] |
Modelica definition
model LoadTwoWayValve
extends Buildings.Fluid.Interfaces.PartialTwoPortInterface(
redeclare final package Medium=
MediumLiq,
final m_flow_nominal=mLiq_flow_nominal);
replaceable package MediumAir =
Buildings.Media.Air ;
replaceable package MediumLiq =
Buildings.Media.Water
;
parameter Buildings.Fluid.HydronicConfigurations.Types.Control typ
;
parameter Modelica.Units.SI.MassFlowRate mLiq_flow_nominal = 1
;
parameter Modelica.Units.SI.PressureDifference dpTer_nominal(displayUnit="Pa")
=3E4
;
parameter Modelica.Units.SI.PressureDifference dpValve_nominal(
displayUnit="Pa") = dpTer_nominal
;
parameter Modelica.Units.SI.PressureDifference dpBal1_nominal(displayUnit=
"Pa")=0
;
parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal =
abs(Q_flow_nominal) / 10 / 1015
;
parameter Modelica.Units.SI.Temperature TAirEnt_nominal =
if typ == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating
then 20 + 273.15
else 26 + 273.15
;
parameter Modelica.Units.SI.MassFraction phiAirEnt_nominal = 0.5
;
parameter Modelica.Units.SI.Temperature TLiqEnt_nominal =
if typ == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating
then 60 + 273.15
else 7 + 273.15
;
parameter Modelica.Units.SI.Temperature TLiqLvg_nominal =
TLiqEnt_nominal + (
if typ ==
Buildings.Fluid.HydronicConfigurations.Types.Control.Heating
then -10
else +5)
;
final parameter Modelica.Units.SI.HeatFlowRate Q_flow_nominal =
(
MediumLiq.specificEnthalpy_pTX(
MediumLiq.p_default,
TLiqEnt_nominal,
X=MediumLiq.X_default) -
MediumLiq.specificEnthalpy_pTX(
MediumLiq.p_default,
TLiqLvg_nominal,
X=MediumLiq.X_default)) * mLiq_flow_nominal
;
parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType =
Buildings.Controls.OBC.CDL.Types.SimpleController.PI
;
parameter Real k(min=100*Modelica.Constants.eps)=0.1
;
parameter Real Ti(unit="s")=10
;
parameter Real Td(unit="s")=0.1 ;
parameter Real u_min(
max=1,
min=0,
unit="1")=0.1
;
parameter Modelica.Fluid.Types.Dynamics energyDynamics =
Modelica.Fluid.Types.Dynamics.FixedInitial
;
Buildings.Controls.OBC.CDL.Interfaces.RealInput u
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1
;
Buildings.Templates.Components.Loads.Load loa(
redeclare final package MediumAir=
MediumAir,
redeclare final package MediumLiq=
MediumLiq,
final typ=typ,
final mLiq_flow_nominal=mLiq_flow_nominal,
final dpLiq_nominal=0,
final mAir_flow_nominal=mAir_flow_nominal,
final TAirEnt_nominal=TAirEnt_nominal,
final phiAirEnt_nominal=phiAirEnt_nominal,
final TLiqEnt_nominal=TLiqEnt_nominal,
final TLiqLvg_nominal=TLiqLvg_nominal,
final u_min=u_min,
final controllerType=controllerType,
final k=k,
final Ti=Ti,
final Td=Td,
final energyDynamics=energyDynamics)
;
Buildings.Fluid.HydronicConfigurations.ActiveNetworks.Throttle con(
redeclare final package Medium=
MediumLiq,
final use_siz=false,
final dp2_nominal=dpTer_nominal,
final m2_flow_nominal=m_flow_nominal,
final dpValve_nominal=dpValve_nominal,
final dpBal1_nominal=dpBal1_nominal,
use_lumFloRes=true,
final energyDynamics=energyDynamics)
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yLoa_actual(
final unit="1")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput Q_flow(
final unit="W")
;
Buildings.Controls.OBC.CDL.Interfaces.RealOutput yVal_actual(
final unit="1")
;
equation
connect(port_a, con.port_a1);
connect(con.port_b1, port_b);
connect(con.port_b2, loa.port_a);
connect(con.port_a2, loa.port_b);
connect(loa.yVal, con.yVal);
connect(u, loa.u);
connect(loa.yLoa_actual, yLoa_actual);
connect(loa.Q_flow, Q_flow);
connect(con.yVal_actual, yVal_actual);
connect(u1, loa.u1);
end LoadTwoWayValve;