State Machines

Inhalt

  • State-Machines (deutsch: Automaten) als Abstraktion von Abläufen und Zuständen

Einführung

Viele Prozesse sind nichts anderes als ein definierter Ablauf von Vorgängen. State-Machines (deutsch: Automaten) sind eine Abstraktion dieses Modells und dienen etwa dazu komplexe Abläufe abzubilden, um sie leichter planbar zu machen.

Eine sehr einfache Art von State-Machine haben sie mit dem Arduino bereits kennengelernt. Das Zustandsdiagram der Arduino Umgebung könnte man etwa wiefolgt aufzeichnen:

sm_arduino

Der Eingang ganz links (rst_n) entspricht dem RESET, also dem allerersten Start des Systems. Nach dem Start befinden wir uns zuerst im setup-Zustand (im Arduino entspricht dies dem Aufruf der setup -Funktion). Ist dies abgeschlossen geht das System über in den loop-Zustand. Von diesem gibt es keine Verbindung mehr in einen anderen Zustand, außer sich selbst. In diesem Zustand verharrt die State-Machine nun für immer (außer es wird ein RESET durchgeführt).

Das folgende Beispiel zeigt abstrahiert in einem Zustandsdiagramm den Vorgang Kaffee kochen. Dieses Diagramm hat einen Start (rst_n) und zwei Endzustände (ERROR und FERTIG).

sm_kaffee_beschrieben

Der Ablauf des Kochens erfolgt in mehreren Zuständen.

  1. Check Zutaten: Überprüft ob alles (Wasser, Kaffee, Tasse, …) vorhanden ist.
    • Alles vorhanden ? -> weiter zu Zustand Wasser kochen
    • Etwas fehlt? -> weiter zu ERROR
  2. Wasser kochen: Wasser wird aufgekocht
    • Erfolgreich? -> Weiter zu Wasser pressen
    • Wasser kocht nicht (z.B. wegen Defekt des Heizelements) – > weiter zu ERROR
  3. Wasser pressen: Wasser wird durch Kaffee gepresst
    • Erfolgreich? -> Je nach gewünschtem Kaffee weiter zu
      • FERTIG
      • Milch zugeben
      • Zucker zugeben. Achtung! Der Ablauf ist so definiert, dass, wenn Milch und Zucker verlangt werden, zunächst der Zucker zugegeben wird.
    • Pressung fehlerhaft (z.B. weil die Pumpe nicht funktioniert) -> ERROR
  4. Milch zugeben
    • Erfolgreich -> FERTIG
    • Milch kann nicht zugegeben werden (z.B. weil Schlauch verstopft) -> ERROR
  5. Zucker zugeben
    • Erfolgreich -> je nach Kaffee weiter zu
      • Milch zugeben
      • FERTIG
    • Zucker kann nicht zugegeben werden (z.B. weil verstopft) -> ERROR
  6. FERTIG (Endzustand): Alles wurde erfolgreich abgewickelt, Kaffee kann entnommen werden
  7. ERROR (Endzustand): Irgendetwas ging beim Ablauf schief. Der Fehler muss behoben werden

Gerade bei komplexen Abläufen hilft eine Abstraktion in ein Zustandsdiagram ungemein. Definiert werden müssen Zustände und Übergänge zwischen den Zuständen.

State Machines für das Arduino

Simulieren lässt sich eine State-Machine am Arduino beispielsweise, indem man den Code in klar strukturierte Blöcke zusammenfasst, diesen mit einer ID versieht und in einer Variable die ID des aktuellen Zustands abspeichert.

In einer einfachen Form eignet sich für die Strukturierung des Codes die switch -Bedingung. Im folgenden Code wird über die Variable state  einer von drei Zuständen definiert. Mit jedem Aufruf der loop -Funktion wird über das switch -Statement geprüft, in welchem Zustand man sich befindet und der entsprechende Code dieses Zustands ausgeführt.

Codebeispiel 1

simple_sm

In den einzelnen Zuständen existiert außerdem immer eine if-Bedingung die prüft, ob eine gewisse Bedingung ( CONDITION_TO_CHANGE_TO_STATE_X )erfüllt ist. Wenn dies der Fall ist, wird die state -Variable neu gesetzt, sodass beim folgenden Aufruf der loop -Funktion das switch -Statement den Code des entsprechenden Zustands ausführt.

Beispiel 1: Ein vollwertiges Beispiel

[BEISPIEL einfügen]

StateMachine Bibliotheken

Das Konzept der State-Machines wurde in mehreren Bibliotheken abgebildet. Beispiele hierfür sind etwa

Zusammenfassung

State-machines sind eine Abstraktion eines Ablaufs. Sie besteht aus Zuständen und Übergängen zwischen den Zuständen. In Programmen umgesetzt dienen Sie zur besseren Strukturierung von Abläufen. Eine Möglichkeit, eine simple SM umzusetzen bietet die switch -Bedingung. Mehr Möglichkeiten bieten diverse Bibliotheken, die das Konzept stärker formalisieren.

Weiterführende Links

  • http://www.thebox.myzen.co.uk/Tutorial/State_Machine.html
  • http://www.gammon.com.au/forum/bbshowpost.php?bbsubject_id=11425&page=1

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.