Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
within ThermofluidStream.Interfaces.MSLplug.ByAssembly;
model FluidPortMSLtoOutletTFS_ass

replaceable package Medium = ThermofluidStream.Media.myMedia.Interfaces.PartialMedium
"Medium model" annotation (choicesAllMatching=true, Documentation(info = "<html>
<p><span style=\"font-family: Courier New;\">Medium package used in both sides of the connector.</span></p>
</html>"));
final parameter Boolean BoolMonoSubstance = Medium.nS<2;

//Real Xi[Medium.nXi];

Interfaces.Outlet outletTFS(redeclare package Medium = Medium)
annotation (Placement(transformation(extent={{8,-20},{48,20}}), iconTransformation(extent={{8,-20},{48,20}})));
Modelica.Fluid.Interfaces.FluidPort_b inportMSL(redeclare package Medium = Medium) "Fluid connector b (positive design flow direction is from port_a to port_b)"
annotation (Placement(transformation(extent={{-10,-20},{-50,20}}), iconTransformation(extent={{-12,-10},{-32,10}})));

ThermofluidStream.Boundaries.Source source(redeclare package Medium = Medium, temperatureFromInput=true,
xiFromInput=not (BoolMonoSubstance))
annotation (Placement(transformation(extent={{-20,20},{0,40}})));
Modelica.Fluid.Sources.Boundary_pT boundary(
redeclare package Medium = Medium,
use_p_in=true,
use_X_in=false,
nPorts=1) annotation (Placement(transformation(extent={{8,-28},{-8,-12}})));
ThermofluidStream.Sensors.SingleSensorSelect singleSensorSelect(
redeclare package Medium = Medium,
quantity=ThermofluidStream.Sensors.Internal.Types.Quantities.p_Pa,
outputValue=true,
filter_output=false)
annotation (Placement(transformation(extent={{36,-26},{20,-14}})));
Modelica.Fluid.Sensors.Temperature temperature(redeclare package Medium = Medium)
annotation (Placement(transformation(extent={{-42,26},{-32,34}})));
FlowControl.MCV flowGenerator_SF(
redeclare package Medium = Medium,
setpointFromInput=true,
TC=4) annotation (Placement(transformation(extent={{6,38},{22,22}})));
Modelica.Fluid.Sensors.MassFlowRate massFlowRate(redeclare package Medium = Medium) annotation (Placement(transformation(extent={{-20,-24},{-12,-16}})));
Modelica.Blocks.Math.Gain forUnitCompatibility(k=1) annotation (Placement(transformation(
extent={{-2,-2},{2,2}},
rotation=90,
origin={-16,-10})));
Modelica.Blocks.Sources.RealExpression massFraction[Medium.nXi](y=inStream(inportMSL.Xi_outflow)) if not (BoolMonoSubstance)
annotation (Placement(transformation(extent={{-32,20},{-20,28}})));
equation
//Xi=inStream(inportMSL.Xi_outflow);


connect(singleSensorSelect.value_out, boundary.p_in)
annotation (Line(points={{20,-20},{14,-20},{14,-13.6},{9.6,-13.6}}, color={0,0,127}));
connect(outletTFS, singleSensorSelect.inlet) annotation (Line(
points={{28,0},{40,0},{40,-20},{36,-20}},
color={28,108,200},
thickness=0.5));
connect(inportMSL, inportMSL) annotation (Line(points={{-30,0},{-30,0}}, color={0,127,255}));
connect(temperature.T, source.T0_var) annotation (Line(points={{-33.5,30},{-12,30}},
color={0,0,127}));
connect(boundary.ports[1], massFlowRate.port_b) annotation (Line(points={{-8,-20},{-12,-20}}, color={0,127,255}));
connect(massFlowRate.m_flow, forUnitCompatibility.u) annotation (Line(points={{-16,-15.6},{-16,-12.4}}, color={0,0,127}));
connect(inportMSL, massFlowRate.port_a) annotation (Line(points={{-30,0},{-30,-20},{-20,-20}}, color={0,127,255}));
connect(massFraction.y, source.xi_var) annotation (Line(points={{-19.4,24},{-12,24}}, color={0,0,127}));
connect(inportMSL, temperature.port) annotation (Line(points={{-30,0},{-40,0},{-40,26},{-37,26}}, color={0,127,255}));
connect(forUnitCompatibility.y, flowGenerator_SF.setpoint_var) annotation (Line(points={{-16,-7.8},{-16,2},{14,2},{14,23.6}}, color={0,0,127}));
connect(source.outlet, flowGenerator_SF.inlet) annotation (Line(
points={{0,30},{6,30}},
color={28,108,200},
thickness=0.5));
connect(flowGenerator_SF.outlet, outletTFS) annotation (Line(
points={{22,30},{28,30},{28,0}},
color={28,108,200},
thickness=0.5));
annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-40,-40},{40,40}}), graphics={
Rectangle(
extent={{-20,20},{20,-20}},
lineColor={28,108,200},
fillPattern=FillPattern.Solid,
fillColor={255,255,255},
pattern=LinePattern.None),
Line(
points={{-12,0},{20,0}},
color={28,108,200},
thickness=0.5), Polygon(
points={{26,-20},{26,20},{56,0},{26,-20}},
lineColor={28,108,200},
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Ellipse(
extent={{-42,20},{-2,-20}},
lineColor={28,108,200},
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Text(
extent={{-36,-20},{36,-40}},
textColor={28,108,200},
textString="TFS => MSL")}), Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-40,-40},
{40,40}})));
end FluidPortMSLtoOutletTFS_ass;
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
within ThermofluidStream.Interfaces.MSLplug.ByAssembly;
model InletTFStoFluidPortMSL_ass

replaceable package Medium = ThermofluidStream.Media.myMedia.Interfaces.PartialMedium
"Medium model" annotation (choicesAllMatching=true, Documentation(info = "<html>
<p><span style=\"font-family: Courier New;\">Medium package used in both sides of the connector.</span></p>
</html>"));
final parameter Boolean BoolMonoSubstance = Medium.nS<2;


Interfaces.Inlet inletTFS(redeclare package Medium = Medium)
annotation (Placement(transformation(extent={{-56,-20},{-16,20}}),
iconTransformation(extent={{-56,-20},{-16,20}})));
Modelica.Fluid.Interfaces.FluidPort_b outportMSL(redeclare package Medium = Medium) "Fluid connector b (positive design flow direction is from port_a to port_b)"
annotation (Placement(transformation(extent={{60,-20},{20,20}}), iconTransformation(extent={{30,-10},{10,10}})));

ThermofluidStream.Boundaries.Sink sink(redeclare package Medium = Medium, pressureFromInput=true)
annotation (Placement(transformation(extent={{6,20},{26,40}})));
Modelica.Fluid.Sensors.Pressure pressure(redeclare package Medium = Medium) annotation (Placement(transformation(extent={{36,24},
{24,36}})));
Modelica.Fluid.Sources.MassFlowSource_T boundary(
redeclare package Medium = Medium,
use_m_flow_in=true,
use_T_in=true,
use_X_in=not (BoolMonoSubstance),
use_C_in=false,
nPorts=1) annotation (Placement(transformation(extent={{2,-30},{22,-10}})));

ThermofluidStream.Sensors.SingleFlowSensor singleFlowSensor(
redeclare package Medium = Medium,
quantity=ThermofluidStream.Sensors.Internal.Types.MassFlowQuantities.m_flow_kgps,
outputValue=true) annotation (Placement(transformation(extent={{-20,28},{-6,38}})));
ThermofluidStream.Sensors.SingleSensorSelect singleSensorSelect(
redeclare package Medium = Medium,
quantity=ThermofluidStream.Sensors.Internal.Types.Quantities.T_K,
outputValue=true) annotation (Placement(transformation(extent={{-20,-22},{-8,-10}})));
Modelica.Blocks.Sources.RealExpression realExpression[Medium.nXi](y=Medium.massFraction(inletTFS.state)) if not (BoolMonoSubstance)
annotation (Placement(transformation(extent={{-40,-38},{-20,-18}})));
equation
//Xi=Medium.massFraction(inletTFS.state);

connect(outportMSL, pressure.port) annotation (Line(points={{40,0},{30,0},{30,24}}, color={0,127,255}));
connect(pressure.p, sink.p0_var) annotation (Line(points={{23.4,30},{18,30}}, color={0,0,127}));
connect(outportMSL, boundary.ports[1]) annotation (Line(points={{40,0},{32,0},{32,-20},{22,-20}}, color={0,127,255}));
connect(singleFlowSensor.value_out, boundary.m_flow_in)
annotation (Line(points={{-6,33},{-6,-12},{2,-12}}, color={0,0,127}));
connect(inletTFS, singleFlowSensor.inlet)
annotation (Line(
points={{-36,0},{-20,0},{-20,30}},
color={28,108,200},
thickness=0.5));
connect(inletTFS, singleSensorSelect.inlet)
annotation (Line(
points={{-36,0},{-20,0},{-20,-16}},
color={28,108,200},
thickness=0.5));
connect(singleSensorSelect.value_out, boundary.T_in) annotation (Line(points={{-8,-16},{0,-16}}, color={0,0,127}));
connect(singleFlowSensor.outlet, sink.inlet) annotation (Line(
points={{-6,30},{6,30}},
color={28,108,200},
thickness=0.5));
connect(realExpression.y, boundary.X_in) annotation (Line(points={{-19,-28},{-8,-28},{-8,-24},{0,-24}}, color={0,0,127}));
annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-40,-40},{40,40}}), graphics={Polygon(
points={{-30,-20},{-30,20},{0,0},{-30,-20}},
lineColor={28,108,200},
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Ellipse(
extent={{0,20},{40,-20}},
lineColor={28,108,200},
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Text(
extent={{-36,-20},{36,-40}},
textColor={28,108,200},
textString="TFS => MSL")}), Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-40,-40},
{40,40}})));
end InletTFStoFluidPortMSL_ass;
184 changes: 184 additions & 0 deletions ThermofluidStream/Interfaces/MSLplug/ByAssembly/Tests/TargetTest_00.mo
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
within ThermofluidStream.Interfaces.MSLplug.ByAssembly.Tests;
model TargetTest_00
extends Modelica.Icons.Example;

replaceable package Medium = ThermofluidStream.Media.myMedia.Water.StandardWaterOnePhase
constrainedby ThermofluidStream.Media.myMedia.Interfaces.PartialMedium
annotation (
choicesAllMatching=true);

parameter Modelica.Units.NonSI.Temperature_degC T_SP=80 "Solar field outlet temperature setpoint"
annotation(Dialog(group = "Control"));
parameter Modelica.Units.NonSI.Temperature_degC l_s=55 "Security maximum temperature threshold for production switching"
annotation(Dialog(group = "Control"));
parameter Modelica.Units.NonSI.Temperature_degC hyst_prod_pre=5 "Temperature hysteresis for switches in between in production and out of production"
annotation(Dialog(group = "Control"));
parameter Modelica.Units.NonSI.Temperature_degC detlat_T_SP=10 "Security margin deduced from the temperature setpoint to switch in production (compared with l_s and valuabe process temperature)."
annotation(Dialog(group = "Control"));
parameter Modelica.Units.NonSI.Temperature_degC detlat_T_min=5 "Minimum temperature difference supplied to the process"
annotation(Dialog(group = "Control"));
parameter SI.MassFlowRate m_flow_reg = dropOfCommons.m_flow_reg "nominal mass flow rate for regularisation"
annotation(Dialog(tab = "Advanced", group = "Regularisation parameters"));
parameter Boolean computeL=true "Compute L from r and l" annotation (Dialog(tab="Advanced", group="Flow inertance"));

HeatExchangers.CounterFlowNTU pHEXSimplified(
redeclare package MediumA = Medium,
redeclare package MediumB = Medium,
A=10) annotation (Placement(transformation(
extent={{-10,-10},{10,10}},
rotation=-90,
origin={20,10})));
ThermofluidStream.Boundaries.Sink sink(redeclare package Medium = Medium)
annotation (Placement(transformation(extent={{56,30},{76,50}})));

ThermofluidStream.FlowControl.MCV mCV(
redeclare package Medium = Medium, massFlow_set_par=1)
annotation (Placement(transformation(extent={{50,-10},{30,-30}})));
ThermofluidStream.FlowControl.MCV flowGenerator_SF(
redeclare package Medium = Medium, massFlow_set_par=10)
annotation (Placement(transformation(extent={{-30,-10},{-50,-30}})));

ThermofluidStream.Boundaries.Source source(redeclare package Medium = Medium)
annotation (Placement(transformation(extent={{80,-30},{60,-10}})));
inner DropOfCommons dropOfCommons(L=1000)
annotation (Placement(transformation(extent={{-80,60},{-60,80}})));
inner Modelica.Fluid.System system annotation (Placement(transformation(extent={{-100,60},{-80,80}})));
Modelica.Blocks.Noise.UniformNoise heatScenario(
samplePeriod=60,
y_min=-100,
y_max=5000) annotation (Placement(transformation(extent={{-110,0},{-90,20}})));
Modelica.Blocks.Noise.UniformNoise mFlowScenario(
samplePeriod=60,
y_min=0.001,
y_max=15) annotation (Placement(transformation(extent={{100,-10},{80,10}})));
Processes.ThermalConvectionPipe thermalConvectionPipe(
redeclare package Medium = Medium,
r=0.2,
l=100)
annotation (Placement(transformation(
extent={{-10,-10},{10,10}},
rotation=90,
origin={-60,10})));
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow prescribedHeatFlow annotation (Placement(transformation(extent={{-84,6},{-76,14}})));
Boundaries.Reservoir reservoir(redeclare package Medium = Medium, A_surf(displayUnit="m2")) annotation (Placement(transformation(extent={{0,-30},{-20,-10}})));
protected
parameter Medium.ThermodynamicState state_0_CS = Medium.setState_phX(Medium.p_default, Medium.h_default, Medium.X_default[1:Medium.nXi]);
parameter Modelica.Units.SI.Density rho_CS = Medium.density(state_0_CS);
parameter Modelica.Units.SI.SpecificHeatCapacity cp_CS = Medium.specificHeatCapacityCp(state_0_CS);
parameter Medium.ThermodynamicState state_0_cuve = Medium.setState_phX(Medium.p_default, Medium.h_default, Medium.X_default[1:Medium.nXi]);
parameter Modelica.Units.SI.Density rho_cuve = Medium.density(state_0_cuve);
parameter Modelica.Units.SI.SpecificHeatCapacity cp_cuve = Medium.specificHeatCapacityCp(state_0_cuve);

equation

connect(mCV.outlet, pHEXSimplified.inletB) annotation (Line(
points={{30,-20},{26,-20},{26,-4.44089e-15}},
color={28,108,200},
thickness=0.5));
connect(pHEXSimplified.outletB, sink.inlet) annotation (Line(
points={{26,20},{26,40},{56,40}},
color={28,108,200},
thickness=0.5));
connect(mCV.inlet, source.outlet) annotation (Line(
points={{50,-20},{60,-20}},
color={28,108,200},
thickness=0.5));
connect(flowGenerator_SF.outlet, thermalConvectionPipe.inlet) annotation (Line(
points={{-50,-20},{-60,-20},{-60,0}},
color={28,108,200},
thickness=0.5));
connect(thermalConvectionPipe.outlet, pHEXSimplified.inletA)
annotation (Line(
points={{-60,20},{-60,40},{14,40},{14,20}},
color={28,108,200},
thickness=0.5));
connect(heatScenario.y, prescribedHeatFlow.Q_flow) annotation (Line(points={{-89,10},{-84,10}}, color={0,0,127}));
connect(thermalConvectionPipe.heatPort, prescribedHeatFlow.port) annotation (Line(points={{-70,10},{-76,10}}, color={191,0,0}));
connect(flowGenerator_SF.inlet, reservoir.outlet) annotation (Line(
points={{-30,-20},{-20,-20}},
color={28,108,200},
thickness=0.5));
connect(pHEXSimplified.outletA, reservoir.inlet) annotation (Line(
points={{14,0},{14,-20},{0,-20}},
color={28,108,200},
thickness=0.5));
annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-100,-80},{100,80}})),
Diagram(
coordinateSystem(preserveAspectRatio=false, extent={{-100,-80},{100,80}})),
experiment(
StopTime=3600,
Interval=60,
__Dymola_Algorithm="Dassl"),
__Dymola_Commands(
executeCall(ensureSimulated=true) = {createPlot(
id=1,
position={0,0,1614,678},
y={"solarField_V2.inlet.state.T","solarField_V2.outlet.state.T","solarField_V2.heatTransferElement_Solar_V2.T","weather.T_amb","solarField_V2.heatTransferElement_Solar_V2.T_in_eff",
"solarField_V2.inlet.m_flow"},
range={0.0,195.0,-5.0,90.0},
grid=true,
colors={{28,108,200},{238,46,47},{217,67,180},{0,140,72},{102,44,145},{0,0,0}},
timeUnit="h",
displayUnits={"degC","degC","degC","degC","degC","kg/s"})} "Temp CS",
executeCall(ensureSimulated=true) = {createPlot(
id=1,
position={0,0,1614,697},
y={"weather.T_amb","solarField_V2.inlet.state.T","solarField_V2.outlet.state.T","solarField_V2.heatTransferElement_Solar_V2.T","solarField_V2.heatTransferElement_Solar_V2.T_in_eff",
"solarField_V2.inlet.m_flow"},
range={0.0,195.0,-10.0,90.0},
grid=true,
subPlot=101,
colors={{0,140,72},{28,108,200},{238,46,47},{217,67,180},{102,44,145},{0,0,0}},
timeUnit="h",
displayUnits={"degC","degC","degC","degC","degC","kg/s"}),createPlot(
id=1,
position={0,0,1614,697},
y={"stratifiedTank_Diffuser.T_lay[1]","stratifiedTank_Diffuser.T_lay[3]","stratifiedTank_Diffuser.T_lay[5]","stratifiedTank_Diffuser.T_lay[7]","stratifiedTank_Diffuser.T_lay[9]",
"stratifiedTank_Diffuser.T_lay[11]","stratifiedTank_Diffuser.T_lay[13]","stratifiedTank_Diffuser.T_lay[15]","stratifiedTank_Diffuser.T_lay[17]","stratifiedTank_Diffuser.T_lay[19]",
"stratifiedTank_Diffuser.T_lay[20]"},
range={0.0,195.0,10.0,80.0},
grid=true,
subPlot=102,
colors={{28,108,200},{238,46,47},{0,140,72},{217,67,180},{0,0,0},{162,29,33},{244,125,35},{102,44,145},{28,108,200},{238,46,47},{0,140,72}},
patterns={LinePattern.Solid,LinePattern.Solid,LinePattern.Solid,LinePattern.Solid,LinePattern.Solid,LinePattern.Solid,LinePattern.Solid,
LinePattern.Solid,LinePattern.Dash,LinePattern.Dash,LinePattern.Dash},
timeUnit="h",
displayUnits={"degC","degC","degC","degC","degC","degC","degC","degC","degC","degC","degC"})} "Températures CS et cuve",
executeCall(ensureSimulated=true) = {createPlot(
id=1,
position={0,0,1614,678},
y={"prod_switch.y","flowGenerator_SF.V_flow_out","flowGenerator_SF.V_flow_sp"},
range={0.0,700000.0,-5.0,50.0},
grid=true,
subPlot=101,
colors={{0,140,72},{28,108,200},{238,46,47}},
timeUnit="s",
displayUnits={"","m3/h","m3/h"}),createPlot(
id=1,
position={0,0,1614,678},
y={"flowGenerator_SF.L"},
range={0.0,700000.0,-1000000.0,11000000.0},
grid=true,
subPlot=202,
colors={{28,108,200}},
timeUnit="s",
displayUnits={"1/m"}),createPlot(
id=1,
position={0,0,1614,678},
y={"flowGenerator_SF.dr","flowGenerator_SF.dr_set"},
range={0.0,700000.0,-4.0,4.0},
grid=true,
subPlot=201,
colors={{28,108,200},{238,46,47}},
timeUnit="s",
displayUnits={"bar","bar"}),createPlot(
id=1,
position={0,0,1614,678},
y={"flowGenerator_SF.p_in","flowGenerator_SF.p_out"},
range={0.0,700000.0,0.5,4.0},
grid=true,
subPlot=102,
colors={{28,108,200},{238,46,47}},
timeUnit="s",
displayUnits={"bar","bar"})} "Inertance analysis"));
end TargetTest_00;
Loading