Buildings.DHC.ETS.Combined.BaseClasses

Package with base classes

Information

This package contains base classes that are used to construct the classes in Buildings.DHC.ETS.Combined.

Extends from Modelica.Icons.BasesPackage (Icon for packages containing base classes).

Package Content

Name Description
Buildings.DHC.ETS.Combined.BaseClasses.PartialHeatPumpHeatExchanger PartialHeatPumpHeatExchanger Partial model of a substation with heat pump and compressor-less cooling
Buildings.DHC.ETS.Combined.BaseClasses.PartialParallel PartialParallel Partial ETS model with district heat exchanger and parallel connection of production systems

Buildings.DHC.ETS.Combined.BaseClasses.PartialHeatPumpHeatExchanger Buildings.DHC.ETS.Combined.BaseClasses.PartialHeatPumpHeatExchanger

Partial model of a substation with heat pump and compressor-less cooling

Buildings.DHC.ETS.Combined.BaseClasses.PartialHeatPumpHeatExchanger

Information

This model represents an energy transfer station based on that described in Sommer (2020), with some additioinal details:

The cooling function is provided in a compressor-less mode by a heat exchanger connected to the district supply line.

The space heating heating function is provided by a water-to-water heat pump Buildings.DHC.ETS.Combined.Subsystems.HeatPump.

Space Heating and Cooling Enable/Disable

Heating (resp. cooling) is enabled based on the input signal uHea (resp. uCoo) which is held for 15 minutes, meaning that, when enabled, the mode remains active for at least 15 minutes and, when disabled, the mode cannot be enabled again for at least 15 minutes. The heating and cooling enable signals should be computed externally based on a schedule (to lock out the system during off-hours), ideally in conjunction with the number of requests yielded by the terminal unit controllers, or any other signal representative of the load.

Modeling considerations

There is a control volume at each of the two fluid ports that serve as inlet and outlet of the heating and cooling systems. These approximate the dynamics of the substation, and they also generally avoid nonlinear systems of equations if multiple substations are connected to each other.

References

Sommer T., Sulzer M., Wetter M., Sotnikov A., Mennel S., Stettler C. The reservoir network: A new network topology for district heating and cooling. Energy, Volume 199, 15 May 2020, 117418.

Extends from Buildings.DHC.ETS.BaseClasses.PartialETS (Partial class for modeling an energy transfer station).

Parameters

TypeNameDefaultDescription
replaceable package MediumSerWaterService side medium
replaceable package MediumSerHea_aWaterService side medium at heating inlet
replaceable package MediumBuiWaterBuilding side medium
Genericfue[nFue] Fuel type
Booleanhave_varFloContrueSet to true for heat pumps with variable condenser flow
Booleanhave_varFloEvatrueSet to true for heat pumps with variable evaporator flow
RealratFloMin0.3Minimum condenser mass flow rate (ratio to nominal) [1]
Configuration
DistrictSystemTypetypBuildings.DHC.Types.District...Type of district system
Booleanhave_heaWattrueSet to true if the ETS supplies heating water
Booleanhave_hotWatfalseSet to true if the ETS supplies hot water
Booleanhave_chiWattrueSet to true if the ETS supplies chilled water
Booleanhave_fanfalseSet to true if fan power is computed
Booleanhave_pumtrueSet to true if pump power is computed
Booleanhave_eleHeatrueSet to true if the ETS has electric heating system
IntegernFue0Number of fuel types (0 means no combustion system)
Booleanhave_eleCoofalseSet to true if the ETS has electric cooling system
Booleanhave_weaBusfalseSet to true to use a weather bus
Nominal condition
HeatFlowRateQHeaWat_flow_nominal0Nominal capacity of heating system (>=0) [W]
HeatFlowRateQHotWat_flow_nominal0Nominal capacity of hot water production system (>=0) [W]
HeatFlowRateQChiWat_flow_nominal0Nominal capacity of cooling system (<=0) [W]
TemperatureDifferencedT_nominal5Water temperature drop/increase accross load and source-side HX (always positive) [K]
TemperatureTHeaWatSup_nominal313.15Heating water supply temperature [K]
TemperatureTHotWatSup_nominal336.15Domestic hot water supply temperature to fixtures [K]
TemperatureTColWat_nominal288.15Cold water temperature (for hot water production) [K]
Pressuredp_nominal50000Pressure difference at nominal flow rate (for each flow leg) [Pa]
RealCOPHeaWat_nominal COP of heat pump for heating water production [1]
RealCOPHotWat_nominal COP of heat pump for hot water production [1]
DHC system
TemperatureTDisWatMin District water minimum temperature [K]
TemperatureTDisWatMax District water maximum temperature [K]
Nominal conditions
TemperatureTChiWatSup_nominal291.15Chilled water supply temperature [K]
Assumptions
BooleanallowFlowReversalSerfalseSet to true to allow flow reversal on service side
BooleanallowFlowReversalBuifalseSet to true to allow flow reversal on building side
Dynamics
DynamicsmixingVolumeEnergyDynamicsModelica.Fluid.Types.Dynamic...Formulation of energy balance for mixing volume at inlet and outlet

Connectors

TypeNameDescription
FluidPorts_aports_aHeaWat[nPorts_aHeaWat]Fluid connectors for heating water return (from building)
FluidPorts_bports_bHeaWat[nPorts_bHeaWat]Fluid connectors for heating water supply (to building)
FluidPorts_aports_aChiWat[nPorts_aChiWat]Fluid connectors for chilled water return (from building)
FluidPorts_bports_bChiWat[nPorts_bChiWat]Fluid connectors for chilled water supply (to building)
FluidPort_aport_aSerAmbFluid connector for ambient water service supply line
FluidPort_bport_bSerAmbFluid connector for ambient water service return line
FluidPort_aport_aSerHeaFluid connector for heating service supply line
FluidPort_bport_bSerHeaFluid connector for heating service return line
FluidPort_aport_aSerCooFluid connector for cooling service supply line
FluidPort_bport_bSerCooFluid connector for cooling service return line
output RealOutputPHeaPower drawn by heating system [W]
output RealOutputPCooPower drawn by cooling system [W]
output RealOutputPFanPower drawn by fan motors [W]
output RealOutputPPumPower drawn by pump motors [W]
output RealOutputQFue_flow[nFue]Fuel energy input rate [W]
BusweaBusWeather data bus
input BooleanInputuCooCooling enable signal
input BooleanInputuHeaHeating enable signal
input BooleanInputuSHWSHW production enable signal
input RealInputTHeaWatSupSetHeating water supply temperature set point [K]
input RealInputTHotWatSupSetDomestic hot water temperature set point for supply to fixtures [K]
input RealInputTColWatCold water temperature [K]
input RealInputQReqHotWat_flowService hot water load [W]
input RealInputTChiWatSupSetChilled water supply temperature set point [K]
output RealOutputmHea_flowDistrict water mass flow rate used for heating service [kg/s]
output RealOutputmCoo_flowDistrict water mass flow rate used for cooling service [kg/s]

Modelica definition

model PartialHeatPumpHeatExchanger "Partial model of a substation with heat pump and compressor-less cooling" extends Buildings.DHC.ETS.BaseClasses.PartialETS( final typ=Buildings.DHC.Types.DistrictSystemType.CombinedGeneration5, final have_weaBus=false, final have_chiWat=true, final have_heaWat=true, have_hotWat=false, final have_eleHea=true, final nFue=0, final have_eleCoo=false, final have_pum=true, final have_fan=false, nPorts_aHeaWat=1, nPorts_aChiWat=1); // SYSTEM GENERAL parameter Boolean have_varFloCon = true "Set to true for heat pumps with variable condenser flow"; parameter Boolean have_varFloEva = true "Set to true for heat pumps with variable evaporator flow"; parameter Real ratFloMin( final unit="1", final min=0, final max=1)=0.3 "Minimum condenser mass flow rate (ratio to nominal)"; parameter Modelica.Units.SI.Temperature TDisWatMin "District water minimum temperature"; parameter Modelica.Units.SI.Temperature TDisWatMax "District water maximum temperature"; parameter Modelica.Units.SI.TemperatureDifference dT_nominal(min=0) = 5 "Water temperature drop/increase accross load and source-side HX (always positive)"; parameter Modelica.Units.SI.Temperature TChiWatSup_nominal=291.15 "Chilled water supply temperature"; final parameter Modelica.Units.SI.Temperature TChiWatRet_nominal= TChiWatSup_nominal + dT_nominal "Chilled water return temperature"; parameter Modelica.Units.SI.Temperature THeaWatSup_nominal=313.15 "Heating water supply temperature"; final parameter Modelica.Units.SI.Temperature THeaWatRet_nominal= THeaWatSup_nominal - dT_nominal "Heating water return temperature"; parameter Modelica.Units.SI.Temperature THotWatSup_nominal=336.15 "Domestic hot water supply temperature to fixtures"; parameter Modelica.Units.SI.Temperature TColWat_nominal=288.15 "Cold water temperature (for hot water production)"; parameter Modelica.Units.SI.Pressure dp_nominal(displayUnit="Pa") = 50000 "Pressure difference at nominal flow rate (for each flow leg)"; final parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal(min=0)= abs(QHeaWat_flow_nominal/cpBui_default/(THeaWatSup_nominal - THeaWatRet_nominal)) "Heating water mass flow rate"; final parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal(min=0)= abs(QChiWat_flow_nominal/cpBui_default/(TChiWatSup_nominal - TChiWatRet_nominal)) "Chilled water mass flow rate"; final parameter Modelica.Units.SI.MassFlowRate mEvaHotWat_flow_nominal(min=0)= QHotWat_flow_nominal*(COPHotWat_nominal - 1)/COPHotWat_nominal/cpSer_default/dT_nominal "Evaporator water mass flow rate of heat pump for hot water production"; final parameter Modelica.Units.SI.MassFlowRate mSerWat_flow_nominal(min=0)= max(proHeaWat.mCon_flow_nominal + mEvaHotWat_flow_nominal, hexChi.m1_flow_nominal) "Service water mass flow rate"; constant Modelica.Units.SI.SpecificHeatCapacity cpBui_default= MediumBui.specificHeatCapacityCp(MediumBui.setState_pTX( p=MediumBui.p_default, T=MediumBui.T_default)) "Specific heat capacity of the fluid"; constant Modelica.Units.SI.SpecificHeatCapacity cpSer_default= MediumBui.specificHeatCapacityCp(MediumSer.setState_pTX( p=MediumSer.p_default, T=MediumSer.T_default)) "Specific heat capacity of the fluid"; // Heat pump for heating water production parameter Real COPHeaWat_nominal(final unit="1") "COP of heat pump for heating water production"; // Heat pump for hot water production parameter Real COPHotWat_nominal(final unit="1") "COP of heat pump for hot water production"; // District HX final parameter Modelica.Units.SI.MassFlowRate m1HexChi_flow_nominal(min=0)= abs(QChiWat_flow_nominal/cpSer_default/dT_nominal) "CHW HX primary mass flow rate"; final parameter Modelica.Units.SI.MassFlowRate m2HexChi_flow_nominal(min=0)= abs(QChiWat_flow_nominal/cpSer_default/(THeaWatSup_nominal - THeaWatRet_nominal)) "CHW HX secondary mass flow rate"; // Dynamics parameter Modelica.Fluid.Types.Dynamics mixingVolumeEnergyDynamics= Modelica.Fluid.Types.Dynamics.FixedInitial "Formulation of energy balance for mixing volume at inlet and outlet"; // IO CONNECTORS Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uCoo "Cooling enable signal"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uHea "Heating enable signal"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uSHW if have_hotWat "SHW production enable signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaWatSupSet( final unit="K", displayUnit="degC") "Heating water supply temperature set point"; Buildings.Controls.OBC.CDL.Interfaces.RealInput THotWatSupSet( final unit="K", displayUnit="degC") if have_hotWat "Domestic hot water temperature set point for supply to fixtures"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TColWat( final unit="K", displayUnit="degC") if have_hotWat "Cold water temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealInput QReqHotWat_flow( final unit="W") if have_hotWat "Service hot water load"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet(final unit="K", displayUnit="degC") "Chilled water supply temperature set point"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput mHea_flow(final unit="kg/s") "District water mass flow rate used for heating service"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput mCoo_flow(final unit="kg/s") "District water mass flow rate used for cooling service"; // COMPONENTS Buildings.Fluid.Delays.DelayFirstOrder volMix_a( redeclare final package Medium = MediumSer, final m_flow_nominal=mSerWat_flow_nominal, tau=600, final energyDynamics=mixingVolumeEnergyDynamics) "Mixing volume to break algebraic loops and to emulate the delay of the substation"; Buildings.Fluid.Delays.DelayFirstOrder volMix_b( redeclare final package Medium = MediumSer, final m_flow_nominal=mSerWat_flow_nominal, tau=600, final energyDynamics=mixingVolumeEnergyDynamics) "Mixing volume to break algebraic loops and to emulate the delay of the substation"; Buildings.DHC.ETS.BaseClasses.Pump_m_flow pum1HexChi( redeclare final package Medium = MediumSer, final m_flow_nominal=m1HexChi_flow_nominal, final allowFlowReversal=allowFlowReversalSer, dp_nominal=dp_nominal) "Chilled water HX primary pump"; Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU hexChi( redeclare final package Medium1 = MediumSer, redeclare final package Medium2 = MediumBui, final m1_flow_nominal=m1HexChi_flow_nominal, final m2_flow_nominal=m2HexChi_flow_nominal, final dp1_nominal=dp_nominal/2, final dp2_nominal=dp_nominal/2, configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow, final Q_flow_nominal=QChiWat_flow_nominal, final T_a1_nominal=TDisWatMax, final T_a2_nominal=TChiWatRet_nominal, final allowFlowReversal1=allowFlowReversalSer, final allowFlowReversal2=allowFlowReversalBui) "Chilled water HX"; Buildings.Fluid.Delays.DelayFirstOrder volHeaWatRet( redeclare final package Medium = MediumBui, final m_flow_nominal=proHeaWat.mCon_flow_nominal, tau=60, final energyDynamics=mixingVolumeEnergyDynamics, T_start=THeaWatSup_nominal, nPorts=3) "Mixing volume representing building HHW primary"; Buildings.Fluid.Sensors.MassFlowRate senMasFloHeaWat( redeclare final package Medium = MediumBui, final allowFlowReversal=allowFlowReversalBui) "Heating water mass flow rate"; Buildings.Fluid.Delays.DelayFirstOrder volChiWat( redeclare final package Medium = MediumBui, final m_flow_nominal=m1HexChi_flow_nominal, tau=60, final energyDynamics=mixingVolumeEnergyDynamics, T_start=TChiWatSup_nominal, nPorts=3) "Mixing volume representing building CHW primary"; Buildings.Fluid.Sensors.MassFlowRate senMasFloChiWat( redeclare final package Medium = MediumBui, final allowFlowReversal=allowFlowReversalBui) "Chilled water mass flow rate"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter gai2(final k= m1HexChi_flow_nominal); Buildings.DHC.ETS.Combined.Controls.PIDWithEnable conTChiWat( k=0.05, Ti=120, yMax=1, controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI, reverseActing=false, yMin=0) "PI controller for district HX primary side"; Buildings.Controls.OBC.CDL.Reals.MultiSum PPumHeaTot(nin=2) "Total pump power for heating applications"; Buildings.Fluid.Sources.Boundary_pT bouHeaWat( redeclare final package Medium = MediumBui, nPorts=1) "Pressure boundary condition representing the expansion vessel"; Buildings.Fluid.Sources.Boundary_pT bouChiWat( redeclare final package Medium = MediumBui, nPorts=1) "Pressure boundary condition representing the expansion vessel"; Buildings.Controls.OBC.CDL.Reals.MultiSum PPumCooTot(nin=1) "Total pump power for space cooling"; Buildings.Controls.OBC.CDL.Reals.MultiSum PPumTot(nin=2) "Total pump power"; Buildings.Fluid.Sensors.TemperatureTwoPort senTHeaWatSup( redeclare final package Medium=MediumBui, final allowFlowReversal=allowFlowReversalBui, final m_flow_nominal=mHeaWat_flow_nominal) "Heating water supply temperature"; Buildings.Fluid.Sensors.TemperatureTwoPort senTChiWatSup( redeclare final package Medium=MediumBui, final allowFlowReversal=allowFlowReversalBui, final m_flow_nominal=mChiWat_flow_nominal) "Chilled water supply temperature"; Buildings.DHC.ETS.Combined.Subsystems.SwitchBox swiFlo( redeclare final package Medium = MediumSer, final m_flow_nominal=mSerWat_flow_nominal, dpValve_nominal=1e-4) "Flow switch box"; Buildings.DHC.ETS.BaseClasses.Junction bypHeaWatSup( redeclare final package Medium = MediumBui, final m_flow_nominal=proHeaWat.mCon_flow_nominal *{1,-1,-1}) "Bypass heating water (supply)"; Buildings.DHC.ETS.BaseClasses.Junction bypHeaWatRet( redeclare final package Medium = MediumBui, final m_flow_nominal=proHeaWat.mCon_flow_nominal *{1,-1,1}) "Bypass heating water (return)"; Buildings.Controls.OBC.CDL.Logical.TrueFalseHold enaHea( trueHoldDuration=15*60) "Enable heating"; Buildings.DHC.ETS.Combined.Subsystems.HeatPump proHeaWat( redeclare final package Medium1 = MediumBui, redeclare final package Medium2 = MediumSer, dT_nominal=dT_nominal, final have_varFloCon=have_varFloCon, final COP_nominal=COPHeaWat_nominal, final TCon_nominal=THeaWatSup_nominal, final TEva_nominal=TDisWatMin - dT_nominal, final Q1_flow_nominal=QHeaWat_flow_nominal, final allowFlowReversal1=allowFlowReversalBui, final allowFlowReversal2=allowFlowReversalSer, final dp1_nominal=dp_nominal, final dp2_nominal=dp_nominal) "Subsystem for heating water production"; Buildings.Controls.OBC.CDL.Reals.MultiSum masFloHeaTot(nin=2) "Compute district water mass flow rate used for heating service"; Modelica.Blocks.Sources.Constant zer(final k=0) if not have_hotWat "Replacement variable"; Buildings.Fluid.Sensors.TemperatureTwoPort senTHeaWatRet( redeclare final package Medium = MediumBui, final allowFlowReversal=allowFlowReversalBui, final m_flow_nominal=mHeaWat_flow_nominal) "Heating water return temperature"; Buildings.Fluid.Sensors.TemperatureTwoPort senTChiWatRet( redeclare final package Medium = MediumBui, final allowFlowReversal=allowFlowReversalBui, final m_flow_nominal=mChiWat_flow_nominal) "Chilled water return temperature"; Buildings.Fluid.Sensors.MassFlowRate senMasFloHeaWatPri(redeclare final package Medium = MediumBui, final allowFlowReversal=allowFlowReversalBui) "Primary heating water mass flow rate"; Buildings.Controls.OBC.CDL.Logical.TrueFalseHold enaSHW( trueHoldDuration=15*60) if have_hotWat "Enable SHW production"; Modelica.Blocks.Sources.Constant zer1(k=0) if not have_hotWat "Replacement variable"; Buildings.Controls.OBC.CDL.Reals.Add masFloHea "Service water mass flow rate for heating applications"; Buildings.Controls.OBC.CDL.Reals.MultiSum PHeaTot(nin=2) "Total power used for heating and hot water production"; Buildings.Controls.OBC.CDL.Reals.Subtract dTHHW "Heating hot water DeltaT"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter capFloHHW( final k=cpBui_default) if have_varFloEva or have_varFloCon "Capacity flow rate"; Buildings.DHC.ETS.Combined.Controls.PrimaryVariableFlow conFloConHHW( final Q_flow_nominal=QHeaWat_flow_nominal, final dT_nominal=dT_nominal, final ratFloMin=ratFloMin, final cp=cpBui_default) if have_varFloCon "Mass flow rate control"; Buildings.Controls.OBC.CDL.Reals.Max priOve if have_varFloCon "Ensure primary overflow"; Buildings.Controls.OBC.CDL.Reals.Multiply loaHHW if have_varFloEva or have_varFloCon "Heating load"; equation connect(TChiWatSupSet, conTChiWat.u_s); connect(pum1HexChi.P, PPumCooTot.u[1]); connect(PPumHeaTot.y, PPumTot.u[1]); connect(PPumCooTot.y, PPumTot.u[2]); connect(pum1HexChi.port_b, hexChi.port_a1); connect(pum1HexChi.m_flow_actual, mCoo_flow); connect(volMix_a.ports[1], swiFlo.port_bSup); connect(swiFlo.port_aRet, volMix_b.ports[1]); connect(volMix_b.ports[2], pum1HexChi.port_a); connect(hexChi.port_b1, volMix_a.ports[2]); connect(pum1HexChi.m_flow_actual, swiFlo.mRev_flow); connect(gai2.y, pum1HexChi.m_flow_in); connect(PPumTot.y, PPum); connect(ports_aHeaWat[1], senMasFloHeaWat.port_a); connect(bypHeaWatSup.port_2, senTHeaWatSup.port_a); connect(senTHeaWatSup.port_b, ports_bHeaWat[1]); connect(bypHeaWatRet.port_2, volHeaWatRet.ports[1]); connect(bouHeaWat.ports[1], volHeaWatRet.ports[2]); connect(ports_aChiWat[1], senMasFloChiWat.port_a); connect(senTChiWatSup.port_b, ports_bChiWat[1]); connect(bypHeaWatRet.port_3, bypHeaWatSup.port_3); connect(volHeaWatRet.ports[3], proHeaWat.port_a1); connect(proHeaWat.port_b2, volMix_b.ports[3]); connect(volMix_a.ports[3], proHeaWat.port_a2); connect(enaHea.y, proHeaWat.uEna); connect(THeaWatSupSet, proHeaWat.TSupSet); connect(proHeaWat.PPum, PPumHeaTot.u[1]); connect(masFloHeaTot.y, mHea_flow); connect(zer.y, masFloHeaTot.u[2]); connect(proHeaWat.mEva_flow, masFloHeaTot.u[1]); connect(zer.y, PPumHeaTot.u[2]); connect(senMasFloHeaWat.port_b, senTHeaWatRet.port_a); connect(senTHeaWatRet.port_b, bypHeaWatRet.port_1); connect(senMasFloChiWat.port_b, senTChiWatRet.port_a); connect(proHeaWat.port_b1, senMasFloHeaWatPri.port_a); connect(senMasFloHeaWatPri.port_b, bypHeaWatSup.port_1); connect(port_aSerAmb, swiFlo.port_aSup); connect(swiFlo.port_bRet, port_bSerAmb); connect(uHea, enaHea.u); connect(conTChiWat.y, gai2.u); connect(uCoo, conTChiWat.uEna); connect(uSHW, enaSHW.u); connect(senTChiWatRet.port_b, volChiWat.ports[1]); connect(volChiWat.ports[2], hexChi.port_a2); connect(hexChi.port_b2, senTChiWatSup.port_a); connect(bouChiWat.ports[1], volChiWat.ports[3]); connect(senTChiWatSup.T, conTChiWat.u_m); connect(zer1.y, masFloHea.u2); connect(proHeaWat.mEva_flow, masFloHea.u1); connect(masFloHea.y, swiFlo.mPos_flow); connect(proHeaWat.PHea, PHeaTot.u[1]); connect(zer.y, PHeaTot.u[2]); connect(PHeaTot.y, PHea); connect(senTHeaWatRet.T, dTHHW.u2); connect(senTHeaWatSup.T, dTHHW.u1); connect(senMasFloHeaWat.m_flow, capFloHHW.u); connect(senMasFloHeaWat.m_flow, priOve.u1); connect(conFloConHHW.m_flow, priOve.u2); connect(priOve.y, proHeaWat.m1_flow); connect(capFloHHW.y, loaHHW.u2); connect(dTHHW.y, loaHHW.u1); connect(loaHHW.y, conFloConHHW.loa); end PartialHeatPumpHeatExchanger;

Buildings.DHC.ETS.Combined.BaseClasses.PartialParallel Buildings.DHC.ETS.Combined.BaseClasses.PartialParallel

Partial ETS model with district heat exchanger and parallel connection of production systems

Buildings.DHC.ETS.Combined.BaseClasses.PartialParallel

Information

This is a base model providing the hydronic configuration for an energy transfer station as described in the schematics below. It is typically used to integrate systems providing both heating water and chilled water, such as heat recovery chillers. Furthermore, it can be connected to an adjustable number (nSouAmb) of systems serving as ambient sources (including the district heat exchanger).

Models that extend this base class must

Note that the model includes a pressure boundary condition which is shared between the hot water and chilled water circuits, the two circuits being hydronically connected.

Sequence chart

Extends from Buildings.DHC.ETS.BaseClasses.PartialETS (Partial class for modeling an energy transfer station).

Parameters

TypeNameDefaultDescription
replaceable package MediumSerWaterService side medium
replaceable package MediumSerHea_aWaterService side medium at heating inlet
replaceable package MediumBuiWaterBuilding side medium
Genericfue[nFue] Fuel type
ConnectionConfigurationconConBuildings.DHC.ETS.Types.Conn...District connection configuration
IntegernSysHea Number of heating systems
IntegernSysCoonSysHeaNumber of cooling systems
IntegernSouAmb1Number of ambient sources
PartialSupervisoryconSupredeclare Buildings.DHC.ETS....Supervisory controller
Configuration
DistrictSystemTypetypBuildings.DHC.Types.District...Type of district system
Booleanhave_heaWattrueSet to true if the ETS supplies heating water
Booleanhave_hotWatfalseSet to true if the ETS supplies hot water
Booleanhave_chiWattrueSet to true if the ETS supplies chilled water
Booleanhave_fanfalseSet to true if fan power is computed
Booleanhave_pumtrueSet to true if pump power is computed
Booleanhave_eleHeafalseSet to true if the ETS has electric heating system
IntegernFue0Number of fuel types (0 means no combustion system)
Booleanhave_eleCoofalseSet to true if the ETS has electric cooling system
Booleanhave_weaBusfalseSet to true to use a weather bus
Nominal condition
HeatFlowRateQHeaWat_flow_nominal0Nominal capacity of heating system (>=0) [W]
HeatFlowRateQHotWat_flow_nominal0Nominal capacity of hot water production system (>=0) [W]
HeatFlowRateQChiWat_flow_nominal0Nominal capacity of cooling system (<=0) [W]
PressureDifferencedpValIso_nominal2E3Nominal pressure drop of ambient circuit isolation valves [Pa]
District heat exchanger
PressureDifferencedp1Hex_nominal Nominal pressure drop across heat exchanger on district side [Pa]
PressureDifferencedp2Hex_nominal Nominal pressure drop across heat exchanger on building side [Pa]
HeatFlowRateQHex_flow_nominal Nominal heat flow rate through heat exchanger (from district to building) [W]
TemperatureT_a1Hex_nominal Nominal water inlet temperature on district side [K]
TemperatureT_b1Hex_nominal Nominal water outlet temperature on district side [K]
TemperatureT_a2Hex_nominal Nominal water inlet temperature on building side [K]
TemperatureT_b2Hex_nominal Nominal water outlet temperature on building side [K]
RealspePum1HexMin0.1Heat exchanger primary pump minimum speed (fractional) [1]
RealspePum2HexMin0.1Heat exchanger secondary pump minimum speed (fractional) [1]
Buffer Tank
VolumeVTanHeaWat Heating water tank volume [m3]
LengthhTanHeaWat(VTanHeaWat*16/Modelica.Cons...Heating water tank height (assuming twice the diameter) [m]
LengthdInsTanHeaWat0.1Heating water tank insulation thickness [m]
VolumeVTanChiWat Chilled water tank volume [m3]
LengthhTanChiWat(VTanChiWat*16/Modelica.Cons...Chilled water tank height (without insulation) [m]
LengthdInsTanChiWat0.1Chilled water tank insulation thickness [m]
IntegernSegTan3Number of volume segments for tanks
Assumptions
BooleanallowFlowReversalSerfalseSet to true to allow flow reversal on service side
BooleanallowFlowReversalBuifalseSet to true to allow flow reversal on building side

Connectors

TypeNameDescription
FluidPorts_aports_aHeaWat[nPorts_aHeaWat]Fluid connectors for heating water return (from building)
FluidPorts_bports_bHeaWat[nPorts_bHeaWat]Fluid connectors for heating water supply (to building)
FluidPorts_aports_aChiWat[nPorts_aChiWat]Fluid connectors for chilled water return (from building)
FluidPorts_bports_bChiWat[nPorts_bChiWat]Fluid connectors for chilled water supply (to building)
FluidPort_aport_aSerAmbFluid connector for ambient water service supply line
FluidPort_bport_bSerAmbFluid connector for ambient water service return line
FluidPort_aport_aSerHeaFluid connector for heating service supply line
FluidPort_bport_bSerHeaFluid connector for heating service return line
FluidPort_aport_aSerCooFluid connector for cooling service supply line
FluidPort_bport_bSerCooFluid connector for cooling service return line
output RealOutputPHeaPower drawn by heating system [W]
output RealOutputPCooPower drawn by cooling system [W]
output RealOutputPFanPower drawn by fan motors [W]
output RealOutputPPumPower drawn by pump motors [W]
output RealOutputQFue_flow[nFue]Fuel energy input rate [W]
BusweaBusWeather data bus
input BooleanInputuHeaHeating enable signal
input BooleanInputuCooCooling enable signal
input RealInputTHeaWatSupSetHeating water supply temperature set point [K]
input RealInputTChiWatSupSetChilled water supply temperature set point [K]

Modelica definition

model PartialParallel "Partial ETS model with district heat exchanger and parallel connection of production systems" extends Buildings.DHC.ETS.BaseClasses.PartialETS( final typ=Buildings.DHC.Types.DistrictSystemType.CombinedGeneration5, final have_heaWat=true, final have_chiWat=true, final have_pum=true, have_hotWat=false, have_eleHea=false, have_weaBus=false); parameter Buildings.DHC.ETS.Types.ConnectionConfiguration conCon= Buildings.DHC.ETS.Types.ConnectionConfiguration.Pump "District connection configuration"; parameter Integer nSysHea "Number of heating systems"; parameter Integer nSysCoo=nSysHea "Number of cooling systems"; parameter Integer nSouAmb=1 "Number of ambient sources"; parameter Modelica.Units.SI.PressureDifference dpValIso_nominal(displayUnit= "Pa") = 2E3 "Nominal pressure drop of ambient circuit isolation valves"; parameter Modelica.Units.SI.PressureDifference dp1Hex_nominal(displayUnit= "Pa") "Nominal pressure drop across heat exchanger on district side"; parameter Modelica.Units.SI.PressureDifference dp2Hex_nominal(displayUnit= "Pa") "Nominal pressure drop across heat exchanger on building side"; parameter Modelica.Units.SI.HeatFlowRate QHex_flow_nominal "Nominal heat flow rate through heat exchanger (from district to building)"; parameter Modelica.Units.SI.Temperature T_a1Hex_nominal "Nominal water inlet temperature on district side"; parameter Modelica.Units.SI.Temperature T_b1Hex_nominal "Nominal water outlet temperature on district side"; parameter Modelica.Units.SI.Temperature T_a2Hex_nominal "Nominal water inlet temperature on building side"; parameter Modelica.Units.SI.Temperature T_b2Hex_nominal "Nominal water outlet temperature on building side"; parameter Real spePum1HexMin( final unit="1", min=0)=0.1 "Heat exchanger primary pump minimum speed (fractional)"; parameter Real spePum2HexMin( final unit="1", min=0.01)=0.1 "Heat exchanger secondary pump minimum speed (fractional)"; parameter Modelica.Units.SI.Volume VTanHeaWat "Heating water tank volume"; parameter Modelica.Units.SI.Length hTanHeaWat=(VTanHeaWat*16/Modelica.Constants.pi) ^(1/3) "Heating water tank height (assuming twice the diameter)"; parameter Modelica.Units.SI.Length dInsTanHeaWat=0.1 "Heating water tank insulation thickness"; parameter Modelica.Units.SI.Volume VTanChiWat "Chilled water tank volume"; parameter Modelica.Units.SI.Length hTanChiWat=(VTanChiWat*16/Modelica.Constants.pi) ^(1/3) "Chilled water tank height (without insulation)"; parameter Modelica.Units.SI.Length dInsTanChiWat=0.1 "Chilled water tank insulation thickness"; parameter Integer nSegTan=3 "Number of volume segments for tanks"; // IO VARIABLES Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uHea "Heating enable signal"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uCoo "Cooling enable signal"; Buildings.Controls.OBC.CDL.Interfaces.RealInput THeaWatSupSet( final unit="K", displayUnit="degC") "Heating water supply temperature set point"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet( final unit="K", displayUnit="degC") "Chilled water supply temperature set point"; // COMPONENTS replaceable Buildings.DHC.ETS.Combined.Controls.BaseClasses.PartialSupervisory conSup constrainedby Buildings.DHC.ETS.Combined.Controls.BaseClasses.PartialSupervisory ( final nSouAmb=nSouAmb) "Supervisory controller"; Buildings.Fluid.Actuators.Valves.TwoWayLinear valIsoEva( redeclare final package Medium = MediumBui, final dpValve_nominal=dpValIso_nominal, final m_flow_nominal=colAmbWat.mDis_flow_nominal, use_inputFilter=false) "Evaporator to ambient loop isolation valve"; Buildings.Fluid.Actuators.Valves.TwoWayLinear valIsoCon( redeclare final package Medium = MediumBui, final dpValve_nominal=dpValIso_nominal, final m_flow_nominal=colAmbWat.mDis_flow_nominal, use_inputFilter=false) "Condenser to ambient loop isolation valve"; Buildings.DHC.ETS.Combined.Subsystems.HeatExchanger hex( redeclare final package Medium1=MediumSer, redeclare final package Medium2=MediumBui, final allowFlowReversal1=allowFlowReversalSer, final allowFlowReversal2=allowFlowReversalBui, final conCon=conCon, final dp1Hex_nominal=dp1Hex_nominal, final dp2Hex_nominal=dp2Hex_nominal, final Q_flow_nominal=QHex_flow_nominal, final T_a1_nominal=T_a1Hex_nominal, final T_b1_nominal=T_b1Hex_nominal, final T_a2_nominal=T_a2Hex_nominal, final T_b2_nominal=T_b2Hex_nominal, final spePum1Min=spePum1HexMin, final spePum2Min=spePum2HexMin) "District heat exchanger"; Buildings.DHC.ETS.BaseClasses.StratifiedTank tanChiWat( redeclare final package Medium = MediumBui, final m_flow_nominal=colChiWat.mDis_flow_nominal, final VTan=VTanChiWat, final hTan=hTanChiWat, final dIns=dInsTanChiWat, final nSeg=nSegTan) "Chilled water tank"; Buildings.DHC.ETS.BaseClasses.StratifiedTank tanHeaWat( redeclare final package Medium = MediumBui, final m_flow_nominal=colHeaWat.mDis_flow_nominal, final VTan=VTanHeaWat, final hTan=hTanHeaWat, final dIns=dInsTanHeaWat, final nSeg=nSegTan) "Heating water tank"; Buildings.DHC.ETS.BaseClasses.CollectorDistributor colChiWat( redeclare final package Medium = MediumBui, final nCon=1 + nSysCoo, mCon_flow_nominal={colAmbWat.mDis_flow_nominal}) "Collector/distributor for chilled water"; Buildings.DHC.ETS.BaseClasses.CollectorDistributor colHeaWat( redeclare final package Medium = MediumBui, final nCon=1 + nSysHea, mCon_flow_nominal={colAmbWat.mDis_flow_nominal}) "Collector/distributor for heating water"; Buildings.DHC.ETS.BaseClasses.CollectorDistributor colAmbWat( redeclare final package Medium = MediumBui, final nCon=nSouAmb, mCon_flow_nominal={hex.m2_flow_nominal}) "Collector/distributor for ambient water"; Buildings.Controls.OBC.CDL.Reals.MultiSum totPPum( nin=1) "Total pump power"; Buildings.Controls.OBC.CDL.Reals.MultiSum totPHea( nin=1) "Total power drawn by heating system"; Buildings.Controls.OBC.CDL.Reals.MultiSum totPCoo( nin=1) "Total power drawn by cooling system"; Buildings.Fluid.Sources.Boundary_pT bou(redeclare final package Medium = MediumBui, nPorts=1) "Pressure boundary condition representing expansion vessel (common to HHW and CHW)"; protected parameter Boolean have_val1Hex= conCon == DHC.ETS.Types.ConnectionConfiguration.TwoWayValve "True in case of control valve on district side, false in case of a pump"; equation connect(hex.PPum,totPPum.u[1]); connect(THeaWatSupSet,conSup.THeaWatSupPreSet); connect(tanHeaWat.TTop,conSup.THeaWatTop); connect(tanChiWat.TBot,conSup.TChiWatBot); connect(hex.port_b2,colAmbWat.ports_aCon[1]); connect(hex.port_a2,colAmbWat.ports_bCon[1]); connect(totPPum.y,PPum); connect(hex.yValIso_actual[1],valIsoCon.y_actual); connect(hex.yValIso_actual[2],valIsoEva.y_actual); connect(valIsoEva.port_b,colAmbWat.port_bDisSup); connect(valIsoCon.port_b,colAmbWat.port_aDisSup); connect(TChiWatSupSet,conSup.TChiWatSupPreSet); connect(uCoo,conSup.uCoo); connect(uHea,conSup.uHea); connect(valIsoEva.port_a,colChiWat.ports_aCon[1]); connect(colAmbWat.port_aDisRet,colChiWat.ports_bCon[1]); connect(conSup.yValIsoEva,valIsoEva.y); connect(conSup.yValIsoCon,valIsoCon.y); connect(conSup.yAmb[nSouAmb],hex.u); connect(colChiWat.port_bDisRet,tanChiWat.port_aBot); connect(colChiWat.port_aDisSup,tanChiWat.port_bTop); connect(colHeaWat.port_bDisRet,tanHeaWat.port_aTop); connect(tanHeaWat.port_bBot,colHeaWat.port_aDisSup); connect(valIsoCon.port_a,colHeaWat.ports_aCon[1]); connect(colAmbWat.port_bDisRet,colHeaWat.ports_bCon[1]); connect(totPHea.y,PHea); connect(totPCoo.y,PCoo); connect(bou.ports[1], colChiWat.port_aDisSup); end PartialParallel;