1 | within ;
|
---|
2 | package ThermalExamples
|
---|
3 | extends Modelica.Icons.Package;
|
---|
4 | package Examples
|
---|
5 | extends Modelica.Icons.ExamplesPackage;
|
---|
6 | partial model PartialBoiler
|
---|
7 | Modelica.Electrical.Analog.Basic.Resistor resistor(
|
---|
8 | R=7.5,
|
---|
9 | T_ref=293.15,
|
---|
10 | alpha=0.004,
|
---|
11 | useHeatPort=true)
|
---|
12 | annotation (Placement(transformation(extent={{40,10},{60,30}})));
|
---|
13 | Modelica.Electrical.Analog.Sources.SineVoltage sineVoltage(V=sqrt(2)*230, f=
|
---|
14 | 50) annotation (Placement(transformation(extent={{40,30},{60,50}})));
|
---|
15 | Modelica.Electrical.Analog.Basic.Ground ground annotation (Placement(
|
---|
16 | transformation(
|
---|
17 | extent={{-10,-10},{10,10}},
|
---|
18 | rotation=90,
|
---|
19 | origin={80,30})));
|
---|
20 | Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heatCapacitor(C=700, T(
|
---|
21 | fixed=true)) annotation (Placement(transformation(
|
---|
22 | extent={{-10,-10},{10,10}},
|
---|
23 | rotation=90,
|
---|
24 | origin={30,0})));
|
---|
25 | Modelica.Thermal.HeatTransfer.Components.ThermalResistor thermalResistor(R=
|
---|
26 | 0.0015) annotation (Placement(transformation(
|
---|
27 | extent={{-10,-10},{10,10}},
|
---|
28 | rotation=270,
|
---|
29 | origin={50,-20})));
|
---|
30 | Modelica.Thermal.FluidHeatFlow.Components.Pipe pipe(
|
---|
31 | medium=Modelica.Thermal.FluidHeatFlow.Media.Water(),
|
---|
32 | m=0.03,
|
---|
33 | T0=293.15,
|
---|
34 | T0fixed=true,
|
---|
35 | V_flowLaminar(displayUnit="l/min") = 3.3333333333333e-05,
|
---|
36 | dpLaminar=1000,
|
---|
37 | V_flowNominal(displayUnit="l/min") = 6.6666666666667e-05,
|
---|
38 | dpNominal=10000,
|
---|
39 | useHeatPort=true,
|
---|
40 | h_g=0) annotation (Placement(transformation(extent={{40,-40},{60,-60}})));
|
---|
41 | Modelica.Thermal.FluidHeatFlow.Sources.Ambient ambient1(
|
---|
42 | medium=Modelica.Thermal.FluidHeatFlow.Media.Water(),
|
---|
43 | constantAmbientPressure=100000,
|
---|
44 | constantAmbientTemperature=293.15)
|
---|
45 | annotation (Placement(transformation(extent={{0,-60},{-20,-40}})));
|
---|
46 | Modelica.Thermal.FluidHeatFlow.Sources.VolumeFlow volumeFlow(
|
---|
47 | medium=Modelica.Thermal.FluidHeatFlow.Media.Water(),
|
---|
48 | m=0.03,
|
---|
49 | T0=293.15,
|
---|
50 | T0fixed=true,
|
---|
51 | constantVolumeFlow(displayUnit="l/min") = 6.3333333333333e-05)
|
---|
52 | annotation (Placement(transformation(extent={{10,-60},{30,-40}})));
|
---|
53 | Modelica.Thermal.FluidHeatFlow.Sensors.TemperatureSensor temperatureSensor(
|
---|
54 | medium=Modelica.Thermal.FluidHeatFlow.Media.Water()) annotation (
|
---|
55 | Placement(transformation(
|
---|
56 | extent={{-10,-10},{10,10}},
|
---|
57 | rotation=270,
|
---|
58 | origin={70,-60})));
|
---|
59 | Modelica.Thermal.FluidHeatFlow.Sources.Ambient ambient2(
|
---|
60 | medium=Modelica.Thermal.FluidHeatFlow.Media.Water(),
|
---|
61 | constantAmbientPressure=100000,
|
---|
62 | constantAmbientTemperature=293.15)
|
---|
63 | annotation (Placement(transformation(extent={{80,-60},{100,-40}})));
|
---|
64 | equation
|
---|
65 | connect(sineVoltage.n, ground.p)
|
---|
66 | annotation (Line(points={{60,40},{70,40},{70,30}}, color={0,0,255}));
|
---|
67 | connect(ground.p, resistor.n)
|
---|
68 | annotation (Line(points={{70,30},{70,20},{60,20}}, color={0,0,255}));
|
---|
69 | connect(resistor.heatPort, thermalResistor.port_a)
|
---|
70 | annotation (Line(points={{50,10},{50,-10}},color={191,0,0}));
|
---|
71 | connect(thermalResistor.port_b, pipe.heatPort)
|
---|
72 | annotation (Line(points={{50,-30},{50,-40}}, color={191,0,0}));
|
---|
73 | connect(pipe.flowPort_a, volumeFlow.flowPort_b)
|
---|
74 | annotation (Line(points={{40,-50},{30,-50}}, color={255,0,0}));
|
---|
75 | connect(ambient1.flowPort, volumeFlow.flowPort_a)
|
---|
76 | annotation (Line(points={{0,-50},{10,-50}}, color={255,0,0}));
|
---|
77 | connect(pipe.flowPort_b, ambient2.flowPort)
|
---|
78 | annotation (Line(points={{60,-50},{80,-50}}, color={255,0,0}));
|
---|
79 | connect(pipe.flowPort_b, temperatureSensor.flowPort)
|
---|
80 | annotation (Line(points={{60,-50},{70,-50}}, color={255,0,0}));
|
---|
81 | connect(resistor.heatPort, heatCapacitor.port)
|
---|
82 | annotation (Line(points={{50,10},{50,0},{40,0}}, color={191,0,0}));
|
---|
83 | end PartialBoiler;
|
---|
84 |
|
---|
85 | model BoilerMaxT
|
---|
86 | extends Modelica.Icons.Example;
|
---|
87 | extends PartialBoiler;
|
---|
88 | equation
|
---|
89 | connect(sineVoltage.p, resistor.p) annotation (Line(points={{40,40},{30,
|
---|
90 | 40},{30,20},{40,20}}, color={0,0,255}));
|
---|
91 | annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
|
---|
92 | coordinateSystem(preserveAspectRatio=false)),
|
---|
93 | experiment(
|
---|
94 | StopTime=30,
|
---|
95 | Interval=0.0005,
|
---|
96 | Tolerance=1e-06,
|
---|
97 | __Dymola_Algorithm="Dassl"));
|
---|
98 | end BoilerMaxT;
|
---|
99 |
|
---|
100 | model BoilerOnOff
|
---|
101 | extends Modelica.Icons.Example;
|
---|
102 | extends PartialBoiler;
|
---|
103 | Modelica.Electrical.Analog.Ideal.IdealClosingSwitch switch annotation (
|
---|
104 | Placement(transformation(
|
---|
105 | extent={{10,-10},{-10,10}},
|
---|
106 | rotation=90,
|
---|
107 | origin={30,30})));
|
---|
108 | Modelica.Blocks.Logical.OnOffController onOffController(bandwidth=2,
|
---|
109 | pre_y_start=false)
|
---|
110 | annotation (Placement(transformation(extent={{-20,20},{0,40}})));
|
---|
111 | Modelica.Blocks.Sources.Ramp ramp(
|
---|
112 | height=15,
|
---|
113 | duration=15,
|
---|
114 | offset=20,
|
---|
115 | startTime=5)
|
---|
116 | annotation (Placement(transformation(extent={{-70,30},{-50,50}})));
|
---|
117 | Blocks.K2deg k2deg annotation (Placement(transformation(
|
---|
118 | extent={{-10,-10},{10,10}},
|
---|
119 | rotation=90,
|
---|
120 | origin={-40,-50})));
|
---|
121 | equation
|
---|
122 | connect(onOffController.y, switch.control)
|
---|
123 | annotation (Line(points={{1,30},{18,30}}, color={255,0,255}));
|
---|
124 | connect(ramp.y, onOffController.reference) annotation (Line(points={{-49,40},{
|
---|
125 | -40,40},{-40,36},{-22,36}}, color={0,0,127}));
|
---|
126 | connect(k2deg.y, onOffController.u) annotation (Line(points={{-40,-39},{
|
---|
127 | -40,24},{-22,24}}, color={0,0,127}));
|
---|
128 | connect(switch.p, sineVoltage.p)
|
---|
129 | annotation (Line(points={{30,40},{40,40}}, color={0,0,255}));
|
---|
130 | connect(switch.n, resistor.p)
|
---|
131 | annotation (Line(points={{30,20},{40,20}}, color={0,0,255}));
|
---|
132 | connect(temperatureSensor.y, k2deg.u) annotation (Line(points={{70,-71},{
|
---|
133 | 70,-76},{-40,-76},{-40,-62}}, color={0,0,127}));
|
---|
134 | annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
|
---|
135 | coordinateSystem(preserveAspectRatio=false)),
|
---|
136 | experiment(
|
---|
137 | StopTime=30,
|
---|
138 | Interval=0.0005,
|
---|
139 | Tolerance=1e-06,
|
---|
140 | __Dymola_Algorithm="Dassl"));
|
---|
141 | end BoilerOnOff;
|
---|
142 |
|
---|
143 | model BoilerTriac
|
---|
144 | extends Modelica.Icons.Example;
|
---|
145 | extends PartialBoiler;
|
---|
146 | Modelica.Blocks.Sources.Ramp ramp(
|
---|
147 | height=15,
|
---|
148 | duration=15,
|
---|
149 | offset=20,
|
---|
150 | startTime=5)
|
---|
151 | annotation (Placement(transformation(extent={{-100,20},{-80,40}})));
|
---|
152 | Blocks.K2deg k2deg annotation (Placement(transformation(
|
---|
153 | extent={{-10,-10},{10,10}},
|
---|
154 | rotation=90,
|
---|
155 | origin={-60,-50})));
|
---|
156 | Modelica.Electrical.PowerConverters.ACAC.SinglePhaseTriac triac
|
---|
157 | annotation (Placement(transformation(
|
---|
158 | extent={{-10,-10},{10,10}},
|
---|
159 | rotation=270,
|
---|
160 | origin={30,30})));
|
---|
161 | Modelica.Electrical.PowerConverters.ACDC.Control.Signal2mPulse adaptor(m=
|
---|
162 | 1, useConstantFiringAngle=false) annotation (Placement(
|
---|
163 | transformation(
|
---|
164 | extent={{-10,-10},{10,10}},
|
---|
165 | rotation=270,
|
---|
166 | origin={0,30})));
|
---|
167 | Modelica.Electrical.Analog.Sensors.VoltageSensor voltageSensor
|
---|
168 | annotation (Placement(transformation(extent={{40,70},{60,50}})));
|
---|
169 | Modelica.Electrical.PowerConverters.ACAC.Control.VoltageToAngle
|
---|
170 | voltageToAngle(VNominal=230, voltage2Angle=Modelica.Electrical.PowerConverters.Types.Voltage2AngleType.RMS)
|
---|
171 | annotation (Placement(transformation(extent={{-40,20},{-20,40}})));
|
---|
172 | Modelica.Blocks.Continuous.LimPID PID(
|
---|
173 | controllerType=Modelica.Blocks.Types.SimpleController.PI,
|
---|
174 | k=100,
|
---|
175 | Ti=4,
|
---|
176 | yMax=230,
|
---|
177 | yMin=0)
|
---|
178 | annotation (Placement(transformation(extent={{-70,20},{-50,40}})));
|
---|
179 | equation
|
---|
180 | connect(adaptor.fire_p[1], triac.fire1)
|
---|
181 | annotation (Line(points={{11,36},{18,36}}, color={255,0,255}));
|
---|
182 | connect(adaptor.fire_n[1], triac.fire2)
|
---|
183 | annotation (Line(points={{11,24},{18,24}}, color={255,0,255}));
|
---|
184 | connect(voltageSensor.v, adaptor.v[1]) annotation (Line(points={{50,71},{
|
---|
185 | 50,80},{0,80},{0,42}}, color={0,0,127}));
|
---|
186 | connect(voltageToAngle.firingAngle, adaptor.firingAngle)
|
---|
187 | annotation (Line(points={{-19,30},{-12,30}}, color={0,0,127}));
|
---|
188 | connect(k2deg.y, PID.u_m)
|
---|
189 | annotation (Line(points={{-60,-39},{-60,18}},color={0,0,127}));
|
---|
190 | connect(ramp.y, PID.u_s)
|
---|
191 | annotation (Line(points={{-79,30},{-72,30}}, color={0,0,127}));
|
---|
192 | connect(PID.y, voltageToAngle.vRef)
|
---|
193 | annotation (Line(points={{-49,30},{-42,30}}, color={0,0,127}));
|
---|
194 | connect(triac.p, sineVoltage.p)
|
---|
195 | annotation (Line(points={{30,40},{40,40}}, color={0,0,255}));
|
---|
196 | connect(triac.n, resistor.p)
|
---|
197 | annotation (Line(points={{30,20},{40,20}}, color={0,0,255}));
|
---|
198 | connect(sineVoltage.p, voltageSensor.p)
|
---|
199 | annotation (Line(points={{40,40},{40,60}}, color={0,0,255}));
|
---|
200 | connect(sineVoltage.n, voltageSensor.n)
|
---|
201 | annotation (Line(points={{60,40},{60,60}}, color={0,0,255}));
|
---|
202 | connect(temperatureSensor.y, k2deg.u) annotation (Line(points={{70,-71},{
|
---|
203 | 70,-76},{-60,-76},{-60,-62}}, color={0,0,127}));
|
---|
204 | annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
|
---|
205 | coordinateSystem(preserveAspectRatio=false)),
|
---|
206 | experiment(
|
---|
207 | StopTime=30,
|
---|
208 | Interval=0.0005,
|
---|
209 | Tolerance=1e-06,
|
---|
210 | __Dymola_Algorithm="Dassl"));
|
---|
211 | end BoilerTriac;
|
---|
212 |
|
---|
213 | model FMUBoilerTriac
|
---|
214 | extends PartialBoiler;
|
---|
215 | Blocks.K2deg k2deg annotation (Placement(transformation(
|
---|
216 | extent={{-10,-10},{10,10}},
|
---|
217 | rotation=90,
|
---|
218 | origin={-60,-50})));
|
---|
219 | Modelica.Electrical.PowerConverters.ACAC.SinglePhaseTriac triac
|
---|
220 | annotation (Placement(transformation(
|
---|
221 | extent={{-10,-10},{10,10}},
|
---|
222 | rotation=270,
|
---|
223 | origin={30,30})));
|
---|
224 | Modelica.Electrical.PowerConverters.ACDC.Control.Signal2mPulse adaptor(m=
|
---|
225 | 1, useConstantFiringAngle=false) annotation (Placement(
|
---|
226 | transformation(
|
---|
227 | extent={{-10,-10},{10,10}},
|
---|
228 | rotation=270,
|
---|
229 | origin={0,30})));
|
---|
230 | Modelica.Electrical.Analog.Sensors.VoltageSensor voltageSensor
|
---|
231 | annotation (Placement(transformation(extent={{40,70},{60,50}})));
|
---|
232 | Modelica.Electrical.PowerConverters.ACAC.Control.VoltageToAngle
|
---|
233 | voltageToAngle(VNominal=230, voltage2Angle=Modelica.Electrical.PowerConverters.Types.Voltage2AngleType.RMS)
|
---|
234 | annotation (Placement(transformation(extent={{-40,20},{-20,40}})));
|
---|
235 | Modelica.Blocks.Interfaces.RealOutput Tout
|
---|
236 | "Connector of Real output signal" annotation (Placement(transformation(
|
---|
237 | extent={{-10,-10},{10,10}},
|
---|
238 | rotation=180,
|
---|
239 | origin={-80,-20}), iconTransformation(
|
---|
240 | extent={{-10,-10},{10,10}},
|
---|
241 | rotation=0,
|
---|
242 | origin={110,0})));
|
---|
243 | Modelica.Blocks.Interfaces.RealInput vRef "Reference voltage" annotation (
|
---|
244 | Placement(transformation(extent={{-10,-10},{10,10}},
|
---|
245 | rotation=0,
|
---|
246 | origin={-80,30}),
|
---|
247 | iconTransformation(extent={{-140,-20},{-100,20}})));
|
---|
248 | equation
|
---|
249 | connect(adaptor.fire_p[1], triac.fire1)
|
---|
250 | annotation (Line(points={{11,36},{18,36}}, color={255,0,255}));
|
---|
251 | connect(adaptor.fire_n[1], triac.fire2)
|
---|
252 | annotation (Line(points={{11,24},{18,24}}, color={255,0,255}));
|
---|
253 | connect(voltageSensor.v, adaptor.v[1]) annotation (Line(points={{50,71},{
|
---|
254 | 50,80},{0,80},{0,42}}, color={0,0,127}));
|
---|
255 | connect(voltageToAngle.firingAngle, adaptor.firingAngle)
|
---|
256 | annotation (Line(points={{-19,30},{-12,30}}, color={0,0,127}));
|
---|
257 | connect(triac.p, sineVoltage.p)
|
---|
258 | annotation (Line(points={{30,40},{40,40}}, color={0,0,255}));
|
---|
259 | connect(triac.n, resistor.p)
|
---|
260 | annotation (Line(points={{30,20},{40,20}}, color={0,0,255}));
|
---|
261 | connect(sineVoltage.p, voltageSensor.p)
|
---|
262 | annotation (Line(points={{40,40},{40,60}}, color={0,0,255}));
|
---|
263 | connect(sineVoltage.n, voltageSensor.n)
|
---|
264 | annotation (Line(points={{60,40},{60,60}}, color={0,0,255}));
|
---|
265 | connect(temperatureSensor.y, k2deg.u) annotation (Line(points={{70,-71},{
|
---|
266 | 70,-76},{-60,-76},{-60,-62}}, color={0,0,127}));
|
---|
267 | connect(k2deg.y, Tout)
|
---|
268 | annotation (Line(points={{-60,-39},{-60,-20},{-80,-20}},
|
---|
269 | color={0,0,127}));
|
---|
270 | connect(voltageToAngle.vRef, vRef)
|
---|
271 | annotation (Line(points={{-42,30},{-80,30}}, color={0,0,127}));
|
---|
272 | annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
|
---|
273 | coordinateSystem(preserveAspectRatio=false)),
|
---|
274 | experiment(
|
---|
275 | StopTime=30,
|
---|
276 | Interval=0.0005,
|
---|
277 | Tolerance=1e-06,
|
---|
278 | __Dymola_Algorithm="Dassl"));
|
---|
279 | end FMUBoilerTriac;
|
---|
280 |
|
---|
281 | model BoilerSampled
|
---|
282 | extends Modelica.Icons.Example;
|
---|
283 |
|
---|
284 | Modelica.Blocks.Sources.Ramp ramp(
|
---|
285 | height=15,
|
---|
286 | duration=15,
|
---|
287 | offset=20,
|
---|
288 | startTime=5)
|
---|
289 | annotation (Placement(transformation(extent={{-90,-10},{-70,10}})));
|
---|
290 | Modelica.Blocks.Continuous.LimPID PID(
|
---|
291 | controllerType=Modelica.Blocks.Types.SimpleController.PI,
|
---|
292 | k=100,
|
---|
293 | Ti=4,
|
---|
294 | yMax=230,
|
---|
295 | yMin=0)
|
---|
296 | annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
|
---|
297 | FMUBoilerTriac fMUBoilerTriac
|
---|
298 | annotation (Placement(transformation(extent={{60,-10},{80,10}})));
|
---|
299 | Modelica.Blocks.Discrete.TriggeredSampler triggeredSampler1(y_start=20)
|
---|
300 | annotation (Placement(transformation(extent={{-60,-10},{-40,10}})));
|
---|
301 | Modelica.Blocks.Discrete.TriggeredSampler triggeredSampler2(y_start=0)
|
---|
302 | annotation (Placement(transformation(extent={{20,-10},{40,10}})));
|
---|
303 | Modelica.Blocks.Discrete.TriggeredSampler triggeredSampler3(y_start=20)
|
---|
304 | annotation (Placement(transformation(extent={{60,-30},{40,-10}})));
|
---|
305 | Modelica.Blocks.Sources.SampleTrigger sampleTrigger(period=0.02)
|
---|
306 | annotation (Placement(transformation(extent={{-90,-50},{-70,-30}})));
|
---|
307 | equation
|
---|
308 | connect(ramp.y, triggeredSampler1.u)
|
---|
309 | annotation (Line(points={{-69,0},{-62,0}}, color={0,0,127}));
|
---|
310 | connect(triggeredSampler1.y, PID.u_s)
|
---|
311 | annotation (Line(points={{-39,0},{-12,0}}, color={0,0,127}));
|
---|
312 | connect(PID.y, triggeredSampler2.u)
|
---|
313 | annotation (Line(points={{11,0},{18,0}},
|
---|
314 | color={0,0,127}));
|
---|
315 | connect(triggeredSampler2.y, fMUBoilerTriac.vRef)
|
---|
316 | annotation (Line(points={{41,0},{58,0}}, color={0,0,127}));
|
---|
317 | connect(fMUBoilerTriac.Tout, triggeredSampler3.u) annotation (Line(points={{81,0},{
|
---|
318 | 90,0},{90,-20},{62,-20}}, color={0,0,127}));
|
---|
319 | connect(triggeredSampler3.y, PID.u_m) annotation (Line(points={{39,-20},{
|
---|
320 | 0,-20},{0,-12}}, color={0,0,127}));
|
---|
321 | connect(sampleTrigger.y, triggeredSampler1.trigger) annotation (Line(
|
---|
322 | points={{-69,-40},{-50,-40},{-50,-11.8}}, color={255,0,255}));
|
---|
323 | connect(sampleTrigger.y, triggeredSampler2.trigger) annotation (Line(
|
---|
324 | points={{-69,-40},{30,-40},{30,-11.8}}, color={255,0,255}));
|
---|
325 | connect(sampleTrigger.y, triggeredSampler3.trigger) annotation (Line(
|
---|
326 | points={{-69,-40},{50,-40},{50,-31.8}}, color={255,0,255}));
|
---|
327 | annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
|
---|
328 | coordinateSystem(preserveAspectRatio=false)),
|
---|
329 | experiment(
|
---|
330 | StopTime=30,
|
---|
331 | Interval=0.0005,
|
---|
332 | Tolerance=1e-06,
|
---|
333 | __Dymola_Algorithm="Dassl"));
|
---|
334 | end BoilerSampled;
|
---|
335 |
|
---|
336 | model BoilerClocked
|
---|
337 | extends Modelica.Icons.Example;
|
---|
338 |
|
---|
339 | Modelica.Blocks.Sources.Ramp ramp(
|
---|
340 | height=15,
|
---|
341 | duration=15,
|
---|
342 | offset=20,
|
---|
343 | startTime=5)
|
---|
344 | annotation (Placement(transformation(extent={{-90,-10},{-70,10}})));
|
---|
345 | Modelica.Blocks.Continuous.LimPID PID(
|
---|
346 | controllerType=Modelica.Blocks.Types.SimpleController.PI,
|
---|
347 | k=100,
|
---|
348 | Ti=4,
|
---|
349 | yMax=230,
|
---|
350 | yMin=0)
|
---|
351 | annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
|
---|
352 | FMUBoilerTriac fMUBoilerTriac
|
---|
353 | annotation (Placement(transformation(extent={{60,-10},{80,10}})));
|
---|
354 | Modelica.Clocked.RealSignals.Sampler.SampleClocked
|
---|
355 | sample1
|
---|
356 | annotation (Placement(transformation(extent={{-56,-6},{-44,6}})));
|
---|
357 | Modelica.Clocked.RealSignals.Sampler.Hold hold2
|
---|
358 | annotation (Placement(transformation(extent={{24,-6},{36,6}})));
|
---|
359 | Modelica.Clocked.RealSignals.Sampler.Sample sample3
|
---|
360 | annotation (Placement(transformation(extent={{56,-26},{44,-14}})));
|
---|
361 | Modelica.Clocked.ClockSignals.Clocks.PeriodicRealClock periodicClock1(period=0.02,
|
---|
362 | useSolver=true,
|
---|
363 | solverMethod="ImplicitEuler")
|
---|
364 | annotation (Placement(transformation(extent={{-86,-36},{-74,-24}})));
|
---|
365 | equation
|
---|
366 | connect(ramp.y, sample1.u)
|
---|
367 | annotation (Line(points={{-69,0},{-57.2,0}}, color={0,0,127}));
|
---|
368 | connect(sample1.y, PID.u_s)
|
---|
369 | annotation (Line(points={{-43.4,0},{-12,0}}, color={0,0,127}));
|
---|
370 | connect(PID.y, hold2.u)
|
---|
371 | annotation (Line(points={{11,0},{22.8,0}},color={0,0,127}));
|
---|
372 | connect(hold2.y, fMUBoilerTriac.vRef)
|
---|
373 | annotation (Line(points={{36.6,0},{58,0}}, color={0,0,127}));
|
---|
374 | connect(fMUBoilerTriac.Tout, sample3.u) annotation (Line(points={{81,0},{
|
---|
375 | 90,0},{90,-20},{57.2,-20}}, color={0,0,127}));
|
---|
376 | connect(sample3.y, PID.u_m) annotation (Line(points={{43.4,-20},{0,-20},{
|
---|
377 | 0,-12}}, color={0,0,127}));
|
---|
378 | connect(periodicClock1.y, sample1.clock) annotation (Line(
|
---|
379 | points={{-73.4,-30},{-50,-30},{-50,-7.2}},
|
---|
380 | color={175,175,175},
|
---|
381 | pattern=LinePattern.Dot,
|
---|
382 | thickness=0.5));
|
---|
383 | annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
|
---|
384 | coordinateSystem(preserveAspectRatio=false)),
|
---|
385 | experiment(
|
---|
386 | StopTime=30,
|
---|
387 | Interval=0.0005,
|
---|
388 | Tolerance=1e-06,
|
---|
389 | __Dymola_Algorithm="Dassl"));
|
---|
390 | end BoilerClocked;
|
---|
391 |
|
---|
392 | model BoilerDiscrete
|
---|
393 | extends Modelica.Icons.Example;
|
---|
394 |
|
---|
395 | Modelica.Blocks.Sources.Ramp ramp(
|
---|
396 | height=15,
|
---|
397 | duration=15,
|
---|
398 | offset=20,
|
---|
399 | startTime=5)
|
---|
400 | annotation (Placement(transformation(extent={{-90,-10},{-70,10}})));
|
---|
401 | Modelica.Clocked.RealSignals.NonPeriodic.PI
|
---|
402 | PI1(
|
---|
403 | k=100,
|
---|
404 | T=4,
|
---|
405 | x(fixed=true, start=0))
|
---|
406 | annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
|
---|
407 | FMUBoilerTriac fMUBoilerTriac
|
---|
408 | annotation (Placement(transformation(extent={{60,-10},{80,10}})));
|
---|
409 | Modelica.Clocked.RealSignals.Sampler.SampleClocked
|
---|
410 | sample1
|
---|
411 | annotation (Placement(transformation(extent={{-56,-6},{-44,6}})));
|
---|
412 | Modelica.Clocked.RealSignals.Sampler.Hold hold2
|
---|
413 | annotation (Placement(transformation(extent={{24,-6},{36,6}})));
|
---|
414 | Modelica.Clocked.RealSignals.Sampler.Sample sample3
|
---|
415 | annotation (Placement(transformation(extent={{56,-26},{44,-14}})));
|
---|
416 | Modelica.Clocked.ClockSignals.Clocks.PeriodicRealClock periodicClock1(period=0.02,
|
---|
417 | useSolver=false,
|
---|
418 | solverMethod="ImplicitEuler")
|
---|
419 | annotation (Placement(transformation(extent={{-86,-36},{-74,-24}})));
|
---|
420 | Modelica.Blocks.Math.Feedback feedback
|
---|
421 | annotation (Placement(transformation(extent={{-40,-10},{-20,10}})));
|
---|
422 | equation
|
---|
423 | connect(ramp.y, sample1.u)
|
---|
424 | annotation (Line(points={{-69,0},{-57.2,0}}, color={0,0,127}));
|
---|
425 | connect(PI1.y, hold2.u)
|
---|
426 | annotation (Line(points={{11,0},{22.8,0}},color={0,0,127}));
|
---|
427 | connect(hold2.y, fMUBoilerTriac.vRef)
|
---|
428 | annotation (Line(points={{36.6,0},{58,0}}, color={0,0,127}));
|
---|
429 | connect(fMUBoilerTriac.Tout, sample3.u) annotation (Line(points={{81,0},{
|
---|
430 | 90,0},{90,-20},{57.2,-20}}, color={0,0,127}));
|
---|
431 | connect(periodicClock1.y, sample1.clock) annotation (Line(
|
---|
432 | points={{-73.4,-30},{-50,-30},{-50,-7.2}},
|
---|
433 | color={175,175,175},
|
---|
434 | pattern=LinePattern.Dot,
|
---|
435 | thickness=0.5));
|
---|
436 | connect(sample1.y, feedback.u1)
|
---|
437 | annotation (Line(points={{-43.4,0},{-38,0}}, color={0,0,127}));
|
---|
438 | connect(feedback.y, PI1.u)
|
---|
439 | annotation (Line(points={{-21,0},{-12,0}}, color={0,0,127}));
|
---|
440 | connect(sample3.y, feedback.u2) annotation (Line(points={{43.4,-20},{-30,
|
---|
441 | -20},{-30,-8}}, color={0,0,127}));
|
---|
442 | annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
|
---|
443 | coordinateSystem(preserveAspectRatio=false)),
|
---|
444 | experiment(
|
---|
445 | StopTime=30,
|
---|
446 | Interval=0.0005,
|
---|
447 | Tolerance=1e-06,
|
---|
448 | __Dymola_Algorithm="Dassl"));
|
---|
449 | end BoilerDiscrete;
|
---|
450 | end Examples;
|
---|
451 |
|
---|
452 | package Blocks
|
---|
453 | extends Modelica.Icons.Package;
|
---|
454 | block K2deg
|
---|
455 | extends Modelica.Blocks.Interfaces.SISO;
|
---|
456 | import Modelica.Units.Conversions.to_degC;
|
---|
457 | equation
|
---|
458 | y=to_degC(u);
|
---|
459 | end K2deg;
|
---|
460 | end Blocks;
|
---|
461 | annotation (uses(Modelica(version="4.0.0")));
|
---|
462 | end ThermalExamples;
|
---|