Skip to content

Commit e99200b

Browse files
Merge branch 'issue1374_template_CHW_final' of github.com:lbl-srg/modelica-buildings into issue3266_template_HW_plant
2 parents 4959db4 + 0c2e878 commit e99200b

4,972 files changed

Lines changed: 340255 additions & 77651 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/formatting.yml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
run: pip3 install --upgrade pip wheel
4141

4242
- name: "Install BuildingsPy"
43-
run: pip3 install git+https://github.com/lbl-srg/BuildingsPy@50ac74d8e4fd067179bb38bc23140c2c9254c94c
43+
run: pip3 install git+https://github.com/lbl-srg/BuildingsPy@0bc654fd913c83f64163be167807e8989eff0293
4444

4545
- name: Check for UTF-8 BOM
4646
run : |
@@ -55,9 +55,11 @@ jobs:
5555
- name: "Test experiment setup"
5656
run : ../bin/runUnitTests.py --validate-experiment-setup
5757

58-
- name: "Test if package.order are correct"
58+
- name: "Test if package.order are correct, and revert order in UsersGuide"
5959
run : |
6060
python -c 'import buildingspy.development.refactor as r; r.write_package_order(".", recursive=True)'
61+
git checkout UsersGuide/ReleaseNotes/package.order
62+
git checkout UsersGuide/package.order
6163
git diff --exit-code .
6264
6365
- name: "Verify files for invalid strings"
@@ -119,3 +121,17 @@ jobs:
119121
chmod u=rw,og=rw $ff
120122
done
121123
done
124+
125+
test-checksum:
126+
# Skip if the commit message contains "ci skip"
127+
if: "!contains(github.event.head_commit.message, 'ci skip')"
128+
129+
runs-on: ubuntu-22.04
130+
131+
steps:
132+
# Checks-out repository under $GITHUB_WORKSPACE, so job can access it
133+
- name: Checkout code
134+
uses: actions/checkout@v3
135+
136+
- name: Compute the checksum and check that it matches the value from the last commit
137+
run: ./Resources/Scripts/travis/templates/checkandrun.sh --checksum --skip --diffhead

.travis.yml

Lines changed: 88 additions & 72 deletions
Large diffs are not rendered by default.

Buildings/.copiedFiles.txt

Lines changed: 1038 additions & 25 deletions
Large diffs are not rendered by default.

Buildings/Air/Systems/SingleZone/VAV/BaseClasses/ControllerChillerDXHeatingEconomizer.mo

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -212,11 +212,6 @@ model ControllerChillerDXHeatingEconomizer
212212
annotation (Placement(transformation(extent={{-60,-30},{-40,-10}})));
213213
Buildings.Controls.OBC.CDL.Reals.Switch swiFan "Switch fan on"
214214
annotation (Placement(transformation(extent={{70,120},{90,140}})));
215-
Buildings.Controls.OBC.CDL.Reals.Hysteresis hysHea(
216-
final uLow=0.01,
217-
final uHigh=0.05)
218-
"Hysteresis for heating"
219-
annotation (Placement(transformation(extent={{-30,120},{-10,140}})));
220215
Buildings.Controls.OBC.CDL.Logical.MultiOr orFan(nin=3)
221216
"Switch fan on if heating, cooling, or occupied"
222217
annotation (Placement(transformation(extent={{40,94},{60,114}})));
@@ -226,6 +221,9 @@ model ControllerChillerDXHeatingEconomizer
226221
"Chiller on signal based on room temperature"
227222
annotation (Placement(transformation(extent={{20,-80},{40,-60}})));
228223

224+
Controls.OBC.CDL.Reals.Greater heaOnTRoo(h=0.5)
225+
"Heater on signal based on room temperature"
226+
annotation (Placement(transformation(extent={{-60,120},{-40,140}})));
229227
protected
230228
Modelica.Blocks.Sources.Constant TSetSupChiConst(
231229
final k=TSupChi_nominal)
@@ -271,21 +269,17 @@ equation
271269
138},{68,138}}, color={0,0,127}));
272270
connect(swiFan.y, yFan) annotation (Line(points={{92,130},{96,130},{96,90},{
273271
110,90}}, color={0,0,127}));
274-
connect(conSup.yHea, hysHea.u) annotation (Line(points={{-39,86},{-34,86},{
275-
-34,130},{-32,130}}, color={0,0,127}));
276272
connect(swiFan.u2, orFan.y) annotation (Line(points={{68,130},{64,130},{64,104},{62,104}},
277273
color={255,0,255}));
278-
connect(hysHea.y, orFan.u[1]) annotation (Line(points={{-8,130},{24,130},{24,
279-
108.667},{38,108.667}},
280-
color={255,0,255}));
281274
connect(conEco.TMixSet, conCooVal.u_s) annotation (Line(points={{39,78},{-10,
282275
78},{-10,-20},{-2,-20}}, color={0,0,127}));
283276
connect(and1.y, chiOn) annotation (Line(points={{91,-30},{96,-30},{96,-54},{110,
284277
-54}}, color={255,0,255}));
285278
connect(conEco.yCoiSta, and1.u1) annotation (Line(points={{61,62},{64,62},{64,
286279
-30},{68,-30}}, color={255,0,255}));
287-
connect(uOcc, orFan.u[2]) annotation (Line(points={{-120,0},{-14,0},{-14,104},
288-
{38,104}}, color={255,0,255}));
280+
connect(uOcc, orFan.u[1]) annotation (Line(points={{-120,0},{-14,0},{-14,
281+
101.667},{38,101.667}},
282+
color={255,0,255}));
289283
connect(TMix, conEco.TMix) annotation (Line(points={{-120,30},{-26,30},{-26,75},
290284
{39,75}}, color={0,0,127}));
291285
connect(TOut, conEco.TOut) annotation (Line(points={{-120,-40},{-66,-40},{-66,
@@ -303,8 +297,14 @@ equation
303297
connect(chiOnTRoo.y, conEco.cooSta) annotation (Line(points={{42,-70},{50,-70},
304298
{50,40},{34,40},{34,62},{39,62}}, color={255,0,255}));
305299

306-
connect(chiOnTRoo.y, orFan.u[3]) annotation (Line(points={{42,-70},{50,-70},{
307-
50,40},{34,40},{34,99.3333},{38,99.3333}}, color={255,0,255}));
300+
connect(chiOnTRoo.y, orFan.u[2]) annotation (Line(points={{42,-70},{50,-70},{
301+
50,40},{34,40},{34,104},{38,104}}, color={255,0,255}));
302+
connect(heaOnTRoo.y, orFan.u[3]) annotation (Line(points={{-38,130},{20,130},
303+
{20,106.333},{38,106.333}}, color={255,0,255}));
304+
connect(heaOnTRoo.u2, TRoo) annotation (Line(points={{-62,122},{-86,122},{-86,
305+
-80},{-120,-80}}, color={0,0,127}));
306+
connect(TSetRooHea, heaOnTRoo.u1) annotation (Line(points={{-120,120},{-80,
307+
120},{-80,130},{-62,130}}, color={0,0,127}));
308308
annotation (
309309
defaultComponentName="conChiDXHeaEco",
310310
Icon(graphics={Line(points={{-100,-100},{0,2},{-100,100}}, color=
@@ -316,6 +316,11 @@ heating coil and a cooling coil.
316316
</html>", revisions="<html>
317317
<ul>
318318
<li>
319+
March 28, 2024, by David Blum:<br/>
320+
Adjust heating hysteresis to avoid chattering.
321+
This is for <a href=\"https://github.com/lbl-srg/modelica-buildings/issues/3735\">issue 3735</a>.
322+
</li>
323+
<li>
319324
November 20, 2020, by David Blum:<br/>
320325
Turn fan on when setup cooling required.
321326
This is for <a href=\"https://github.com/lbl-srg/modelica-buildings/issues/2265\">issue 2265</a>.

Buildings/Air/Systems/SingleZone/VAV/BaseClasses/ControllerEconomizer.mo

Lines changed: 91 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -29,52 +29,59 @@ model ControllerEconomizer "Controller for economizer"
2929
displayUnit="degC",
3030
final quantity="ThermodynamicTemperature")
3131
"Mixed air setpoint temperature"
32-
annotation (Placement(transformation(extent={{-120,70},{-100,90}})));
32+
annotation (Placement(transformation(extent={{-160,70},{-140,90}}),
33+
iconTransformation(extent={{-120,70},{-100,90}})));
3334
Modelica.Blocks.Interfaces.RealInput TMix(
3435
final unit="K",
3536
displayUnit="degC",
3637
final quantity="ThermodynamicTemperature")
3738
"Measured mixed air temperature"
38-
annotation (Placement(transformation(extent={{-120,40},{-100,60}})));
39+
annotation (Placement(transformation(extent={{-160,40},{-140,60}}),
40+
iconTransformation(extent={{-120,40},{-100,60}})));
3941
Modelica.Blocks.Interfaces.RealInput TOut(
4042
final unit="K",
4143
displayUnit="degC",
4244
final quantity="ThermodynamicTemperature")
4345
"Measured outside air temperature"
4446
annotation (Placement(
45-
transformation(extent={{-120,-60},{-100,-40}})));
47+
transformation(extent={{-160,-60},{-140,-40}}), iconTransformation(
48+
extent={{-120,-60},{-100,-40}})));
4649
Modelica.Blocks.Interfaces.BooleanInput cooSta "Cooling status"
47-
annotation (Placement(transformation(extent={{-120,-90},{-100,-70}})));
50+
annotation (Placement(transformation(extent={{-160,-90},{-140,-70}}),
51+
iconTransformation(extent={{-120,-90},{-100,-70}})));
4852
Modelica.Blocks.Interfaces.RealInput TRet(
4953
final unit="K",
5054
displayUnit="degC",
5155
final quantity="ThermodynamicTemperature")
5256
"Return air temperature"
53-
annotation (Placement(transformation(extent={{-120,10},{-100,30}})));
57+
annotation (Placement(transformation(extent={{-160,10},{-140,30}}),
58+
iconTransformation(extent={{-120,10},{-100,30}})));
5459
Modelica.Blocks.Interfaces.RealInput minOAFra(
5560
final min = 0,
5661
final max = 1,
5762
final unit="1")
5863
"Minimum outside air fraction"
59-
annotation (Placement(transformation(extent={{-120,-30},{-100,-10}})));
64+
annotation (Placement(transformation(extent={{-160,-30},{-140,-10}}),
65+
iconTransformation(extent={{-120,-30},{-100,-10}})));
6066
Modelica.Blocks.Interfaces.RealOutput yOutAirFra(
6167
final unit="1")
6268
"Control signal for outside air fraction"
63-
annotation (Placement(transformation(extent={{100,-10},{120,10}})));
69+
annotation (Placement(transformation(extent={{140,-10},{160,10}}),
70+
iconTransformation(extent={{100,-10},{120,10}})));
6471

6572
Modelica.Blocks.Nonlinear.VariableLimiter Limiter(
6673
final strict=true)
6774
"Signal limiter"
68-
annotation (Placement(transformation(extent={{60,-10},{80,10}})));
75+
annotation (Placement(transformation(extent={{100,-10},{120,10}})));
6976
Modelica.Blocks.Sources.Constant const(
7077
final k=1)
7178
"Constant output signal with value 1"
72-
annotation (Placement(transformation(extent={{20,60},{40,80}})));
79+
annotation (Placement(transformation(extent={{60,60},{80,80}})));
7380
Modelica.Blocks.Logical.Switch switch1 "Switch to select control output"
74-
annotation (Placement(transformation(extent={{20,10},{40,30}})));
81+
annotation (Placement(transformation(extent={{60,10},{80,30}})));
7582
Modelica.Blocks.MathBoolean.And and1(
7683
final nu=3) "Logical and"
77-
annotation (Placement(transformation(extent={{20,-60},{40,-40}})));
84+
annotation (Placement(transformation(extent={{-30,-40},{-10,-20}})));
7885
Controls.Continuous.LimPID con(
7986
final controllerType=controllerTypeEco,
8087
final k=kEco,
@@ -84,91 +91,101 @@ model ControllerEconomizer "Controller for economizer"
8491
final yMax=1,
8592
final yMin=0)
8693
"Controller"
87-
annotation (Placement(transformation(extent={{-90,70},{-70,90}})));
94+
annotation (Placement(transformation(extent={{-130,70},{-110,90}})));
8895
Modelica.Blocks.Math.Feedback feedback "Control error"
89-
annotation (Placement(transformation(extent={{-80,-40},{-60,-20}})));
96+
annotation (Placement(transformation(extent={{-120,-40},{-100,-20}})));
9097
Modelica.Blocks.Math.Feedback feedback1
91-
annotation (Placement(transformation(extent={{-80,20},{-60,40}})));
98+
annotation (Placement(transformation(extent={{-120,20},{-100,40}})));
9299
Controls.OBC.CDL.Reals.Hysteresis hysChiPla(
93100
final uLow=0.95,
94101
final uHigh=0.98)
95102
"Hysteresis with delay to switch on cooling"
96-
annotation (Placement(transformation(extent={{60,-60},{80,-40}})));
103+
annotation (Placement(transformation(extent={{100,-60},{120,-40}})));
97104
Modelica.Blocks.Logical.Or or1 "Saturated ecnomizer or no economizer"
98-
annotation (Placement(transformation(extent={{70,-90},{90,-70}})));
105+
annotation (Placement(transformation(extent={{110,-90},{130,-70}})));
99106
Modelica.Blocks.Interfaces.BooleanOutput yCoiSta "Cooling coil status"
100-
annotation (Placement(transformation(extent={{100,-90},{120,-70}})));
107+
annotation (Placement(transformation(extent={{140,-90},{160,-70}}),
108+
iconTransformation(extent={{100,-90},{120,-70}})));
101109
Modelica.Blocks.Logical.Not not1 "No economizer"
102-
annotation (Placement(transformation(extent={{40,-100},{60,-80}})));
110+
annotation (Placement(transformation(extent={{60,-90},{80,-70}})));
103111

104112
Controls.OBC.CDL.Reals.Hysteresis hysCooPot(
105113
final uLow=0,
106114
final uHigh=0.5)
107115
"Hysteresis with delay to check for cooling potential of outside air"
108-
annotation (Placement(transformation(extent={{-54,20},{-34,40}})));
116+
annotation (Placement(transformation(extent={{-94,20},{-74,40}})));
109117
Controls.OBC.CDL.Logical.TrueFalseHold truFalHolCooPot(
110118
final trueHoldDuration=60*15)
111119
"True/false hold for cooling potential"
112-
annotation (Placement(transformation(extent={{-26,20},{-6,40}})));
120+
annotation (Placement(transformation(extent={{-66,20},{-46,40}})));
113121
Controls.OBC.CDL.Logical.TrueFalseHold truFalHolTMix(
114122
final trueHoldDuration=60*15)
115123
"True/false hold for mixing temperature"
116-
annotation (Placement(transformation(extent={{-24,-40},{-4,-20}})));
124+
annotation (Placement(transformation(extent={{-64,-40},{-44,-20}})));
117125
Controls.OBC.CDL.Reals.Hysteresis hysTMix(
118126
final uLow=-0.5,
119127
final uHigh=0.5)
120128
"Hysteresis with delay for mixed air temperature"
121-
annotation (Placement(transformation(extent={{-52,-40},{-32,-20}})));
129+
annotation (Placement(transformation(extent={{-92,-40},{-72,-20}})));
130+
protected
131+
Controls.OBC.CDL.Logical.Pre pre1
132+
"Use left-limit of signal to break algebraic loop"
133+
annotation (Placement(transformation(extent={{10,-40},{30,-20}})));
122134
equation
123-
connect(Limiter.limit2, minOAFra) annotation (Line(points={{58,-8},{-20,-8},{
124-
-20,-8},{-94,-8},{-94,-20},{-110,-20},{-110,-20}},
125-
color={0,0,127}));
126-
connect(const.y, Limiter.limit1) annotation (Line(points={{41,70},{50,70},{50,
127-
8},{58,8}}, color={0,0,127}));
128-
connect(minOAFra, switch1.u3) annotation (Line(points={{-110,-20},{-94,-20},{
129-
-94,12},{18,12}}, color={0,0,127}));
130-
connect(switch1.y, Limiter.u) annotation (Line(points={{41,20},{46,20},{46,0},
131-
{58,0}}, color={0,0,127}));
132-
connect(and1.y, switch1.u2) annotation (Line(points={{41.5,-50},{48,-50},{48,
133-
-6},{10,-6},{10,20},{18,20}},
134-
color={255,0,255}));
135-
connect(con.u_s, TMixSet) annotation (Line(points={{-92,80},{-92,80},{-110,80}}, color={0,0,127}));
136-
connect(TMix, con.u_m) annotation (Line(points={{-110,50},{-80,50},{-80,68}}, color={0,0,127}));
137-
connect(con.y, switch1.u1) annotation (Line(points={{-69,80},{12,80},{12,28},
138-
{18,28}}, color={0,0,127}));
139-
connect(TOut, feedback.u2) annotation (Line(points={{-110,-50},{-70,-50},{-70,
140-
-38}}, color={0,0,127}));
141-
connect(feedback.u1, TMix) annotation (Line(points={{-78,-30},{-90,-30},{-90,50},
142-
{-110,50}}, color={0,0,127}));
143-
connect(Limiter.y, yOutAirFra) annotation (Line(points={{81,0},{110,0}}, color={0,0,127}));
144-
connect(feedback1.u1, TRet) annotation (Line(points={{-78,30},{-96,30},{-96,
145-
20},{-110,20}}, color={0,0,127}));
146-
connect(feedback1.u2,TOut) annotation (Line(points={{-70,22},{-70,16},{-86,
147-
16},{-86,-50},{-110,-50}}, color={0,0,127}));
148-
connect(Limiter.y, hysChiPla.u) annotation (Line(points={{81,0},{90,0},{90,
149-
-20},{52,-20},{52,-50},{58,-50}}, color={0,0,127}));
150-
connect(or1.y, yCoiSta) annotation (Line(points={{91,-80},{110,-80}}, color={255,0,255}));
151-
connect(not1.y, or1.u2) annotation (Line(points={{61,-90},{64,-90},{64,-88},{
152-
68,-88}}, color={255,0,255}));
153-
connect(and1.y, not1.u) annotation (Line(points={{41.5,-50},{48,-50},{48,-70},
154-
{30,-70},{30,-90},{38,-90}}, color={255,0,255}));
155-
connect(hysChiPla.y, or1.u1) annotation (Line(points={{82,-50},{88,-50},{88,
156-
-64},{62,-64},{62,-80},{68,-80}}, color={255,0,255}));
135+
connect(Limiter.limit2, minOAFra) annotation (Line(points={{98,-8},{-94,-8},{
136+
-94,-20},{-150,-20}}, color={0,0,127}));
137+
connect(const.y, Limiter.limit1) annotation (Line(points={{81,70},{90,70},{90,
138+
8},{98,8}}, color={0,0,127}));
139+
connect(minOAFra, switch1.u3) annotation (Line(points={{-150,-20},{-134,-20},
140+
{-134,12},{58,12}},color={0,0,127}));
141+
connect(switch1.y, Limiter.u) annotation (Line(points={{81,20},{86,20},{86,0},
142+
{98,0}}, color={0,0,127}));
143+
connect(con.u_s, TMixSet) annotation (Line(points={{-132,80},{-150,80}}, color={0,0,127}));
144+
connect(TMix, con.u_m) annotation (Line(points={{-150,50},{-120,50},{-120,
145+
68}}, color={0,0,127}));
146+
connect(con.y, switch1.u1) annotation (Line(points={{-109,80},{20,80},{20,28},
147+
{58,28}}, color={0,0,127}));
148+
connect(TOut, feedback.u2) annotation (Line(points={{-150,-50},{-110,-50},{
149+
-110,-38}},
150+
color={0,0,127}));
151+
connect(feedback.u1, TMix) annotation (Line(points={{-118,-30},{-130,-30},{
152+
-130,50},{-150,50}},
153+
color={0,0,127}));
154+
connect(Limiter.y, yOutAirFra) annotation (Line(points={{121,0},{150,0}},color={0,0,127}));
155+
connect(feedback1.u1, TRet) annotation (Line(points={{-118,30},{-136,30},{
156+
-136,20},{-150,20}}, color={0,0,127}));
157+
connect(feedback1.u2,TOut) annotation (Line(points={{-110,22},{-110,16},{
158+
-126,16},{-126,-50},{-150,-50}}, color={0,0,127}));
159+
connect(Limiter.y, hysChiPla.u) annotation (Line(points={{121,0},{130,0},{130,
160+
-20},{92,-20},{92,-50},{98,-50}}, color={0,0,127}));
161+
connect(or1.y, yCoiSta) annotation (Line(points={{131,-80},{150,-80}},color={255,0,255}));
162+
connect(not1.y, or1.u2) annotation (Line(points={{81,-80},{90,-80},{90,-88},{
163+
108,-88}},color={255,0,255}));
164+
connect(hysChiPla.y, or1.u1) annotation (Line(points={{122,-50},{126,-50},{
165+
126,-64},{100,-64},{100,-80},{108,-80}},
166+
color={255,0,255}));
157167

158168
connect(feedback.y, hysTMix.u)
159-
annotation (Line(points={{-61,-30},{-54,-30}}, color={0,0,127}));
169+
annotation (Line(points={{-101,-30},{-94,-30}},color={0,0,127}));
160170
connect(hysTMix.y, truFalHolTMix.u)
161-
annotation (Line(points={{-30,-30},{-26,-30}}, color={255,0,255}));
171+
annotation (Line(points={{-70,-30},{-66,-30}}, color={255,0,255}));
162172
connect(feedback1.y, hysCooPot.u)
163-
annotation (Line(points={{-61,30},{-56,30}}, color={0,0,127}));
173+
annotation (Line(points={{-101,30},{-96,30}},color={0,0,127}));
164174
connect(hysCooPot.y, truFalHolCooPot.u)
165-
annotation (Line(points={{-32,30},{-28,30}}, color={255,0,255}));
166-
connect(truFalHolCooPot.y, and1.u[1]) annotation (Line(points={{-4,30},{8,30},
167-
{8,-45.3333},{20,-45.3333}}, color={255,0,255}));
168-
connect(truFalHolTMix.y, and1.u[2]) annotation (Line(points={{-2,-30},{4,-30},
169-
{4,-50},{20,-50}}, color={255,0,255}));
170-
connect(cooSta, and1.u[3]) annotation (Line(points={{-110,-80},{-44,-80},{-44,
171-
-54.6667},{20,-54.6667}}, color={255,0,255}));
175+
annotation (Line(points={{-72,30},{-68,30}}, color={255,0,255}));
176+
connect(truFalHolCooPot.y, and1.u[1]) annotation (Line(points={{-44,30},{-40,
177+
30},{-40,-32.3333},{-30,-32.3333}},
178+
color={255,0,255}));
179+
connect(truFalHolTMix.y, and1.u[2]) annotation (Line(points={{-42,-30},{-30,
180+
-30}}, color={255,0,255}));
181+
connect(cooSta, and1.u[3]) annotation (Line(points={{-150,-80},{-38,-80},{-38,
182+
-27.6667},{-30,-27.6667}},color={255,0,255}));
183+
connect(and1.y, pre1.u)
184+
annotation (Line(points={{-8.5,-30},{8,-30}}, color={255,0,255}));
185+
connect(pre1.y, switch1.u2) annotation (Line(points={{32,-30},{40,-30},{40,20},
186+
{58,20}}, color={255,0,255}));
187+
connect(pre1.y, not1.u) annotation (Line(points={{32,-30},{40,-30},{40,-80},{
188+
58,-80}}, color={255,0,255}));
172189
annotation (
173190
defaultComponentName="conEco",
174191
Documentation(info="<html>
@@ -178,6 +195,12 @@ Economizer controller.
178195
</html>", revisions="<html>
179196
<ul>
180197
<li>
198+
June 26, 2024, by Antoine Gautier:<br/>
199+
Added a <code>pre</code> block to break the algebraic loop involving the mixed air temperature.
200+
This is for
201+
<a href=\"https://github.com/lbl-srg/modelica-buildings/issues/3915\">#3915</a>.
202+
</li>
203+
<li>
181204
September 30, 2020, by Michael Wetter:<br/>
182205
Refactored implementation of hysteresis with hold, which was using a block that is now obsolete.<br/>
183206
This is for <a href=\"https://github.com/lbl-srg/modelica-buildings/issues/2134\">issue 2134</a>.
@@ -195,5 +218,6 @@ June 1, 2017, by David Blum:<br/>
195218
First implementation.
196219
</li>
197220
</ul>
198-
</html>"));
221+
</html>"),
222+
Diagram(coordinateSystem(extent={{-140,-100},{140,100}})));
199223
end ControllerEconomizer;

0 commit comments

Comments
 (0)