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.

SymbolNameBedeutung
ZustandZustände des Zustandsautomaten werden als abgerundete Rechtecke dargestellt. Der Zustandsname wird ins Innere geschrieben.
ZustandsautomatZustä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.
TransitionEine 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).
AufrufereignisEine Operation wird aufgerufen.
ÄnderungsereignisIm Wert ändert sich ein Wert. Ist der boolesche Ausdruck wahr, wird der nächste Zustand aufgerufen.
SignalereignisEin Signal wird empfangen.
Relatives ZeitereignisDer Zustand wird nach einer definierten Zeit geändert.
Absolutes ZeitereignisDer Zustand wird zu einer definierten Zeit geändert.
Initial ZustandDer 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.
EndzustandDer 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.
EntscheidungEine Entscheidung hat immer eine eingehende und mehrere abgehende Transitionen. Es wird eine Entscheidung auf Basis von Werten getroffen.
HistorieMithilfe 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 synchronisierenMithilfe 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.
EingangspunktMithilfe des Eingangspunkts können weitere Einstiege in den Zustandsautomaten beschrieben werden.
AusgangspunktMithilfe des Ausgangspunkts können weitere Ausgänge des Zustandsautomaten beschrieben werden. Ein Ausgangspunkt beendet die Ausführung.
TerminierungAuch 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

Auch interessant:

Bluetooth Low Energy in Medizingeräten

In diesem Beitrag möchte ich mein aktuelles Projekt vorstellen. Geschichte des Smartphones Vor zehn Jahren begann, mit der Einführung des ersten iPhones…

Daniel Saffer

Seit April 2017 gehört Daniel Saffer zum MEDtech-Ingenieur Team. Aktuelle Aufgabengebiete umfassen die hardwarenahe Entwicklung in C und die Entwicklung einer skalierbaren GUI-Plattform für medizinische Geräte basierend auf Android.

Getagged mit: , , , , ,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.