# 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.. [ N.. ] [ REPEAT=.. ] [ 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.. | Nummer des ersten auszuführenden Satzes (Startnummer, Beginn der Satzfolge)
N.. | Nummer des letzten auszuführenden Satzes (Rücksprungnummer, Ende der Satzfolge). Optional, sind beide Satznummern identisch oder ist nur die Startnummer angegeben, so wird nur dieser Satz ausgeführt.
REPEAT=.. | 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 mit Satznummern (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

...

Alternativ kann eine Satzfolge auch über Sprungmarken programmiert werden:

Syntax von L SEQUENCE bei Verwendung von Sprungmarken (Stringlabel):
L SEQUENCE [ [ NAME=<string> ] [<START>] [ [<END>] ] [ REPEAT=.. ] [ 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 oder ist nur die Startmarke angegeben, so wird nur dieser Satz ausgeführt.
REPEAT=.. | 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 mit Sprungmarken (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

...

Das Ende einer Satzfolge erfolgt bei der Programmierung mit Satznummern durch Angabe der Rücksprungnummer, bei der Programmierung mit Sprungmarken durch Angabe der Endemarke oder im Aufruf L SEQUENCE selbst durch Angabe des Schlüsselwortes ENDTAG.

Alternativ kann eine Satzfolge auch durch Angabe des NC-Befehls #SEQUENCE END beendet werden.

Syntax der Standardendemarke:
#SEQUENCE END

## Hinweis

Zusammen mit #SEQUENCE END dürfen im gleichen NC-Satz mit Ausnahme einer Satznummer keine weiteren NC-Befehle programmiert sein.

Im Aufruf L SEQUENCE ist dann die spezifische Angabe einer Endemarke nicht erforderlich. Es muss nur die Startmarke und die Zusatzinformation gesetzt sein, dass diese Startmarke keinen einzelnen NC-Satz, sondern den Beginn einer Satzfolge adressiert. Programmname, Anzahl der Wiederholungen und ENDTAG sind ebenfalls optional zulässig.

Syntax von L SEQUENCE mit Satznummer oder Sprungmarke in Kombination mit #SEQUENCE END:
L SEQUENCE [ [ NAME=<string> ] N.. | [<START>] BEGIN [ REPEAT=.. ] [ 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.. | Nummer des ersten auszuführenden Satzes (Beginn der Satzfolge)
[<START>] | Startmarke des ersten auszuführenden Satzes (Beginn der Satzfolge)
BEGIN | Startnummer oder Startmarke adressiert den Beginn einer Satzfolge. #SEQUENCE END oder ENDTAG markieren das Sequenzende.
REPEAT=.. | 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 #SEQUENCE END gilt das zuerst gefundene Sequenzende.

## Programmierbeispiel

Aufruf von Satzfolgen (L SEQUENCE) mit Endemarke #SEQUENCE END

Satzfolge zwischen Startnummer und Endemarke 1 mal ausführen:

...

N20 ... ;Startnummer

...

N50 #SEQUENCE END ;Endemarke

...

N80 L SEQUENCE [N20 BEGIN]

...

Satzfolge zwischen Startmarke und Endemarke mehrfach wiederholen:

...

N20 [STARTLBL]... ;Startmarke

...

N50 #SEQUENCE END ;Endemarke

...

N80 L SEQUENCE [[STARTLBL] BEGIN REPEAT=4]

...

Satzfolge zwischen Startmarke und Endemarke 1 mal ausführen. Sequenzaufruf liegt vor der Satzfolge:

...

N80 L SEQUENCE [[STARTLBL] BEGIN]

...

N100 [STARTLBL] ... ;Startmarke

...

N150 #SEQUENCE END ;Endemarke

Satzfolge zwischen Startnummer und Endemarke in einem globalen Unterprogramm mehrfach wiederholen:

...

N80 L SEQUENCE [NAME="glob_1.nc" N50 BEGIN REPEAT=4]

...

Satzfolge zwischen Startmarke und Endemarke. Geklammerter eigener Sequenzaufruf ist zuerst gefundenes Ende der Satzfolge, da ENDTAG gesetzt ist:

...

N20 [STARTLBL]... ;Startmarke

...

N40 L SEQUENCE [[STARTLBL] BEGIN ENDTAG]

...

N80 #SEQUENCE END ;Endemarke

...