16 Globaler Zustandsautomat im CL-System

Ein Zustandsautomat beschreibt ein System, das sich immer in einem bestimmten Zustand befindet. Abhängig von Ereignissen oder Bedingungen kann in einen anderen Zustand gewechselt werden. Ein einfaches Beispiel wäre eine Maschine mit den Zuständen „Start“, „Bereit“, „Betrieb“ und „Störung“. Je nachdem, welcher Zustand gerade aktiv ist, können unterschiedliche Funktionen freigegeben, gesperrt oder ausgelöst werden.

Im CL-System können Zustandsautomaten grundsätzlich beliebig oft mit normalen Funktionsblöcken aufgebaut werden. Damit lassen sich auch mehrere voneinander unabhängige Abläufe innerhalb eines Programms umsetzen. Zusätzlich gibt es in CL einen besonderen globalen Zustandsautomaten, kurz GSM. Dieser wird einmal zentral für das gesamte Programm definiert und kann anschließend sehr einfach von anderen Funktionsblöcken verwendet werden.

Der Vorteil dabei ist, dass viele Blöcke direkt auf den aktuellen globalen Zustand zugreifen können. Zusätzliche Leitungen oder eigene Hilfslogik sind dadurch oft nicht notwendig. Auch im Designer ist der globale Zustandsautomat direkt integriert. Dadurch eignet er sich besonders gut für übergeordnete Betriebsarten oder zentrale Programmzustände.


Definiere zuerst die benötigten Zustände in den Programmeinstellungen und aktiviere anschließend die Option „Globalen Zustandsautomaten verwenden“.

Für jeden Zustand kann eine Nummer und ein Name vergeben werden. Im Beispiel werden die Zustände „Start“, „Bereit“, „Betrieb“ und „Störung“ verwendet.


Sobald der GSM aktiviert ist, erscheint rechts oben im CL-Designer die Zustandsanzeige.

Hier siehst du jederzeit den aktuell aktiven Zustand. Für Tests kann der Zustand auch direkt aus dem Designer heraus geändert werden. Mit den Pfeiltasten wechselst du zum vorherigen oder nächsten Zustand. Ein bestimmter Zustand kann außerdem durch einen Doppelklick auf seinen Namen direkt ausgewählt werden.


Einzelne Zustände können direkt aus der GSM-Liste auf digitale Eingänge gezogen werden. Der verbundene Eingang ist genau dann „1“, wenn dieser Zustand aktuell aktiv ist.

Im Beispiel werden die Zustände „Start“ und „Betrieb“ mit einem OR-Block verbunden. Dadurch wird dessen Ausgang aktiv, sobald sich der GSM in einem dieser beiden Zustände befindet.


Der aktuelle Zustand kann auch als Zahl verwendet werden. Ziehst du den aktuellen GSM-Zustand auf einen numerischen Eingang, erhält dieser die Nummer des momentan aktiven Zustands.

Im Beispiel ist „Betrieb“ aktiv. Da „Betrieb“ die Zustandsnummer 2 hat, liegt am numerischen Eingang ebenfalls der Wert 2 an. So kann der aktuelle Zustand auch mit normalen numerischen Funktionsblöcken weiterverarbeitet werden.


Für etwas komplexere Abfragen gibt es den Funktionsblock „Is global States“. Damit können mehrere Zustände zu einem Zustandsmuster zusammengefasst werden. Der Block prüft dann, ob der aktuelle globale Zustand zu diesem Muster gehört.

So lässt sich beispielsweise einfach abfragen, ob sich das Programm gerade in „Start“ oder „Störung“ befindet, ohne beide Zustände separat auswerten zu müssen.


Bis hierhin haben wir den aktuellen Zustand nur ausgewertet. Natürlich muss der globale Zustandsautomat auch von der Programmlogik aus umgeschaltet werden können.

Dafür gibt es den Funktionsblock „Set global State“.

Hier wird festgelegt, in welchen Zuständen ein Wechsel erlaubt ist, in welchen Zielzustand gewechselt werden soll und welches Signal den Wechsel auslöst.

Im Beispiel wird bei einem entsprechenden Eingangssignal in den Zustand „Bereit“ gewechselt. Über das Zustandsmuster kann zusätzlich festgelegt werden, aus welchen aktuellen Zuständen dieser Wechsel überhaupt erlaubt ist.

Damit lassen sich die Übergänge des globalen Zustandsautomaten direkt im CL-Programm aufbauen.


Mit dem globalen Zustandsautomaten lassen sich auch umfangreiche und komplexe Abläufe übersichtlich strukturieren. Statt viele einzelne Freigaben, Verriegelungen und Sonderfälle über das gesamte Programm zu verteilen, können zentrale Betriebszustände klar definiert und gezielt ausgewertet werden.

Dadurch bleibt das Programm auch bei größeren Projekten verständlich und gut erweiterbar. Neue Zustände oder zusätzliche Funktionen lassen sich meist gezielt ergänzen, ohne bestehende Abläufe unnötig kompliziert zu machen.

Gerade bei umfangreicheren Steuerungen hilft der GSM dabei, die Programmlogik sauber zu gliedern und jederzeit nachvollziehen zu können, in welchem Zustand sich das System befindet und welche Funktionen gerade aktiv sein sollen.