Die $GOTO-Anweisung
Diese Funktionalität bietet neben der Unterprogrammtechnik oder der Verwendung von Steuersatzanweisungen ($IF, $FOR...) eine weitere Möglichkeit der Verzweigung in andere Programmteile. Durch das Setzen von Sprungmarken (s.g. Labeln) im NC-Programm kann durch Aufruf des GOTO-Befehls an jede Stelle des NC-Programmes gesprungen werden.
Es gibt zwei Möglichkeiten der Programmierung von Sprunganweisungen:
Expression Label:
N <expr> : Definition
$GOTO N <expr> | $GOTO N<expr>: Sprungaufruf
String Label:
[ <string> ] Definition
$GOTO [ <string> ] Sprungaufruf
Eigenschaften:
- Der Aufruf $GOTO kann im NC-Programm vor oder nach der Labeldefinition erfolgen. Die Suche nach einem Label wird vorwärts und rückwärts im Programm durchgeführt.
- Labelaufruf und Definition müssen immer in der gleichen Programmebene stattfinden (programmlokal). Programmsprünge zwischen Hauptprogramm und einem Unter-programm sowie Sprünge zwischen Unterprogrammen sind nicht zulässig (Abbildung 10-1).
- In Haupt-/ und Unterprogrammen können gleiche Label definiert werden.
- Es kann von mehreren Stellen im NC-Programm zum gleichen Label gesprungen werden.
- Eine $IF-Abfrage kann in der gleichen NC-Zeile mit einem $GOTO kombiniert werden. In diesem Fall darf kein zugehöriges $ELSE - $ENDIF programmiert werden.
- Vor und nach dem $GOTO-Befehl dürfen andere NC-Befehle in der gleichen Zeile programmiert werden. Der Sprung erfolgt jedoch erst als letzte Aktion im NC-Satz.
- Sprünge von außen in beliebige Ebenen eines $IF-$ELSE-$ENDIF- Steuersatz-blockes sowie innerhalb und zwischen diesen Ebenen sind möglich. Dann jedoch gilt diese Einsprungebene als gültig (d.h. es wird angenommen, dass die Bedingung wahr ist; siehe Programmierbeispiel).
- Sprünge innerhalb von $WHILE, $FOR, $DO, $REPEAT sind nicht erlaubt.
- Das vollständige Verlassen eines beliebigen Steuersatzkonstruktes mit $GOTO aus jeder Ebene heraus ist immer erlaubt.
- Label in Kommentaren (#COMMENT BEGIN, #COMMENT END) werden nicht erkannt.
- Bei String-Label werden Groß- und Kleinbuchstaben nicht unterschieden.
- Die maximale Anzahl von Expressionlabeln [6]-6.41 und Stringlabeln [6]-6.42 sowie die Stringlabellänge [6]-6.43 sind fest vorgegeben.
Programmierbeispiel
%goto
N05 P1=1
N06 P2=1
N10 G74 X1 Y2 Z3
N11 X0 Y0 Z0
N15 $IF P1==1 $GOTO N40: -> Sprung von außen nach N40 in einen
Steuerblock
N20 X10
N25 Y10
N30 $IF P1==2
N35 X20
N40: $IF P2==1
N45 X30
N50: Y30 $GOTO N65: -> Sprung nach N65 zwischen Steuersatzebenen
(IF-ELSE)
N55 $ELSE
N60 Y40
N65: X40
N70 $ENDIF
N80 Z99
N999 M30

Programmierbeispiel
N10 G1 XY
N20: X100 (Label Definition N20 J
$IF V.L.dummy_1 <100 $GOTO N20(Sprung zu Label N20 (or N20 J )
$IF V.L.dummy_1 >200
$GOTO [LABEL_1](Sprung zu Label [LABEL_1])
Y20
$ENDIF
[LABEL_1] X0 (Label Definition [LABEL_1])
N30 A0
$FOR V.P.my_var = 0, 4, 1
$IF V.L.dummy_2 <200 $GOTO [CONTINUE](Sprung zu Label [CONTINUE])
$SWITCH V.P.my_var
$CASE 0
V.P.AXE_X=V.P.GROUP[1].position[V.P.my_var]
$BREAK
$CASE 1
V.P.AXE_Y=V.P.GROUP[1].position[V.P.my_var]
$BREAK
$CASE 2
V.P.AXE_Z=V.P.GROUP[1].position[V.P.my_var]
$BREAK
$CASE 3
V.P.AXE_A=V.P.GROUP[1].position[V.P.my_var]
$DEFAULT
$ENDSWITCH
$ENDFOR
[CONTINUE] (Label Definition [CONTINUE])
N1000 ...
...
Weiterführende Informationen