Buildings.Fluid.HeatExchangers.ThermalWheels.Latent

Package with enthalpy recovery wheels

Information

This package contains component models for enthalpy recovery wheels.

Extends from Modelica.Icons.Package (Icon for standard packages).

Package Content

Name Description
Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.BypassDampers BypassDampers Enthalpy recovery wheel with bypass dampers
Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.SpeedControlled SpeedControlled Enthalpy recovery wheel with a variable speed drive
Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.Examples Examples Collection of models that illustrate model use and test models
Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.Validation Validation Collection of validation models
Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.BaseClasses BaseClasses Package with base classes for enthalpy recovery devices

Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.BypassDampers Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.BypassDampers

Enthalpy recovery wheel with bypass dampers

Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.BypassDampers

Information

Model of an enthalpy recovery wheel, which consists of a heat exchanger and two dampers to bypass the supply and exhaust airflow.

This model does not require geometric data. The performance is defined by specifying the part load (75% of the nominal supply flow rate) and nominal sensible and latent heat exchanger effectiveness. This operation of the wheel is configured as follows.

Extends from Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.BaseClasses.PartialWheel (Partial model for enthalpy recovery wheel).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialCondensingGasesAir
Genericper Record with performance data
PressureDifferencedpDamper_nominal20Nominal pressure drop of dampers [Pa]
Assumptions
BooleanallowFlowReversal1true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1
BooleanallowFlowReversal2true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2
Flow resistance
Medium 1
Booleanfrom_dp1true= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistance1false= true, use linear relation between m_flow and dp for any flow rate
Medium 2
Booleanfrom_dp2true= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistance2false= true, use linear relation between m_flow and dp for any flow rate
Dynamics
Actuator position
Booleanuse_strokeTimetrueSet to true to continuously open and close valve using strokeTime
TimestrokeTime120Time needed to fully open or close actuator [s]
InitinitModelica.Blocks.Types.Init.I...Type of initialization of dampers (no init/steady state/initial state/initial output)
RealyByp_start1Initial position of bypass actuators

Connectors

TypeNameDescription
output RealOutputPElectric power consumption [W]
output RealOutputepsSenSensible heat exchanger effectiveness [1]
output RealOutputepsLatLatent heat exchanger effectiveness [1]
FluidPort_aport_a1Fluid connector a1 of the supply air (positive design flow direction is from port_a1 to port_b1)
FluidPort_bport_b2Fluid connector b2 of the exhaust air (positive design flow direction is from port_a2 to port_b2)
FluidPort_bport_b1Fluid connector b1 of the supply air (positive design flow direction is from port_a1 to port_b1)
FluidPort_aport_a2Fluid connector a2 of the exhaust air (positive design flow direction is from port_a2 to port_b2)
input RealInputuBypDamPosBypass damper position [1]
input BooleanInputuRotTrue when the wheel is operating

Modelica definition

model BypassDampers "Enthalpy recovery wheel with bypass dampers" extends Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.BaseClasses.PartialWheel( from_dp1=true, from_dp2=true, hex(final dp1_nominal=0, final dp2_nominal=0) "Hex dp is lumped in damper"); parameter Modelica.Units.SI.PressureDifference dpDamper_nominal(displayUnit="Pa") = 20 "Nominal pressure drop of dampers"; parameter Boolean use_strokeTime=true "Set to true to continuously open and close valve using strokeTime"; parameter Modelica.Units.SI.Time strokeTime=120 "Time needed to fully open or close actuator"; parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput "Type of initialization of dampers (no init/steady state/initial state/initial output)"; parameter Real yByp_start=1 "Initial position of bypass actuators"; Buildings.Controls.OBC.CDL.Interfaces.RealInput uBypDamPos( final unit="1", final min=0, final max=1) "Bypass damper position"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uRot "True when the wheel is operating"; Buildings.Fluid.Actuators.Dampers.Exponential bypDamSup( redeclare package Medium = Medium, final allowFlowReversal=allowFlowReversal1, final m_flow_nominal=per.mSup_flow_nominal, final from_dp=from_dp1, final linearized=linearizeFlowResistance1, final use_strokeTime=use_strokeTime, final strokeTime=strokeTime, final init=init, final y_start=yByp_start, final dpDamper_nominal=dpDamper_nominal) "Supply air bypass damper"; Buildings.Fluid.Actuators.Dampers.Exponential damSup( redeclare package Medium = Medium, final allowFlowReversal=allowFlowReversal1, final m_flow_nominal=per.mSup_flow_nominal, final from_dp=from_dp1, final linearized=linearizeFlowResistance1, final use_strokeTime=use_strokeTime, final strokeTime=strokeTime, final init=init, y_start=1-yByp_start, final dpDamper_nominal=dpDamper_nominal, final dpFixed_nominal=per.dpSup_nominal) "Supply air damper"; Buildings.Fluid.Actuators.Dampers.Exponential damExh( redeclare package Medium = Medium, final allowFlowReversal=allowFlowReversal2, final m_flow_nominal=per.mExh_flow_nominal, final from_dp=from_dp2, final linearized=linearizeFlowResistance2, final use_strokeTime=use_strokeTime, final strokeTime=strokeTime, final init=init, y_start=1-yByp_start, final dpDamper_nominal=dpDamper_nominal, final dpFixed_nominal=per.dpExh_nominal) "Exhaust air damper"; Buildings.Fluid.Actuators.Dampers.Exponential bypDamExh( redeclare package Medium = Medium, final allowFlowReversal=allowFlowReversal2, final m_flow_nominal=per.mExh_flow_nominal, final from_dp=from_dp2, final linearized=linearizeFlowResistance2, final use_strokeTime=use_strokeTime, final strokeTime=strokeTime, final init=init, final y_start=yByp_start, final dpDamper_nominal=dpDamper_nominal) "Exhaust air bypass damper"; Buildings.Controls.OBC.CDL.Reals.Switch swiEpsSen "Switch the sensible heat exchanger effectiveness based on the wheel operation status"; Buildings.Controls.OBC.CDL.Reals.Switch swiEpsLat "Switch the latent heat exchanger effectiveness based on the wheel operation status"; protected Modelica.Blocks.Sources.Constant uni( final k=1) "Unity signal"; Buildings.Controls.OBC.CDL.Reals.Subtract sub "Difference of the two inputs"; Modelica.Blocks.Math.BooleanToReal PEle( final realTrue=per.P_nominal, final realFalse=0) "Electric power consumption for motor"; Modelica.Blocks.Sources.Constant zero(final k=0) "Zero signal"; initial equation assert(not per.have_varSpe, "In " + getInstanceName() + ": The performance data record is wrong, the variable speed flag must be false", level=AssertionLevel.error) "Check if the performance data record is correct"; equation connect(sub.y, damSup.y); connect(damExh.y,sub. y); connect(bypDamSup.y, uBypDamPos); connect(damSup.port_b, hex.port_a1); connect(bypDamExh.y, uBypDamPos); connect(sub.u2, uBypDamPos); connect(uni.y, sub.u1); connect(PEle.y, P); connect(damSup.port_a, port_a1); connect(damExh.port_b, hex.port_a2); connect(bypDamExh.port_b, port_b2); connect(damExh.port_a, port_a2); connect(bypDamExh.port_a, port_a2); connect(bypDamSup.port_b, port_b1); connect(bypDamSup.port_a, port_a1); connect(zero.y,swiEpsSen. u3); connect(swiEpsLat.u3, zero.y); connect(effCal.epsSen,swiEpsSen. u1); connect(effCal.epsLat,swiEpsLat. u1); connect(swiEpsSen.u2, uRot); connect(swiEpsLat.u2, uRot); connect(swiEpsSen.y, hex.epsSen); connect(swiEpsLat.y, hex.epsLat); connect(swiEpsSen.y, epsSen); connect(swiEpsLat.y, epsLat); connect(PEle.u, uRot); end BypassDampers;

Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.SpeedControlled Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.SpeedControlled

Enthalpy recovery wheel with a variable speed drive

Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.SpeedControlled

Information

Model of an enthalpy recovery wheel, which has the wheel speed as the input to control the heat recovery.

This model does not require geometric data. The performance is defined by specifying the part load (75% of the nominal supply flow rate) and nominal sensible and latent heat exchanger effectiveness.

The operation of the heat recovery wheel is adjustable by modulating the wheel speed. See details about the impacts of the wheel speed in Buildings.Fluid.HeatExchangers.ThermalWheels.BaseClasses.SpeedCorrectionLatent.

Extends from Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.BaseClasses.PartialWheel (Partial model for enthalpy recovery wheel).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialCondensingGasesAir
Genericper Record with performance data
Assumptions
BooleanallowFlowReversal1true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1
BooleanallowFlowReversal2true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2
Flow resistance
Medium 1
Booleanfrom_dp1false= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistance1false= true, use linear relation between m_flow and dp for any flow rate
Medium 2
Booleanfrom_dp2false= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistance2false= true, use linear relation between m_flow and dp for any flow rate

Connectors

TypeNameDescription
output RealOutputPElectric power consumption [W]
output RealOutputepsSenSensible heat exchanger effectiveness [1]
output RealOutputepsLatLatent heat exchanger effectiveness [1]
FluidPort_aport_a1Fluid connector a1 of the supply air (positive design flow direction is from port_a1 to port_b1)
FluidPort_bport_b2Fluid connector b2 of the exhaust air (positive design flow direction is from port_a2 to port_b2)
FluidPort_bport_b1Fluid connector b1 of the supply air (positive design flow direction is from port_a1 to port_b1)
FluidPort_aport_a2Fluid connector a2 of the exhaust air (positive design flow direction is from port_a2 to port_b2)
input RealInputuSpeWheel speed ratio [1]

Modelica definition

model SpeedControlled "Enthalpy recovery wheel with a variable speed drive" extends Buildings.Fluid.HeatExchangers.ThermalWheels.Latent.BaseClasses.PartialWheel( hex( final dp1_nominal=per.dpSup_nominal, final dp2_nominal=per.dpExh_nominal)); Buildings.Controls.OBC.CDL.Interfaces.RealInput uSpe( final unit="1", final max=1) "Wheel speed ratio"; Buildings.Fluid.HeatExchangers.ThermalWheels.BaseClasses.SpeedCorrectionLatent speCor( final per=per) "Correct the wheel performance based on the wheel speed"; Buildings.Controls.OBC.CDL.Reals.Multiply mulSen "Correct the sensible heat exchanger effectiveness"; Buildings.Controls.OBC.CDL.Reals.Multiply mulLat "Correct the latent heat exchanger effectiveness"; initial equation assert(per.have_varSpe, "In " + getInstanceName() + ": The performance data record is wrong, the variable speed flag must be true", level=AssertionLevel.error) "Check if the performance data record is correct"; equation connect(hex.port_a2, port_a2); connect(hex.port_a1, port_a1); connect(speCor.epsSenCor, mulSen.u1); connect(speCor.epsLatCor, mulLat.u1); connect(effCal.epsSen, mulSen.u2); connect(effCal.epsLat, mulLat.u2); connect(mulSen.y, hex.epsSen); connect(hex.epsLat, mulLat.y); connect(mulSen.y, epsSen); connect(mulLat.y, epsLat); connect(speCor.P, P); connect(speCor.uSpe, uSpe); end SpeedControlled;