Sprungfunktionen im Programm in Kontaktplan KOP
Ein SPS-Programm wird in AWL sequentiell, Zeile für Zeile von oben nach unten und zyklisch (wiederholend) abgearbeitet. Die Programmabarbeitung kann mit sogenannten Sprungfunktionen beeinflusst werden. Beispielsweise könnte man ein Programm in mehrere Bereiche aufteilen und je nach Bedingung eine Sprungfunktion ausführen und nur die relevanten Teile abarbeiten lassen. Auf diese Art und Weise kann man auch Netzwerke praktisch überspringen. In Step7 sind die Sprungfunktionen unterhalb des Knotens Sprünge zu finden.
Hier findet der Programmierer folgende Bausteine:
- Label: Zur Definition des Ziels
- JMP: Absoluter Sprungbefehl
- JMP: Bedingter Sprungbefehl bei 1
- JMPN: Bedingter Sprungbefehl bei 0
Label: Sprungziel
Nur zu einem Sprungziel, das definiert wurde, kann auch gesprungen werden. Mit dem Baustein LABEL wird eine Sprungmarke definiert und gibt das Ziel an, zu dem entweder absolut oder an eine Bedingung geknüpft, gesprungen werden kann. Ein Label muss im Netzwerk an erster Stelle erstellt und mit einem frei wählbaren Namen versehen werden. Dabei stehen maximal 4 Zeichen zur Verfügung und das 1. Zeichen muss ein Buchstabe sein. Der Name des Labels fungiert als Operand der Sprungmarke.
Absoluter Sprung mit JMP
Mit JMP wird zu einer Sprungmarke gesprungen. Dabei muss man oberhalb des JMP-Bausteins das Sprungziel angeben. Wird der JMP-Baustein ohne einen Eingangsoperanden in einem Netzwerk eingefügt, bedeutet das absoluter Sprung und der Sprungbefehl wird auf jeden Fall ausgeführt.
Bedingter Sprung mit JMP
Möchte man, dass der Sprungbefehl JMP nur ausgeführt wird, wenn das Ergebnis einer Verknüpfung im VKE eine 1 ist, muss man diese am Eingang des JMP-Bausteins angeben. Auf dem Beispielbild wird der Sprungbefehl nur ausgeführt, wenn E0.2 eine 1 ist. Die Verknüpfung ließe sich erweitern.
Springen, wenn VKE 0 ist JMPN
Mit JMPN wird der Sprungbefehl ausgelöst, wenn das Ergebnis einer Verknüpfung im VKE eine 0 ist. Auf dem Beispielbild wird der Sprungbefehl ausgeführt, wenn E0.3 eine 0 ist. Man kann natürlich mit noch weiteren UND- und ODER-Gliedern oder andere Bausteinen die Verknüpfung erweitern.
Diese Bausteine reichen eigentlich vollkommen aus, um ein Programm in verschiedene Bereiche aufzuteilen und die Abarbeitung an die Bedingung einer Verknüpfung zu koppeln. Beispielsweise könnte man das Programm in zwei Bereiche aufteilen und jeweils am Anfang eine Sprungmarke definieren. Ist die Bedingung eine 1, wird zur ersten Sprungmarke gesprungen. Am Ende des ersten Programmbereichs könnte man wieder einen Sprungbefehl einfügen, damit wieder nach oben gesprungen wird und so die unteren Zeilen des Programms nicht abgearbeitet werden.
Ist das Ergebnis der Verknüpfung eine 0, könnte man zum zweiten Sprungziel springen lassen und am Ende des zweiten Programmbereichs wieder einen Sprungbefehl zum Anfang des zweiten Programmbereichs einfügen. So würde die Programmabarbeitung des ersten Programmbereichs nicht stattfinden.