Skip to content

Commit

Permalink
Merged IBPSA, #1576
Browse files Browse the repository at this point in the history
This merges the reversible, modular chiller and heat pump models
  • Loading branch information
mwetter committed Jan 16, 2024
1 parent 20162c6 commit 6a04597
Show file tree
Hide file tree
Showing 234 changed files with 25,854 additions and 17 deletions.
212 changes: 212 additions & 0 deletions Buildings/.copiedFiles.txt

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Buildings/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ model SimpleHouse0
parameter Modelica.Units.SI.Density rhoWall = 2000 "Wall density";
parameter Modelica.Units.SI.SpecificHeatCapacity cpWall = 1000 "Wall specific heat capacity";
Buildings.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam=
ModelicaServices.ExternalReferences.loadResource(
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"))
"Weather data reader"
annotation (Placement(transformation(extent={{-180,-10},{-160,10}})));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
within Buildings.Fluid.Chillers.ModularReversible.BaseClasses;
model RefrigerantCycle "Refrigerant cycle model of a chiller"
extends Buildings.Fluid.HeatPumps.ModularReversible.BaseClasses.PartialModularRefrigerantCycle;
replaceable model RefrigerantCycleChillerCooling =
Buildings.Fluid.Chillers.ModularReversible.RefrigerantCycle.BaseClasses.NoCooling(
useInChi=true)
constrainedby
Buildings.Fluid.Chillers.ModularReversible.RefrigerantCycle.BaseClasses.PartialChillerCycle
"Replaceable model for refrigerant cycle of a chiller in main operation mode"
annotation (choicesAllMatching=true);

replaceable model RefrigerantCycleChillerHeating =
Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.NoHeating(
useInHeaPum=true)
constrainedby
Buildings.Fluid.HeatPumps.ModularReversible.RefrigerantCycle.BaseClasses.PartialHeatPumpCycle
"Replaceable model for refrigerant cycle of a chiller in reversed operation mode"
annotation (Dialog(enable=use_rev),choicesAllMatching=true);

RefrigerantCycleChillerCooling refCycChiCoo
"Refrigerant cycle instance for cooling"
annotation (Placement(transformation(extent={{21,40},{60,80}}, rotation=0)));
RefrigerantCycleChillerHeating refCycChiHea if use_rev
"Refrigerant cycle instance for heating"
annotation (Placement(transformation(extent={{-60,38},{-19,80}}, rotation=0)));

protected
Buildings.Utilities.IO.Strings.StringPassThrough strPasThr
"String pass through to enable conditional string data";
Buildings.Utilities.IO.Strings.Constant conStrSou(
final k=refCycChiCoo.datSou)
"Constant String data source";

initial algorithm
assert(
strPasThr.y == refCycChiCoo.datSou,
"In " + getInstanceName() + ": Data sources for reversible operation are not equal.
Cooling data source is " + refCycChiCoo.datSou + ", heating data source is "
+ strPasThr.y + ". Only continue if this is intended.",
AssertionLevel.warning);
equation
if use_rev then
connect(refCycChiHea.datSouOut, strPasThr.u);
else
connect(QEva_flow, refCycChiCoo.QEva_flow) annotation (Line(
points={{-110,0},{-90,0},{-90,24},{54,24},{54,38.3333},{53.5,38.3333}},
color={0,0,127},
pattern=LinePattern.Dash));
connect(refCycChiCoo.QCon_flow, QCon_flow) annotation (Line(
points={{27.5,38.3333},{27.5,20},{92,20},{92,0},{110,0}},
color={0,0,127},
pattern=LinePattern.Dash));
connect(refCycChiCoo.PEle, PEle) annotation (Line(
points={{40.5,38.3333},{40.5,-90},{0,-90},{0,-110.5},{0.5,-110.5}},
color={0,0,127},
pattern=LinePattern.Dash));
connect(conStrSou.y, strPasThr.u);
end if;

connect(pasTrhModSet.u, sigBus.coo);

connect(sigBus,refCycChiHea.sigBus) annotation (Line(
points={{0,100},{0,92},{-39.3292,92},{-39.3292,80}},
color={255,204,51},
thickness=0.5));
connect(sigBus,refCycChiCoo.sigBus) annotation (Line(
points={{0,100},{0,92},{40.6625,92},{40.6625,80}},
color={255,204,51},
thickness=0.5));

connect(swiPEle.u2, sigBus.coo) annotation (Line(points={{2.22045e-15,-58},{
2.22045e-15,-2},{0,-2},{0,100}},
color={255,0,255}), Text(
string="%second",
index=1,
extent={{-3,6},{-3,6}},
horizontalAlignment=TextAlignment.Right));
connect(swiQEva.u2, sigBus.coo) annotation (Line(points={{-58,0},{0,0},{0,100}},
color={255,0,255}), Text(
string="%second",
index=1,
extent={{6,3},{6,3}},
horizontalAlignment=TextAlignment.Left));
connect(swiQCon.u2, sigBus.coo) annotation (Line(points={{58,0},{0,0},{0,100}},
color={255,0,255}), Text(
string="%second",
index=1,
extent={{-6,3},{-6,3}},
horizontalAlignment=TextAlignment.Right));
connect(refCycChiCoo.QEva_flow, swiQEva.u1) annotation (Line(points={{53.5,
38.3333},{53.5,24},{-10,24},{-10,8},{-58,8}}, color={0,0,127}));
connect(refCycChiCoo.QCon_flow, swiQCon.u1)
annotation (Line(points={{27.5,38.3333},{27.5,8},{58,8}}, color={0,0,127}));
connect(refCycChiCoo.PEle, swiPEle.u1) annotation (Line(points={{40.5,38.3333},
{40.5,-48},{8,-48},{8,-58}}, color={0,0,127}));
connect(refCycChiHea.PEle, swiPEle.u3) annotation (Line(points={{-39.5,36.25},{
-39.5,-48},{-8,-48},{-8,-58}}, color={0,0,127}));
connect(refCycChiHea.QCon_flow, swiQEva.u3) annotation (Line(points={{-53.1667,
36.25},{-53.1667,-8},{-58,-8}}, color={0,0,127}));
connect(refCycChiHea.QEva_flow, swiQCon.u3) annotation (Line(points={{-25.8333,
36.25},{-25.8333,-8},{58,-8}}, color={0,0,127}));

annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={
Rectangle(
extent={{-100,100},{100,-100}},
lineColor={238,46,47},
fillColor={0,0,0},
fillPattern=FillPattern.Solid),
Ellipse(
extent={{-24,88},{22,44}},
lineColor={28,108,200},
lineThickness=0.5),
Line(
points={{-16,82},{20,74}},
color={28,108,200},
thickness=0.5),
Line(
points={{-18,52},{20,58}},
color={28,108,200},
thickness=0.5),
Rectangle(
extent={{-98,40},{-60,-28}},
lineColor={28,108,200},
lineThickness=0.5),
Line(
points={{-20,-60},{-20,-70},{-20,-80},{20,-60},{20,-80},{-20,-60}},
color={28,108,200},
thickness=0.5),
Line(
points={{-122,34},{-66,34},{-82,10},{-66,-22},{-120,-22}},
color={28,108,200},
thickness=0.5),
Rectangle(
extent={{60,40},{98,-28}},
lineColor={28,108,200},
lineThickness=0.5),
Line(
points={{120,34},{64,34},{80,10},{64,-22},{118,-22}},
color={28,108,200},
thickness=0.5),
Line(
points={{-80,40},{-80,68},{-24,68}},
color={28,108,200},
thickness=0.5),
Line(
points={{22,66},{80,66},{80,40}},
color={28,108,200},
thickness=0.5),
Line(
points={{78,-28},{78,-70}},
color={28,108,200},
thickness=0.5),
Line(
points={{78,-70},{62,-70},{20,-70}},
color={28,108,200},
thickness=0.5),
Line(
points={{-80,-26},{-80,-68},{-20,-68}},
color={28,108,200},
thickness=0.5),
Text(
extent={{-151,147},{149,107}},
textColor={0,0,255},
fillPattern=FillPattern.HorizontalCylinder,
fillColor={0,127,255},
textString="%name")}), Diagram(coordinateSystem(preserveAspectRatio=false)),
Documentation(revisions="<html><ul>
<li>
<i>May 22, 2019,</i> by Julian Matthes:<br/>
First implementation (see issue <a href=
\"https://github.com/RWTH-EBC/AixLib/issues/715\">AixLib #715</a>)
</li>
</ul>
</html>", info="<html>
<p>
Modular refrigerant cycle model for chiller applications used in
the model <a href=\"modelica://Buildings.Fluid.Chillers.ModularReversible.ModularReversible\">
Buildings.Fluid.Chillers.ModularReversible.ModularReversible</a> and extending models
of the modular approach.
</p>
<p>
This model adds the replaceable model approaches for cooling and heating data
to the partial refrigerant cylce.
</p>
<p>
Further, an asseration warning is raised if the model approaches or
sources for performance data differ. This indicates that they are not
for the same device.
</p>
</html>"));
end RefrigerantCycle;
11 changes: 11 additions & 0 deletions Buildings/Fluid/Chillers/ModularReversible/BaseClasses/package.mo
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
within Buildings.Fluid.Chillers.ModularReversible;
package BaseClasses "Package with base classes for Buildings.Fluid.Chillers.ModularReversible"
extends Modelica.Icons.BasesPackage;

annotation (preferredView="info", Documentation(info="<html>
<p>
This package contains base classes that are used to construct the models in
<a href=\"modelica://Buildings.Fluid.Chillers.ModularReversible\">Buildings.Fluid.Chillers.ModularReversible</a>.
</p>
</html>"));
end BaseClasses;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
RefrigerantCycle
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
within Buildings.Fluid.Chillers.ModularReversible.Controls.Safety;
model OperationalEnvelope
"Indicates if the chiller operation is within a defined envelope"
extends
HeatPumps.ModularReversible.Controls.Safety.BaseClasses.PartialOperationalEnvelope;
Modelica.Blocks.Logical.Not notCoo "=true for heating" annotation (Placement(
transformation(
extent={{-10,-10},{10,10}},
rotation=0,
origin={-50,0})));
equation
if use_TAmbSidOut then
connect(bouMapCoo.TAmbSid, sigBus.TConOutMea) annotation (Line(points={{-84.8,
-62},{-116,-62},{-116,-61},{-119,-61}},
color={0,0,127}));
connect(bouMapHea.TAmbSid, sigBus.TConOutMea) annotation (Line(points={{-84.8,
58},{-104,58},{-104,-60},{-112,-60},{-112,-61},{-119,-61}},
color={0,0,127}));
else
connect(bouMapCoo.TAmbSid, sigBus.TConInMea) annotation (Line(points={{-84.8,
-62},{-118,-62},{-118,-61},{-119,-61}},
color={0,0,127}));
connect(bouMapHea.TAmbSid, sigBus.TConInMea) annotation (Line(points={{-84.8,
58},{-104,58},{-104,-60},{-112,-60},{-112,-61},{-119,-61}},
color={0,0,127}));
end if;
if use_TUseSidOut then
connect(bouMapHea.TUseSid, sigBus.TEvaOutMea) annotation (Line(points={{-84.2,
82},{-104,82},{-104,-60},{-112,-60},{-112,-61},{-119,-61}},
color={0,0,127}));
connect(bouMapCoo.TUseSid, sigBus.TEvaOutMea) annotation (Line(points={{-84.2,
-38},{-104,-38},{-104,-60},{-112,-60},{-112,-61},{-119,-61}},
color={0,0,127}));
else
connect(bouMapHea.TUseSid, sigBus.TEvaInMea) annotation (Line(points={{-84.2,
82},{-104,82},{-104,-60},{-112,-60},{-112,-61},{-119,-61}},
color={0,0,127}));
connect(bouMapCoo.TUseSid, sigBus.TEvaInMea) annotation (Line(points={{-84.2,
-38},{-104,-38},{-104,-60},{-112,-60},{-112,-61},{-119,-61}},
color={0,0,127}));
end if;
connect(notCoo.y, swiHeaCoo.u2)
annotation (Line(points={{-39,0},{-6,0}}, color={255,0,255}));
connect(notCoo.u, sigBus.coo) annotation (Line(points={{-62,0},{-70,0},{-70,
-8},{-104,-8},{-104,-60},{-112,-60},{-112,-61},{-119,-61}},
color={255,0,255}), Text(
string="%second",
index=1,
extent={{-6,3},{-6,3}},
horizontalAlignment=TextAlignment.Right));
annotation (Diagram(coordinateSystem(extent={{-120,-120},{120,120}})),
Documentation(revisions="<html><ul>
<li>
<i>November 26, 2018</i> by Fabian Wuellhorst:<br/>
First implementation (see issue <a href=
\"https://github.com/RWTH-EBC/AixLib/issues/577\">AixLib #577</a>)
</li>
</ul>
</html>", info="<html>
<p>
Model to check if the operating conditions of a chiller are inside
the given boundaries. If not, the heat pump or chiller will switch off.
</p>
<p>
Read the documentation of
<a href=\"modelica://Buildings.Fluid.HeatPumps.ModularReversible.Controls.Safety.BaseClasses.PartialOperationalEnvelope\">
Buildings.Fluid.HeatPumps.ModularReversible.Controls.Safety.BaseClasses.PartialOperationalEnvelope</a>
for more information.
</p>
</html>"));
end OperationalEnvelope;
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
within Buildings.Fluid.Chillers.ModularReversible.Controls;
package Safety "Contains typical safety controllers for chillers"
extends Modelica.Icons.Package;

annotation (Icon(graphics={
Ellipse(
extent={{-48,-12},{48,80}},
lineColor={0,0,0},
fillColor={91,91,91},
fillPattern=FillPattern.Solid),
Ellipse(
extent={{-36,0},{36,68}},
lineColor={0,0,0},
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{-60,34},{60,-66}},
lineColor={0,0,0},
fillColor={91,91,91},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{-10,-16},{10,-56}},
lineColor={0,0,0},
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Ellipse(
extent={{-14,-26},{16,2}},
lineColor={0,0,0},
fillColor={255,255,255},
fillPattern=FillPattern.Solid)}), Documentation(info="<html>
<p>
Package with safety controls typically
applied in chiller devices.
</p>
</html>"));
end Safety;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
OperationalEnvelope
13 changes: 13 additions & 0 deletions Buildings/Fluid/Chillers/ModularReversible/Controls/package.mo
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
within Buildings.Fluid.Chillers.ModularReversible;
package Controls "Package of control sequences"
extends Modelica.Icons.VariantsPackage;

annotation (
preferredView="info",
Documentation(
info="<html>
<p>
This package contains control sequences.
</p>
</html>"));
end Controls;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Safety
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
within Buildings.Fluid.Chillers.ModularReversible.Data.TableData2D.EN14511;
record Carrier30XWP1012_1MW
"Carrier 30XW-P 1012 with roughly 1 MW cooling output"
extends Buildings.Fluid.Chillers.ModularReversible.Data.TableData2D.Generic(
tabQEva_flow=[0,298.15,303.15,308.15,313.15,318.15; 278.15,-1003000,-968000,
-932000,-894000,-854000; 280.15,-1054000,-1035000,-995000,-954000,-911000; 283.15,
-1102000,-1120000,-1096000,-1050000,-1002000; 288.15,-1181000,-1199000,-1226000,
-1227000,-1170000; 291.15,-1227000,-1244000,-1275000,-1311000,-1278000],
tabPEle=[0,298.15,303.15,308.15,313.15,318.15; 278.15,158954,181955,208036,
237766,271111; 280.15,159215,182218,208159,237905,271131; 283.15,159479,
182708,208762,238095,271545; 288.15,160462,183333,209573,239648,272727;
291.15,161024,183752,210396,240550,274249],
mCon_flow_nominal=49.85,
mEva_flow_nominal=49.85,
dpCon_nominal=32000,
dpEva_nominal=44000,
tabLowBou=[293.15,276.15; 323.15,276.15],
devIde="Carrier30XWP1012",
use_TConOutForOpeEnv=true,
use_TEvaOutForOpeEnv=true,
use_TConOutForTab=false,
use_TEvaOutForTab=true);

annotation (
Icon(coordinateSystem(preserveAspectRatio=false)),
Diagram(coordinateSystem(preserveAspectRatio=false)),
Documentation(info="<html>
<p>
Performance data for Daikin FTXM20R_RXM20R for the cooling mode.
</p>
<p>
Boundaries are for dry-bulb temperature.
</p>
<h4>References</h4>
<p>
Carrier, Water-Cooled Liquid Chillers Pro-Dialog plus, 30XW- 30XWHDaikin
<a href=\"http://www.carrier.com.kw/pdf/pdf/Chilled%20Water%20Products/30XW.pdf\">
http://www.carrier.com.kw/pdf/pdf/Chilled%20Water%20Products/30XW.pdf</a>
</p>
</html>", revisions="<html>
<ul>
<li>
<i>October 2, 2022</i> by Fabian Wuellhorst:<br/>
First implementation (see issue <a href=
\"https://github.com/ibpsa/modelica-ibpsa/issues/1576\">#1576</a>)
</li>
</ul>
</html>"));
end Carrier30XWP1012_1MW;
Loading

0 comments on commit 6a04597

Please sign in to comment.