Zustandsautomaten modellieren – Ein Blick in die UML und SysML

Endliche Zustandsautomaten, auch bekannt als Zustandsmaschinen, State Machines oder State Diagrams, definieren die einnehmbaren Zustände eines Systems. Die Dokumentation kann sowohl tabellarisch als auch grafisch erfolgen. Da die Anzahl der Tabellenzeilen mit der Anzahl der Zustände stark ansteigt, ist es übersichtlicher, auf die grafische Lösung zurückzugreifen. Dieser Artikel soll zeigen, wie Zustandsautomaten modelliert werden können.

Einstieg

Abb. 1: Einfacher Zustandsautomat

In einem Zustandsdiagramm werden immer die Zustände und die Zustandsübergänge dargestellt (siehe Abb. 1). Anhand der grafischen Ausarbeitung können Verklemmungen und isolierte Zustände direkt erkannt werden. Zu einer Verklemmung kommt es, wenn der Zustand betreten, aber nicht mehr verlassen werden kann. Isolierte Zustände können erst gar nicht erreicht werden. Zustände werden oftmals durch Kreise dargestellt und Übergänge durch gerichtete Pfeile. Wichtig ist, dass immer nur ein Zustand aktiv sein kann.  Außerdem wird immer ein Initial-Zustand definiert, der bei einem Reset eingenommen wird.

Zustandsautomaten in UML /SysML

Etwas komplexer als eben beschrieben sind allerdings die Zustandsautomaten in UML und SysML. Hier ist die Semantik des Zustandsautomaten so detailliert spezifiziert, dass die Automaten ausgeführt und für die automatische Codegenerierung verwendet werden können. Das Konzept der Zustandsautomaten in der UML geht auf den Informatiker David Harel zurück, der u. a. die Eigenschaften der Mealy- und Moore-Automaten zusammenführte. In jedem System gibt es Zustände. Durch Ereignisse werden je nach Zustand interne Reaktionen ausgelöst und möglicherweise Zustandsänderungen durchgeführt. Ereignisse können auch verworfen werden, wenn der Zustand sie nicht interpretieren kann. In der UML und SysML werden Zustände durch abgerundete Rechtecke dargestellt. Der Zustandsname steht im Rechteck. Die UML kennt des Weiteren drei definierte Verhalten, um einen Zustand weiter zu spezialisieren. So kann das Eintrittsverhalten (entry), das Zustandsverhalten (do) und das Austrittsverhalten (exit) für jeden Zustand definiert werden. Die Verhalten werden ebenfalls innerhalb des Rechtecks festgehalten.  Zustandsübergange werden in den Modellierungssprachen auch Transition genannt. Eine Transition ist ein gerichteter Pfeil zwischen zwei Zuständen und definiert den Auslöser, die Bedingung für den Übergang und ein mögliches Verhalten. Die Notation sieht wie folgt aus:

Notation:
AulöserA, AuslöserB, ... [Bedingung] / Verhalten
Beispiel:
Benutzer[betätigt Aus-Taster] / herunterfahren()

Die UML kennt des Weiteren fünf Arten von Ereignissen, die zu einer Transition führen können. Darunter gehört das Aufrufereignis (call event), das Änderungsereignis (change event), das Signalereignis (signal event), das Zeitereignis (time event) und das Empfangsereignis (any receive event). Das Zeitereignis kann wiederum in das relative- und absolute Zeitereignis separiert werden.

In der folgenden Tabelle werden die eben genannten Elemente grafische aufgezeigt und kurz beschrieben.
Bilder können zum Vergrößern angeklickt werden.

Symbol Name Bedeutung
Zustand Zustände des Zustandsautomaten werden als abgerundete Rechtecke dargestellt. Der Zustandsname wird ins Innere geschrieben.
Zustandsautomat Zustände können in kleinere Zustände aufgeteilt werden. Auf höherer allgemeiner Ebene kann dieses Symbol verwendet werden, um die aufgeteilten Zustände zu beschreiben.
Transition Eine Transition ist ein gerichteter Pfeil zwischen zwei Zuständen. Der Zustand wird in Pfeilrichtung gewechselt. Zusätzlich kann der Auslöser, die Bedingung und das Verhalten hinzugefügt werden (siehe oben).
Aufrufereignis Eine Operation wird aufgerufen.
Änderungsereignis Im Wert ändert sich ein Wert. Ist der boolesche Ausdruck wahr, wird der nächste Zustand aufgerufen.
Signalereignis Ein Signal wird empfangen.
Relatives Zeitereignis Der Zustand wird nach einer definierten Zeit geändert.
Absolutes Zeitereignis Der Zustand wird zu einer definierten Zeit geändert.
Initial Zustand Der Initial Zustand oder auch Startzustand gibt an, wo der Zustandsautomat nach einem Reset oder nach dem Einschalten beginnt. Er zeigt mithilfe einer Transition immer auf den initialen Zustand.
Endzustand Der Endzustand gibt an, wo der Zustandsautomat beendet wird. Der Ausführung ist danach abgeschlossen. Ein möglicher Fall wäre z. B. das Abschalten eines Geräts.
Entscheidung Eine Entscheidung hat immer eine eingehende und mehrere abgehende Transitionen. Es wird eine Entscheidung auf Basis von Werten getroffen.
Historie Mithilfe der Historisierung können Zustände gespeichert werden. Wird ein Gerät z. B. erneut eingeschaltet, wird der Zustand der letzten Ausführung gemerkt und wieder aufgerufen. Ein Beispiel ist eine Waschmaschine mit Auswahl des Programms über einen Drehregler. Jedes Programm stellt einen Zustand dar. Die Waschmaschine springt in den Zustand, der über den Drehregler ausgewählt ist.
Splitten und synchronisieren Mithilfe dieses Symbols lassen sich Parallelisierungen ermöglichen. Durch das Splitten werden mehrere Zustandsautomaten parallel ausgeführt, die dann wieder durch das Synchronisieren zusammengeführt werden können.
Eingangspunkt Mithilfe des Eingangspunkts können weitere Einstiege in den Zustandsautomaten beschrieben werden.
Ausgangspunkt Mithilfe des Ausgangspunkts können weitere Ausgänge des Zustandsautomaten beschrieben werden. Ein Ausgangspunkt beendet die Ausführung.
Terminierung Auch eine Terminierung beendet den Zustandsautomaten. Allerdings gibt es keinen Endzustand.

Beispiel

Wenn Sie die automatische Codegenerierung oder die Ausführung des Zustandsautomaten in speziellen Programmen nicht verwenden möchten, empfiehlt es sich generell, den Zustandsautomaten so einfach wie möglich zu halten. Im Folgenden wird ein Beispiel eines Zustandsautomaten für einen Ventilator gezeigt:

Abb. 2: Zustandsautomat eines sehr einfachen Ventilators

In Abbildung 2 ist der Zustandsautomat eines sehr einfachen Ventilators zu sehen. Er kennt die Zustände aus und ein. Eingeschaltet wird der Ventilator über einen Taster. Er geht entweder automatisch nach zwei Stunden aus, um Energie zu sparen oder kann auch durch den Anwender abgeschaltet werden. Der Ventilator merkt sich über einen Drehregler die ausgewählte Stärke des Benutzers. Er kann zwischen drei Stärken auswählen. Der Zustandsautomat des Ventilators wird nie verlassen.

Weitere Diagramme

Kontaktieren Sie uns!

Autor

  • Daniel Saffer

    Daniel Saffer war als Firmwareentwickler für die MEDtech Ingenieur GmbH tätig. Zu seinen Aufgabengebieten gehörten unter anderem die Entwicklung von Embedded Software für Nervenstimulationsgeräte, sowie die Entwicklung eines Systems zur drahtlosen Steuerung eines C-Bogens. Eine weitere Aufgabe war die Erstellung von Risikobetrachtungen und Assessments aus Cybersecurity-Sicht für verschiedene Medizinprodukte.

    Alle Beiträge ansehen
Auch interessant:

Performanceoptimierung für 2D-Anwendungen

Für Benutzeroberflächen gibt es besondere Ansprüche. Sie müssen blitzschnell reagieren und oft 60 Bilder pro Sekunde mit teilweise Millionen von Pixeln berechnen, um einen hochwertigen Eindruck zu vermitteln. Dies stellt besonders Embedded Systeme auf die Probe. Dieser Artikel basiert auf der Optimierung einer 2D-Anwendung unter Linux, die die Grafikbibliothek SDL…
Getagged mit: , , , , ,