Zustandsautomaten und Tools zur Generierung

 

Ein Zustandsautomat (State Machine) ist ein Softwarekonzept, mit dessen Hilfe sich Anwendungen realisieren lassen, deren entscheidendes Merkmal das Vorhandensein mehrerer Betriebszustände ist, zwischen denen im Verlauf des Programms mehrfach gewechselt wird. Zustandsautomaten kommen bevorzugt bei der Microcontroller- bzw. Embedded-Programmierung zur Anwendung. Ein typisches Beispiel ist die Realisierung eines Automaten in Software; in Informatiklehrbüchern wird das Prinzip oft mit einem Fahrkartenautomaten (alternativ auch Ampel- oder Fahrstuhlsteuerungen) vorgeführt, der mehrere interne Zustände einnehmen kann (Grundzustand, Zielwahl, Optionswahl, Bezahlvorgang, Fahrkartenausgabe, Wechselgeldausgabe, Fehlerzustand, ...), zwischen denen infolge von extern getriggerten Ereignissen (Münzeinwurf, Tastendruck, Abbruch, Zeitüberschreitung, ...) gewechselt wird.

In Zustandsautomaten kann für jeden Zustandswechsel, für jeden Eintritt in einen Zustand, für jedes Verlassen eines Zustands und für das Verweilen in einem Zustand eine Funktion hinterlegt werden, die genau zu einem solchen Ereignis zur Ausführung kommt. Die Abläufe eines solchen Softwareautomaten bekommen somit eine klare und grundsätzlich gleichbleibende Struktur.

In der Programmiersprache C arbeiten fortgeschrittene Zustandsautomaten oft mit Tabellen, in denen die auszuführende Funktionen als Funktionszeiger abgelegt sind (soll keine Funktion ausgeführt werden, kann auch ein Nullzeiger eingetragen werden). Ebenso kann tabellarisch definiert werden, zwischen welchen Zuständen Übergänge stattfinden dürfen und zwischen welchen sie verboten sind. Mit dieser Notation kann eine State Machine relativ kompakt gehalten werden.

Weiterführende Information samt Beispielimplementierung findet sich unter Microcontroller.net.

Was haben Zustandsautomaten mit Astronomie zu tun? Für programmierende (Amateur-)Astronomen können sie ebenfalls ein interessantes Konzept darstellen, und zwar bevorzugt dann, wenn man es mit Steuerungen oder Messwerterfassung zu tun hat.

Es ist keineswegs zwingende Notwendigkeit, auf Zustandsautomaten zurückzugreifen; für einfachste Aufgaben erzeugen sie nur vermeidbaren Overhead, aber ansonsten bieten sie enorme Vorteile: Ihre Struktur bleibt grundsätzlich auch bei zunehmender funktionaler Komplexität erhalten; lediglich der Code wird länger. Dies hilft dem Programmierer massiv, auch bei wesentlich schwierigeren Aufgaben die Übersicht zu behalten und fehlerarm zu arbeiten. Dies erfordert allerdings das konsequente Einhalten des Prinzips - und selbstverständlich ein echtes Verständnis des/der Programmierer(s) für das Konzept! Für die Systemübersicht ist es zudem hilfreich, dass Zustandsautomaten leicht als Graphen (Zustandsdiagramm) visualisiert werden können.

Es ist allerdings nicht erforderlich, einen Zustandsautomaten von Hand zu programmieren. Es gibt einige Programme wie BoUML, Yakindu Statechart Tools oder Qfsm, die das Bearbeiten von Zustandsautomaten auf Basis von Zuständen, Wechsel-, Eintritts-, Austrittsfunktionen und Ereignissen ermöglichen. Die meisten von ihnen sind in der Lage, aus den internen Modellen von Zustandsautomaten kontinuierlich, also laufend wiederholt, Code zu generieren; die Tätigkeit des Programmierers verlagert sich zum Erstellen des Codes innerhalb der Funktionen.