.Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.TableData2DLoadDepSHC

Modeling block for simultaneous heating and cooling systems based on load-dependent 2D table data

Information

This block provides the core implementation to model simultaneous heating and cooling (SHC) systems, also referred to as multipipe polyvalent units or "Type A" in Eurovent (2025). Since the most recent versions of these systems are composed of multiple modules, the implementation includes the staging logic for an arbitrary number of modules nUni. Nevertheless, single-module systems can also be appropriately represented by setting nUni = 1.

All kinds of capacity-modulation processes are supported, such as VFD-driven compressors, multiple on-off compressors, and single compressor cycling. The method used to interpolate capacity and power based on user-provided data is taken from Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.TableData2DLoadDep. Users should be familiar with this latter block before continuing with this documentation.

The block implements the following functionalities:

System and module operating mode

The block inputs onHea and onCoo allow switching between three system operating modes.

  1. Heating-only: In this mode, all modules operate as heat pumps, tracking the HW temperature setpoint and sourcing heat from the ambient-side fluid.
  2. Cooling-only: In this mode, all modules operate as chillers, tracking the CHW temperature setpoint and rejecting heat to the ambient-side fluid.
  3. Simultaneous heating and cooling: In this mode, some modules operate as heat recovery chillers, sourcing heat from the CHW circuit and rejecting heat to the HW circuit. The system load balancing logic (see Section "Load balancing between the HW and CHW side") ensures that, on average, both the HW temperature setpoint and the CHW temperature setpoint are met by these modules. Additional modules may concurrently run in heating-only or cooling-only mode to match the residual load. In the extreme case where the system is only exposed to heating (resp. cooling) loads, all modules will run in heating-only (resp. cooling-only) mode.

Ideal controls

For each module operating mode, the block implements ideal controls by solving for the part load ratio required to meet the load (more precisely the minimum between the load and the actual capacity for the current source and sink temperatures). This is done by interpolating the PLR values along the heat flow rate values for a given load. As described in Section "Load balancing between the HW and CHW side", the part load ratio for modules in SHC mode is the maximum between the PLR values for the heating load and the cooling load.

The load is calculated based on the HW and CHW-side side variables and the temperature setpoint provided as inputs. The setpoint either represents a leaving (supply) temperature setpoint if use_TLoaLvgForCtl is true (default setting) or the entering (return) temperature if use_TLoaLvgForCtl is false.

In contrast to the implementation in Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.TableData2DLoadDep the current block does not expose the PLR value, and therefore does not support external modeling of equipment safeties.

Capacity and power calculation

The capacity and power calculation follows the same logic as the one described in Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.TableData2DLoadDep except that the current block does not include compressor false loading, i.e., both the capacity and power are linearly interpolated along PLR between 0 and min(PLR<Shc|Hea|Coo>Sup).

Performance data file and scaling

The performance data are read from external ASCII files that must meet the requirements specified in the documentation of Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.TableData2DLoadDep.

A performance data file must be provided for each module operating mode: heating-only, cooling-only and simultaneous heating and cooling. It is expected that performance data be provided for a single module. This is however a loose requirement as the scaling logic anyway ensures that the nominal heat flow rates Q*_flow_nominal provided as parameters match the values interpolated from the performance data, times the number of modules.

Note that for single-mode performance data, the ambient-side fluid temperature must correspond to the entering temperature, while the model supports choosing between entering or leaving temperature for the CHW and HW via the parameters use_TEvaOutForTab and use_TConOutForTab, respectively.

Module staging

First, the heating and cooling loads QHeaSet_flow and QCooSet_flow are calculated from the block inputs (see Section "Ideal controls"). The staging logic uses time-averaged heating and cooling loads QHeaSetMea_flow and QCooSetMea_flow. An exponential moving average (dtMea * der(Q<Hea|Coo>SetMea_flow) = Q<Hea|Coo>Set_flow - Q<Hea|Coo>SetMea_flow) is used for computational efficiency.

Then the model evaluates the capacity of a single module in each mode, based on the current source and sink fluid temperature (see Section "Capacity and power calculation"). The number of modules required to run to meet the load is then calculated for each mode as follows.

Discrete-event logic is then used to calculate the actual number of modules in each mode (nUniShc, nUniHea and nUniCoo) considering the following requirements.

Load balancing between the HW and CHW side

A fundamental assumption for load balancing is that the system is composed of equally sized modules that are hydronically balanced, connected in parallel arrangement and controlled at the same setpoint. This implies that each module connected to the HW (resp. CHW) loop handles an equal fraction of the total heating (resp. cooling) load, irrespective of whether the module operates in SHC or single mode. This assumption is strictly true on the dominant side. However, as explained below, it is only partially true on the non-dominant side where setpoint deviations occur in the modules with excess thermal output and in the compensating module.

Based on this assumption, on the dominant side, the heating or cooling load of each module in SHC mode can be calculated as

Q<Hea|Coo>SetUniShc_flow = Q<Hea|Coo>Set_flow / (nUniShc + nUni<Hea|Coo>).

In order to achieve load balancing between the CHW and HW sides for the subset of modules in SHC mode, the model assumes that these modules are loaded for the most demanding side, and that a single module can cycle between SHC and the corresponding single-mode operation. For example, in case of 90 % cooling load and 60 % heating load, the module will cycle between SHC at 90 % PLR during 2/3 of the time and cooling-only at 90 % PLR during 1/3 of the time. This logic is inspired from the sequence of operation of a multipipe heat pump system (Johnson Controls, 2024) where the last enabled circuit cycles between SHC and single-mode operation to balance the heating and cooling loads.

The part load ratio of each module in SHC mode to satisfy the most demanding side is

PLRShcLoa = min(PLRShcSup, max(fHeaShc-1(QHeaSetUniShc_flow), fCooShc-1(QCooSetUniShc_flow))),

where f<Hea|Coo>Shc-1 is the linear interpolation of the part load ratio along the module heating or cooling capacity at the actual source and sink temperature, based on the performance data provided for SHC operation.

A demand limiting logic is implemented to prevent overcooling or overheating due to the stage minimum runtime requirement and the possible flow variations resulting from modulating the primary pump speed and/or the minimum flow bypass valve. This logic uses a temperature deviation from setpoint dTSaf, which is converted to limiting heat flow rates Q<Hea|Coo>Saf_flow. The limiting part load ratio is calculated as

PLRShcSaf = min(fHeaShc-1(QHeaSaf_flow / (nUniShc + nUniHea)), fCooShc-1(QCooSaf_flow / (nUniShc + nUniCoo))).

The effective part load ratio of each module in SHC mode is then the minimum of the load-based and safety-limited values

PLRShc = min(PLRShcLoa, PLRShcSaf).

The excess heating or cooling heat flow rate (non-dominant side) of the modules in SHC mode is then calculated as

Q<Hea|Coo>ShcExc_flow = nUniShc * (f<Hea|Coo>Shc(PLRShc) - Q<Hea|Coo>SetUniShc_flow),

where f<Hea|Coo>Shc is the linear interpolation of the module heating or cooling capacity along the part load ratio at the actual source and sink temperature, based on the performance data provided for SHC operation.

This excess heat flow rate is compensated by cycling a single module, which gives theg expression of the cycling ratio for this module as

ratCycShc = 1 - min(1, max(QHeaShcExc_flow / fHeaShc(PLRShc), QCooShcExc_flow / fCooShc(PLRShc))),

where ratCycShc = 1 means perfect balance, i.e., the module does not cycle and continuously runs in SHC mode, and ratCycShc = 0 means that the module continuously runs in single mode.

The actual heating or cooling heat flow rate of the modules in SHC mode is

Q<Hea|Coo>Shc_flow = (nUniShc - 1 + ratCycShc) * f<Hea|Coo>Shc(PLRShc).

The residual load that the module which cycles between SHC and single-mode must handle is

Q<Hea|Coo>SetUniShc_flow * nUniShc - Q<Hea|Coo>Shc_flow,

which gives the part load ratio PLR<Hea|Coo>ShcCyc of this module while it runs in single mode. The corresponding heating or cooling heat flow rate is then

Q<Hea|Coo>ShcCyc_flow = (1 - ratCycShc) * f<Hea|Coo>(PLR<Hea|Coo>ShcCyc),

where f<Hea|Coo> is the linear interpolation of the module capacity along the part load ratio at the actual source and sink temperature, based on the performance data provided for single-mode operation.

The residual heating or cooling loads that the modules running in single mode must meet can now be calculated as

Q<Hea|Coo>SetRes_flow = Q<Hea|Coo>Set_flow - (Q<Hea|Coo>Shc_flow + Q<Hea|Coo>ShcCyc_flow),

which ultimately allows calculating the PLR value of these modules and their contribution to the total heating and cooling output of the bank.

Implementation limitations

The load balancing logic relies on a subset of modules producing excess heat flow rate while another module compensates for it. The fundamental assumption of even load between modules therefore breaks down on the non-dominant side. In a real system where the modules are hydronically balanced, this load imbalance yields varying leaving temperatures across modules. In the worst case, the deviation from setpoint is ΔT⋅SPLR / 2, where ΔT is the design temperature difference.

These temperature discrepancies are neglected in the model which "numerically absorbs" them by simply adjusting the load that each module must handle. This creates a modeling uncertainty that is deemed acceptable given the error magnitude and partial cancellation of opposing errors from modules that exhibit setpoint overshoot and modules that exhibit setpoint undershoot.

References

Revisions


Generated at 2026-05-09T18:18:56Z by OpenModelicaOpenModelica 1.26.7 using GenerateDoc.mos