From 878f29041fc9bfb4421efb485d8cf358e4b3f487 Mon Sep 17 00:00:00 2001 From: Huang <7q0@ornl.gov> Date: Sun, 5 Jan 2025 15:30:25 -0500 Subject: [PATCH 1/7] update the thermal wheel parameters and examples --- .../Validation/VariableSpeedThermalWheels.mo | 6 + .../ThermalWheels/Data/Generic.mo | 64 ++++++++--- .../Latent/BaseClasses/Effectiveness.mo | 76 ++----------- .../Latent/BaseClasses/PartialWheel.mo | 103 ++++-------------- .../BaseClasses/Validation/Effectiveness.mo | 67 +++--------- .../HeatExchangerWithInputEffectiveness.mo | 60 +++++++--- .../ThermalWheels/Latent/BypassDampers.mo | 23 ++-- .../Latent/Examples/SpaceCooling.mo | 16 +-- .../ThermalWheels/Latent/SpeedControlled.mo | 17 +-- .../Latent/Validation/BypassDampers.mo | 21 ++-- .../Latent/Validation/SpeedControlled.mo | 32 ++---- .../Sensible/BaseClasses/Effectiveness.mo | 51 +-------- .../Sensible/BaseClasses/PartialWheel.mo | 82 ++++---------- .../BaseClasses/Validation/Effectiveness.mo | 54 ++------- .../HeatExchangerWithInputEffectiveness.mo | 29 +++-- .../ThermalWheels/Sensible/BypassDampers.mo | 25 +++-- .../Sensible/Examples/SpaceCooling.mo | 15 ++- .../ThermalWheels/Sensible/SpeedControlled.mo | 12 +- .../Sensible/Validation/BypassDampers.mo | 15 ++- .../Sensible/Validation/SpeedControlled.mo | 18 ++- 20 files changed, 308 insertions(+), 478 deletions(-) diff --git a/Buildings/Fluid/HeatExchangers/ThermalWheels/BaseClasses/Validation/VariableSpeedThermalWheels.mo b/Buildings/Fluid/HeatExchangers/ThermalWheels/BaseClasses/Validation/VariableSpeedThermalWheels.mo index d60bf411932..1ba24a72345 100644 --- a/Buildings/Fluid/HeatExchangers/ThermalWheels/BaseClasses/Validation/VariableSpeedThermalWheels.mo +++ b/Buildings/Fluid/HeatExchangers/ThermalWheels/BaseClasses/Validation/VariableSpeedThermalWheels.mo @@ -4,18 +4,24 @@ model VariableSpeedThermalWheels extends Modelica.Icons.Example; parameter Buildings.Fluid.HeatExchangers.ThermalWheels.Data.ASHRAE perSenWhe( + mSup_flow_nominal=1, + mExh_flow_nominal=1, motorEfficiency(uSpe={0.1,0.6,0.8,1}, eta={0.3,0.8,0.85,1}), haveLatentHeatExchange=false, useDefaultMotorEfficiencyCurve=false) "Performance record for the sensible heat wheel" annotation (Placement(transformation(extent={{-80,74},{-60,94}}))); parameter Buildings.Fluid.HeatExchangers.ThermalWheels.Data.ASHRAE perLatWhe( + mSup_flow_nominal=1, + mExh_flow_nominal=1, motorEfficiency(uSpe={0.1,0.6,0.8,1}, eta={0.3,0.8,0.85,1}), haveLatentHeatExchange=true, useDefaultMotorEfficiencyCurve=false) "Performance record for the enthalpy wheel" annotation (Placement(transformation(extent={{-40,74},{-20,94}}))); parameter Buildings.Fluid.HeatExchangers.ThermalWheels.Data.ASHRAE perLatWheDefMotCur( + mSup_flow_nominal=1, + mExh_flow_nominal=1, haveLatentHeatExchange=true, useDefaultMotorEfficiencyCurve=true) "Performance record for the enthalpy wheel with default motor dataset" diff --git a/Buildings/Fluid/HeatExchangers/ThermalWheels/Data/Generic.mo b/Buildings/Fluid/HeatExchangers/ThermalWheels/Data/Generic.mo index 23ba96b0556..bc80b7378f5 100644 --- a/Buildings/Fluid/HeatExchangers/ThermalWheels/Data/Generic.mo +++ b/Buildings/Fluid/HeatExchangers/ThermalWheels/Data/Generic.mo @@ -1,37 +1,66 @@ within Buildings.Fluid.HeatExchangers.ThermalWheels.Data; -record Generic "Generic data record for variable-speed wheels" +record Generic "Generic data record for thermal wheels" extends Modelica.Icons.Record; + parameter Modelica.Units.SI.MassFlowRate mSup_flow_nominal + "Nominal supply air mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.MassFlowRate mExh_flow_nominal + "Nominal exhaust air mass flow rate" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpSup_nominal(displayUnit="Pa") = 500 + "Nominal supply air pressure drop across the heat exchanger" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.PressureDifference dpExh_nominal(displayUnit="Pa") = dpSup_nominal + "Nominal exhaust air pressure drop across the heat exchanger" + annotation (Dialog(group="Nominal condition")); parameter Real P_nominal(final unit="W")=100 - "Power consumption at the design condition"; + "Power consumption at the design condition" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Efficiency epsSen_nominal( + final max=1) = 0.8 + "Nominal sensible heat exchanger effectiveness" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Efficiency epsSenPL( + final max=1) = 0.75 + "Part load (75% of the nominal supply flow rate) sensible heat exchanger effectiveness" + annotation (Dialog(group="Part load effectiveness")); + parameter Modelica.Units.SI.Efficiency epsLat_nominal( + final max=1) = 0.8 + "Nominal latent heat exchanger effectiveness" + annotation (Dialog(group="Nominal condition")); + parameter Modelica.Units.SI.Efficiency epsLatPL( + final max=1) = 0.75 + "Part load (75% of the nominal supply mass flow rate) latent heat exchanger effectiveness" + annotation (Dialog(group="Part load effectiveness")); parameter Characteristics.HeatExchangerEffectiveness senHeatExchangeEffectiveness( uSpe={0}, epsCor={0.7}) "Multiplication factor for sensible heat exchange effectiveness due to wheel speed ratio between 0 and 1" - annotation (Dialog(group="Heat exchange effectiveness computation")); + annotation (Dialog(group="Heat exchange effectiveness computation", enable=haveVariableSpeed)); parameter Characteristics.HeatExchangerEffectiveness latHeatExchangeEffectiveness( uSpe={0}, epsCor={0.7}) "Multiplication factor for latent heat exchange effectiveness due to wheel speed ratio between 0 and 1" annotation ( - Dialog(group="Heat exchange effectiveness computation", enable= - haveLatentHeatExchange)); + Dialog(group="Heat exchange effectiveness computation", enable==haveLatentHeatExchange and haveVariableSpeed)); parameter Characteristics.MotorEfficiency motorEfficiency( uSpe={0}, eta={0.7}) "Motor efficiency versus wheel speed ratio" - annotation (Dialog(group="Power computation", enable=useDefaultMotorEfficiencyCurve == - false)); + annotation (Dialog(group="Power computation", enable=useDefaultMotorEfficiencyCurve and haveVariableSpeed)); final parameter Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters_yMot motorEfficiency_default=Buildings.Fluid.Movers.BaseClasses.Characteristics.motorEfficiencyCurve( P_nominal=P_nominal, eta_max=1) "Motor efficiency versus default wheel speed ratio" - annotation (Dialog(group="Power computation", enable=useDefaultMotorEfficiencyCurve == - true)); + annotation (Dialog(group="Power computation", enable=useDefaultMotorEfficiencyCurve and haveVariableSpeed)); parameter Boolean haveLatentHeatExchange = true "Set to true to compute latent heat exchange"; parameter Boolean useDefaultMotorEfficiencyCurve = true - "Set to true to use default motor efficiency curve"; + "Set to true to use default motor efficiency curve" + annotation (Dialog(enable=haveVariableSpeed)); + parameter Boolean haveVariableSpeed = true + "Set to true for the heat recovery wheel with a variable speed drive"; annotation ( defaultComponentPrefixes = "parameter", @@ -45,16 +74,21 @@ First implementation. ", info="

-Record containing power and heat exchange parameters for variable-speed thermal wheels. +Record containing power and heat exchange parameters for thermal wheels.

It is used as a template of performance data -for the variable-speed wheel models in +for the thermal wheel models in Buildings.Fluid.HeatExchangers.ThermalWheels.BaseClasses.

-The record contains four datasets: +The record contains the performance parameters of the thermal wheel, including +the performance parameters of the thermal wheel, such as the nominal mass flow rates, nominal pressure drops, +and the heat exchanger effectiveness at part load (75% of the nominal supply flow rate) and at nominal conditions. +

+

+For the variable-speed thermal wheel (haveVariableSpeed=true), the record also includes the following datasets:

@@ -116,12 +143,13 @@ The expected outputs are:

", revisions=" diff --git a/Buildings/Fluid/HeatExchangers/ThermalWheels/Latent/BypassDampers.mo b/Buildings/Fluid/HeatExchangers/ThermalWheels/Latent/BypassDampers.mo index 75036bd176c..11ed2754171 100644 --- a/Buildings/Fluid/HeatExchangers/ThermalWheels/Latent/BypassDampers.mo +++ b/Buildings/Fluid/HeatExchangers/ThermalWheels/Latent/BypassDampers.mo @@ -6,9 +6,6 @@ model BypassDampers parameter Modelica.Units.SI.PressureDifference dpDamper_nominal(displayUnit="Pa") = 20 "Nominal pressure drop of dampers" annotation (Dialog(group="Nominal condition")); - parameter Real P_nominal(final unit="W") - "Power consumption at the design condition" - annotation (Dialog(group="Nominal condition")); parameter Boolean use_strokeTime=true "Set to true to continuously open and close valve using strokeTime" @@ -37,7 +34,7 @@ model BypassDampers iconTransformation(extent={{-140,-60},{-100,-20}}))); Buildings.Fluid.Actuators.Dampers.Exponential bypDamSup( redeclare package Medium = Medium, - final m_flow_nominal=mSup_flow_nominal, + final m_flow_nominal=per.mSup_flow_nominal, final use_strokeTime=use_strokeTime, final strokeTime=strokeTime, final init=init, @@ -47,7 +44,7 @@ model BypassDampers annotation (Placement(transformation(extent={{-48,70},{-28,90}}))); Buildings.Fluid.Actuators.Dampers.Exponential damSup( redeclare package Medium = Medium, - final m_flow_nominal=mSup_flow_nominal, + final m_flow_nominal=per.mSup_flow_nominal, final use_strokeTime=use_strokeTime, final strokeTime=strokeTime, final init=init, @@ -58,7 +55,7 @@ model BypassDampers extent={{-10,-10},{10,10}},rotation=0,origin={-90,36}))); Buildings.Fluid.Actuators.Dampers.Exponential damExh( redeclare package Medium = Medium, - final m_flow_nominal=mExh_flow_nominal, + final m_flow_nominal=per.mExh_flow_nominal, final use_strokeTime=use_strokeTime, final strokeTime=strokeTime, final init=init, @@ -69,7 +66,7 @@ model BypassDampers extent={{10,10},{-10,-10}},rotation=-90,origin={40,-44}))); Buildings.Fluid.Actuators.Dampers.Exponential bypDamExh( redeclare package Medium = Medium, - final m_flow_nominal=mExh_flow_nominal, + final m_flow_nominal=per.mExh_flow_nominal, final use_strokeTime=use_strokeTime, final strokeTime=strokeTime, final init=init, @@ -93,13 +90,21 @@ protected "Difference of the two inputs" annotation (Placement(transformation(extent={{-100,90},{-80,110}}))); Modelica.Blocks.Math.BooleanToReal PEle( - final realTrue=P_nominal, + final realTrue=per.P_nominal, final realFalse=0) "Electric power consumption for motor" annotation (Placement(transformation(extent={{-120,-110},{-100,-90}}))); Modelica.Blocks.Sources.Constant zero(final k=0) "Zero signal" annotation (Placement(transformation(extent={{-140,150},{-120,170}}))); + +initial equation + assert(not per.haveVariableSpeed, + "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) annotation (Line(points={{-78,100},{0,100},{0,54},{-90,54},{-90,48}}, @@ -237,7 +242,7 @@ 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 in both heating and cooling conditions. +heat exchanger effectiveness. This operation of the wheel is configured as follows.

The expected outputs are: -during the period from 120 seconds to 180 seconds, the leaving supply air temperature -increases while the leaving exhaust air temperature decreases. +during the period from 120 seconds to 180 seconds, the difference between the entering exhaust exhaust +air temperature and the leaving exhaust air temperature decreases.

", revisions="