This package contains examples for the use of models that can be found in Buildings.Fluid.HeatExchangers.
Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).
Name | Description |
---|---|
ConstantEffectiveness | Model that demonstrates use of a heat exchanger with constant effectiveness |
HeaterCoolerPrescribed | Model that demonstrates the ideal heater model |
DryEffectivenessNTU | Model that demonstrates use of a heat exchanger without condensation that uses the epsilon-NTU relation |
DryEffectivenessNTUMassFlow | Model of epsilon-NTU dry coil that tests variable mass flow rates |
DryEffectivenessNTUPControl | Model that demonstrates use of a heat exchanger without condensation that uses the epsilon-NTU relation with feedback control |
DryCoilCounterFlowMassFlow | Model of a cooling coil that tests variable mass flow rates |
WetCoilCounterFlowMassFlow | Model of a cooling coil that tests variable mass flow rates |
DryCoilCounterFlowPControl | Model that demonstrates use of a heat exchanger without condensation and with feedback control |
WetCoilCounterFlowPControl | Model that demonstrates use of a heat exchanger with condensation and with feedback control |
DryCoilDiscretized | Model that demonstrates use of a finite volume model of a heat exchanger without condensation |
WetCoilDiscretized | Model that demonstrates use of a finite volume model of a heat exchanger with condensation |
DryCoilDiscretizedPControl | Model that demonstrates use of a finite volume model of a heat exchanger without condensation and with feedback control |
WetCoilDiscretizedPControl | Model that demonstrates use of a finite volume model of a heat exchanger with condensation and feedback control |
BaseClasses | Package with base classes for Buildings.Fluid.HeatExchangers.Examples |
model ConstantEffectiveness "Model that demonstrates use of a heat exchanger with constant effectiveness" import Buildings; extends Modelica.Icons.Example; package Medium1 = Buildings.Media.ConstantPropertyLiquidWater; package Medium2 = Buildings.Media.GasesPTDecoupled.MoistAirUnsaturated;Buildings.Fluid.Sources.Boundary_pT sin_2( redeclare package Medium = Medium2, use_p_in=true, nPorts=1, T=273.15 + 10, X={0.001,0.999}); Modelica.Blocks.Sources.Ramp PIn( height=200, duration=60, offset=101325, startTime=50); Buildings.Fluid.Sources.Boundary_pT sou_2( redeclare package Medium = Medium2, T=273.15 + 5, use_p_in=true, use_T_in=true, nPorts=1); Modelica.Blocks.Sources.Ramp TWat( height=10, duration=60, offset=273.15 + 30, startTime=60) "Water temperature"; Modelica.Blocks.Sources.Constant TDb(k=293.15) "Drybulb temperature"; Modelica.Blocks.Sources.Constant POut(k=101325); Buildings.Fluid.Sources.Boundary_pT sin_1( redeclare package Medium = Medium1, use_p_in=true, nPorts=1, p=300000, T=273.15 + 25); Buildings.Fluid.Sources.Boundary_pT sou_1( redeclare package Medium = Medium1, p=300000 + 5000, T=273.15 + 50, use_T_in=true, nPorts=1); Buildings.Fluid.HeatExchangers.ConstantEffectiveness hex(redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, show_T=true, m1_flow_nominal=5, m2_flow_nominal=5, dp1_nominal=500, dp2_nominal=10); inner Modelica.Fluid.System system( p_ambient=300000, T_ambient=313.15); Modelica.Blocks.Sources.Trapezoid trapezoid( amplitude=5000, rising=10, width=100, falling=10, period=3600, offset=300000); equationconnect(PIn.y,sou_2. p_in); connect(TDb.y, sou_2.T_in); connect(TWat.y, sou_1.T_in); connect(sou_1.ports[1], hex.port_a1); connect(hex.port_a2, sou_2.ports[1]); connect(POut.y, sin_2.p_in); connect(hex.port_b1, sin_1.ports[1]); connect(sin_2.ports[1], hex.port_b2); connect(trapezoid.y, sin_1.p_in); end ConstantEffectiveness;
Model that demonstrates the use of an ideal heater. Both heater models are identical, except that one model is configured as a steady-state model, whereas the other is configured as a dynamic model. Both heaters add heat to the medium to track a set-point for the outlet temperature.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Type | Name | Default | Description |
---|---|---|---|
MassFlowRate | m_flow_nominal | 3000/1000/20 | Nominal mass flow rate [kg/s] |
model HeaterCoolerPrescribed "Model that demonstrates the ideal heater model" import Buildings; extends Modelica.Icons.Example; package Medium = Buildings.Media.GasesConstantDensity.SimpleAir;inner Modelica.Fluid.System system(m_flow_start=0, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState); parameter Modelica.Media.Interfaces.PartialMedium.MassFlowRate m_flow_nominal= 3000/1000/20 "Nominal mass flow rate";Buildings.Fluid.Sources.Boundary_pT sou( redeclare package Medium = Medium, nPorts=3, use_T_in=false, p(displayUnit="Pa"), T=293.15) "Source"; Buildings.Fluid.HeatExchangers.HeaterCoolerPrescribed heaSte( redeclare package Medium = Medium, m_flow_nominal=m_flow_nominal, dp_nominal=6000, Q_flow_nominal=3000, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState) "Steady-state model of the heater"; Buildings.Fluid.Sensors.TemperatureTwoPort senTem1(redeclare package Medium = Medium, m_flow_nominal=m_flow_nominal) "Temperature sensor"; Modelica.Blocks.Sources.TimeTable TSet(table=[0, 273.15 + 20; 120, 273.15 + 20; 120, 273.15 + 30; 1200, 273.15 + 30]) "Setpoint"; Buildings.Controls.Continuous.LimPID con1( controllerType=Modelica.Blocks.Types.SimpleController.PI, Td=1, k=1, Ti=10) "Controller"; Buildings.Fluid.Movers.FlowMachine_m_flow fan( redeclare package Medium = Medium, m_flow_nominal=m_flow_nominal, dynamicBalance=false, filteredSpeed=false) "Fan"; Modelica.Blocks.Sources.Constant const(k=2*m_flow_nominal) "Mass flow rate signal for pump"; Buildings.Fluid.HeatExchangers.HeaterCoolerPrescribed heaDyn( redeclare package Medium = Medium, m_flow_nominal=m_flow_nominal, dp_nominal=6000, Q_flow_nominal=3000, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyStateInitial) "Dynamic model of the heater"; Buildings.Fluid.Sensors.TemperatureTwoPort senTem2(redeclare package Medium = Medium, m_flow_nominal=m_flow_nominal) "Temperature sensor"; Buildings.Controls.Continuous.LimPID con2( controllerType=Modelica.Blocks.Types.SimpleController.PI, Td=1, Ti=10, k=0.1) "Controller"; equationconnect(senTem1.T, con1.u_m); connect(TSet.y, con1.u_s); connect(con1.y, heaSte.u); connect(sou.ports[1], heaSte.port_a); connect(heaSte.port_b, senTem1.port_a); connect(senTem1.port_b, fan.port_a); connect(senTem2.T, con2.u_m); connect(TSet.y, con2.u_s); connect(con2.y, heaDyn.u); connect(heaDyn.port_b, senTem2.port_a); connect(senTem2.port_b, fan.port_a); connect(sou.ports[2], heaDyn.port_a); connect(const.y, fan.m_flow_in); connect(fan.port_b, sou.ports[3]); end HeaterCoolerPrescribed;
Type | Name | Default | Description |
---|---|---|---|
SpecificHeatCapacity | cp1 | Medium1.specificHeatCapacity... | Specific heat capacity of medium 2 [J/(kg.K)] |
SpecificHeatCapacity | cp2 | Medium2.specificHeatCapacity... | Specific heat capacity of medium 2 [J/(kg.K)] |
MassFlowRate | m1_flow | 5 | Nominal mass flow rate medium 1 [kg/s] |
MassFlowRate | m2_flow | m1_flow*cp1/cp2 | Nominal mass flow rate medium 2 [kg/s] |
model DryEffectivenessNTU "Model that demonstrates use of a heat exchanger without condensation that uses the epsilon-NTU relation" import Buildings; extends Modelica.Icons.Example; package Medium1 = Buildings.Media.ConstantPropertyLiquidWater; package Medium2 = Buildings.Media.IdealGases.SimpleAir; parameter Modelica.SIunits.SpecificHeatCapacity cp1= Medium1.specificHeatCapacityCp( Medium1.setState_pTX(Medium1.p_default, Medium1.T_default, Medium1.X_default)) "Specific heat capacity of medium 2"; parameter Modelica.SIunits.SpecificHeatCapacity cp2= Medium2.specificHeatCapacityCp( Medium2.setState_pTX(Medium2.p_default, Medium2.T_default, Medium2.X_default)) "Specific heat capacity of medium 2"; parameter Modelica.SIunits.MassFlowRate m1_flow = 5 "Nominal mass flow rate medium 1"; parameter Modelica.SIunits.MassFlowRate m2_flow = m1_flow*cp1/ cp2 "Nominal mass flow rate medium 2";Buildings.Fluid.Sources.Boundary_pT sin_2( redeclare package Medium = Medium2, use_p_in=true, nPorts=5, T=273.15 + 10); Modelica.Blocks.Sources.Ramp PIn( height=200, duration=60, offset=101325, startTime=100); Buildings.Fluid.Sources.Boundary_pT sou_2( redeclare package Medium = Medium2, T=273.15 + 5, use_p_in=true, use_T_in=true, nPorts=5); Modelica.Blocks.Sources.Ramp TWat( height=10, duration=60, offset=273.15 + 30, startTime=60) "Water temperature"; Modelica.Blocks.Sources.Constant TDb(k=293.15) "Drybulb temperature"; Modelica.Blocks.Sources.Constant POut(k=101325); Buildings.Fluid.Sources.Boundary_pT sin_1( redeclare package Medium = Medium1, use_p_in=true, nPorts=5, p=300000, T=273.15 + 25); Buildings.Fluid.Sources.Boundary_pT sou_1( redeclare package Medium = Medium1, p=300000 + 5000, T=273.15 + 50, use_T_in=true, nPorts=5); Buildings.Fluid.HeatExchangers.DryEffectivenessNTU hexPar( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, dp1_nominal=500, dp2_nominal=10, m1_flow_nominal=m1_flow, m2_flow_nominal=m2_flow, Q_flow_nominal=m2_flow*cp2*(24 - 20), configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.ParallelFlow, show_T=true, T_a1_nominal=303.15, T_a2_nominal=293.15); inner Modelica.Fluid.System system( p_ambient=300000, T_ambient=313.15); Buildings.Fluid.HeatExchangers.DryEffectivenessNTU hexCou( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, dp1_nominal=500, dp2_nominal=10, m1_flow_nominal=m1_flow, m2_flow_nominal=m2_flow, Q_flow_nominal=m2_flow*cp2*(24 - 20), configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow, show_T=true, T_a1_nominal=303.15, T_a2_nominal=293.15); Buildings.Fluid.HeatExchangers.DryEffectivenessNTU hexCroC1Mix( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, dp1_nominal=500, dp2_nominal=10, m1_flow_nominal=m1_flow, m2_flow_nominal=m2_flow, Q_flow_nominal=m2_flow*cp2*(24 - 20), configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CrossFlowStream1MixedStream2Unmixed, show_T=true, T_a1_nominal=303.15, T_a2_nominal=293.15); Buildings.Fluid.HeatExchangers.DryEffectivenessNTU hexCroC1Unm( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, dp1_nominal=500, dp2_nominal=10, m1_flow_nominal=m1_flow, m2_flow_nominal=m2_flow, Q_flow_nominal=m2_flow*cp2*(24 - 20), configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CrossFlowStream1UnmixedStream2Mixed, show_T=true, T_a1_nominal=303.15, T_a2_nominal=293.15); Buildings.Fluid.HeatExchangers.DryEffectivenessNTU hexCroUnm( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, dp1_nominal=500, dp2_nominal=10, m1_flow_nominal=m1_flow, m2_flow_nominal=m2_flow, Q_flow_nominal=m2_flow*cp2*(24 - 20), configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CrossFlowUnmixed, show_T=true, T_a1_nominal=303.15, T_a2_nominal=293.15); Modelica.Blocks.Sources.Trapezoid trapezoid( amplitude=5000, rising=10, width=100, falling=10, period=3600, offset=300000); equationconnect(PIn.y,sou_2. p_in); connect(TDb.y, sou_2.T_in); connect(TWat.y, sou_1.T_in); connect(sou_1.ports[1], hexPar.port_a1); connect(hexPar.port_a2, sou_2.ports[1]); connect(POut.y, sin_2.p_in); connect(hexPar.port_b1, sin_1.ports[1]); connect(sin_2.ports[1], hexPar.port_b2); connect(hexCou.port_a1, sou_1.ports[2]); connect(hexCroC1Mix.port_a1, sou_1.ports[3]); connect(hexCroC1Unm.port_a1, sou_1.ports[4]); connect(hexCou.port_b2, sin_2.ports[2]); connect(hexCroC1Mix.port_b2, sin_2.ports[3]); connect(hexCroC1Unm.port_b2, sin_2.ports[4]); connect(hexCou.port_b1, sin_1.ports[2]); connect(hexCroC1Mix.port_b1, sin_1.ports[3]); connect(hexCroC1Unm.port_b1, sin_1.ports[4]); connect(hexCou.port_a2, sou_2.ports[2]); connect(hexCroC1Mix.port_a2, sou_2.ports[3]); connect(hexCroC1Unm.port_a2, sou_2.ports[4]); connect(hexCroUnm.port_a1, sou_1.ports[5]); connect(hexCroUnm.port_b2, sin_2.ports[5]); connect(hexCroUnm.port_b1, sin_1.ports[5]); connect(hexCroUnm.port_a2, sou_2.ports[5]); connect(trapezoid.y, sin_1.p_in); end DryEffectivenessNTU;
Type | Name | Default | Description |
---|---|---|---|
Temperature | T_a1_nominal | 5 + 273.15 | [K] |
Temperature | T_b1_nominal | 10 + 273.15 | [K] |
Temperature | T_a2_nominal | 30 + 273.15 | [K] |
Temperature | T_b2_nominal | 15 + 273.15 | [K] |
HeatFlowRate | Q_flow_nominal | m1_flow_nominal*4200*(T_a1_n... | Nominal heat transfer [W] |
MassFlowRate | m1_flow_nominal | 0.1 | Nominal mass flow rate medium 1 [kg/s] |
MassFlowRate | m2_flow_nominal | m1_flow_nominal*4200/1000*(T... | Nominal mass flow rate medium 2 [kg/s] |
model DryEffectivenessNTUMassFlow "Model of epsilon-NTU dry coil that tests variable mass flow rates" extends Modelica.Icons.Example; import Buildings; extends Buildings.Fluid.HeatExchangers.Examples.BaseClasses.EffectivenessNTUMassFlow ( sou_1(nPorts=1), sin_1(nPorts=1), sou_2(nPorts=1), sin_2(nPorts=1));Buildings.Fluid.HeatExchangers.DryEffectivenessNTU hex( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp2_nominal(displayUnit="Pa") = 200, configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow, allowFlowReversal1=true, allowFlowReversal2=true, dp1_nominal(displayUnit="Pa") = 3000, Q_flow_nominal=Q_flow_nominal, T_a1_nominal=T_a1_nominal, T_a2_nominal=T_a2_nominal, show_T=true); Buildings.Fluid.Sensors.RelativeHumidityTwoPort senRelHum( redeclare package Medium = Medium2, m_flow_nominal=m2_flow_nominal); equationconnect(sou_1.ports[1], hex.port_a1); connect(hex.port_b1, sin_1.ports[1]); connect(hex.port_a2, sou_2.ports[1]); connect(senRelHum.port_a, hex.port_b2); connect(senRelHum.port_b, sin_2.ports[1]); end DryEffectivenessNTUMassFlow;
Type | Name | Default | Description |
---|---|---|---|
Temperature | T_a1_nominal | 60 + 273.15 | [K] |
Temperature | T_b1_nominal | 50 + 273.15 | [K] |
Temperature | T_a2_nominal | 20 + 273.15 | [K] |
Temperature | T_b2_nominal | 40 + 273.15 | [K] |
MassFlowRate | m1_flow_nominal | 5 | Nominal mass flow rate medium 1 [kg/s] |
MassFlowRate | m2_flow_nominal | m1_flow_nominal*4200/1000*(T... | Nominal mass flow rate medium 2 [kg/s] |
model DryEffectivenessNTUPControl "Model that demonstrates use of a heat exchanger without condensation that uses the epsilon-NTU relation with feedback control" import Buildings; extends Modelica.Icons.Example; package Medium1 = Buildings.Media.ConstantPropertyLiquidWater; //package Medium2 = Buildings.Media.PerfectGases.MoistAir; //package Medium2 = Buildings.Media.GasesPTDecoupled.MoistAir; // package Medium2 = Buildings.Media.GasesPTDecoupled.MoistAirUnsaturated; package Medium2 = Buildings.Media.GasesPTDecoupled.SimpleAir; parameter Modelica.SIunits.Temperature T_a1_nominal = 60+273.15; parameter Modelica.SIunits.Temperature T_b1_nominal = 50+273.15; parameter Modelica.SIunits.Temperature T_a2_nominal = 20+273.15; parameter Modelica.SIunits.Temperature T_b2_nominal = 40+273.15; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 5 "Nominal mass flow rate medium 1"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = m1_flow_nominal*4200/1000*(T_a1_nominal-T_b1_nominal)/(T_b2_nominal-T_a2_nominal) "Nominal mass flow rate medium 2";Buildings.Fluid.Sources.Boundary_pT sin_2( redeclare package Medium = Medium2, use_p_in=false, p(displayUnit="Pa") = 101325, T=303.15, nPorts=1); Buildings.Fluid.Sources.Boundary_pT sou_2( redeclare package Medium = Medium2, nPorts=1, use_p_in=false, use_T_in=false, p(displayUnit="Pa") = 101625, T=T_a2_nominal); Buildings.Fluid.Sources.Boundary_pT sin_1( redeclare package Medium = Medium1, use_p_in=false, p=300000, T=293.15, nPorts=1); Buildings.Fluid.Sources.Boundary_pT sou_1( redeclare package Medium = Medium1, p=300000 + 9000, nPorts=1, use_T_in=false, T=T_a1_nominal); Buildings.Fluid.Sensors.TemperatureTwoPort temSen(redeclare package Medium = Medium2, m_flow_nominal=m2_flow_nominal); Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage val( redeclare package Medium = Medium1, l=0.005, Kv_SI=5/sqrt(4000), m_flow_nominal=m1_flow_nominal, dpFixed_nominal=2000 + 3000) "Valve model"; Buildings.Controls.Continuous.LimPID P( controllerType=Modelica.Blocks.Types.SimpleController.PI, Ti=30, k=0.1); Modelica.Blocks.Sources.Pulse TSet( amplitude=5, period=3600, offset=273.15 + 22) "Setpoint temperature"; Buildings.Fluid.HeatExchangers.DryEffectivenessNTU hex( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, show_T=true, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, Q_flow_nominal=m1_flow_nominal*4200*(T_a1_nominal-T_b1_nominal), configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow, T_a1_nominal=T_a1_nominal, T_a2_nominal=T_a2_nominal, dp1_nominal(displayUnit="Pa") = 0, dp2_nominal(displayUnit="Pa") = 200 + 100); inner Modelica.Fluid.System system; equationconnect(val.port_b, hex.port_a1); connect(sou_1.ports[1], val.port_a); connect(sou_2.ports[1], hex.port_a2); connect(hex.port_b2, temSen.port_a); connect(TSet.y, P.u_s); connect(temSen.T, P.u_m); connect(P.y, val.y); connect(hex.port_b1, sin_1.ports[1]); connect(temSen.port_b, sin_2.ports[1]); end DryEffectivenessNTUPControl;
Type | Name | Default | Description |
---|---|---|---|
Temperature | T_a1_nominal | 5 + 273.15 | [K] |
Temperature | T_b1_nominal | 10 + 273.15 | [K] |
Temperature | T_a2_nominal | 30 + 273.15 | [K] |
Temperature | T_b2_nominal | 15 + 273.15 | [K] |
HeatFlowRate | Q_flow_nominal | m1_flow_nominal*4200*(T_a1_n... | Nominal heat transfer [W] |
MassFlowRate | m1_flow_nominal | 0.1 | Nominal mass flow rate medium 1 [kg/s] |
MassFlowRate | m2_flow_nominal | m1_flow_nominal*4200/1000*(T... | Nominal mass flow rate medium 2 [kg/s] |
model DryCoilCounterFlowMassFlow "Model of a cooling coil that tests variable mass flow rates" extends Modelica.Icons.Example; extends Buildings.Fluid.HeatExchangers.Examples.BaseClasses.EffectivenessNTUMassFlow ( sou_1(nPorts=1), sin_1(nPorts=1), sou_2(nPorts=1), sin_2(nPorts=1));DryCoilCounterFlow hex( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, show_T=true, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp2_nominal(displayUnit="Pa") = 200, allowFlowReversal1=true, allowFlowReversal2=true, dp1_nominal(displayUnit="Pa") = 3000, UA_nominal=Q_flow_nominal/Buildings.Fluid.HeatExchangers.BaseClasses.lmtd( T_a1_nominal, T_b1_nominal, T_a2_nominal, T_b2_nominal)); inner Modelica.Fluid.System system; Sensors.RelativeHumidityTwoPort senRelHum( redeclare package Medium = Medium2, m_flow_nominal=m2_flow_nominal); equationconnect(sou_1.ports[1], hex.port_a1); connect(hex.port_b1, sin_1.ports[1]); connect(hex.port_a2, sou_2.ports[1]); connect(senRelHum.port_a, hex.port_b2); connect(senRelHum.port_b, sin_2.ports[1]); end DryCoilCounterFlowMassFlow;
Type | Name | Default | Description |
---|---|---|---|
Temperature | T_a1_nominal | 5 + 273.15 | [K] |
Temperature | T_b1_nominal | 10 + 273.15 | [K] |
Temperature | T_a2_nominal | 30 + 273.15 | [K] |
Temperature | T_b2_nominal | 15 + 273.15 | [K] |
HeatFlowRate | Q_flow_nominal | m1_flow_nominal*4200*(T_a1_n... | Nominal heat transfer [W] |
MassFlowRate | m1_flow_nominal | 0.1 | Nominal mass flow rate medium 1 [kg/s] |
MassFlowRate | m2_flow_nominal | m1_flow_nominal*4200/1000*(T... | Nominal mass flow rate medium 2 [kg/s] |
model WetCoilCounterFlowMassFlow "Model of a cooling coil that tests variable mass flow rates" extends Modelica.Icons.Example; extends Buildings.Fluid.HeatExchangers.Examples.BaseClasses.EffectivenessNTUMassFlow ( sou_1(nPorts=1), sin_1(nPorts=1), sou_2(nPorts=1), sin_2(nPorts=1));WetCoilCounterFlow hex( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp2_nominal(displayUnit="Pa") = 200, allowFlowReversal1=true, allowFlowReversal2=true, dp1_nominal(displayUnit="Pa") = 3000, UA_nominal=Q_flow_nominal/Buildings.Fluid.HeatExchangers.BaseClasses.lmtd( T_a1_nominal, T_b1_nominal, T_a2_nominal, T_b2_nominal), show_T=true); inner Modelica.Fluid.System system; Sensors.RelativeHumidityTwoPort senRelHum( redeclare package Medium = Medium2, m_flow_nominal=m2_flow_nominal); equationconnect(sou_1.ports[1], hex.port_a1); connect(hex.port_b1, sin_1.ports[1]); connect(hex.port_a2, sou_2.ports[1]); connect(hex.port_b2, senRelHum.port_a); connect(senRelHum.port_b, sin_2.ports[1]); end WetCoilCounterFlowMassFlow;
Type | Name | Default | Description |
---|---|---|---|
Temperature | T_a1_nominal | 5 + 273.15 | [K] |
Temperature | T_b1_nominal | 10 + 273.15 | [K] |
Temperature | T_a2_nominal | 30 + 273.15 | [K] |
Temperature | T_b2_nominal | 15 + 273.15 | [K] |
MassFlowRate | m1_flow_nominal | 0.1 | Nominal mass flow rate medium 1 [kg/s] |
MassFlowRate | m2_flow_nominal | m1_flow_nominal*4200/1000*(T... | Nominal mass flow rate medium 2 [kg/s] |
model DryCoilCounterFlowPControl "Model that demonstrates use of a heat exchanger without condensation and with feedback control" import Buildings; extends Modelica.Icons.Example; package Medium1 = Buildings.Media.ConstantPropertyLiquidWater; package Medium2 = Buildings.Media.PerfectGases.MoistAirUnsaturated; //package Medium2 = Buildings.Media.GasesPTDecoupled.MoistAir; //package Medium2 = Buildings.Media.GasesPTDecoupled.MoistAirUnsaturated; //package Medium2 = Buildings.Media.GasesConstantDensity.MoistAir; parameter Modelica.SIunits.Temperature T_a1_nominal=5 + 273.15; parameter Modelica.SIunits.Temperature T_b1_nominal=10 + 273.15; parameter Modelica.SIunits.Temperature T_a2_nominal=30 + 273.15; parameter Modelica.SIunits.Temperature T_b2_nominal=15 + 273.15; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal=0.1 "Nominal mass flow rate medium 1"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal=m1_flow_nominal*4200/ 1000*(T_a1_nominal - T_b1_nominal)/(T_b2_nominal - T_a2_nominal) "Nominal mass flow rate medium 2";Buildings.Fluid.Sources.Boundary_pT sin_2( redeclare package Medium = Medium2, nPorts=1, use_p_in=false, p(displayUnit="Pa") = 101325, T=303.15); Buildings.Fluid.Sources.Boundary_pT sou_2( redeclare package Medium = Medium2, nPorts=1, T=T_a2_nominal, X={0.02,1 - 0.02}, use_T_in=true, use_X_in=true, p(displayUnit="Pa") = 101325 + 300); Buildings.Fluid.Sources.Boundary_pT sin_1( redeclare package Medium = Medium1, nPorts=1, use_p_in=false, p=300000, T=293.15); Buildings.Fluid.Sources.Boundary_pT sou_1( redeclare package Medium = Medium1, nPorts=1, use_T_in=true, p=300000 + 12000); Fluid.FixedResistances.FixedResistanceDpM res_2( from_dp=true, redeclare package Medium = Medium2, dp_nominal=100, m_flow_nominal=m2_flow_nominal); Fluid.FixedResistances.FixedResistanceDpM res_1( from_dp=true, redeclare package Medium = Medium1, dp_nominal=3000, m_flow_nominal=m1_flow_nominal); Buildings.Fluid.Sensors.TemperatureTwoPort temSen(redeclare package Medium = Medium2, m_flow_nominal=m2_flow_nominal); Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage val( redeclare package Medium = Medium1, m_flow_nominal=m1_flow_nominal) "Valve model"; Modelica.Blocks.Sources.TimeTable TSet(table=[0,288.15; 600,288.15; 600, 298.15; 1200,298.15; 1800,283.15; 2400,283.15; 2400,288.15]) "Setpoint temperature"; Buildings.Fluid.HeatExchangers.DryCoilCounterFlow hex( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp2_nominal(displayUnit="Pa") = 200, allowFlowReversal1=true, allowFlowReversal2=true, dp1_nominal(displayUnit="Pa") = 3000, UA_nominal=m1_flow_nominal*4200*(T_a1_nominal - T_b1_nominal)/ Buildings.Fluid.HeatExchangers.BaseClasses.lmtd( T_a1_nominal, T_b1_nominal, T_a2_nominal, T_b2_nominal), show_T=true); inner Modelica.Fluid.System system; Modelica.Blocks.Sources.Constant const(k=0.8); Buildings.Utilities.Psychrometrics.X_pTphi x_pTphi(use_p_in=false, redeclare package Medium = Medium2); Modelica.Blocks.Sources.Constant const1(k=T_a2_nominal); Buildings.Controls.Continuous.LimPID con( Td=1, reverseAction=true, yMin=0, controllerType=Modelica.Blocks.Types.SimpleController.PI, k=0.1, Ti=60) "Controller"; Modelica.Blocks.Sources.Ramp TWat( height=30, offset=T_a1_nominal, startTime=300, duration=2000) "Water temperature, raised to high value at t=3000 s"; equationconnect(hex.port_b1, res_1.port_a); connect(val.port_b, hex.port_a1); connect(sou_1.ports[1], val.port_a); connect(sin_1.ports[1], res_1.port_b); connect(sin_2.ports[1], res_2.port_b); connect(sou_2.ports[1], hex.port_a2); connect(temSen.port_b, res_2.port_a); connect(x_pTphi.X, sou_2.X_in); connect(const.y, x_pTphi.phi); connect(const1.y, x_pTphi.T); connect(const1.y, sou_2.T_in); connect(TSet.y, con.u_s); connect(temSen.T, con.u_m); connect(TWat.y, sou_1.T_in); connect(con.y, val.y); connect(temSen.port_a, hex.port_b2); end DryCoilCounterFlowPControl;
Type | Name | Default | Description |
---|---|---|---|
Temperature | T_a1_nominal | 5 + 273.15 | [K] |
Temperature | T_b1_nominal | 10 + 273.15 | [K] |
Temperature | T_a2_nominal | 30 + 273.15 | [K] |
Temperature | T_b2_nominal | 15 + 273.15 | [K] |
MassFlowRate | m1_flow_nominal | 0.1 | Nominal mass flow rate medium 1 [kg/s] |
MassFlowRate | m2_flow_nominal | m1_flow_nominal*4200/1000*(T... | Nominal mass flow rate medium 2 [kg/s] |
model WetCoilCounterFlowPControl "Model that demonstrates use of a heat exchanger with condensation and with feedback control" extends Modelica.Icons.Example; import Buildings; package Medium1 = Buildings.Media.ConstantPropertyLiquidWater; package Medium2 = Buildings.Media.PerfectGases.MoistAirUnsaturated; //package Medium2 = Buildings.Media.GasesPTDecoupled.MoistAir; //package Medium2 = Buildings.Media.GasesPTDecoupled.MoistAirUnsaturated; //package Medium2 = Buildings.Media.GasesConstantDensity.MoistAir; parameter Modelica.SIunits.Temperature T_a1_nominal=5 + 273.15; parameter Modelica.SIunits.Temperature T_b1_nominal=10 + 273.15; parameter Modelica.SIunits.Temperature T_a2_nominal=30 + 273.15; parameter Modelica.SIunits.Temperature T_b2_nominal=15 + 273.15; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal=0.1 "Nominal mass flow rate medium 1"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal=m1_flow_nominal*4200/ 1000*(T_a1_nominal - T_b1_nominal)/(T_b2_nominal - T_a2_nominal) "Nominal mass flow rate medium 2";Buildings.Fluid.Sources.Boundary_pT sin_2( redeclare package Medium = Medium2, nPorts=1, use_p_in=false, p(displayUnit="Pa") = 101325, T=303.15); Buildings.Fluid.Sources.Boundary_pT sou_2( redeclare package Medium = Medium2, nPorts=1, T=T_a2_nominal, X={0.02,1 - 0.02}, use_T_in=true, use_X_in=true, p(displayUnit="Pa") = 101325 + 300); Buildings.Fluid.Sources.Boundary_pT sin_1( redeclare package Medium = Medium1, nPorts=1, use_p_in=false, p=300000, T=293.15); Buildings.Fluid.Sources.Boundary_pT sou_1( redeclare package Medium = Medium1, nPorts=1, use_T_in=true, p=300000 + 12000); Fluid.FixedResistances.FixedResistanceDpM res_2( from_dp=true, redeclare package Medium = Medium2, dp_nominal=100, m_flow_nominal=m2_flow_nominal); Fluid.FixedResistances.FixedResistanceDpM res_1( from_dp=true, redeclare package Medium = Medium1, dp_nominal=3000, m_flow_nominal=m1_flow_nominal); Buildings.Fluid.Sensors.TemperatureTwoPort temSen(redeclare package Medium = Medium2, m_flow_nominal=m2_flow_nominal); Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage val( redeclare package Medium = Medium1, m_flow_nominal=m1_flow_nominal) "Valve model"; Modelica.Blocks.Sources.TimeTable TSet(table=[0,288.15; 600,288.15; 600, 298.15; 1200,298.15; 1800,283.15; 2400,283.15; 2400,288.15]) "Setpoint temperature"; Buildings.Fluid.HeatExchangers.WetCoilCounterFlow hex( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp2_nominal(displayUnit="Pa") = 200, allowFlowReversal1=true, allowFlowReversal2=true, dp1_nominal(displayUnit="Pa") = 3000, UA_nominal=2*m1_flow_nominal*4200*(T_a1_nominal - T_b1_nominal)/ Buildings.Fluid.HeatExchangers.BaseClasses.lmtd( T_a1_nominal, T_b1_nominal, T_a2_nominal, T_b2_nominal), show_T=true); inner Modelica.Fluid.System system; Modelica.Blocks.Sources.Constant const(k=0.8); Buildings.Utilities.Psychrometrics.X_pTphi x_pTphi(use_p_in=false, redeclare package Medium = Medium2); Modelica.Blocks.Sources.Constant const1(k=T_a2_nominal); Buildings.Controls.Continuous.LimPID con( Td=1, reverseAction=true, yMin=0, controllerType=Modelica.Blocks.Types.SimpleController.PI, k=0.1, Ti=60) "Controller"; Modelica.Blocks.Sources.Ramp TWat( height=30, offset=T_a1_nominal, startTime=300, duration=2000) "Water temperature, raised to high value at t=3000 s"; equationconnect(hex.port_b1, res_1.port_a); connect(val.port_b, hex.port_a1); connect(sou_1.ports[1], val.port_a); connect(sin_1.ports[1], res_1.port_b); connect(sin_2.ports[1], res_2.port_b); connect(sou_2.ports[1], hex.port_a2); connect(hex.port_b2, temSen.port_a); connect(temSen.port_b, res_2.port_a); connect(x_pTphi.X, sou_2.X_in); connect(const.y, x_pTphi.phi); connect(const1.y, x_pTphi.T); connect(const1.y, sou_2.T_in); connect(TSet.y, con.u_s); connect(temSen.T, con.u_m); connect(TWat.y, sou_1.T_in); connect(con.y, val.y); end WetCoilCounterFlowPControl;
Type | Name | Default | Description |
---|---|---|---|
Temperature | T_a1_nominal | 60 + 273.15 | [K] |
Temperature | T_b1_nominal | 40 + 273.15 | [K] |
Temperature | T_a2_nominal | 5 + 273.15 | [K] |
Temperature | T_b2_nominal | 20 + 273.15 | [K] |
MassFlowRate | m1_flow_nominal | 5 | Nominal mass flow rate medium 1 [kg/s] |
MassFlowRate | m2_flow_nominal | m1_flow_nominal*4200/1000*(T... | Nominal mass flow rate medium 2 [kg/s] |
model DryCoilDiscretized "Model that demonstrates use of a finite volume model of a heat exchanger without condensation" extends Modelica.Icons.Example; package Medium1 = Buildings.Media.ConstantPropertyLiquidWater; package Medium2 = Buildings.Media.GasesPTDecoupled.MoistAirUnsaturated; parameter Modelica.SIunits.Temperature T_a1_nominal = 60+273.15; parameter Modelica.SIunits.Temperature T_b1_nominal = 40+273.15; parameter Modelica.SIunits.Temperature T_a2_nominal = 5+273.15; parameter Modelica.SIunits.Temperature T_b2_nominal = 20+273.15; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 5 "Nominal mass flow rate medium 1"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = m1_flow_nominal*4200/1000*(T_a1_nominal-T_b1_nominal)/(T_b2_nominal-T_a2_nominal) "Nominal mass flow rate medium 2";Buildings.Fluid.HeatExchangers.DryCoilDiscretized hex( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, nPipPar=1, nPipSeg=3, nReg=2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, UA_nominal=m1_flow_nominal*4200*(T_a1_nominal-T_b1_nominal)/ Buildings.Fluid.HeatExchangers.BaseClasses.lmtd( T_a1_nominal, T_b1_nominal, T_a2_nominal, T_b2_nominal), dp2_nominal=200, dp1_nominal=5000, show_T=true); Buildings.Fluid.Sources.Boundary_pT sin_2( redeclare package Medium = Medium2, T=303.15, use_p_in=true, nPorts=1); Modelica.Blocks.Sources.Ramp PIn( offset=101525, height=-199, duration=60, startTime=120); Buildings.Fluid.Sources.Boundary_pT sou_2( redeclare package Medium = Medium2, use_p_in=true, use_T_in=true, T=283.15, nPorts=1); Modelica.Blocks.Sources.Ramp TWat( duration=60, startTime=60, height=5, offset=273.15 + 60) "Water temperature"; Modelica.Blocks.Sources.Constant TDb(k=273.15 + 5) "Drybulb temperature"; Modelica.Blocks.Sources.Constant POut(k=101325); Buildings.Fluid.Sources.Boundary_pT sin_1( redeclare package Medium = Medium1, p=300000, T=293.15, use_p_in=true, nPorts=1); Buildings.Fluid.Sources.Boundary_pT sou_1( redeclare package Medium = Medium1, p=300000 + 5000, use_T_in=true, T=293.15, nPorts=1); Modelica.Blocks.Sources.Ramp PSin_1( startTime=240, offset=300000, height=4990, duration=60); inner Modelica.Fluid.System system; equationconnect(PIn.y,sou_2. p_in); connect(TDb.y, sou_2.T_in); connect(TWat.y, sou_1.T_in); connect(PSin_1.y, sin_1.p_in); connect(sou_1.ports[1], hex.port_a1); connect(sou_2.ports[1], hex.port_a2); connect(POut.y, sin_2.p_in); connect(sin_2.ports[1], hex.port_b2); connect(hex.port_b1, sin_1.ports[1]); end DryCoilDiscretized;
Type | Name | Default | Description |
---|---|---|---|
Temperature | T_a1_nominal | 5 + 273.15 | [K] |
Temperature | T_b1_nominal | 10 + 273.15 | [K] |
Temperature | T_a2_nominal | 30 + 273.15 | [K] |
Temperature | T_b2_nominal | 10 + 273.15 | [K] |
MassFlowRate | m1_flow_nominal | 5 | Nominal mass flow rate medium 1 [kg/s] |
MassFlowRate | m2_flow_nominal | m1_flow_nominal*4200/1000*(T... | Nominal mass flow rate medium 2 [kg/s] |
model WetCoilDiscretized "Model that demonstrates use of a finite volume model of a heat exchanger with condensation" extends Modelica.Icons.Example; import Buildings; package Medium1 = Buildings.Media.ConstantPropertyLiquidWater; package Medium2 = Buildings.Media.GasesPTDecoupled.MoistAirUnsaturated; parameter Modelica.SIunits.Temperature T_a1_nominal = 5+273.15; parameter Modelica.SIunits.Temperature T_b1_nominal = 10+273.15; parameter Modelica.SIunits.Temperature T_a2_nominal = 30+273.15; parameter Modelica.SIunits.Temperature T_b2_nominal = 10+273.15; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 5 "Nominal mass flow rate medium 1"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = m1_flow_nominal*4200/1000*(T_a1_nominal-T_b1_nominal)/(T_b2_nominal-T_a2_nominal) "Nominal mass flow rate medium 2";Buildings.Fluid.HeatExchangers.WetCoilDiscretized hex( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, dp2_nominal(displayUnit="Pa") = 200, nPipPar=1, nPipSeg=3, nReg=2, dp1_nominal(displayUnit="Pa") = 5000, UA_nominal=m1_flow_nominal*4200*(T_a1_nominal - T_b1_nominal)/ Buildings.Fluid.HeatExchangers.BaseClasses.lmtd( T_a1_nominal, T_b1_nominal, T_a2_nominal, T_b2_nominal), show_T=true); Buildings.Fluid.Sources.Boundary_pT sin_2( redeclare package Medium = Medium2, use_p_in=false, p=101325, T=303.15, nPorts=1); Modelica.Blocks.Sources.Ramp PIn( duration=60, height=-200, startTime=120, offset=101525); Buildings.Fluid.Sources.Boundary_pT sou_2( redeclare package Medium = Medium2, use_p_in=true, nPorts=1, use_T_in=false, T=293.15); Modelica.Blocks.Sources.Ramp TWat( duration=60, height=15, offset=273.15 + 5, startTime=120) "Water temperature"; Buildings.Fluid.Sources.Boundary_pT sin_1( redeclare package Medium = Medium1, p=300000, T=293.15, use_p_in=true, nPorts=1); Buildings.Fluid.Sources.Boundary_pT sou_1( redeclare package Medium = Medium1, p=300000 + 5000, use_T_in=true, T=293.15, nPorts=1); Modelica.Blocks.Sources.Ramp PSin_1( duration=60, height=5000, startTime=240, offset=300000); inner Modelica.Fluid.System system; equationconnect(TWat.y, sou_1.T_in); connect(PSin_1.y, sin_1.p_in); connect(sou_1.ports[1], hex.port_a1); connect(sou_2.ports[1], hex.port_a2); connect(PIn.y, sou_2.p_in); connect(hex.port_b1, sin_1.ports[1]); connect(hex.port_b2, sin_2.ports[1]); end WetCoilDiscretized;
Type | Name | Default | Description |
---|---|---|---|
Temperature | T_a1_nominal | 60 + 273.15 | [K] |
Temperature | T_b1_nominal | 50 + 273.15 | [K] |
Temperature | T_a2_nominal | 20 + 273.15 | [K] |
Temperature | T_b2_nominal | 40 + 273.15 | [K] |
MassFlowRate | m1_flow_nominal | 5 | Nominal mass flow rate medium 1 [kg/s] |
MassFlowRate | m2_flow_nominal | m1_flow_nominal*4200/1000*(T... | Nominal mass flow rate medium 2 [kg/s] |
model DryCoilDiscretizedPControl "Model that demonstrates use of a finite volume model of a heat exchanger without condensation and with feedback control" import Buildings; extends Modelica.Icons.Example; package Medium1 = Buildings.Media.ConstantPropertyLiquidWater; //package Medium2 = Buildings.Media.PerfectGases.MoistAir; //package Medium2 = Buildings.Media.GasesPTDecoupled.MoistAir; // package Medium2 = Buildings.Media.GasesPTDecoupled.MoistAirUnsaturated; package Medium2 = Buildings.Media.GasesPTDecoupled.SimpleAir; parameter Modelica.SIunits.Temperature T_a1_nominal = 60+273.15; parameter Modelica.SIunits.Temperature T_b1_nominal = 50+273.15; parameter Modelica.SIunits.Temperature T_a2_nominal = 20+273.15; parameter Modelica.SIunits.Temperature T_b2_nominal = 40+273.15; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 5 "Nominal mass flow rate medium 1"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = m1_flow_nominal*4200/1000*(T_a1_nominal-T_b1_nominal)/(T_b2_nominal-T_a2_nominal) "Nominal mass flow rate medium 2";Buildings.Fluid.Sources.Boundary_pT sin_2( redeclare package Medium = Medium2, use_p_in=false, p(displayUnit="Pa") = 101325, T=303.15, nPorts=1); Buildings.Fluid.Sources.Boundary_pT sou_2( redeclare package Medium = Medium2, nPorts=1, use_p_in=false, use_T_in=false, p(displayUnit="Pa") = 101625, T=T_a2_nominal); Buildings.Fluid.Sources.Boundary_pT sin_1( redeclare package Medium = Medium1, p=300000, T=293.15, use_p_in=true, nPorts=1); Buildings.Fluid.Sources.Boundary_pT sou_1( redeclare package Medium = Medium1, p=300000 + 9000, nPorts=1, use_T_in=false, T=T_a1_nominal); Modelica.Blocks.Sources.Ramp PSin_1( duration=60, height=5000, startTime=240, offset=300000); Buildings.Fluid.Sensors.TemperatureTwoPort temSen(redeclare package Medium = Medium2, m_flow_nominal=m2_flow_nominal); Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage val( redeclare package Medium = Medium1, l=0.005, Kv_SI=5/sqrt(4000), m_flow_nominal=m1_flow_nominal, filteredOpening=false, dpFixed_nominal=2000 + 3000) "Valve model"; Modelica.Blocks.Sources.TimeTable TSet(table=[0,298.15; 600,298.15; 600, 303.15; 1200,303.15; 1800,298.15; 2400,298.15; 2400,304.15]) "Setpoint temperature"; Buildings.Fluid.HeatExchangers.DryCoilDiscretized hex( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, show_T=true, nPipPar=1, nPipSeg=3, nReg=4, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, UA_nominal=m1_flow_nominal*4200*(T_a1_nominal-T_b1_nominal)/ Buildings.Fluid.HeatExchangers.BaseClasses.lmtd( T_a1_nominal, T_b1_nominal, T_a2_nominal, T_b2_nominal), dp1_nominal(displayUnit="Pa") = 0, dp2_nominal(displayUnit="Pa") = 300); Buildings.Fluid.Actuators.Motors.IdealMotor mot(tOpe=60) "Motor model"; inner Modelica.Fluid.System system; Buildings.Controls.Continuous.LimPID con( k=1, Ti=60, controllerType=Modelica.Blocks.Types.SimpleController.P, Td=60) "Controller"; equationconnect(PSin_1.y, sin_1.p_in); connect(val.port_b, hex.port_a1); connect(sou_1.ports[1], val.port_a); connect(sou_2.ports[1], hex.port_a2); connect(mot.y, val.y); connect(hex.port_b2, temSen.port_a); connect(TSet.y, con.u_s); connect(temSen.T, con.u_m); connect(con.y, mot.u); connect(hex.port_b1, sin_1.ports[1]); connect(temSen.port_b, sin_2.ports[1]); end DryCoilDiscretizedPControl;
Type | Name | Default | Description |
---|---|---|---|
Temperature | T_a1_nominal | 5 + 273.15 | [K] |
Temperature | T_b1_nominal | 10 + 273.15 | [K] |
Temperature | T_a2_nominal | 30 + 273.15 | [K] |
Temperature | T_b2_nominal | 10 + 273.15 | [K] |
MassFlowRate | m1_flow_nominal | 5 | Nominal mass flow rate medium 1 [kg/s] |
MassFlowRate | m2_flow_nominal | m1_flow_nominal*4200/1000*(T... | Nominal mass flow rate medium 2 [kg/s] |
model WetCoilDiscretizedPControl "Model that demonstrates use of a finite volume model of a heat exchanger with condensation and feedback control" extends Modelica.Icons.Example; import Buildings; package Medium1 = Buildings.Media.ConstantPropertyLiquidWater; package Medium2 = Buildings.Media.GasesConstantDensity.MoistAirUnsaturated; parameter Modelica.SIunits.Temperature T_a1_nominal = 5+273.15; parameter Modelica.SIunits.Temperature T_b1_nominal = 10+273.15; parameter Modelica.SIunits.Temperature T_a2_nominal = 30+273.15; parameter Modelica.SIunits.Temperature T_b2_nominal = 10+273.15; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal = 5 "Nominal mass flow rate medium 1"; parameter Modelica.SIunits.MassFlowRate m2_flow_nominal = m1_flow_nominal*4200/1000*(T_a1_nominal-T_b1_nominal)/(T_b2_nominal-T_a2_nominal) "Nominal mass flow rate medium 2";Buildings.Fluid.Sources.Boundary_pT sin_2( redeclare package Medium = Medium2, use_p_in=false, p=101325, T=303.15, nPorts=1); Buildings.Fluid.Sources.Boundary_pT sou_2( redeclare package Medium = Medium2, nPorts=1, use_p_in=false, use_T_in=true, p(displayUnit="Pa") = 101525, T=293.15); Buildings.Fluid.Sources.Boundary_pT sin_1( redeclare package Medium = Medium1, p=300000, T=293.15, use_p_in=true, nPorts=1); Buildings.Fluid.Sources.Boundary_pT sou_1( redeclare package Medium = Medium1, nPorts=1, use_T_in=true, p=300000 + 7000, T=278.15); Modelica.Blocks.Sources.Ramp PSin( duration=60, height=5000, startTime=240, offset=300000); Buildings.Fluid.Sensors.TemperatureTwoPort temSen(redeclare package Medium = Medium2, m_flow_nominal=m2_flow_nominal); Buildings.Fluid.Actuators.Valves.TwoWayLinear val( redeclare package Medium = Medium1, Kv_SI=m1_flow_nominal/sqrt(5000), m_flow_nominal=m1_flow_nominal, filteredOpening=false, dpFixed_nominal=2000); Modelica.Blocks.Sources.TimeTable TSet(table=[0,293.15; 600,293.15; 600, 288.15; 1200,288.15; 1800,288.15; 2400,295.15; 2400,295.15]) "Setpoint temperature"; Buildings.Fluid.HeatExchangers.WetCoilDiscretized hex( redeclare package Medium1 = Medium1, redeclare package Medium2 = Medium2, show_T=true, nPipPar=1, nPipSeg=3, nReg=4, m1_flow_nominal=m1_flow_nominal, m2_flow_nominal=m2_flow_nominal, UA_nominal=m1_flow_nominal*4200*(T_a1_nominal-T_b1_nominal)/ Buildings.Fluid.HeatExchangers.BaseClasses.lmtd( T_a1_nominal, T_b1_nominal, T_a2_nominal, T_b2_nominal), dp2_nominal(displayUnit="Pa") = 200, dp1_nominal(displayUnit="Pa") = 0); inner Modelica.Fluid.System system; Modelica.Blocks.Sources.Step TSou_2( startTime=3000, offset=T_a2_nominal, height=-3); Modelica.Blocks.Sources.Step TSou_1( startTime=3000, height=10, offset=T_a1_nominal); Buildings.Controls.Continuous.LimPID con( k=1, Ti=60, controllerType=Modelica.Blocks.Types.SimpleController.P, Td=60, reverseAction=true) "Controller"; Buildings.Fluid.Actuators.Motors.IdealMotor mot(tOpe=60) "Motor model"; equationconnect(PSin.y, sin_1.p_in); connect(sou_2.ports[1], hex.port_a2); connect(hex.port_b2, temSen.port_a); connect(val.port_b, hex.port_a1); connect(sou_1.ports[1], val.port_a); connect(TSou_2.y, sou_2.T_in); connect(TSou_1.y, sou_1.T_in); connect(TSet.y, con.u_s); connect(temSen.T, con.u_m); connect(con.y, mot.u); connect(mot.y, val.y); connect(sin_2.ports[1], temSen.port_b); connect(hex.port_b1, sin_1.ports[1]); end WetCoilDiscretizedPControl;