Sie sind auf Seite 1von 35

Systemsimulation

Einführung in Modelica

Yannick Fürst & Leo Keilmann


23. Juli 2018
Hermann-Rietschel-Institut

TU Berlin
Systeme erster Ordnung
System erster Ordnung

1 model FirstOrderDocumented "A


↪ simple first order
𝑥̇ = 1 − 𝑥 ↪ differential equation"
2 Real x "State variable";
3 equation
1.0 4 der(x) = 1 - x "Drives value
Zustandsgröße x

↪ of x toward 1.0";
0.5
5 end FirstOrderDocumented;

0.0 Der Quellcode lässt sich durch


0.0 2.5 5.0
Zeit t/s
7.5 10.0
in Anführungszeichen
eingefassten Text
kommentieren.

Einführung in Modelica — Leo Keilmann 1/23


Einschub (Anfangswerte, Randwerte und Start-
werte)

Erläuterung (Anfangswerte und Randwerte)


Eine Differentialgleichung ist im Allgemeinen nicht eindeutig
durch die Gleichung selbst definiert. Aus diesem Grund
werden zur eindeutigen Lösung sogenannte Anfangs-
und/oder Randwerte benötigt.

• Anfangswerte geben den Zustand eines Systems zu einem


bestimmten Zeipunkt, dem Anfangszeitpunkt, vor.
• Randwerte definieren bestimmte Zustände an
Gebietsgrenzen, also den Rändern einer Problemstellung.

Einführung in Modelica — Leo Keilmann 2/23


Einschub (Anfangswerte, Randwerte und Start-
werte)

Erläuterung (Startwerte)
Zur numerischen Lösung können/müssen zusätzlich noch
sogenannte Startwerte festgelegt werden. Diese geben dem
Numerischen-Löser (Solver) die Möglichkeit – bei einer guten
Wahl der Startwerte – schneller eine (nichtlineare) Lösung zu
finden, da weniger Iterationen benötigt werden. Des Weiteren
kann es nötig sein Startwerte vorzugeben, um überhaupt die
die gesuchte Lösung zu finden.

Einführung in Modelica — Leo Keilmann 2/23


Einschub (Anfangswerte, Randwerte und Start-
werte)

Modelica Implementierung
Anfangswerte können in Modelica durch einen initial
equation-Block vorgegeben werden. Die Startwerte werden
durch ein in Klammern eingefasstes (start=x0) festgelegt, das
hinter die entsprechende Variable geschrieben wird. Einen
Sonderfall bildet die Varianten mit einem zusätzlichen
fixed=true-Wert, der mit in den Klammerausdruck (start=x0,
fixed=true) geschrieben wird. Der Startwert wird für diese
Variante in jedem Fall auch als Anfangswert gesetzt.

Einführung in Modelica — Leo Keilmann 2/23


Einschub (Anfangswerte, Randwerte und Start-
werte)
Strikte Zuweisung: Keine strikte Zuweisung:

model zw model zw
parameter Real x0=10; parameter Real x0=10;
Real x; Real x(start=x0);
initial equation equation
x = x0; ...
equation end zw;
...
end zw;
Startwerte dienen
model zw ausschließlich dem
parameter Real x0=10;
Real x(start=x0, fixed=true); Numerischen-Löser und
equation
... werden, wenn der Löser es als
end zw;
„sinnvoll“ erachtet, als
„fallback“ Anfangswerte
verwendet.

Einführung in Modelica — Leo Keilmann 2/23


System erster Ordnung (mit AW)

𝑥̇ = 1 − 𝑥 1 model FirstOrderInitial "First


↪ order equation with initial
AW 1: 𝑥 = 2 ↪ value"
Real x "State variable";
AW 2: 𝑥 = 0 2
3 initial equation
4 x = 2 "Used before simulation to
↪ compute initial values";
2 5 equation
Zustandsgröße x

AW 1: x = 2 6 der(x) = 1 - x "Drives value of


AW 2: x = 0
1
↪ x toward 1.0";
7 end FirstOrderInitial;
0
0.0 2.5 5.0
Zeit t/s
7.5 10.0
Hinweis: Quellcode für AW 2: 𝑥 = 0
ist nicht angegeben.

Einführung in Modelica — Leo Keilmann 3/23


System erster Ordnung (mit AW)

𝑥̇ = 1 − 𝑥 1 model FirstOrderSteady "First


↪ order equation with steady
AW 1: 𝑥̇ = 0 ↪ state initial condition"
Real x "State variable";
AW 2: 𝑥 = 0 2
3 initial equation
4 der(x) = 0 "Initialize the
↪ system in steady state";
1.0 5 equation n
Zustandsgröße x

6 der(x) = 1 - x "Drives value of


0.5
↪ x toward 1.0";
AW 1: ẋ = 0 7 end FirstOrderSteady;
AW 2: x = 0
0.0
0.0 2.5 5.0
Zeit t/s
7.5 10.0
Hinweis: Quellcode für AW 2: 𝑥 = 0
ist nicht angegeben.

Einführung in Modelica — Leo Keilmann 3/23


System erster Ordnung (mit AW und Simulati-
ons Start/ Stop-Zeit)

𝑥̇ = (1 − 𝑥) 1 model FirstOrderExperiment
↪ "Defining experimental
AW: 𝑥 = 2 ↪ conditions"
2 Real x "State variable";
3 initial equation
4 x = 2 "Used before simulation
2.0 to compute initial
Zustandsgröße x


↪ values";
1.5 5 equation
6 der(x) = 1-x "Drives value of
1.0 ↪ x toward 1.0";
0 2 4 6 8 7 annotation(experiment(
Zeit t/s ↪ StartTime=0,
↪ StopTime=8));
8 end FirstOrderExperiment;

Einführung in Modelica — Leo Keilmann 4/23


System erster Ordnung (Aufgabe 1)

Implementieren Sie das folgende Newton-Kapazitätsmodell

𝑚𝑐𝑝 𝑇 ̇ = 𝛼𝐴(𝑇∞ − 𝑇 ); AW: 𝑇 = 𝑇0

und definieren Sie hierfür alle benötigte Parameter und


Variablen in Modelica. Schreiben Sie das Modell in der Form:

1 model NewtonCooling "An example of Newton's law of cooling"


2 // Parameters
3 parameter Real T_inf "Ambient temperature";
4 ...
5 // Variables
6 ...
7 initial equation
8 ...
9 equation
10 ...
11 end NewtonCooling;

Einführung in Modelica — Leo Keilmann 5/23


System erster Ordnung (Aufgabe 2)

Erweitern Sie das in der vorherigen Aufgabe erstellte Modell


um vorgegebene Parameter-Werte, wie im angegeben Beispiel:

1 model NewtonCoolingWithDefaults "Cooling example with default parameter values"


2 // Parameters
3 parameter Real T_inf=25 "Ambient temperature";
4 ...
5 // Variables
6 ...
7 initial equation
8 ...
9 equation
10 ...
11 end NewtonCoolingWithDefaults;

und verwenden Sie hierfür folgende Werte:

𝑇∞ = 25; 𝑇0 = 90; 𝛼 = 0, 7; 𝐴 = 1, 0; 𝑚 = 0, 1; 𝑐𝑝 = 1, 2

Einführung in Modelica — Leo Keilmann 6/23


System erster Ordnung (Aufgabe 3)

Erweitern Sie das in der vorherigen Aufgabe erstellte Modell


um Einheiten, wie im angegeben Beispiel:

1 model NewtonCoolingWithUnits "Cooling example with physical


↪ units"
2 // Parameters
3 parameter Real alpha(unit="W/(m2.K)")=0.7;
4 ...
5 // Variables
6 ...
7 initial equation
8 ...
9 equation
10 ...
11 end NewtonCoolingWithUnits;

Einführung in Modelica — Leo Keilmann 7/23


System erster Ordnung (Aufgabe 4)

Erweitern Sie das in der vorherigen Aufgabe erstellte Modell


um Einheiten, wie im angegeben Beispiel:

1 model NewtonCoolingWithTypes "An example of Newton's law of cooling"


2 // Types
3 type Temperature=Real(unit="K", min=0);
4 ...
5 // Parameters
6 parameter Temperature T_inf=298.15;
7 ...
8 // Variables
9 ...
10 initial equation
11 ...
12 equation
13 ...
14 end NewtonCoolingWithTypes;

Einführung in Modelica — Leo Keilmann 8/23


System erster Ordnung (Aufgabe 5)

Erweitern Sie das in der vorherigen Aufgabe erstellte Modell


um Einheiten, wie im angegeben Beispiel:

1 model NewtonCoolingWithSI "An example of Newton's law of


↪ cooling"
2 // Parameters
3 parameter Modelica.SIunits.Temperature T_inf=298.15;
4 ...
5 // Variables
6 ...
7 initial equation
8 ...
9 equation
10 ...
11 end NewtonCoolingWithSI;

Einführung in Modelica — Leo Keilmann 9/23


Komplexere Systeme
Übersicht

Systeme

pulseCounter
idealSensor
d=0.2 d=1

damper1 damper2

Vb V J=0.4 J=1

inertia1 inertia2

c=11 c=5

spring1 spring2

Die_Gartenlaube_(1880)_157.jpg: Ludwig Beckmann,


https://commons.wikimedia.org/w/index.php?curid=8452544

Einführung in Modelica — Leo Keilmann 10/23


Elektrischer Schwingkreis

Lösbarkeit
DGL-System:
Das Modell des Systems
𝑈 = 𝑖R 𝑅 besteht aus vier unbekannten
d𝑈 Variablen (𝑈 , 𝑖R , 𝑖C , 𝑖L ), die
𝐶 = 𝑖C durch vier Gleichungen gelöst
d𝑡
d𝑖 werden müssen!
𝐿 L = (𝑈b − 𝑈 )
d𝑡

Algebraische-Gleichung
(Kirchoffsches-Gesetz):
Ub U
𝑖L = 𝑖R + 𝑖C

Einführung in Modelica — Leo Keilmann 11/23


Elektrischer Schwingkreis (Aufgabe)

Implementieren Sie den elektrischen Schwingkreis als


Modelica Modell in der angegeben Struktur und verwenden Sie
zur Einheitenvorgabe die SIunits-Notation aus der Modelica
Standartbibliothek:

1 model RLC1 "A resistor-inductor-capacitor circuit model"


2 // Parameter
3 ...
4 // Variables
5 ...
6 equation
7 ...
8 end RLC1;

Für die Parameter gelten folgende Werte:

𝑈b = 24 V; 𝐿 = 1 H; 𝑅 = 100 Ω; 𝐶 = 1 ⋅ 10−3 F

Einführung in Modelica — Leo Keilmann 12/23


Elektrischer Schwingkreis (Ergebnis)

40
Batterie-Spannung Ub
35 Ausgangs-Spannung U

30
Spannung U/V

25

20

15

10

0.0 0.2 0.4 0.6 0.8 1.0 1.2


Zeit t/s

Einführung in Modelica — Leo Keilmann 13/23


Mechanischer Schwingkreis

pulseCounter
idealSensor

d=0.2 d=1

damper1 damper2

J=0.4 J=1

inertia1 inertia2

c=11 c=5

spring1 spring2

Einführung in Modelica — Leo Keilmann 14/23


Mechanischer Schwingkreis

DGL-System:
𝜔1 = 𝜑̇ 1
d(𝜑2 − 𝜑1 )
𝐽1 𝜔̇1 = 𝑐1 (𝜑2 − 𝜑1 ) + 𝑑1
d𝑡
𝜔2 = 𝜑̇ 2
d(𝜑1 − 𝜑2 )
𝐽2 𝜔̇2 = 𝑐1 (𝜑1 − 𝜑2 ) + 𝑑1 − 𝑐2 𝜑2 − 𝑑2 𝜑̇ 2
d𝑡

pulseCounter
idealSensor

d=0.2 d=1

damper1 damper2

J=0.4 J=1

inertia1 inertia2

c=11 c=5

spring1 spring2

Einführung in Modelica — Leo Keilmann 14/23


Mechanischer Schwingkreis (Aufgabe)

Implementieren Sie den mechanischen Schwingkreis mit den


vorgegebenen Paramtern und Anfangswerten (s. nächste Folie)
als Modelica Modell. Verwenden Sie hierzu die unten
angegeben Struktur und definieren Sie die Einheiten mit der
SIunits-Notation aus der Modelica-Standartbibliothek.

1 model SecondOrderSystem "A second order rotational system"


2 // Parameter
3 ...
4 // Variables
5 ...
6 initial equation
7 // Initial equations
8 ...
9 equation
10 ...
11 end SecondOrderSystem;

Einführung in Modelica — Leo Keilmann 15/23


Mechanischer Schwingkreis (Aufgabe)

Für die Parameter gelten folgende Werte:

𝐽1 = 0,4 kg m2 ; 𝐽2 = 1 kg m2 ; 𝑐1 = 11 N m/rad;
𝑐2 = 5 N m/rad; 𝑑1 = 0,2 N m s/rad; 𝑑2 = 1 N m s/rad

und die folgenden Anfangswerte:

AW 1: 𝜑1 = 0 rad; 𝜑2 = 1 rad; 𝜔1 = 0 rad/s; 𝜔2 = 0 rad/s


AW 2: 𝜑1 = 1 rad; 𝜑2 = 1 rad; 𝜔1 = 0 rad/s; 𝜔2 = 0 rad/s

Einführung in Modelica — Leo Keilmann 15/23


Mechanischer Schwingkreis (Ergebnis)

Initialisierungswerte: Initialisierungswerte:
𝜑1 = 0 rad; 𝜑2 = 1 rad; 𝜑1 = 1 rad; 𝜑2 = 1 rad;
𝜔1 = 0 rad s−1 ; 𝜔2 = 0 rad s−1 𝜔1 = 0 rad/s; 𝜔2 = 0 rad/s

4 4
ϕ1 /rad
ϕ2 /rad
2 ω1 /rad s−1 2
ω2 /rad s−1

0 0
ϕ1 /rad
ϕ2 /rad
−2 −2
ω1 /rad s−1
ω2 /rad s−1
−4 −4
0 1 2 3 4 5 0 1 2 3 4 5
Zeit t/s Zeit t/s

Einführung in Modelica — Leo Keilmann 16/23


Räuber-Beute-Modell

Das Lotka-Volterra-Modell

Anz. Räuber: 𝑦 Rückgang (Hunger) 𝑦𝑠̇ = −𝛾𝑦


Erhöhung (Fressen) 𝑦𝑝̇ = 𝛿𝑥𝑦
Anz. Beute: 𝑥 Erhöhung (Reproduktion) 𝑥𝑟̇ = 𝛼𝑥
Rückgang (Fressen) 𝑥𝑝̇ = −𝛽𝑥𝑦

nDGL-System:

𝑥̇ = 𝑥𝑟̇ + 𝑥𝑝̇ ⇔ 𝑥̇ = 𝑥(𝛼 − 𝛽𝑦)


𝑦 ̇ = 𝑦𝑝̇ + 𝑦𝑠̇ ⇔ 𝑦 ̇ = 𝑦(𝛿𝑥 − 𝛾)

Die_Gartenlaube_(1880)_157.jpg: Ludwig Beckmann,


https://commons.wikimedia.org/w/index.php?curid=8452544

Einführung in Modelica — Leo Keilmann 17/23


Räuber-Beute-Modell (Aufgabe 1)

Implementieren Sie das Lotka-Volterra-Modell als Modelica


Modell in der Form:

1 model ClassicModelInitialEquations "This is the typical


↪ equation-oriented model"
2 // Parameter
3 ...
4 // Variables
5 Real x(start=x0) "Prey population";
6 Real y(start=y0) "Predator population";
7 initial equation
8 // Initial equations
9 ...
10 equation
11 ...
12 end ClassicModelInitialEquations;

Einführung in Modelica — Leo Keilmann 18/23


Räuber-Beute-Modell (Aufgabe 1)

Verwenden Sie die folgenden Parameterwerte:

𝛼 = 0, 1; 𝛽 = 0, 02; 𝛾 = 0, 4; 𝛿 = 0, 02

und die folgenden Initialisierungswerte:

𝑥 = 10; 𝑦 = 10

Einführung in Modelica — Leo Keilmann 18/23


Räuber-Beute-Modell (Ergebnis 1)

40

35

30

25
Anz. Beute
20
Anz. Räuber
15

10

0
0 20 40 60 80 100 120 140
Zeit t/s

Einführung in Modelica — Leo Keilmann 19/23


Räuber-Beute-Modell (Ergebnis 1)

Phasendiagramm

Räuber

Beute

Einführung in Modelica — Leo Keilmann 19/23


Räuber-Beute-Modell (Aufgabe 2)

1. Berechnen Sie das stationäre Lotka-Volttera-Modell.


2. Entfernen Sie in einer weiteren Simulation die
start-Bedingung. Verändern Sie hierzu

Real x(start=x0) "Prey population";


Real y(start=y0) "Predator population";

zu

Real x "Prey population";


Real y "Predator population";

Was stellen Sie fest?

Einführung in Modelica — Leo Keilmann 20/23


Räuber-Beute-Modell (Ergebnis 2.1)

20

18

16

14
Anz. Beute
12 Anz. Räuber

10

0 20 40 60 80 100 120 140


Zeit t/s

Einführung in Modelica — Leo Keilmann 21/23


Räuber-Beute-Modell (Ergebnis 2.2)

Anz. Beute
0.04 Anz. Räuber

0.02

0.00

−0.02

−0.04

0 20 40 60 80 100 120 140


Zeit t/s

Einführung in Modelica — Leo Keilmann 22/23


Fragen?
Literaturangaben

Fritzon, Peter (2015). Principles of Object-Oriented Modeling


and Simulation with Modelica 3.3: A Cyber-Physical
Approach. Wiley-IEEE Press.
Tiller, Michael M. (2015). Modelica by Example.
http://book.xogeny.com.

Einführung in Modelica — Leo Keilmann

Das könnte Ihnen auch gefallen