Modelica: Einführung

Einführendes Beispiel

Zwei zylinderförmige Gefässe sind über einen in bodennähe angebrachten Schlauch miteinander verbunden (kommunizierende Gefässe). Anfänglich ist das eine Gefäss voll und das andere leer. Nach dem Öffnen des Hahns fliesst so lange Wasser von einem Gefäss zum andern, bis beide Gefässe gleich hoch gefüllt sind. Handelt es sich um eine relativ zähe Flüssigkeit oder weist der Schlauch einen ziemlich kleinen Durchmesser auf, kann das Zeitverhalten dieses Systems mittels einer Exponentialfunktion beschrieben werden, wobei die Zeitkonstante aus dem Querschnitt der beiden Gefässe, Dichte und Viskosität der Flüssigkeit sowie Länge und Durchmesser des Schlauchs berechnet werden kann. Ist die Strömung turbulent oder sind die Gefässe nicht zylinderfömig, kann in der Regel keine Inhalts-Zeit- oder Druck-Zeit-Funktion mehr angegeben werden. Heute ist kein Problem mehr, weil man die zugehörigen Gleichungen numerisch, also mit Hilfe eines Computers integriert. Im Fach Physik und Systemwissenschaft in Aviatik 2014 modellieren die Studierenden ähnliche Systeme schon in den ersten Wochen des ersten Semesters. Sie verwenden dazu Berkeley Madonna, ein systemdynamisches Tool, das man schon nach kurzer Zeit effizient einsetzen kann.

Video: Zwei PET-Flaschen (Berkeley Madonna)

Wiederverwendbarkeit

Betrachten wir eine mit Wasser und Pressluft gefüllte PET-Flasche, die über einen dünnen Schlauch mit einer zweiten, leeren Flasche verbunden ist. Sobald wir die Verbingung mit dem Öffnen eines Hahns frei geben, wird der Druck zwischen den beiden Flaschen ausgeglichen. Zur Modellierung solcher Prozesse geht man von der Bilanz einer mengenartigen Grösse aus. Formulieren wir also die Volumenbilanz bezüglich der beiden Flasche

[math]-I_V=\dot V_1[/math] und [math]I_V=\dot V_2[/math]

Der Bezugspfeil für den positiven Volumenstrom zeigt von der ersten zur zweiten Flasche. Der Druck in den Flasche ergibt sich aus dem Gasgesetz. In guter Näherung können wir die Gesetzmässigkeit von Boyle-Mariotte (isotherme Expansion) voraussetzen. Damit gilt für das Speicherverhalten

[math]p=p_0\frac{V_0}{V_0-V}[/math]

wobei der Index 0 den Zustand der leeren Flasche beschreibt. Dieses Gesetz gilt für beide Flaschen, wobei die Summe der beiden Wasservolumen konstant bleibt. Also ist

[math]\dot V_1+\dot V_2=0[/math]

Der Volumenstrom wird durch die Druckdifferenz getrieben. Zudem ist die Strömung meist turbulent

[math]\left(p_1-p_2\right)=k_VI_V^2[/math]

Der turbulente Strömungswiderstand kV hängt von der Dichte der Flüssigkeit und vom Querschnitt des Rohres ab. Weitere Einflussfaktoren verpackt man in die Dimensionslose Verlustziffer.

Fügt man all diese Gleichunge zusammen, entsteht eine Differentialgleichung erster Ordnung. Wie weit und ob diese Gleichung geschlossen lösbar ist, muss den Praktiker nicht weiter kümmern. Ihn interessieren häufig nur das Zeitverhalten oder gewisse Werte des Drucks oder des Füllstands. Zur Berechnung dieser Grössen muss man bei den meisten Simulationswerkzeugen nur die einzelnen Gesetze (Bilanz, kapazitives und resistives Gesetz) korrekt formuieren und nicht die vollständige Differentialgleichung aufstellen. Dank der graphische Benutzeroberfläche bei der Signalfluss- oder der systemdynamischen Modellierung macht man bei den einzelnen Modellierungs-Schritten kaum Fehler.

Ein Problem bleibt bei den meisten Simulationswerkzeugen bestehen: mehrfach vorhandene Bauteile müssen entsprechend ihrer Zahl mehrmals modelliert werden. So kann z.B. ein hydraulisches Netzwerk aus nur wenigen Bausteinen (verschiedene Speicher, Rohrleitungen mit Widerständen, Ventile und Pumpen) bestehen, die aber bei jeder Anwengung neu zusammengesetzt und konfiguriert werden müssen. Und genau dieses repetitive Modellieren erleichtert die Objektorientiertheit ungemein. In Modelica müssen die einzelnen Elemente (Speicher mit konstanter Kapazität, Blasenspeicher, verschiedene Ventile, parametrisierbare Rohrabschnitte und Pumpen) genau einmal modelliert und dann in Bibliotheken (packages) abgelegt werden. Der Anwender kann diese Elemente dann so oft wie nötig der Bibliothek entnehmen, zusammenfügen, neu deklarieren und unter verschiedenen Bedingungen simulieren.

Video: Drei PET-Flaschen in Serie

akausales Modellieren

Die Kausalität im Sinne der Philosolphie beschreibt den Zusammenhang zwischen Ursache und Wirkung. Ursprünglich ging man von einer zeitlichen Abfolge aus, das heisst die Ursache geht der Wirkung voraus (der Stein fliegt gegen ein Fenster, worauf das Fenster in Brüche geht). In der Mechanik und in andern Gebieten der Physik entwickelte sich aus der Kausaltiät der Determinismus, d.h. Ursache und Wirkung sind durch eine mathematische Abhängigkeit ersetzt worden. Ein deterministisches System wird durch ein differential-algebraisches Gleichungssystem (DAE) beschrieben. Um ein solches Gleichungssystem numerisch zu lösen, muss man es in eine bestimmte Form überführen. Dabei muss festgelegt werden, was die Eingangs- und was die Ausgangsgrösse einer auszuführenden Operation ist. Dieses Sortieren nach input und output nennt man auch Kausalisieren. Betrachten wir dazu die drei Basiselemente Kapazität, Widerstand und Induktivität eines elektrischen Netzwerkes

Element Gleichung Operation input output
Kapazität [math]I=C\dot U[/math] Integration I U
Induktivität [math]U=L\dot I[/math] Integration U I
Widerstand [math]U=RI[/math] Gleichung U oder I I oder U

Stehen zwei Grössen über eine Differentialbeziehung im Zusammenhang, ist die Kausalität gegeben: die Eingangsgrösse (input) muss zur Ausgangsgrösse (output) über die Zeit integriert werden. Sind zwei Grössen direkt voneinander abhängig, ist die Kausalität nicht a priori gegeben. Je nach Kontext muss nach der einen oder andern Grösse aufgelöst werden. So kann bei einem Widerstandselement der Strom die Spannung oder die Spannung die Stärke des Stromes festlegen. Will man nun eine Bibliothek mit widerverwertbaren Modellen aufbauen, darf die Kausalität nicht schon im einzelnen Baustein festgelegt sein. Erst im Kontext des Gesamtmodells wird festgelegt, welches die Eingangsgrösse und welches die Ausgangsgrösse ist.

Diese Problematik des Kausalisierens lässt sich am Beispiel von zwei kommunizierenden Gefässen zeigen. Das einfache Modell besteht aus zwei Töpfen mit einem Verbindungsrohr, das als Strömungswiderstand wirkt. Ausgehend vom aktuellen Füllstand der beiden Gefässe kann mit Hilfe des kapazitiven Gesetzes der Druck an den beiden Enden des Verbindungsrohres berechnet werden. Die dadurch aufgebaute Druckdifferenz treibt den Strom an. Dieser Strom beeinflusst wiederum den Füllzustand. Die Kausalität geht somit vom Füllzustand über Druck und Stromstärke zurück zum Füllzustand. Nimmt man die Trägheit der Flüssigkeit dazu (hydraulische Induktivität), muss die Kausalität des Widerstandsgesetzes umgedreht werden: die aktuelle Volumenstromstärke ergibt einen resistiven Druckabfall, der von der hydrostatisch aufgebauten Druckdifferenz abgezogen werden muss. Die restliche Druckdifferenz wirkt dann auf den induktiven Teil, also auf die Trägheit der Flüssigkeit.

Bei der Signalflussmodellierung (z.B. Simulink) muss die Kausalität explizit mit dem orientierten Signalfluss angegeben werden. Bei der systemdynamischen Modellierung ist die Kausalität bei Rohr-Topf-Systemen (flow and stock, flow and reservoir) implizit gegeben und muss nur bei den andern Verknüpfungen explizit mit einem Kausalpfeil (arrow, arc) festgelegt werden. In Modelica ist die Kausalität in den einzelnen Bauteilen nicht enthalten. Diese wird erst bei den Gesamtmodellen im Laufe eines Präprozessings (pruning) festgelegt.

Video: U-Rohr (Berkeley Madonna)

gleichungsbasiertes Modellieren

Die zentralen Elemente eines Modells dynamischer Systeme sind die Integratoren (1/s in Simulink oder Töpfe in der Systemdynamik). Die weiteren Verknüpfungen werden sowohl in der Signalfluss- als auch in der systemdynamischen Modellierung kausal aufbereitet eingegeben. Im Unterschied zu diesen Methoden darf in Modelica das ganze Systemverhalten durch Gleichungen, also in der gewohnten mathematischen Sprache formuliert werden. So kann man das Verhalten eines Ohm'schen Widerstandes mit Hilfe des Widerstandes R oder des Leitwertes G formulieren

[math]U=RI[/math] oder [math]I=GU[/math]

Verbindet man drei elektrische Elemente mit je einem Konnektor zu einem Knoten, werden automatisch folgende Gleichungen generiert (I steht für Stromstärke und φ für elektrisches Potential)

[math]I_1+I_2+I_3=0[/math]
[math]\varphi_1=\varphi_2[/math]
[math]\varphi_2=\varphi_3[/math]

Diese Modellierungsmethode produziert sehr viele triviale Gleichungen, die aber vor der Simulation durch Sortieralgorithmen eliminiert werden. Schwieriger zu handhaben sind die echten, meist nichtlinearen Gleichungssystem. Obwohl die Regeln und Möglichkeiten in der Sprache Modelica festgelegt sind, können nicht alle Tools gleich gut damit umgehen. Als Testsystem kann man drei PET-Flaschen nehmen, deren wegführende Schläuche mittels eines T-Stücks zu einem Knoten zusammen gefügt sind. Dieses Beispiel ist mit einem systemdynamischen Tool nur modellierbar, wenn man dem Knoten auch noch eine Kapazität zuschreibt.

Video: Drei PET-Flaschen parallel geschaltet

Dokumentation und Graphik

Ein Modelica-Modell besteht aus der Deklaration der benötigten Grössen, den Gleichungungen und Zuweisungen, einem Symbolbild (Icon) sowie einer ausführlichen Beschreibung des Modells in HTML. Modelica-Simulatoren unterstützten diese Struktur, indem sie die einzelnen Teile des Codes in verschiedenen Fenstern darstellen:

  • Icon-Ansicht: in diesem Fenster wird das Symbolbild gezeichnet. Diese Beschreibung erscheint im Modelica-Code unter annotation.
  • Schema-Ansicht: in diesem Fenster werden die Elemente mit Drag & Drop der Bibliothek entnommen und zusammengefügt. Im Modelica-Code erscheinen dann die Referenz zum entsprechenden Modell der Bibliothek, die neu gesetzten Parameter sowie die Position im Fenster unter annotation. Die Verbindung zwischen den Konnektoren wird im Code mit dem Befehl connect(Modell_1.Konnektor_a, Modell_1.Konnektor_b) sowie einer Beschreibung der Verbindungslinie unter annotation dargestellt.
  • Dokumentationsansicht: in diesem Fenster wird die ausführliche Dokumentation in HTML geschrieben und angezeigt. Im Code erscheint dieser Teil nach dem Schlüsselwort Documentation.
  • Text-Ansicht: in diesem Fenster wird der Code geschrieben und angezeigt. Bei verschiedenen Simulatoren kann vieles, was in andern Fenstern dargestellt wird (annotation, connect und Documentation) ein- oder ausgeblendet werden.

Die Dokumentation erfolgt auf drei Ebenen

  • Kurzbeschreibung zwischen Anführungszeichen (Gänsefüsschen). Mit dieser Beschreibung werden Modelle und einzelne Grössen beschrieben. Die Kurzbeschreibung erscheint z.B. als Kommentar bei der Parametereingabe oder bei den einzelnen Grössen auf der Simulationsebene.
  • Beginnt eine Zeile mit zwei Schrägstrichen //, wird sie als Kommentar interpretiert. Damit kann man Zwischentitel setzen oder einzelne Zeilen zu Testzwecken deaktivieren.
  • Ausführliche Kommentare in HTML wie weiter oben beschrieben.

Standardbibliotheken

Die Standardbibliotheken werden von der Modelica Association herausgegeben und sind in der Regel in den verschiedenen Tools vorinstalliert. Viele frei verfügbare und auch kommerzielle Bibliotheken bauen auf der Standardbibliothek auf. Die Standardbibliothek umfasst folgende Teilbibliotheken

  • SIunits: Vordefinierte Grössen mit Einheiten. Die Definition umfass Grösse (quantity), Einheit (unit), Einheit für die Ausgabe (displayUnit). Beispiel: quantity: pressure; unit: Pa; displayUnit: bar.
  • Blocks: Signalfluss-Bibliothek analog zu Simulink mit reellen, ganzzahligen und logischen Variablen.
  • ComplexBlocks:
  • StateGraph:
  • Electrical: Bibliothek zu elektrischen Systemen mit mehreren Teilbibliotheken
    • Spiece3:
    • Analog:
    • Digital:
    • Maschines:
    • MultiPhases:
    • QuasiStationary:
  • Magnetic:
    • FundamentalWave:
    • FluxTubes:
  • Mechanics:
    • Translational:
    • Rotational:
    • MultiBody:
  • Fluid:
  • Thermal:
  • Media:
  • Math:
  • ComplexMath:
  • Utilities:
  • Constants:
  • icons:

Systemphysik-Bibliothek

Die Systemphysik-Bibliothek basiert auf der Systemphysik und dient hauptsächlich der Ausbildung. Sie ist einfacher strukturiert als die Standardbibliothek, dafür konsequenter in der Umsetzung der theoretischen Grundlagen. Sie beschränkt sich auf folgende Teilgebiete:

  • Hydrodynamik: Diese Teilbibliothekt enthält basierend auf der Menge Volumen und der Potentialgrösse Druck Speicher, Widerstände, induktives Element, Pumpen und Ventile.
  • Elektrodynamik: Diese Teilbibliothekt enthält basierend auf der Menge elektrische Ladung und dem elektrischen Potential Kondensatoren, Widerstände, Spule und Quellen.
  • Translation: Diese Teilbibliothekt enthält basierend auf der Menge Impuls und der Geschwindigkeit eindimensional zu bewegende Körper, Dämpfer, Federelemente und Antriebssysteme.
  • Rotation: Diese Teilbibliothekt enthält basierend auf der Menge Drehimpuls und der Winkelgeschwindigkeit Schwungräder, Federelemente, Kupplungen, Rollen, Kupplungen und Antriebssysteme.
  • Thermodynamik:Diese Teilbibliohekt enthält basierend auf der Menge Entropie und der Temperatur Speicher, Wärmeleiter, Wärmekraftmaschinen und Wärmepumpen.
  • Chemie: im Aufbau
  • Pneumaitk: im Aufbau

Die Systemdynamik-Bibliothek wird von Prof. Werner Maurer entwickelt und ist frei verfügbar.

Begriffe

Die Modelica-Sprachdefinition verwendet präzise Begriffe, um die einzelnen Elemente der Sprache zu beschreiben. Diese Definitionen sind in Englisch verfasst und für einen Lehrtext nicht geeignet. Deshalb wird hier ein vereinfachtes, deutsches Vokabular verwendet, wobei die englischen Begriffe in Klammern beigefügt werden.

  • Modell (model): Ein Model beschreibt das Verhalten eines bestimmten Bauteils. So beschreib das Modell eines Widerstands dessen Verhalten (Ohm'sches Gesetz, Temperaturabhängigkeit, Wärmeabgabe, usw.). Ein Modell ist vergleichbar mit einer Klasse in einer objektorientierten Programmiersprache.
  • Komponente (component): Ein Komponente ist die Instanz eines Modells, also die Anwendung eines Modells für eine konkrete Simulation.
  • Teilkomponente (subcomponent): Eine Teilkomponente bildet zusammen mit andern Teilkomponenten eine übergeordnete Komponente. So kann der Widerstand Teilkomponente eines elektrischen Kreises sein, der wiederum Teil eines Elektromotors ist. Mit Teilkomponenten baut man hierarchische Modelle.
  • Systemmodell (system model): Ein Systemmodell ist ein in sich geschlossenes Modell, ohne Bezug zu andern Modellen. Es besitzt deshalb auch keine Konnektoren.
  • Grösse (quantity): Eine Grösse bezieht sich auf ein Element mit einem Wert (Kapaztität, Induktivität). Eine Grösse kann eine Gleitkommazahl (real), eine ganze Zahl (integer), eine Zeichenkette (string) oder eine Bool'sche Variable (boolean) sein. Grössen können als skalare Variable (scalar) auftreten oder ein Feld (array) sein.
  • Definition (definition): Die Beschreibung aller Variablen, Parameter, Konstanten und Gleichungen eines Modells heisst Definition.
  • Deklaration (declaration): Instantiiert man bei einer Komponente Variablen, Paramter oder Konstanten, heisst das Deklaration.
  • Paket (package): Ein Paket bezieht sich auf eine Sammlung von Modelica-Modellen, die zusammen gehören und unter einander in Beziehung stehen. Die Bibliothek Systemphysik ist zum Beispiel so ein Paket.
  • Schlüsselwort(keyword): Ein Schlüsselwort ist ein Word (z.B. model), das ein spezielle Bedeutung in Modelica hat. Schlüsselwörter sind als Begriff gesetzt und dürfen weder in Definitionen noch Deklarationen verwendet werden. Schlüsselwörter erscheinen im Code fettgedruckt.

Ein Systemmodell

Ein einfaches, in sich geschlossenes Modell ist das mathematische Pendel. Die folgende Codierung ist bewusst einfach gestaltet, um einen ersten Einblick in die Sprache von Modelica zu geben

model MathPendel "Pendel mit kleinem Koerper und masselosem Faden"

import SI = Modelica.SIunits "importiert Grössen mit SI-Einheiten";
SI.AngularMomentum L "Drehimpuls";
SI.AngularVelocity omega "Winkelgeschwindigkeit";
SI.Angle phi(start = 2) "Winkel zum Lot mit Anfangsauslenkung bei 115° ";
parameter SI.Mass m = 2 "Masse des Körpers";
parameter SI.Length l0 = 1.5 "Laenge des Pendels";
parameter SI.Inertia J = m*l0^2 "Massentraegheitsmoment des Pendels";
constant SI.Acceleration g = 9.81 "Gravititonsfeldstärke";

equation

-m*g*l0*sin(phi)= der(L) "Drehimpulsbilanz";
omega = L/J "Umrechnung von Dynamik in Kinematik";
omega = der(phi) "Kinematik";

end MathPendel;

Das Modell ist mit einem sinnvollen Namen zu bezeichnen, der am Schluss wiederholt wird. Danach werden die vordefinierten Modelica-Grössen mit SI-Einheiten importiert und mit dem Kurzname SI bezeichnet. Im Definitionsteil werden die notwendigen Variablen, die Parameter sowie die Konstanten definiert. Kurze Kommentare können zwischen Gänsefüsschen geschrieben werden. Die Zeilen enden mit einem Strichpunkt. Die drei Gleichungen sind entsprechend der Philosophie der Systemphysik gegliedert.

Video: mathematisches Pendel

Zusammenfassung

Modelica ist eine objektorientierte, deklarative, multi-domain Modellierungssprache. Die Sprache weist folgende "Spezialitäten" auf

  1. Modelle sind vordefiniert und in Bibliotheken abgelegt.
  2. Jeder Anwender kann Modelle deklarieren, anpassen und erweitern, neue Modelle zufügen oder sogar eine eigene Bibliothek schreiben.
  3. Modelleigenschaften oder ganze Modelle werden in der Regel akausal verknüpft (input und output nicht a priori festgelegt).
  4. Die Teilbibliothek Blocks baut auf Signalflüssen auf, ist dementsprechend kausal und ermöglicht so regelungstechnische Modelle.
  5. Die Modelleigenschaften werden oft als Gleichungen (algebraische und Differentialgleichungen) formuliert und nicht als Zuweisung.
  6. Viele physikalische Grössen sind vordefiniert mit Zahl, SI-Einheit und Darstellungseinheit (displayUnit).
  7. Die Systemphysik liefert die theoretischen Grundlagen für diese Modellierungsmethode.

Kontrollfragen

Antworten zu den Kontrollfragen

zurück zum Inhalt