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
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.
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:
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.