Flankenauswertung in SPS-Programmen

In Steuerungsprogrammen müssen häufig Signalveränderungen erfasst und verarbeitet werden. Das passiert sehr häufig in Verbindung mit der Erkennung von Bewegungen oder wenn ein Signalwechsel eine zeitgesteuerte oder zählbare Aktion auslösen soll. Aus Erfahrung wissen wir, dass die Flankenauswertung häufig Verwirrung auslöst oder für viele SPS-Programmierer zumindest in der Anfangszeit schwierig zu verstehen ist. Daher ein ausführliches Beispiel mit einem Paketaufkleber:

  • An einer Förderbandanlage ist eine Lichtschranke angebracht, die das Signal 1 gibt, wenn die Lichtschranke unterbrochen wird (Schließer). Es soll eine Aktion ausgelöst werden, sobald ein Paket an der Lichtschranke ankommt und die Lichtschranke unterbricht, z.B. Paketaufkleber kleben. Sobald das Paket die Lichtschranke berührt, wechselt das Signal von 0 auf 1, denn vorher war noch kein Paket da und die Lichtschranke hatte das Signal 0. Es liegt also eine Signalveränderung vor.
  • Wenn man die auszuführende Aktion, z.B. Paketaufkleber kleben, nicht an die Signalveränderung koppeln würde, sondern lediglich anweisen würde, den Paketaufkleber zu bewegen, wenn die Lichtschranke das Signal 1 gibt, dann würde der Paketaufkleber mehrmals bewegt werden, zumindest solange, bis das Paket die Lichtschranke wieder verlassen hat und das Signal 0 ist.
  • Da ein Paket eine gewisse Länge hat, die Lichtschranke also weiterhin das Signal 1 liefert, obwohl bereits der Paketaufkleber 1x bewegt wurde, muss eine Möglichkeit her, den Paketaufkleber an ein Signalwechsel der Lichtschranke, in diesem Fall von 0 auf 1, zu koppeln.
  • In diesem Fall würde der Paketaufkleber nur 1x bewegt werden, nämlich nur dann, wenn ein Paket an der Lichtschranke ankommt und somit das Signal der Lichtschranke von 0 auf 1 ändert. Ob danach die Lichtschranke weiterhin das Signal 1 gibt, interessiert den Paketaufkleber nicht mehr. Denn der Paketaufkleber wird nur tätig, bei Signalveränderungen und nicht nur bloß, weil die Lichtschranke das Signal 1 liefert.
  • Solche Steuerungen lassen sich mit Flankenauswertungen realisieren.

Positive und negative Flanke

Eine Flankenauswertung bedeutet also, eine Signalveränderung zu erfassen. Es gibt aber zwei Möglichkeiten der Signalveränderung. Wenn man das Beispiel mit dem Paketaufkleber nimmt, dann muss man folgendes feststellen. Wenn das Paket an der Lichtschranke ankommt, ändert sich das Signal von 0 auf 1. Beim Verlassen der Lichtschranke, ändert sich das Signal von 1 auf 0. Beide Signalveränderungen können in einer Steuerung genutzt werden. Beispielsweise könnte man an der Förderbandanlage mit dem Paketaufkleber programmieren, dass nachdem das Paket die Lichtschranke wieder verlassen hat, das Signal also von 1 auf 0 gefallen ist, ein Zylinder bewegt wird, um das Paket auf ein anderes Förderband zu schieben.

Für den Einsatz einer Flankenauswertung gibt es also viele Möglichkeiten. Signalveränderungen von 0 auf 1 oder von 1 auf 0 werden unterschiedlich erfasst und verarbeitet. Diese sind:

  • Positive Flanke: Erfassung einer Signalveränderung von 0 auf 1. Wird auch häufig "steigende Flanke" genannt, da hier eine Signalveränderung von 0 auf 1, also steigende Veränderung, erfasst wird.
  • Negative Flanke: Erfassung einer Signalveränderungen von 1 auf 0. Wird auch "fallende Flanke" genannt, weil hier eine Signalveränderung von 1 auf 0, also fallende Veränderung, erfasst wird.

Funktionsweise der Flankenauswertung

Die Programmiersoftware der meisten Hersteller stellen bereits vorgefertigte Standardbausteine zur Flankenauswertung zur Verfügung. Nachfolgend die Abbildung mit einem Baustein für die Auswertung einer positiven Flanke und für die Auswertung einer negativen Flanke.

Positive und negative Flanke

Die positive Flanke ist mit P gekennzeichnet, die negative Flanke mit N. Beide Bausteine benötigen zunächst einmal 2 Operanden.

  • Eingangsoperanden
  • Flankenoperanden

Der Eingangsoperand ist der Operand, der ausgewertet wird, also dessen Signalveränderung erfasst wird. Auf den Beispielbildern sind das die Operanden E0.1 und 1.1. Der Eingangsoperand wird links am Eingang des Bausteins eingetragen.

Der Flankenoperand wird auch häufig Flankenmerker oder Flankenspeicher genannt. Hierfür benötigt man eine freie Bitadresse, wofür häufig ein freier Merker verwendet wird. Man kann aber auch ein statisches Lokaldatenbit oder ein Datenbit in Globaldatenbausteinen verwenden. Im Organisationsbaustein OB1 ist es auch möglich, ein temporäres Lokaldatenbit zu verwenden. In Funktionsbausteinen oder Funktionen ist die Verwendung von temporären Lokaldatenbits nicht möglich, da der Flankenoperand ein speicherndes Verhalten hat.

Der Flankenoperand wird benötigt, um überhaupt eine Signalveränderung erfassen zu können. Das bedeutet, im Flankenoperanden wird der Zustand des Operanden gespeichert, dessen Signalveränderung (Eingangsoperand) erfasst wird. Daher verläuft der Flankenoperand synchron mit dem Eingangsoperanden. Ist der Eingangsoperand eine 0, ist auch der Flankenoperand eine 0. Ist der Eingangsoperand eine 1, ist auch der Flankenoperand eine 1.

Nur wenn das Programm "weiß", wie der vorherige Zustand des Eingangsoperanden ist, kann auch eine Signalveränderung festgestellt werden. Bei der Abarbeitung des Programms wird der aktuelle Signalzustand des VKE-Bits mit dem vorherigen Zustand des VKE-Bits des Flankenoperanden geprüft.

Impulsoperand einer Flanke

Wenn man also einen Baustein zur Flankenauswertung benutzt, dann gibt man den Operanden an, dessen Signalveränderung erfasst werden soll. Man benutzt eine freie Bitadresse, damit die Erfassung einer Signalveränderung möglich ist. Möchte man eine Signalveränderung von 0 auf 1 erfassen, benutzt man eine positive Flanke. Im umgekehrten Fall eine negative Flanke. Wenn die zu erfassende Signalveränderung eintritt, dann wird am Ausgang der Bausteine kurzzeitig ein Impuls abgegeben. Der Impuls ist zwar kurzzeitig, reicht aber aus, um z.B. einen Ausgangsoperanden zum Setzen zu bringen. Der Operand, der den kurzzeitigen Impuls erhält, wird auch Impulsoperand genannt. Bei dem obigen Beispiel wäre z.B. der Paketaufkleber der Impulsoperand, der über das kurzzeitige Signal bewegt werden würde. Häufig werden hierfür SR-Glieder benutzt, da hierfür nur ein kurzes Signal zum Setzen des Glieds benötigt wird. Das Speicherglied würde dann wieder durch ein anderes Signal, z.B. dem Endschalter des Paketaufklebers, zurückgesetzt werden.

Impuls einer Flankenauswertung

Positive Flanke: Flankenauswertung von 0 auf 1

Parameter Datentyp Speicherbereich Beschreibung
Operand BOOL E, A, M, D, L Mit der positiven Flankenauswertung wird die Signalveränderung eines Operanden von 0 auf 1 erfasst.

Negative Flanke: Flankenauswertung von 1 auf 0

Parameter Datentyp Speicherbereich Beschreibung
Operand BOOL E, A, M, D, L Mit der negativen Flankenauswertung wird die Signalveränderung eines Operanden von 1 auf 0 erfasst.

Flankenauswertung mit Speichergliedern

Flankenauswertungen kann man auch erstellen, ohne auf die Standardbausteine der Programmiersoftware zuzugreifen. Hierfür benötigt man im Grunde nur Speicherglieder. Für eine positive Flanke benutzt man ein SR-Glied als Flankenoperanden. Für eine negative Flanke benutzt man ein setzdominantes RS-Glied. Nachfolgend je ein Beispiel, komplett mit einem SR-Glied für den Impulsoperanden.

Flankenauswertung mit Speichergliedern

Bei den gezeigten Beispielen wird davon ausgegangen, dass ein SR-Glied rücksetzdominant und ein RS-Glied setzdominant ist. Das ist z.B. bei der S7-300 Reihe der Fall. Es gibt auch Geräte, da ist es umgekehrt. Hierbei wird auch meistens eine 1 am dominanten Eingangsbuchstaben geführt (S1 oder R1).

Wer es ganz exotisch haben möchte, kann auch auf die vorgefertigten Speicherglieder verzichten und mit UND-/ODER-Gliedern zusammengesetzte Verknüpfungen realisieren, die dasselbe Verhalten wie Speicherglieder haben. Das Programm wäre dann zwar riesig, fehleranfällig und würde viel zu lange dauern, um die Schaltlogik zu realisieren, es wäre aber grundsätzlich möglich.