Buildings.Fluid.CHPs.OrganicRankine.Examples

Package containing example models

Information

This package contains examples.

Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).

Package Content

Name Description
Buildings.Fluid.CHPs.OrganicRankine.Examples.ORCHotWater ORCHotWater ORC that outputs hot water at a fixed temperature

Buildings.Fluid.CHPs.OrganicRankine.Examples.ORCHotWater Buildings.Fluid.CHPs.OrganicRankine.Examples.ORCHotWater

ORC that outputs hot water at a fixed temperature

Buildings.Fluid.CHPs.OrganicRankine.Examples.ORCHotWater

Information

This example model demonstrates how Buildings.Fluid.CHPs.OrganicRankine.ConstantEvaporation can be integrated in a system. The three-way valve is controlled to track the hot water output temperature, which is the cold fluid of the ORC, at a set point of 55°C. In addition, a safety control sequence prevents the ORC from turning on until a minimum flow rate is established in the condenser water loop.

Extends from Modelica.Icons.Example (Icon for runnable examples).

Parameters

TypeNameDefaultDescription
MassFlowRatemHot_flow_nominal1Nominal mass flow rate of evaporator hot fluid [kg/s]
MassFlowRatemCol_flow_nominal1.35Nominal mass flow rate of condenser cold fluid [kg/s]
PressureDifferencedpCon_nominal10000Nominal pressure drop across the ORC condenser [Pa]
PressureDifferencedpValCol_nominal10000Nominal pressure difference used for valves in the cold fluid loop [Pa]
ThermodynamicTemperatureTCol_start35 + 273.15Start value for cold fluid temperature [K]

Modelica definition

model ORCHotWater "ORC that outputs hot water at a fixed temperature" extends Modelica.Icons.Example; package MediumHot = Buildings.Media.Air "Evaporator hot fluid"; package MediumCol = Buildings.Media.Water "Condenser cold fluid"; parameter Modelica.Units.SI.MassFlowRate mHot_flow_nominal = 1 "Nominal mass flow rate of evaporator hot fluid"; parameter Modelica.Units.SI.MassFlowRate mCol_flow_nominal = 1.35 "Nominal mass flow rate of condenser cold fluid"; parameter Modelica.Units.SI.PressureDifference dpCon_nominal( displayUnit = "Pa") = 10000 "Nominal pressure drop across the ORC condenser"; parameter Modelica.Units.SI.PressureDifference dpValCol_nominal( displayUnit = "Pa") = 10000 "Nominal pressure difference used for valves in the cold fluid loop"; parameter Modelica.Units.SI.ThermodynamicTemperature TCol_start = 35 + 273.15 "Start value for cold fluid temperature"; Buildings.Fluid.CHPs.OrganicRankine.ConstantEvaporation orc( redeclare final package Medium1 = MediumHot, redeclare final package Medium2 = MediumCol, T2_start=TCol_start, redeclare Buildings.Fluid.CHPs.OrganicRankine.Data.WorkingFluids.R123 pro, final mHot_flow_nominal=mHot_flow_nominal, dTPinEva_set=5, TWorEva=373.15, pWorEva(displayUnit="bar"), final mCol_flow_nominal=mCol_flow_nominal, dpHot_nominal=0, dpCol_nominal=0, dTPinCon=5, mWor_flow_max=0.5, mWor_flow_min=0.1, mWor_flow_hysteresis=0.05, etaExp=0.8, etaPum=0.6) "Organic Rankine cycle"; Buildings.Fluid.Sources.MassFlowSource_T souHot( redeclare final package Medium = MediumHot, m_flow=mHot_flow_nominal, T=423.15, nPorts=1) "Evaporator hot fluid source"; Buildings.Fluid.Sources.Boundary_pT sinHot( redeclare final package Medium = MediumHot, nPorts=1) "Evaporator hot fluid sink"; Buildings.Controls.Continuous.LimPID conPI( controllerType=Modelica.Blocks.Types.SimpleController.PI, k=0.25, Ti=30, Ni=0.2, initType=Modelica.Blocks.Types.Init.InitialOutput, y_start=0, reverseActing=false) "PI controller"; Modelica.Blocks.Sources.Constant TWatOut_set(k=55 + 273.15) "Set point of hot water output"; Buildings.Fluid.Sources.Boundary_pT colBou( redeclare final package Medium = MediumCol, use_T_in=true, nPorts=2) "Cold fluid boundary conditions"; Buildings.Fluid.Sensors.TemperatureTwoPort senTWatSup( redeclare final package Medium = MediumCol, m_flow_nominal=mCol_flow_nominal, T_start=TCol_start) "Water supply temperature"; Buildings.Fluid.Sensors.TemperatureTwoPort senTWatRet( redeclare final package Medium = MediumCol, m_flow_nominal=mCol_flow_nominal, T_start=TCol_start) "Water return temperature"; Modelica.Blocks.Sources.TimeTable TWatRet( y(final unit="K", displayUnit="degC"), table=[0,35; 3,35; 6,45; 9,45], timeScale=100, offset=273.15) "Water return temperature values"; Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear val( redeclare final package Medium = MediumCol, energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, T_start=TCol_start, from_dp=false, use_strokeTime=false, final m_flow_nominal=mCol_flow_nominal, final dpValve_nominal=dpValCol_nominal, final dpFixed_nominal=fill(dpCon_nominal, 2)) "Control valve"; Buildings.Fluid.Movers.Preconfigured.FlowControlled_m_flow pum( redeclare final package Medium = MediumCol, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, T_start=TCol_start, addPowerToMedium=false, m_flow_nominal=mCol_flow_nominal, dp_nominal=dpCon_nominal + dpValCol_nominal, m_flow_start=0) "Cooling water pump"; Buildings.Fluid.FixedResistances.Junction spl( redeclare final package Medium = MediumCol, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, final dp_nominal=fill(0,3), final m_flow_nominal=mCol_flow_nominal .* {1,-1,-1}, final from_dp=false, T_start=TCol_start) "Flow splitter"; Modelica.Blocks.Math.BooleanToReal booToRea( realTrue = mCol_flow_nominal) "Constant speed primary pump control signal"; Modelica.Blocks.Logical.Hysteresis hys( uLow=mCol_flow_nominal/3, uHigh=mCol_flow_nominal/2) "Hysteresis"; Modelica.Blocks.Logical.And and1; Buildings.Fluid.Sensors.TemperatureTwoPort senTColOut( redeclare final package Medium = MediumCol, m_flow_nominal=mCol_flow_nominal, T_start=TCol_start); Buildings.Fluid.Sensors.MassFlowRate senMasFlo( redeclare final package Medium = MediumCol) "Mass flow rate sensor for the ORC condenser cold fluid"; Modelica.Blocks.Sources.BooleanTable booTab(table={100}, startValue=false) "Boolean table with initial false"; equation connect(orc.port_b1, sinHot.ports[1]); connect(souHot.ports[1], orc.port_a1); connect(TWatOut_set.y, conPI.u_s); connect(colBou.ports[1], senTWatSup.port_b); connect(senTWatRet.port_a, colBou.ports[2]); connect(TWatRet.y, colBou.T_in); connect(senTWatRet.port_b, val.port_1); connect(spl.port_3, val.port_3); connect(spl.port_2, senTWatSup.port_a); connect(conPI.y, val.y); connect(and1.y, orc.ena); connect(orc.port_b2,senTColOut. port_a); connect(senTColOut.port_b, pum.port_a); connect(senTColOut.T, conPI.u_m); connect(val.port_2, orc.port_a2); connect(pum.m_flow_in, booToRea.y); connect(spl.port_1, senMasFlo.port_b); connect(senMasFlo.port_a, pum.port_b); connect(booTab.y, booToRea.u); connect(booTab.y, and1.u2); connect(hys.y, and1.u1); connect(senMasFlo.m_flow, hys.u); end ORCHotWater;