Buildings.Templates.Components.Loads

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
Buildings.Templates.Components.Loads.Load Load Model of a load on a hydronic circuit
Buildings.Templates.Components.Loads.LoadTwoWayValve LoadTwoWayValve Model of a load on a hydronic circuit with flow rate modulation by a two-way valve

Buildings.Templates.Components.Loads.Load Buildings.Templates.Components.Loads.Load

Model of a load on a hydronic circuit

Buildings.Templates.Components.Loads.Load

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

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
replaceable package MediumAirBuildings.Media.AirMedium model for air
replaceable package MediumLiqBuildings.Media.WaterMedium model for liquid (CHW or HHW)
Controltyp Load type
MassFlowRatemLiq_flow_nominal1Liquid mass flow rate at design conditions [kg/s]
PressureDifferencedpLiq_nominal0Liquid pressure drop at design conditions [Pa]
MassFlowRatemAir_flow_nominalabs(Q_flow_nominal)/10/cpAir...Air mass flow rate at design conditions [kg/s]
TemperatureTAirEnt_nominalif typ == Buildings.Fluid.Hy...Air entering temperature at design conditions [K]
MassFractionphiAirEnt_nominal0.5Air entering relative humidity at design conditions [1]
TemperatureTLiqEnt_nominalif typ == Buildings.Fluid.Hy...Liquid entering temperature at design conditions [K]
TemperatureTLiqLvg_nominalTLiqEnt_nominal + (if typ ==...Liquid leaving temperature at design conditions [K]
Realu_min0.1Minimum fan speed [1]
Nominal condition
MassFlowRatem_flow_nominalmLiq_flow_nominalNominal mass flow rate [kg/s]
Valve controller
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller
Realk0.1Gain of controller
RealTi10Time constant of integrator block [s]
RealTd0.1Time constant of derivative block [s]
Assumptions
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state

Connectors

TypeNameDescription
replaceable package MediumMedium in the component
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
replaceable package MediumAirMedium model for air
replaceable package MediumLiqMedium model for liquid (CHW or HHW)
input RealInputuFraction of design load
input BooleanInputu1System enable
output RealOutputyValValve demand signal [1]
output RealOutputdTLiqLiquid deltaT [K]
output RealOutputQ_flowTotal heat flow rate transferred to the load [W]
output RealOutputyLoa_actualActual load fraction met [1]

Modelica definition

model Load "Model of a load on a hydronic circuit" extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( redeclare final package Medium=MediumLiq, final m_flow_nominal=mLiq_flow_nominal); replaceable package MediumAir = Buildings.Media.Air "Medium model for air"; replaceable package MediumLiq = Buildings.Media.Water "Medium model for liquid (CHW or HHW)"; parameter Buildings.Fluid.HydronicConfigurations.Types.Control typ "Load type"; parameter Modelica.Units.SI.MassFlowRate mLiq_flow_nominal = 1 "Liquid mass flow rate at design conditions"; parameter Modelica.Units.SI.PressureDifference dpLiq_nominal = 0 "Liquid pressure drop at design conditions"; parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal = abs(Q_flow_nominal) / 10 / cpAir_nominal "Air mass flow rate at design conditions"; parameter Modelica.Units.SI.Temperature TAirEnt_nominal = if typ == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating then 20 + 273.15 else 26 + 273.15 "Air entering temperature at design conditions"; parameter Modelica.Units.SI.MassFraction phiAirEnt_nominal = 0.5 "Air entering relative humidity at design conditions"; final parameter Modelica.Units.SI.MassFraction XAirEnt_nominal = Buildings.Utilities.Psychrometrics.Functions.X_pTphi( MediumAir.p_default, TAirEnt_nominal, phiAirEnt_nominal) "Air entering water mass fraction at design conditions (kg/kg air)"; final parameter Modelica.Units.SI.MassFraction xAirEnt_nominal = XAirEnt_nominal / (1 - XAirEnt_nominal) "Air entering humidity ratio at design conditions (kg/kg dry air)"; parameter Modelica.Units.SI.Temperature TLiqEnt_nominal = if typ == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating then 60 + 273.15 else 7 + 273.15 "Liquid entering temperature at design conditions"; parameter Modelica.Units.SI.Temperature TLiqLvg_nominal = TLiqEnt_nominal + (if typ == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating then -10 else +5) "Liquid leaving temperature at design conditions"; 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 "Transmitted heat flow rate at design conditions"; parameter Real u_min( max=1, min=0, unit="1")=0.1 "Minimum fan speed"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType = Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real k(min=100*Modelica.Constants.eps)=0.1 "Gain of controller"; parameter Real Ti(unit="s")=10 "Time constant of integrator block"; parameter Real Td(unit="s")=0.1 "Time constant of derivative block"; parameter Modelica.Fluid.Types.Dynamics energyDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; Buildings.Controls.OBC.CDL.Interfaces.RealInput u "Fraction of design load"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1 "System enable"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yVal(final unit="1") "Valve demand signal"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput dTLiq( final unit="K", displayUnit="K") "Liquid deltaT"; Buildings.Fluid.Sources.Boundary_pT outAir( redeclare final package Medium=MediumAir, nPorts=1) "Pressure boundary condition at coil outlet"; Buildings.Fluid.Sensors.TemperatureTwoPort TAirLvg( redeclare final package Medium=MediumAir, final m_flow_nominal=mAir_flow_nominal, T_start=TAirEnt_nominal) "Leaving air temperature sensor"; 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) "Coil"; 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) "Source for entering air"; Buildings.Controls.OBC.Utilities.PIDWithEnable conPID( final controllerType=controllerType, final k=k, final Ti=Ti, final Td=Td, final reverseActing=true) "Controller"; Buildings.Fluid.Sensors.TemperatureTwoPort TLiqEnt( redeclare final package Medium=MediumLiq, final m_flow_nominal=mLiq_flow_nominal, T_start=TLiqEnt_nominal) "Entering liquid temperature sensor"; Buildings.Fluid.Sensors.TemperatureTwoPort TLiqLvg( redeclare final package Medium=MediumLiq, final m_flow_nominal=mLiq_flow_nominal, T_start=TLiqEnt_nominal) "Leaving liquid temperature sensor"; Buildings.Controls.OBC.CDL.Reals.Subtract dT "Compute deltaT"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput Q_flow(final unit="W") "Total heat flow rate transferred to the load"; Modelica.Blocks.Sources.RealExpression heaFlo(y=coi.Q2_flow) "Access coil heat flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yLoa_actual(final unit="1") "Actual load fraction met"; Modelica.Blocks.Sources.RealExpression loaFra(y=Q_flow / Q_flow_nominal) "Compute actual load fraction"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant uMin(final k=u_min) "Minimum speed"; Buildings.Controls.OBC.CDL.Reals.Max max1 "Maximum of control signal and minimum speed"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal enaRea "Cast enable signal to real"; Buildings.Controls.OBC.CDL.Reals.Multiply mul "Zero out control signal if system is disabled"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter modMAir( k=mAir_flow_nominal) "Scale with design flow"; protected final parameter Modelica.Units.SI.SpecificHeatCapacity cpLiq_nominal = MediumLiq.specificHeatCapacityCp( MediumLiq.setState_pTX(p=MediumLiq.p_default, T=TLiqEnt_nominal)) "Liquid specific heat capacity at design conditions"; 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})) "Air specific heat capacity at design conditions"; 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;

Buildings.Templates.Components.Loads.LoadTwoWayValve Buildings.Templates.Components.Loads.LoadTwoWayValve

Model of a load on a hydronic circuit with flow rate modulation by a two-way valve

Buildings.Templates.Components.Loads.LoadTwoWayValve

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

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
replaceable package MediumAirBuildings.Media.AirMedium model for air
replaceable package MediumLiqBuildings.Media.WaterMedium model for liquid (CHW or HHW)
Controltyp Load type
MassFlowRatemLiq_flow_nominal1Liquid mass flow rate at design conditions [kg/s]
PressureDifferencedpTer_nominal3E4Liquid pressure drop across terminal unit at design conditions [Pa]
MassFlowRatemAir_flow_nominalabs(Q_flow_nominal)/10/1015Air mass flow rate at design conditions [kg/s]
TemperatureTAirEnt_nominalif typ == Buildings.Fluid.Hy...Air entering temperature at design conditions [K]
MassFractionphiAirEnt_nominal0.5Air entering relative humidity at design conditions [1]
TemperatureTLiqEnt_nominalif typ == Buildings.Fluid.Hy...Liquid entering temperature at design conditions [K]
TemperatureTLiqLvg_nominalTLiqEnt_nominal + (if typ ==...Liquid leaving temperature at design conditions [K]
Realu_min0.1Minimum fan speed [1]
Nominal condition
MassFlowRatem_flow_nominalmLiq_flow_nominalNominal mass flow rate [kg/s]
Control valve
PressureDifferencedpValve_nominaldpTer_nominalControl valve pressure drop at design conditions [Pa]
Balancing valves
PressureDifferencedpBal1_nominal0Balancing valve pressure drop at design conditions [Pa]
Valve controller
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller
Realk0.1Gain of controller
RealTi10Time constant of integrator block [s]
RealTd0.1Time constant of derivative block [s]
Assumptions
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state

Connectors

TypeNameDescription
replaceable package MediumMedium in the component
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
replaceable package MediumAirMedium model for air
replaceable package MediumLiqMedium model for liquid (CHW or HHW)
input RealInputuFraction of design load
input BooleanInputu1System enable
output RealOutputyLoa_actualActual load fraction met [1]
output RealOutputQ_flowTotal heat flow rate transferred to the load [W]
output RealOutputyVal_actualValve position feedback [1]

Modelica definition

model LoadTwoWayValve "Model of a load on a hydronic circuit with flow rate modulation by a two-way valve" extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( redeclare final package Medium=MediumLiq, final m_flow_nominal=mLiq_flow_nominal); replaceable package MediumAir = Buildings.Media.Air "Medium model for air"; replaceable package MediumLiq = Buildings.Media.Water "Medium model for liquid (CHW or HHW)"; parameter Buildings.Fluid.HydronicConfigurations.Types.Control typ "Load type"; parameter Modelica.Units.SI.MassFlowRate mLiq_flow_nominal = 1 "Liquid mass flow rate at design conditions"; parameter Modelica.Units.SI.PressureDifference dpTer_nominal(displayUnit="Pa") =3E4 "Liquid pressure drop across terminal unit at design conditions"; parameter Modelica.Units.SI.PressureDifference dpValve_nominal( displayUnit="Pa") = dpTer_nominal "Control valve pressure drop at design conditions"; parameter Modelica.Units.SI.PressureDifference dpBal1_nominal(displayUnit= "Pa")=0 "Balancing valve pressure drop at design conditions"; parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal = abs(Q_flow_nominal) / 10 / 1015 "Air mass flow rate at design conditions"; parameter Modelica.Units.SI.Temperature TAirEnt_nominal = if typ == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating then 20 + 273.15 else 26 + 273.15 "Air entering temperature at design conditions"; parameter Modelica.Units.SI.MassFraction phiAirEnt_nominal = 0.5 "Air entering relative humidity at design conditions"; parameter Modelica.Units.SI.Temperature TLiqEnt_nominal = if typ == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating then 60 + 273.15 else 7 + 273.15 "Liquid entering temperature at design conditions"; parameter Modelica.Units.SI.Temperature TLiqLvg_nominal = TLiqEnt_nominal + (if typ == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating then -10 else +5) "Liquid leaving temperature at design conditions"; 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 "Transmitted heat flow rate at design conditions"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType = Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real k(min=100*Modelica.Constants.eps)=0.1 "Gain of controller"; parameter Real Ti(unit="s")=10 "Time constant of integrator block"; parameter Real Td(unit="s")=0.1 "Time constant of derivative block"; parameter Real u_min( max=1, min=0, unit="1")=0.1 "Minimum fan speed"; parameter Modelica.Fluid.Types.Dynamics energyDynamics = Modelica.Fluid.Types.Dynamics.FixedInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; Buildings.Controls.OBC.CDL.Interfaces.RealInput u "Fraction of design load"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1 "System enable"; 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) "Load"; 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) "Throttle circuit connection"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yLoa_actual(final unit="1") "Actual load fraction met"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput Q_flow(final unit="W") "Total heat flow rate transferred to the load"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yVal_actual(final unit="1") "Valve position feedback"; 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;