Aufruf von Satzfolgen (L SEQUENCE)
Satzfolgen sind zusammenhängende Programmteile (Sequenzen) oder einzelne NC-Sätze im aktuellen NC-Programm oder einem globalen Unterprogramm, die mit L SEQUENCE.. ein- oder mehrfach ausgeführt werden können.
Eine Satzfolge wird festgelegt durch Angabe von Start-/ Endemarkierungen über:
- Satznummern N.. oder
- Sprungmarken ([Stringlabel], analog zur Definition für $GOTO)
Hinweis

Jeder Aufruf einer Satzfolge ist mit einem Unterprogrammaufruf gleichzusetzen. Es gelten die gleichen Regeln zur Verschachtelungstiefe wie bei globalen Unterprogrammen.
Achtung

Kontextauswertung:
Der Programmkontext im Unterprogramm wird erst ab der ersten ausgeführten NC-Zeile der Satzfolge aufgebaut. Alle NC-Zeilen zuvor werden nicht ausgewertet. Vorher definierte Variablen/Koordinatensysteme, Parameter, modale Anweisungen usw. werden weder angelegt noch initialisiert. Sie sind also in der Satzfolge nicht bekannt bzw. verfügbar.
Insbesondere bei der Ausführung von Satzfolgen mit Steuersatzkonstrukten ($IF-$ELSE-$ENDIF, $SWITCH, ..) muss der Anwender daher selbst sicherstellen, dass diese durch den Ein- und Rücksprung konfliktfrei durchlaufen werden.
Syntax von L SEQUENCE bei Verwendung von Satznummern:
L SEQUENCE [ [ NAME=<string> ] N<expr> [ N<expr> ] [ REPEAT<expr> ] [ ENDTAG ] ] |
NAME=<string> | Name des aktuellen oder eines globalen Unterprogrammes, in dem die Satzfolge durchlaufen werden soll. Optional: ist kein Name programmiert, so wird die Satzfolge im aktuellen NC-Programm durchlaufen. |
N<expr> | Nummer des ersten auszuführenden Satzes (Startnummer, Beginn der Satzfolge) |
N<expr> | Nummer des letzten auszuführenden Satzes (Rücksprungnummer, Ende der Satzfolge). Optional, sind beide Satznummern identisch, so wird nur dieser Satz ausgeführt. |
REPEAT<expr> | Anzahl der Wiederholungen einer Satzfolge, positive Ganzzahl > 1. Optional, ohne Angabe von REPEAT wird die Satzfolge einmal durchlaufen. |
ENDTAG | Markiert den Aufruf L SEQUENCE selbst als ein zusätzliches gültiges Ende der Satzfolge. Optional, bei gleichzeitiger Angabe von ENDTAG und einer Rücksprungnummer N.. gilt das zuerst gefundene Sequenzende. |
Die Steuerung sucht in dem angegebenen NC-Programm (kann auch das gleiche Programm sein, das den Befehl aufruft) nach den programmierten N-(Satz)nummern. Die beiden N-Nummern markieren den ersten und letzten auszuführenden NC-Satz der Satzfolge; NC-Sätze außerhalb dieser Satzfolge werden nicht ausgeführt.
Es wird empfohlen, die NC-Zeilen eindeutig und in aufsteigender Form zu nummerieren.
Start- und Rücksprungnummer können im Befehl auch vertauscht programmiert werden. Im NC- Programm wird jedoch immer von der kleineren N-Nummer bis zur größeren N-Nummer die Satzfolge durchlaufen.
Werden Start- oder Rücksprungnummer nicht gefunden, so erfolgt die Ausgabe einer Fehlermeldung.
Soll die Satzfolge mehrfach ausgeführt werden (REPEAT > 1), so wird am Ende der Satzfolge wieder auf der Startnummer aufgesetzt. Nachdem alle Durchläufe abgearbeitet sind, erfolgt der Rücksprung aus der Satzfolge und die Fortsetzung des weiteren Programmablaufes.
Wenn im Befehl nur eine N-Nummer angegeben wurde, dann wird nur diese Zeile durchlaufen. Dies entspricht dem Aufruf mit zwei gleichen N-Nummern.
Der Aufruf L SEQUENCE kann selbst innerhalb der durch die N-Nummern definierten Satzfolge liegen. Beim erneuten Einlesen des gleichen Aufrufs sind zwei Reaktionen möglich:
Ohne ENDTAG wird der erneute Aufruf ignoriert und die Satzfolge bis zur Rücksprungnummer ausgeführt.
Mit ENDTAG ist L SEQUENCE als gültiges Sequenzende markiert und die Satzfolge wird beendet.
Programmierbeispiel

Aufruf von Satzfolgen (L SEQUENCE)
Satzfolge zwischen 2 Satznummern 1 mal wiederholen:
...
N20 ... ;Startnummer
...
N50 ... ;Rücksprungnummer
...
N80 L SEQUENCE [N20 N50] ;oder..
N80 L SEQUENCE [N20 N50 REPEAT=1]
...
Satzfolge zwischen 2 Satznummern mehrfach wiederholen:
...
N20 ... ;Startnummer
...
N50 ... ;Rücksprungnummer
...
N80 L SEQUENCE [N20 N50 REPEAT=4]
...
Satzfolge zwischen 2 Satznummern. Geklammerter eigener Sequenzaufruf wird bei Ausführen der Satzfolge ignoriert, da ENDTAG nicht gesetzt ist:
...
N20 ... ;Startnummer
...
N40 L SEQUENCE [N20 N80]
...
N80 ... ;Rücksprungnummer
...
Satzfolge zwischen 2 Satznummern. Geklammerter eigener Sequenzaufruf ist zuerst gefundenes Ende der Satzfolge, da ENDTAG gesetzt ist:
...
N20 ... ;Startnummer
...
N40 L SEQUENCE [N20 N80 ENDTAG]
...
N80 ... ;Rücksprungnummer
...
Satzfolge zwischen 2 Satznummern mit ENDTAG. ENDTAG nicht relevant, da Rücksprungnummer vor Sequenzaufruf liegt:
...
N20 ... ;Startnummer
...
N50 ... ;Rücksprungnummer
...
N80 L SEQUENCE [N20 N50 REPEAT=4 ENDTAG]
...
Einzelnen NC-Satz mehrfach wiederholen:
...
N20 ... ;Startnummer
...
N80 L SEQUENCE [N20 REPEAT=4] ;oder..
N80 L SEQUENCE [N20 N20 REPEAT=4]
...
Satzfolge zwischen 1 Satznummer und ENDTAG:
...
N20 ... ;Startnummer
...
N80 L SEQUENCE [N20 ENDTAG]
...
Satzfolge zwischen 2 Satznummern mehrfach wiederholen. Sequenzaufruf liegt vor der Satzfolge:
...
N80 L SEQUENCE [N100 N150 REPEAT=4]
...
N100 ... ;Startnummer
...
N150 ... ;Rücksprungnummer
Geschachtelter mehrfacher Aufruf von Satzfolgen zwischen Satznummern:
...
N40 L SEQUENCE [N60 N150 REPEAT=2] ;Sequenzaufruf 1
...
N60 ... ;Startnummer 1
...
N90 ... ;Startnummer 2
...
N120 ... ;Rücksprungnummer 2
...
N130 L SEQUENCE [N90 N120 REPEAT=4] ;Sequenzaufruf 2
...
N150 ... ;Rücksprungnummer 1
...
Satzfolge zwischen 2 Satznummern in einem globalen Unterprogramm mehrfach wiederholen:
...
N20 ...
...
N80 L SEQUENCE [NAME="glob_1.nc" N50 N150 REPEAT=4]
...
Geschachtelter mehrfacher Aufruf von Satzfolgen im aktuellen Programm und einem globalen Unterprogramm zwischen Satznummern:
...
N20 L SEQUENCE [N60 N150 REPEAT=2] ;Sequenzaufruf 1
...
N60 ... ;Startnummer 1
...
N80 L SEQUENCE [NAME="glob_1.nc" N50 N150 REPEAT=3] ;Sequenzaufruf 2
...
N150 ... ;Rücksprungnummer 1
...
Syntax von L SEQUENCE bei Verwendung von Sprungmarken (Stringlabel):
L SEQUENCE [ [ NAME=<string> ] [<START>] [ [<END>] ] [ REPEAT<expr> ] [ ENDTAG ] ] |
NAME=<string> | Name des aktuellen oder eines globalen Unterprogrammes, in dem die Satzfolge durchlaufen werden soll. Optional: ist kein Name programmiert, so wird die Satzfolge im aktuellen NC-Programm durchlaufen. |
[<START>] | Startmarke des ersten auszuführenden Satzes (Beginn der Satzfolge) |
[<END>] | Endmarke des letzten auszuführenden Satzes (Rücksprung, Ende der Satzfolge). Optional, sind beide Marken identisch, so wird nur dieser Satz ausgeführt. |
REPEAT<expr> | Anzahl der Wiederholungen einer Satzfolge, positive Ganzzahl > 1. Optional, ohne Angabe von REPEAT wird die Satzfolge einmal durchlaufen. |
ENDTAG | Markiert den Aufruf L SEQUENCE selbst als ein zusätzliches gültiges Ende der Satzfolge. Optional, bei gleichzeitiger Angabe von ENDTAG und einer Endmarke gilt das zuerst gefundene Sequenzende. |
Die Steuerung sucht in dem angegebenen NC-Programm (kann auch das gleiche Programm sein, das den Befehl aufruft) nach den programmierten Sprungmarken. Die beiden Sprungmarken markieren den ersten und letzten auszuführenden NC-Satz der Satzfolge; - NC-Sätze außerhalb dieser Satzfolge werden nicht ausgeführt.
Sprungmarken werden am Satzanfang oder direkt nach der Satznummer gesetzt. Werden Start- oder Rücksprungmarke nicht gefunden, so erfolgt die Ausgabe einer Fehlermeldung.
Soll die Satzfolge mehrfach ausgeführt werden (REPEAT > 1), so wird am Ende der Satzfolge wieder auf der Startmarke aufgesetzt. Nachdem alle Durchläufe abgearbeitet sind, erfolgt der Rücksprung aus der Satzfolge und die Fortsetzung des weiteren Programmablaufes.
Wenn im Befehl nur eine Startmarke angegeben wurde, dann wird nur diese Zeile durchlaufen. Dies entspricht dem Aufruf mit zwei gleichen Sprungmarken.
Der Aufruf L SEQUENCE kann selbst innerhalb der durch die Sprungmarken definierten Satzfolge liegen. Beim erneuten Einlesen des gleichen Aufrufs sind zwei Reaktionen möglich:
Ohne ENDTAG wird der erneute Aufruf ignoriert und die Satzfolge bis zur Rücksprungmarke ausgeführt.
Mit ENDTAG ist L SEQUENCE als gültiges Sequenzende markiert und die Satzfolge wird beendet.
Programmierbeispiel

Aufruf von Satzfolgen (L SEQUENCE)
Satzfolge zwischen 2 Sprungmarken 1 mal wiederholen:
...
N20 [STARTLBL] ... ;Startmarke
...
N50 [ENDLBL] ... ;Rücksprungmarke
...
N80 L SEQUENCE [[STARTLBL] [ENDLBL]] ;oder..
N80 L SEQUENCE [[STARTLBL] [ENDLBL] REPEAT=1]
...
Satzfolge zwischen 2 Sprungmarken mehrfach wiederholen:
...
N20 [STARTLBL] ... ;Startmarke
...
N50 [ENDLBL] ... ;Rücksprungmarke
...
N80 L SEQUENCE [[STARTLBL] [ENDLBL] REPEAT=4]
...
Satzfolge zwischen 2 Sprungmarken. Geklammerter eigener Sequenzaufruf wird bei Ausführen der Satzfolge ignoriert, da ENDTAG nicht gesetzt ist:
...
N20 [STARTLBL] ... ;Startmarke
...
N40 L SEQUENCE [[STARTLBL] [ENDLBL]]
...
N80 [ENDLBL]... ;Rücksprungmarke
...
Satzfolge zwischen 2 Sprungmarken. Geklammerter eigener Sequenzaufruf ist zuerst gefundenes Ende der Satzfolge, da ENDTAG gesetzt ist:
...
N20 [STARTLBL]... ;Startmarke
...
N40 L SEQUENCE [[STARTLBL] [ENDLBL] ENDTAG]
...
N80 [ENDLBL] ... ;Rücksprungmarke
...
Satzfolge zwischen 2 Sprungmarken mit ENDTAG. ENDTAG nicht relevant, da Rücksprungmarke vor Sequenzaufruf liegt:
...
N20 [STARTLBL]... ;Startmarke
...
N50 [ENDLBL] ... ;Rücksprungmarke
...
N80 L SEQUENCE [[STARTLBL] [ENDLBL] REPEAT=4 ENDTAG]
...
Einzelnen NC-Satz mehrfach wiederholen:
...
N20 [STARTLBL] ... ;Startmarke
...
N80 L SEQUENCE [[STARTLBL] REPEAT=4] ;oder..
N80 L SEQUENCE [[STARTLBL] [STARTLBL] REPEAT=4]
...
Satzfolge zwischen 1 Sprungmarke und ENDTAG:
...
N20 [STARTLBL] ... ;Startmarke
...
N80 L SEQUENCE [[STARTLBL] ENDTAG]
...
Satzfolge zwischen 2 Sprungmarken mehrfach wiederholen. Sequenzaufruf liegt vor der Satzfolge:
...
N80 L SEQUENCE [[STARTLBL] [ENDLBL] REPEAT=4]
...
N100 [STARTLBL] ... ;Startmarke
...
N150 [ENDLBL] ... ;Rücksprungmarke
Geschachtelter mehrfacher Aufruf von Satzfolgen zwischen Sprungmarken:
...
N40 L SEQUENCE [[STARTLBL1] [ENDLBL1] REPEAT=2] ;Sequenzaufruf 1
...
N60 [STARTLBL1] ... ;Startmarke 1
...
N90 [STARTLBL2] ... ;Startmarke 2
...
N120 [ENDLBL2] ... ;Rücksprungmarke 2
...
N130 L SEQUENCE [[STARTLBL2] [ENDLBL2] REPEAT=4] ;Sequenzaufruf 2
...
N150 [ENDLBL1]... ;Rücksprungmarke 1
...
Satzfolge zwischen 2 Sprungmarken in einem globalen Unterprogramm mehrfach wiederholen:
...
N20 ...
...
N80 L SEQUENCE [NAME="glob_1.nc" [SUP1] [EUP1] REPEAT=4]
...
Geschachtelter mehrfacher Aufruf von Satzfolgen im aktuellen Programm und einem globalen Unterprogramm zwischen Sprungmarken:
...
N20 L SEQUENCE [[STARTLBL] [ENDLBL] REPEAT=2] ;Sequenzaufruf 1
...
N60 [STARTLBL] ... ;Startmarke 1
...
N80 L SEQUENCE [NAME="glob_1.nc" [SUP1] [EUP1] REPEAT=3] ;Sequenzaufruf 2
...
N150 [ENDLBL]... ;Rücksprungmarke 1
...