modelBuildingTimeSeriesAtETS
Information
This model is intended for existing steam district heating systems where the heating load at the energy transfer station (ETS) is availble as a time series data input. Thus, the building-side piping and equipement is not included in this model, as depicted below.
.
Implementation
With the time series input, this model is configured such that the control volume (representing the steam side of the heat exchanger) has steady state energy and mass balances. The steam trap also has steady state balances by design. Meanwhile, the condensate return pump allows either dynamic or steady state balances. The mass flow rate at the pump is prescribed ideally such that the heat flow rate input from the time series is rejected at the control volume based on the physical laws.
References
Kathryn Hinkelman, Saranya Anbarasu, Michael Wetter, Antoine Gautier, Wangda Zuo. 2022. “A Fast and Accurate Modeling Approach for Water and Steam Thermodynamics with Practical Applications in District Heating System Simulation,” Energy, 254(A), pp. 124227. 10.1016/j.energy.2022.124227
Kathryn Hinkelman, Saranya Anbarasu, Michael Wetter, Antoine Gautier, Baptiste Ravache, Wangda Zuo 2022. “Towards Open-Source Modelica Models For Steam-Based District Heating Systems.” Proc. of the 1st International Workshop On Open Source Modelling And Simulation Of Energy Systems (OSMSES 2022), Aachen, German, April 4-5, 2022. 10.1109/OSMSES54027.2022.9769121
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Boolean | have_prv | false | Set to true if the building has a pressure reducing valve (PRV) station |
| Modelica.Units.SI.Volume | V | 1 | Total volume of the steam side of the heat exchanger |
| Assumptions | |||
| Boolean | allowFlowReversal | false | = false to simplify equations, assuming, but not enforcing, no flow reversal. Set to false because the flow rate is prescribed. |
| Nominal condition | |||
| Modelica.Units.SI.Power | Q_flow_nominal | Nominal heat flow rate | |
| Modelica.Units.SI.PressureDifference | dp_nominal | Pressure drop at nominal mass flow rate | |
| Modelica.Units.SI.AbsolutePressure | pSte_nominal | MediumSte.p_default | Nominal pressure of steam entering the building |
| Modelica.Units.SI.AbsolutePressure | pLow_nominal | 0.8*MediumSte.p_default | Nominal low pressure setpoint, downstream of PRV (if present) |
| Modelica.Units.SI.Temperature | TSte_nominal | MediumSte.saturationTemperature(pSte_nominal) | Nominal temperature of steam entering the building |
| Modelica.Units.SI.Temperature | TLow_nominal | MediumSte.temperature(MediumSte.setState_phX(p = pLow_nominal, h = MediumSte.specificEnthalpy(MediumSte.setState_pTX(p = pSte_nominal, T = TSte_nominal, X = MediumSte.X_default)), X = MediumSte.X_default)) | Nominal temperature of steam entering heat exchanger, if PRV present |
| Modelica.Units.SI.SpecificEnthalpy | dh_nominal | MediumSte.specificEnthalpy(MediumSte.setState_pTX(p = if have_prv then pLow_nominal else pSte_nominal, T = if have_prv then TLow_nominal else TSte_nominal, X = MediumSte.X_default)) - MediumWat.specificEnthalpy(MediumWat.setState_pTX(p = if have_prv then pLow_nominal else pSte_nominal, T = if have_prv then TLow_nominal else TSte_nominal, X = MediumWat.X_default)) | Nominal change in enthalpy across the heat exchanger |
| Modelica.Units.SI.MassFlowRate | m_flow_nominal | Q_flow_nominal/dh_nominal | Nominal mass flow rate |
| Dynamics › Equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamics.DynamicFreeInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Initialization | |||
| MediumSte.AbsolutePressure | p_start | MediumSte.p_default | Start value of pressure |
| MediumSte.Temperature | T_start | MediumSte.T_default | Start value of temperature |
| Modelica.Units.SI.MassFlowRate | m_flow_start | 0 | Initial value of mass flow rate |
| Load Profile › Table data definition | |||
| Boolean | tableOnFile | false | = true, if table is defined on file or in function usertab |
| Real[:,:] | QHeaLoa | fill(0.0, 0, 2) | Table matrix (time = first column; e.g., table=[0, 0; 1, 1; 2, 4]) |
| String | tableName | "NoName" | Table name on file or in function usertab (see docu) |
| String | fileName | "NoName" | File where matrix is stored |
| Load Profile › Table data interpretation | |||
| Integer[:] | columns | 2:size(QHeaLoa, 2) | Columns of table to be interpolated |
| Modelica.Blocks.Types.Smoothness | smoothness | Modelica.Blocks.Types.Smoothness.LinearSegments | Smoothness of table interpolation |
| Modelica.Units.SI.Time | timeScale | 1 | Time scale of first table column |
| Advanced › Diagnostics | |||
| Boolean | show_T | false | = true, if actual temperature at port is computed |
| Advanced › Nominal condition | |||
| Modelica.Units.SI.Density | rho_a_default | MediumSte.density(MediumSte.setState_pTX(p = pSte_nominal, T = TSte_nominal, X = MediumSte.X_default)) | Default steam density |
| Modelica.Units.SI.Density | rho_b_default | MediumWat.density(MediumWat.setState_pTX(p = 101325, T = 273.15 + 90, X = MediumWat.X_default)) | Default water density |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Blocks.Interfaces.RealOutput | Q_flow | Total heat transfer rate | |
| Modelica.Blocks.Interfaces.RealOutput | EHea | Total heating energy | |
| Modelica.Fluid.Interfaces.FluidPort_a | port_a | Inlet port | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b | Outlet port |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| MediumSte.ThermodynamicState | sta_a | MediumSte.setState_phX(port_a.p, noEvent(actualStream(port_a.h_outflow)), noEvent(actualStream(port_a.Xi_outflow))) | Medium properties in port_a |
| MediumWat.ThermodynamicState | sta_b | MediumWat.setState_phX(port_b.p, noEvent(actualStream(port_b.h_outflow)), noEvent(actualStream(port_b.Xi_outflow))) | Medium properties in port_b |
| Modelica.Blocks.Sources.CombiTimeTable | QHea | Heating demand | |
| Modelica.Blocks.Continuous.Integrator | IntEHea | Integrator for heating energy of building | |
| Buildings.Fluid.Movers.FlowControlled_m_flow | pumCNR | Condensate return pump | |
| Buildings.DHC.Loads.Steam.BaseClasses.ControlVolumeCondensation | vol | Steam side of the heat exchanger, modeled as a steady state control volume | |
| Buildings.DHC.Loads.Steam.BaseClasses.SteamTrap | steTra | Steam trap | |
| Buildings.Fluid.Sensors.SpecificEnthalpyTwoPort | hIn | Enthalpy in | |
| Buildings.Fluid.Sensors.SpecificEnthalpyTwoPort | hOut | Enthalpy out | |
| Modelica.Blocks.Math.Add | dh | Change in enthalpy with building-side fluid | |
| Modelica.Blocks.Math.Division | m_flow | Mass flow | |
| Buildings.DHC.Loads.Steam.BaseClasses.ValveSelfActing | prv | Optional pressure reducing valve |
Contents
| Name | Description |
|---|---|
Revisions
-
May 8, 2024, by Michael Wetter:
Removed connection to itself. -
September 15, 2023, by Kathryn Hinkelman:
Added publication references. -
March 28, 2022, by Kathryn Hinkelman:
RemovedmassDynamics.
This is for issue 1542. -
March 2, 2022, by Kathryn Hinkelman:
First implementation.