Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle

Package for heat pupmp refrigerant cycle modules

Information

This package contains models and data to for dynamic refrigerant cycles based on stationary data points, evaporator frosting, and cycle inertia.

Besides, functional approaches for evaporator frosting and refrigerant cycle inertia exist.

Extends from Modelica.Icons.MaterialPropertiesPackage (Icon for package containing property classes).

Package Content

Name Description
Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.ConstantCarnotEffectiveness ConstantCarnotEffectiveness Carnot COP with a constant Carnot effectiveness
Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.TableData2D TableData2D Performance data based on condenser outlet and evaporator inlet temperature
Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.Frosting Frosting Package for models and function to estimate influence of frosting on heat pump performance
Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.Inertias Inertias Package with modules to model inertia of refrigerant cycles
Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses BaseClasses Package with partial classes of Performance Data

Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.ConstantCarnotEffectiveness Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.ConstantCarnotEffectiveness

Carnot COP with a constant Carnot effectiveness

Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.ConstantCarnotEffectiveness

Information

This model uses a constant Carnot effectiveness to compute the efficiency of the heat pump.

PEle_nominal is computed from the provided QHea_flow_nominal and other nominal conditions. PEle_nominal stays constant over all boundary conditions and is used to calculate PEle by multiplying it with the relative compressor speed. QCon_flow is computed using the Carnot approach:

QCon_flow = PEle_nominal * etaCarnot_nominal * yMea * (TConOut + TAppCon) / (TConOut + TAppCon - (TEvaOut - TAppEva))

PEle = PEle_nominal * yMea

This equations follows the Carnot approach of the Buildings library: Buildings.Fluid.HeatPumps.Carnot_y Similarly, the variables TAppCon and TAppEva define the approach (pinch) temperature differences.

The approach temperatures are calculated using the following equation:

TApp = TApp_nominal * Q_flow / Q_flow_nominal

This introduces nonlinear equations to the model, which can lead to solver issues for reversible operation. You can fix the approach temperature at the nominal value by setting use_constAppTem

Extends from Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.PartialHeatPumpCycle (Partial model to allow selection of only heat pump options), Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.PartialCarnot (Model with components for Carnot efficiency calculation).

Parameters

TypeNameDefaultDescription
StringdevIde"ConstantCarnotEffectiveness"Indicates the data source, used to warn users about different vapor compression devices in reversible models
BooleanuseInHeaPumtrue=false to indicate that this model is used in a chiller
BooleanuseForChifalse=false to use in heat pump models
Nominal condition
PowerPEle_nominalQHea_flow_nominal/COP_nominalNominal electrical power consumption [W]
TemperatureTCon_nominal Nominal temperature at secondary condenser side [K]
TemperatureTEva_nominal Nominal temperature at secondary evaporator side [K]
HeatFlowRateQHea_flow_nominal Nominal heating capacity [W]
RealetaCarnot_nominal0.3Constant Carnot effectiveness
RealCOP_nominaletaCarnot_nominal*(TCon_nomi...Nominal coefficient of performance [1]
Frosting supression
NoFrostingiceFacCalredeclare Buildings.Fluid.He...Replaceable model to calculate the icing factor
Efficiency
Booleanuse_constAppTemfalse=true to fix approach temperatures at nominal values. This can improve simulation speed
TemperatureDifferenceTAppCon_nominalif cpCon < 1500 then 5 else 2Temperature difference between refrigerant and working fluid outlet in condenser [K]
TemperatureDifferenceTAppEva_nominalif cpEva < 1500 then 5 else 2Temperature difference between refrigerant and working fluid outlet in evaporator [K]
Advanced
Medium properties
SpecificHeatCapacitycpCon Evaporator medium specific heat capacity [J/(kg.K)]
SpecificHeatCapacitycpEva Evaporator medium specific heat capacity [J/(kg.K)]
TemperatureDifferencedTCarMin5Minimal temperature difference, used to avoid division errors [K]

Connectors

TypeNameDescription
output RealOutputPEleElectrical Power consumed by the device [W]
output RealOutputQCon_flowHeat flow rate through condenser [W]
RefrigerantMachineControlBussigBusBus-connector
output RealOutputQEva_flowHeat flow rate through evaporator [W]

Modelica definition

model ConstantCarnotEffectiveness "Carnot COP with a constant Carnot effectiveness" extends Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.PartialHeatPumpCycle ( useInHeaPum=true, PEle_nominal=QHea_flow_nominal / COP_nominal, devIde="ConstantCarnotEffectiveness"); extends Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.PartialCarnot ( TAppCon_nominal=if cpCon < 1500 then 5 else 2, TAppEva_nominal=if cpEva < 1500 then 5 else 2, final useForChi=false, final QEva_flow_nominal=PEle_nominal-QHea_flow_nominal, final QCon_flow_nominal=QHea_flow_nominal, constPEle(final k=PEle_nominal)); parameter Real COP_nominal( min=0, final unit="1") = etaCarnot_nominal*(TCon_nominal + TAppCon_nominal)/( TCon_nominal + TAppCon_nominal - (TEva_nominal - TAppEva_nominal)) "Nominal coefficient of performance"; equation connect(pasThrYMea.u, sigBus.yMea); if useInHeaPum then connect(pasThrTCon.u, sigBus.TConOutMea); connect(pasThrTEva.u, sigBus.TEvaOutMea); else connect(pasThrTCon.u, sigBus.TEvaOutMea); connect(pasThrTEva.u, sigBus.TConOutMea); end if; connect(swiPEle.y, redQCon.u2); connect(swiPEle.y, PEle); connect(swiQUse.u2, sigBus.onOffMea); connect(swiPEle.u2, sigBus.onOffMea); connect(swiPEle.y, feeHeaFloEva.u1); connect(feeHeaFloEva.u2, swiQUse.y); end ConstantCarnotEffectiveness;

Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.TableData2D Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.TableData2D

Performance data based on condenser outlet and evaporator inlet temperature

Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.TableData2D

Information

This model uses two-dimensional table data typically given by manufacturers as required by e.g. European Norm 14511 or ASHRAE 205 to calculate QCon_flow and PEle.

For different condenser outlet and evaporator inlet temperatures, the tables must provide two of the three following values: electrical power consumption, evaporator heat flow rate, and COP.

Note that losses are often implicitly included in measured data. In this case, the frosting modules should be disabled.

Scaling factor

For the scaling factor, the table data for condenser heat flow rate (QConTabDat_flow) is evaluated at nominal conditions. Hence, the scaling factor is

scaFac = QCon_flow_nominal/QConTabDat_flow(TEva_nominal, TCon_nominal).

Using scaFac, the table data is scaled linearly. This implies a constant COP over different design sizes:

QCon_flow = scaFac * tabQCon_flow.y

PEle = scaFac * tabPel.y

Known Limitations

References

EN 14511-2018: Air conditioners, liquid chilling packages and heat pumps for space heating and cooling and process chillers, with electrically driven compressors https://www.beuth.de/de/norm/din-en-14511-1/298537524

Extends from Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.PartialHeatPumpCycle (Partial model to allow selection of only heat pump options), Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.PartialTableData2D (Partial model with components for TableData2D approach for heat pumps and chillers).

Parameters

TypeNameDefaultDescription
StringdevIdedatTab.devIdeIndicates the data source, used to warn users about different vapor compression devices in reversible models
BooleanuseInHeaPum =false to indicate that this model is used in a chiller
RealscaFacQHea_flow_nominal/QHeaNoSca_...Scaling factor
Booleanuse_TEvaOutForTabdatTab.use_TEvaOutForTab=true to use evaporator outlet temperature, false for inlet
Booleanuse_TConOutForTabdatTab.use_TConOutForTab=true to use condenser outlet temperature, false for inlet
GenericHeatPumpdatTabredeclare parameter Building...Data Table of HP
Nominal condition
PowerPEle_nominalModelica.Blocks.Tables.Inter...Nominal electrical power consumption [W]
TemperatureTCon_nominal Nominal temperature at secondary condenser side [K]
TemperatureTEva_nominal Nominal temperature at secondary evaporator side [K]
HeatFlowRateQHea_flow_nominal Nominal heating capacity [W]
MassFlowRatemCon_flow_nominaldatTab.mCon_flow_nominal*sca...Nominal mass flow rate in secondary condenser side [kg/s]
MassFlowRatemEva_flow_nominaldatTab.mEva_flow_nominal*sca...Nominal mass flow rate in secondary evaporator side [kg/s]
HeatFlowRateQHeaNoSca_flow_nominalModelica.Blocks.Tables.Inter...Unscaled nominal heating capacity [W]
Frosting supression
NoFrostingiceFacCalredeclare Buildings.Fluid.He...Replaceable model to calculate the icing factor
Data handling
SmoothnesssmoothnessModelica.Blocks.Types.Smooth...Smoothness of table interpolation
ExtrapolationextrapolationModelica.Blocks.Types.Extrap...Extrapolation of data outside the definition range
Advanced
Medium properties
SpecificHeatCapacitycpCon Evaporator medium specific heat capacity [J/(kg.K)]
SpecificHeatCapacitycpEva Evaporator medium specific heat capacity [J/(kg.K)]

Connectors

TypeNameDescription
output RealOutputPEleElectrical Power consumed by the device [W]
output RealOutputQCon_flowHeat flow rate through condenser [W]
RefrigerantMachineControlBussigBusBus-connector
output RealOutputQEva_flowHeat flow rate through evaporator [W]

Modelica definition

model TableData2D "Performance data based on condenser outlet and evaporator inlet temperature" extends Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.PartialHeatPumpCycle ( final devIde=datTab.devIde, PEle_nominal=Modelica.Blocks.Tables.Internal.getTable2DValueNoDer2( tabIdePEle, TCon_nominal, TEva_nominal) * scaFac); extends Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.PartialTableData2D ( final useInRevDev=not useInHeaPum, scaFac=QHea_flow_nominal/QHeaNoSca_flow_nominal, final valTabQEva_flow = valTabQCon_flow .- valTabPEle, final valTabQCon_flow = {{tabQUse_flow.table[j, i] for i in 2:numCol} for j in 2:numRow}, final mCon_flow_max=max(valTabQCon_flow) * scaFac / cpCon / dTMin, final mCon_flow_min=min(valTabQCon_flow) * scaFac / cpCon / dTMax, final mEva_flow_min=min(valTabQEva_flow) * scaFac / cpEva / dTMax, final mEva_flow_max=max(valTabQEva_flow) * scaFac / cpEva / dTMin, mEva_flow_nominal=datTab.mEva_flow_nominal*scaFac, mCon_flow_nominal=datTab.mCon_flow_nominal*scaFac, final use_TConOutForTab=datTab.use_TConOutForTab, final use_TEvaOutForTab=datTab.use_TEvaOutForTab, tabQUse_flow(final table=datTab.tabQCon_flow), tabPEle(final table=datTab.tabPEle)); parameter Modelica.Units.SI.HeatFlowRate QHeaNoSca_flow_nominal=Modelica.Blocks.Tables.Internal.getTable2DValueNoDer2( tabIdeQUse_flow, TCon_nominal, TEva_nominal) "Unscaled nominal heating capacity "; replaceable parameter Buildings.Fluid.HeatPumps.ModularReversible.Data.TableData2D.GenericHeatPump datTab "Data Table of HP"; equation connect(scaFacTimPel.y, PEle); connect(scaFacTimPel.y, redQCon.u2); connect(yMeaTimScaFac.u1, sigBus.yMea); connect(reaPasThrTEvaOut.u, sigBus.TEvaOutMea); connect(reaPasThrTEvaIn.u, sigBus.TEvaInMea); connect(reaPasThrTConIn.u, sigBus.TConInMea); connect(reaPasThrTConOut.u, sigBus.TConOutMea); if useInHeaPum then connect(reaPasThrTConOut.y, tabPEle.u1); connect(reaPasThrTConIn.y, tabPEle.u1); connect(reaPasThrTConIn.y, tabQUse_flow.u1); connect(reaPasThrTConOut.y, tabQUse_flow.u1); connect(reaPasThrTEvaOut.y, tabPEle.u2); connect(reaPasThrTEvaOut.y, tabQUse_flow.u2); connect(reaPasThrTEvaIn.y, tabPEle.u2); connect(reaPasThrTEvaIn.y, tabQUse_flow.u2); else connect(reaPasThrTEvaOut.y, tabPEle.u1); connect(reaPasThrTEvaOut.y, tabQUse_flow.u1); connect(reaPasThrTEvaIn.y, tabPEle.u1); connect(reaPasThrTEvaIn.y, tabQUse_flow.u1); connect(reaPasThrTConOut.y, tabPEle.u2); connect(reaPasThrTConOut.y, tabQUse_flow.u2); connect(reaPasThrTConIn.y, tabPEle.u2); connect(reaPasThrTConIn.y, tabQUse_flow.u2); end if; connect(scaFacTimPel.y, feeHeaFloEva.u1); connect(scaFacTimQUse_flow.y, feeHeaFloEva.u2); end TableData2D;