Weitere Programmierbefehle

Im zweiten Teil dieses Tutorials sind ja schon einige grundlegende Programmierbefehle beschrieben worden. An diesere Stelle werden weitere Programmierbefehle vorgestellt.

Wichtig zu wissen ist, dass nicht jeder der hier aufgeführten Programmierbefehle für jede Steuerung im S7-Spektrum anwendbar ist. Für die Steuerungen der S7-300/400 und S7-1500-Serie passen sie, für die S7-1200-Serie jedoch nicht. Die Operationen, die nur in AWL programiert werden, können nicht angewand werden, da die S7-1200-Serie nicht in AWL programmiert werden kann.

Auf der anderen Seite gibt es für die neuen Steuerungen der 1200/1500-Serie Befehle, die nicht für das ältere System 300/400 angewandt werden können.

Lade-/Transferoperation

Lade- und Transferoperationen ermöglichen den Informationsaustausch zwischen z.B. Ein- und Ausgabebaugruppen, den Prozessabbildern der Ein- und Ausgänge, Zähler- und Merkerspeichern und Datenbausteinen.

Das Laden und Transferieren erfolgt nicht direkt, sondern nimmt immer einen "Umweg" über den Akku 1. Der Akkumulator 1 ist ein Register im Prozessor der CPU und ist nur ein Zwischenspeicher.

  • Beim Laden wird der Inhalt des Quellspeichers kopiert und in den Akku 1 geladen
  • Ein vorheriger Inhalt von Akku 1 wird in den Akku 2, ebenfalls ein Zwischenspeicher innerhalb der CPU, übertragen. Ein vorheriger Inhalt von Akku 2 ist verloren
  • Beim Transferieren wird der Inhalt von Akku 1 in den Zielspeicher übertragen
Das Prinzip Laden-/Transferieren über Akku 1

Das Laden und Transferieren sind unbedingte Programmiebefehle. Unbedingt heißt, dass die Befehle völlig unabhängig von einer Bedingung (Verknüpfungsergebnis) in jedem zyklischen Programmumlauf ausgeführt werden.

Byte-, Wort- und Doppelwortadressen vom Format INT, DINT oder REAL können geladen und transferiert werden.
Wichtig ist, dass immer die jeweils höhere Byteadresse rechtsbündig in den Akku 1 geschrieben wird. Die übrigen Bytes von Akku 1 werden mit „0“ aufgefüllt.

Ein Byte Laden-/Transferieren
Ein Wort Laden-/Transferieren
Ein Doppelwort Laden-/Transferieren
Das Eingangswort 3 wird in den Batenbaustein 1 Wort 3 kopiert
Das Eingangswort 3 wird in den Datenbaustein 1 Wort 3 kopiert
EW 3 Akku 1 DB1.DBW3
Der Zähler Z1 wird binär-codiert in das Ausgangswort 5 übertragen
Der Zähler Z3 wird binär-codiert in das Ausgangswort 5 übertragen
Z 3 Akku 1 AW 5
Das Merkerbyte 4 wird in das Ausgangsbyte 7 kopiert
Das Merkerbyte 4 wird in das Ausgangsbyte 7
kopiert
MB 4 Akku 1 AB 7
Das Eingangsbyte 7 wird in das Ausgangsbyte 10 transferiert
Das Eingangsbyte 7 wird in das Ausgangsbyte 10 transferiert
EB 7 Akku 1 AB 10

Move

In den Programmiersprachen FUP und KOP ist das Laden und Transferieren von Werten ebenfalls möglich. Der Befehl heißt "MOVE" und ist nichts anderes als einen Wert von einer Quelle (IN) nach einem Ziel (OUT) zu kopieren. Das Laden- und Transferieren geschieht hier ebenso über den CPU-Zwischenspeicher Akku 1.

Zusätzlich kann über den Eingang EN eine Freigabe (Bedingung) zur Durchführung der Operation programmiert werden. War die Operation ohne Fehler wird dies über den Ausgang ENO bestätigt. Wird der Eingang EN nicht genutzt, entspricht die Funktion "MOVE" dem Laden-/Tranferieren den vorher beschriebenen AWL-Anweisungen.

Und noch einen Unterschied gibt es zu den "normalen" AWL-Befehlen "L" und "T": Die Move-Operation kann mit oder ohne IEC-Prüfung durchgefüht werden. Die Prüfung kann alternativ je nach Baustein zu- oder abgeschaltet werden. Die Unterschiede mit/ohne IEC-Prüfung liegen in der Übertragbarkeit der Datentypen. Nichts ändert sich hingegen an der maximal übertragbaren Datenlänge von 32 Bit.

Die MOVE-Box ohne Bedingung FUP
FUP-Darstellung ohne Bedingung
Die MOVE-Box ohne Bedingung KOP
KOP-Darstellung ohne Bedingung
Die MOVE-Box mit Bedingung FUP
FUP-Darstellung mit Bedingung
Die MOVE-Box mit Bedingung KOP
KOP-Darstellung mit Bedingung
Parameter: EN
Deklaration: Eingang
Datentyp: BOOL
Funktion: Freigabeeingang

Parameter: IN
Deklaration: Eingang
Datentyp: Bitfolgen, Ganzzahlen, Gleitpunktzahlen, Zeiten, Date, TOD, Char, Timer, Counter
Funktion: Quellwert

Parameter: ENO
Deklaration: Ausgang
Datentyp: BOOL
Funktion: Freigabeausgang

Parameter: OUT1
Deklaration: Ausgang
Datentyp: Bitfolgen, Ganzzahlen, Gleitpunktzahlen, Zeiten, Date, TOD, Char, Timer, Counter
Funktion: Zieladresse

Quelle
(IN)
Ziel (OUT1)
mit IEC-Prüfung ohne IEC-Prüfung
Byte Byte, Word, DWord Byte, Word, DWord, Int, DInt, Time, Date, TOD, Char
Word Word, DWord Byte, Word, DWord, Int, DInt, Time, S5Time, Date, TOD, Char
DWord DWord Byte, Word, DWord, Int, DInt, Real, Time, , TOD, Char
Int Int Byte, Word, DWord, Int, DInt, Time, , TOD
DInt DInt Byte, Word, DWord, Int, DInt, Time, , TOD
Real Real DWord, Real
Time Time Byte, Word, DWord, Int, DInt, Time
S5Time S5Time Word, S5Time
Date Date Byte, Word, DWord, Int, DInt, Date
TOD TOD Byte, Word, DWord, Int, DInt, TOD
Char Char Byte, Word, DWord, Char
Counter Int, Word, Counter Word, DWord, Int, UInt, DInt, UDInt
Timer Int, Word, Timer Word, DWord, Int, UInt, DInt, UDInt

Zu beachten ist beim Verschieben von Werten mit der MOVE-Operation die jeweilige Datenlänge von Quellwert und Zieladresse. Hat der zu übertragende Quellwert mehr Bitstellen als die vorgesehene Zieladresse, werden die höherwertigen Bits nicht übertragen. Hat der Quellwert dagegen wenigen Bitstellen als die Zieladresse, werden die höherwertigen Bitstellen der Zieladresse mit Nullen gefüllt.

Eine Wortadresse ...
1 1 0 0 1 0 1 0 1 0 0 1 1 1 0 0
in Bytadresse übertragen
1 0 0 1 1 1 0 0
Eine Byteadresse ...
1 0 0 1 1 1 0 0
in Wortadresse übertragen
0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0

Nachfolgen ein Beispiel für MOVE-Operationen mit Bedingungen. Der Merker 2.1 gibt die Freigabe für die Übertragung des Inhaltes von Eingangsbyte EB5 in den Zielspeicher Merkerwort MW12. Wurde die Operation fehlerfrei ausgeführt erfolgt die Freigabe zur Übertragung vonm Inhalt DB21.DBD4 nach Merkerdoppelwort MD15. Wurde auch diese Operation fehlerfrei ausgeführt, dann führt Merker M3.0 „1“-Signal.

Beispiel MOVE-Operationen mit Bedingungen
Beispiel MOVE-Operationen mit Bedingungen

BLKMov

Mit der BLKMov-Operation können Inhalte eines ganzen Quellbereiches, also ein kompletter BLocK, in ein Zielbereich kopiert werden. Diese Funktion wird mir dem in der PLC-CPU integrierten Systembaustein SFC 20 erzeugt. Dem Quell- und Zielbereich wird der Datentyp ANY zugewiesen. Dieser Typ kann für unbekannte oder beliebige Datentypen verwendet werden. Der Pointer (P#) ist ein Zeiger, der auf eine Variablenadresse zeigt. In dem Beispiel als bereichsübergreifender Zeiger des Quellbereichs und als DB-Zeiger für den Zielbereich.

Parameter: EN
Deklaration: Eingang
Datentyp: BOOL
Funktion: Freigabeeingang
Parameter: ENO
Deklaration: Ausgang
Datentyp: BOOL
Funktion: Freigabeausgang
Parameter: SCRBLK
Deklaration: Eingang
Datentyp: ANY
Funktion: Quellbereich
Parameter: DSTBLK
Deklaration: Ausgang bzw. InOut
Datentyp: ANY
Funktion: Zielbereich
Falls während der Bearbeitung ein Fehler auftritt, wird hier ein Fehlercode ausgegeben
Parameter: RET_VAL
Deklaration: Ausgang
Datentyp: INT
Funktion: Fehlerinformation
Beispiel MOVE-Operationen mit Bedingungen

Eingang E3.0 startet den Kopiervorgang. Der Pointer zeigt im Quellbereich auf den Merker M20.0. Der Umfang der zu kopierenden Daten beträgt insgesamt 12 Byte, also den Adressbereich von Merker M20.0 bis Merker 31.7 (≙ 12 Byte). Der Ziebereich ist der Datenbaustein DB10 ab Byte 0 Bit 0 bis Byte 11 Bit 7 (≙ 12 Byte). War der Kopiervorgang ohne Fehler, führt M2.1 „1“-Signal. Ist ein Fehler aufgetreten führt führt M2.1 „0“-Signal und ein Fehlercode wird auf Merkerwort 10 ausgegeben.

Haben der Quell- und Zielbereich unterschiedliche Längen, wird nur bis zur Länge des kleineren Bereiches kopiert. Ist der Quellbereich kleiner als der Zielbereich, wird alles in den Zielbereich übertragen, der Rest des Zielbereichs bleibt so wie er vorher war. Ist der Zielbereich kleiner als der Quellbereich, werden die über die Größe des Zielbereichs hinausgehenden Bytes einfach ignoriert. Noch eine Besonderheit muss beachtet werden. Soll ein Bereich vom Typ Bool übertragen werden, muss die Länge durch 8 teilbar sein. Ist sie nicht durch 8 teilbar, wird sie nicht ausgeführt.


UBLKMov

Unblocked MOVE-Operationen
SFC 81 ist die numerische
Bezeichnung für UBLKMOV

Die Operation UBLKMov entspricht im Wesentlichen der Funktion BLKMov. Der Unterschied besteht darin, dass bei der Operation UBLKMov der Bereich ununterbrechenbar kopiert wird. Der Kopiervorgang kann nicht mehr durch andere Funktionen unterbrochen werden. Unter Umständen könnten sich dadurch Reaktionszeiten, z.B. für Alarme, verlängern. Der Programmierer muss hier entscheiden, ob BLKMov oder UBLKMov für seine Anwendung besser geeignet ist.


Fill

Mit Fill (SFC 21) wird ein Zielbereich mit dem Inhalt eines Quellbereichs so oft kopiert, bis der Zielbereich vollständig gefüllt ist. Bezüglich der Größen für den Quell- bzw. Zielbereich gelten im Prinzip die gleichen Regeln wie für UBLKMov. Allerdings kann das Verhalten der Fill-Operation je nach CPU-Typ unterschiedlich sein. Bei einigen CPUs werden keine Daten übertragen und auch unterschiedliche Fehlercodes ausgegeben. Bei S7-400-CPUs werden die Daten übertragen und gleichzeitig ein Fehlercode ausgegeben.

Parameter: EN
Deklaration: Eingang
Datentyp: BOOL
Funktion: Freigabeeingang
Parameter: ENO
Deklaration: Ausgang
Datentyp: BOOL
Funktion: Freigabeausgang
Parameter: BVAL
Deklaration: Eingang
Datentyp: ANY
Funktion: Quellbereich
Parameter: BLK
Deklaration: Ausgang bzw. InOut
Datentyp: ANY
Funktion: Zielbereich
Falls während der Bearbeitung ein Fehler auftritt, wird hier ein Fehlercode ausgegeben
Parameter: RET_VAL
Deklaration: Ausgang
Datentyp: INT
Funktion: Fehlerinformation
Beispiel Fill-Operation
Im Beispiel werden 8 Worte des Zielbereiches ab M50.0 mit
3 Worten aus dem Quellbereich ab M0.0 gefüllt.
Beispiel Fill-Operation

Vergleichsfunktionen

Zwei Zahlenwerte können verglichen werden und ein Vergleichsergebnis (VKE) wird ausgegeben. Die beiden zu vergleichenden Zahlenwerte müssen zwingend dasselbe Zahlenformat haben.
Datentypen ohne Vorzeichen (z.B. UINT) können nicht verglichen werden.

Zahlenwerte Datenlänge Symbol
2 Ganzzahlen 16 Bit I
2 Ganzzahlen 32 Bit D
2 Gleitpunktzahlen
(Realzahlen)
32 Bit R
Vergleich auf größer oder gleich

Das nachfolgende Beispiel in der AWL-Darstellung soll die Funktionsweise der Vergleichsoperation besser erklären.

  • Mit der ersten Ladeoperation (L MW12) wird die 16-Bit-Ganzzahl in den Akku 1 kopiert.
  • Mit der zweiten Ladeoperation (L MW30) wird zunächst der Inhalt von Akku 1 nach Akku 2 kopiert und danach der Wert der 16-Bit-Ganzzahl MW30 in den Akku 1 kopiert.
  • Im dritten Schritt werden die im Akku 1 und Akku 2 stehenden Zahlenwerte bitweise auf "größer oder gleich (>=I)" verglichen. Das „I“ des Befehls steht für eine 16-Bit-Ganzzahl vom Typ „Int“.
  • Ist der Wert von Akku 2 (MW12) größer oder gleich dem Wert von Akku 1 (MW30), wird das Ergebnis (VKE) binär ausgegeben und M100.0 führt bei richtigem Vergleichsergebnis „1“-Signal. Entspricht der Inhalt von Akku 1 und Akku 2 nicht dem programmierten Vergleich, führt M100.00“-Signal.
Vergleich auf größer oder gleich AWL-Beispiel
AWL-Beispiel: Vergleich zweier 16-Bit-Ganzzahlen
auf größer oder gleich
Beispiel MOVE-Operationen mit Bedingungen
Vergleichsoperationen
Ist der Wert
an
IN 1
(im Akku 2)
kleiner < als der Wert
an
IN 2
(im Akku 1)
größer >
kleiner oder gleich <=
größer oder gleich >=
gleich ==
ungleich <>

Mathematische Funktionen

Selbstverständlich beherrscht eine SPS auch alle vier Grundrechenarten. Winkelberechnungen wie z.B. Sinus, Cosinus oder Tangens und weitere mathematischen Funktionen sind mit Gleitpunktzahlen ebenfalls möglich, werden hier an dieser Stelle aber nicht weiter behandelt. Im Prinzip entspricht die Funktionsweise der mathematischen Funktionen denen der Vergleichsfunktionen.

Mit der ersten Ladefunktion wird der Wert an IN1 in den Akku 1 kopiert. Mit der zweiten Ladefunktion wird der Inhalt von Akku 1 in Akku 2 kopiert und der Wert an IN2 wird in Akku 1 kopiert. Die entsprechende Rechenaufgabe wird ausgeführt und das Ergebnis wir an OUT ausgegeben. Optional kann auch hier der Freigabeeingang EN und Freigabeausgang ENO genutzt werden.

Beispiel Addition mit 32-Bit Ganzzahl
Im Beispiel werden zwei 32-Bit Ganzzahlen addiert.
Das Ergebnis wird in Merker-Doppelwort 200 ausgegeben.
Ganzzahlen 16 Bit
+I Addiere Akku 1 (IN2) und Akku 2 (IN1)
-I Subtrahiere Akku 1 (IN2) von Akku 2 (IN1)
*I Multipliziere Akku 1 (IN2) mit Akku 2 (IN1)
/I Dividiere Akku 2 (IN1) durch Akku 1 (IN2)
+ Addiere Ganzzahlkonstante 16 und 32 Bit
Ganzzahlen 32 Bit
+D Addiere Akku 1 (IN2) und Akku 2 (IN1)
-D Subtrahiere Akku 1 (IN2) von Akku 2 (IN1)
*D Multipliziere Akku 1 (IN2) mit Akku 2 (IN1)
/D Dividiere Akku 2 (IN1) durch Akku 1 (IN2)
MOD Divisionsrest Akku 2 (IN1) durch Akku 1 (IN2)
Gleitpunktzahlen 32 Bit
+R Addiere Akku 1 (IN2) und Akku 2 (IN1)
-R Subtrahiere Akku 1 (IN2) von Akku 2 (IN1)
*R Multipliziere Akku 1 (IN2) mit Akku 2 (IN1)
/R Dividiere Akku 2 (IN1) durch Akku 1 (IN2)

Beispiele

AWL Kommentar
L  MD20 //Wert von MD20 in den Akku 1 laden
L  MD30 //Inhalt von Akku 1 in Akku 2 laden
//Wert von MD30 in den Akku 1 laden
+D //Addiere Werte von Akku 1 und Akku 2
//speichere das Ergebnis in Akku 1
T  MD200 //Inhalt von Akku 1 (Ergebnis) wird
/nach MD200 transferiert
AWL Kommentar
L  EW5 //Wert von EW5 in den Akku 1 laden
L  MW14 //Inhalt von Akku 1 in Akku 2 laden
//Wert von MW14 in den Akku 1 laden
+I //Addiere Werte von Akku 1 und Akku 2
//speichere das Ergebnis in Akku 1
+  50 //Addiere Werte von Akku 1 und Wert 50
//speichere das Ergebnis in Akku 1
T  DB2.DBW30 //Inhalt von Akku 1 (Ergebnis) wird
/nach DBW30 von DB2 transferiert
AWL Kommentar
L  MD10 //Wert von MD10 in den Akku 1 laden
L  MD42 //Inhalt von Akku 1 in Akku 2 laden
//Wert von MD42 in den Akku 1 laden
MOD   //Dividiere Werte von Akku 2 durch Akku 1
//speichere das Ergebnis (Divisionsrest) in Akku 1
T  MD120 //Inhalt von Akku 1 (Ergebnis) wird
/nach MD120 transferiert

Programmsteuerung

Für ein strukturiertes SPS-Programm sollten einzelne kleinere und damit besser überschaubare Bausteine entwickelt werden. Wenn ein Baustein nur eine einzelne Funktion oder Baugruppe enthält, ist er einfacher überschaubar und Fehler können so minimiert werden.

Bausteinaufruf

Der Bausteinaufruf wird zum Aufruf von Funktionen (FCs), Systemfunktionsbausteinen (SFBs) oder Systemfunktionen (SFCs) verwendet. Gleichzeitig mit dem Aufruf können Parameter transferiert oder Variablen beschrieben werden. Funktionsbausteine (FBs) oder SFBs können mit zugehörigen Datenbausteinen geöffnet werden. Werden keine Variablen mit dem Aufruf deklariert, entspricht der Befehl CALL dem unkonditionierten Bausteinaufruf UC.

Bausteinaufruf mit CALL
Mit CALL ist der Bausteinaufruf mit Parametern
oder zugehörigen DBs möglich.
Variablen können beschrieben werden.
Bedingter Bausteinaufruf mit CC
Der bedingte (konditionierte) Bausteinaufruf CC
wird nur durchgeführt, wenn die vorherige Bedingung
erfüllt ist. Parameter tranferieren oder Variablen
beschreiben ist nicht möglich.
Unbedingter Bausteinaufruf mit UC
Der unbedingte (unkonditionierte) Bausteinaufruf UC
wird unabhängig von einem vorherigen Verknüpfungsergebnis
ausgeführt und ist dem Befehl CALL sehr ähnlich.
Hier können aber keine Variablen beschrieben oder
Parameter transferiert werden.

Datenbaustein öffnen

Mit dem Befehl AUF wird ein Datenbaustein oder Instanzdatenbaustein aufgeschlagen (geöffnet). Jetzt kann auf die im Datenbaustein enthaltenen Daten zugegriffen werden (z.B. mit Lade- und Transferfunktionen).
Die Nummer des Datenbausteins wird in das sogenannte DI-Register übertragen. Alle darauf folgenden DI-Befehle beziehen sich dann auf den entsprechenden Datenbaustein. Vorteilhaft ist hier die verkürzte Schreibweise der nachfolgenden Operanden.

Datenbaustein aufschlagen mit dem Befehl AUF
T %DBB100 entspricht T %DB77.DBB100

In FUP oder KOP werden „globale Datenbausteine“ mit OPN (open) oder „Instanz-Datenbausteine“ mit OPNI (open instanz) aufgerufen.
Die Nummer des Datenbausteins wird in das sogenannte DI-Register übertragen. Alle darauf folgenden DI-Befehle beziehen sich dann auf den entsprechenden Datenbaustein. Vorteilhaft ist hier die verkürzte Schreibweise der nachfolgenden Operanden.

Datenbaustein öffnen in FUP/KOP
%DBX4.2 entspricht %DB11.DBX4.2
Instanz-Datenbaustein öffnen in FUP/KOP
%DBX2.0 entspricht %DB11.DBX2.0

Bausteinende

BE ist immer die letzte Anweisung eines Bausteins und kennzeichnet das Bausteinende. Die Programmierung ist jedoch nicht zwingend vorgeschrieben und wird unabhängig von Bedingungen ausgeführt. Mit Bausteinende wird die Bearbeitung des aktuellen Bausteins beendet und wechselt zu der Programmstelle, an der der Baustein aufgerufen wurde. Wurde nur ein Baustein (OB1) programmiert, bewirkt die Anweisung den Sprung zum Anfang des Bausteins.

BE - Bausteinende

Die Anweisung BEA wirkt im Prinzip wie BE. Mit der Anweisung Absolutes Bausteinende wird ebenfalls die Bearbeitung des aktuellen Bausteins beendet und zu der Programmstelle gewechselt, an der der Baustein aufgerufen wurde. Die Programmbearbeitung wird mit der Anweisung fortgesetzt, die direkt nach dem Bausteinaufruf steht. Die Anweisung BEA kann jedoch mehrfach innerhalb eines Bausteins programmiert werden, wenn die Anweisung mit einem Sprungbefehl übersprungen wird.

BEA - Absolutes Bausteinende

Die Anweisung BEB ist abhängig vom Verknüpfungsergebnis (VKE). Die Anweisung Bedingtes Bausteinende beendet die Bearbeitung des aktuellen Bausteins und setzt das Programm an der Stelle fort, die direkt nach dem Bausteinaufruf steht. Ist die Bedingung nicht erfüllt (VKE=„0“) wird die Anweisung nicht ausgeführt und das Programm direkt mit der nächstfolgenden Anweisung fortgesetzt. BEB kann auch übersprungen werden.. Das Programm wird dann am Sprungziel fortgesetzt.

BEB - Bedingtes Bausteinende

Sprungoperationen

Der Befehl JMP (JUMP) bewirkt die Unterbrechung der Programmbearbeitung bei Verknüpfungsergebnis VKE=„1“ und Fortsetzung der Programmbearbeitung in einem anderen Netzwerk. Das Zielnetzwerk muss durch eine Sprungmarke, auch Label genannt, eindeutig gekennzeichnet sein. Ein „Sprung“ darf in Richtung höherer oder niedriger Netzwerknummern erfolgen. Innerhalb eines Netzwerkes darf nur eine Sprunganweisung stehen. Ist das Verknüpfungsergebnis der einleitenden Anweisung VKE=„0“, wird die Programmbearbeitung im direkt nachfolgenden Netzwerk fortgesetzt. Da dieser „Sprung“ abhängig von einer Bedingung ist, spricht man von einem bedingten Sprung.

Der Befehl JMPN (JUMP NOT) ist exakt die Umkehrung vom Befehl JMP. Die Unterbrechung der Programmbearbeitung erfolgt nur bei einem Verknüpfungsergebnis VKE=„0“. Ist das Verknüpfungsergebnis der einleitenden Anweisung VKE=„1“, wird die Programmbearbeitung im nächsten Netzwerk fortgesetzt.

Bedingter Sprung FUP
FUP-Darstellung: Bedingter Sprung JMP
Wenn E1.3 „1“-Signal (VKE=1) führt, wird Netzwerk 37
übersprungen und die Programmbearbeitung mit
Netzwerk 38 fortgesetzt
Bedingter Sprung KOP
KOP-Darstellung: Bedingter Sprung JMPN
Wenn E1.3 „0“-Signal (VKE=0) führt, wird Netzwerk 37
übersprungen und die Programmbearbeitung mit
Netzwerk 38 fortgesetzt

Ein LABEL oder Sprungmarke kennzeichnet die Stelle, an der die Programmbearbeitung nach der ausgeführten Sprunganweisung fortgesetzt werden soll. Die angegebene Sprungmarke muss im gleichen Baustein liegen in dem die Anweisung ausgeführt wird. Die Bezeichnung darf nur einmal im Baustein vergeben sein. Sie kann von mehreren Stellen im Baustein angesprungen werden.

Für ein Label gelten zwingende Regeln:

  • Buchstaben a - z, A - Z
  • Buchstaben und Zahlen a - z, A - Z, 0 - 9
  • Zuerst die Buchstaben dann die Zahlen
  • Keine Sonderzeichen

Die Anweisung RET (RETURN) beendet die Bearbeitung des Programmbausteins. Ist das einleitende Verknüpfungsergebnis „1“, erfolgt ein Rücksprung zu dem aufrufenden Baustein. Das Programm wird nach der Aufrufanweisung (z.B. CALL %FCxx) fortgesetzt. Führt das einleitende Verknüpfungsergebnis „0“-Signal, wir der Rücksprung nicht ausgeführt und die Programmbearbeitung mit dem nachfolgenden Netzwerk fortgesetzt.

RETURN KOP
FUP-Darstellung: Rücksprung RET
RETURN KOP
KOP-Darstellung: Rücksprung RET
Absoluter Sprung mit JMP
Absoluter Sprung mit JMP

Die Anweisung JMP ohne vorherige Bedingung entspricht dem Befehl SPA. Es ist ein absoluter Sprung, der immer ohne jegliche Bedingung ausgeführt wird. Im nebenstehenden Beispiel würde die Programmbearbeitung mit Netzwerk 44 fortgesetzt, die Netzwerke 42 und 43 nie bearbeitet werden.

Bedingter Sprung mit SPB
AWL-Darstellung: Bedingter Sprung SPB

Die Anweisung SPB entspricht dem Befehl JMP, der nur ausgeführt wird,
wenn das vorherige Verknüpfungsergebnis (VKE) „1“ entspricht.
Es ist damit ein bedingter Sprung.

Bedingter Sprung mit SPB​N
AWL-Darstellung: Bedingter Sprung SPBN

Die Anweisung SPBN entspricht dem Befehl JMPN, der nur ausgeführt wird, wenn das vorherige Verknüpfungsergebnis (VKE) „0“ entspricht. Es ist ebenfalls ein bedingter Sprung.
Es gibt in AWL auch noch den absoluten Sprung SPA. Diese Sprungoperation wird immer ohne jegliche Bedingung durchgeführt.

Was die Anzahl der verfügbaren Befehle für eine SPS angeht ist es in etwa so wie beim Metzger:"Darf es etwas mehr sein?". An dieser Stelle kann nur eine kleine Auswahl wichtiger Operationen vorgestellt werden, mehr würde diesen Rahmen sprengen. Wer möchte, kann im Internet, z.B. bei Siemens Anleitungen zuhauf finden. Man sollte nur genug Zeit zum Studieren der angebotenen Schriften mitbringen. Alleine das Systemhandbuch STEP 7 und WinCC Engineering V15.1 umfasst knapp 20.000 (zwanzigtausend) Seiten. Behandelt wird hier "nur" das neuere TIA-Portal zum Programmieren und WinCC zur Visualisierung (Maschinennahes Bedienen und Beobachten). Mittlerweile ist TIA-Portal schon bei der Version 16 angelangt, Version 17 wird wohl auch demnächt auf den Markt gebracht werden und da sind wohl wieder ein paar Neuerungen oder Änderungen enthalten. Die Weiterentwicklung kennt halt keinen Stillstand.