Ich bevorzuge für diesen Anwendungsfall eine andere Strategie:
Im Programm setze ich vor jeden Verfahrpunkt folgenden Befehl:
Trigger When Distance=0 Delay=0 DO Grst_pos=#P2
PTP P2
Trigger When Distance=0 Delay=0 DO Grst_pos=#P3
PTP P3
usw.
Wichtig ist, daß Du hierfür in der $config.dat eine ENUM-Variable deklarierst. Ein Beispiel:
ENUM Grst_pos P1,P2,P3,.........,HOME,GrdSt_Erreicht
Außerdem müssen die Positionen P1,P2 usw. global deklariert sein. Hierfür würde ich eine globale Datenliste empfehlen, die folgendermaßen aussehen müßte:
DEFDAT Globaledatenliste
Global E6POS XP1={x.....,.,.,.,.,.}
DECL GLOBAL FDAT FP1 = {TOOL_NO........}
.
.
.
ENDDAT
So kannst Du ständig im laufenden Programm zurückspeichern, auf welchem Weg der Roboter gerade ist. Anhand dessen kannst Du Dir dann ein Grundstellungsprogramm erstellen, das folgendermaßen aussieht.
Repeat
Switch Grst_Pos
Case #P1
PTP P2
Grst_Pos=#P2
Case #P2
PTP P3
Grst_Pos=#P3
Case #Home
PTP Home
Grst_Pos=GrdSt_Erreicht
Default
Halt
Endswitch
Until Grst_pos == #GrdSt_Erreicht
Auf diese Weise umgehst Du das häßliche GOTO (Ich teile da die Meinung von WolfHenk in vollem Umfang) und hast noch eine elegante Lösung erreicht. Ineinanderlaufende Schleifen haben auch den Vorteil, daß sie sehr sehr übersichtlich sind und Du auch nach Jahren noch mit einem Blick verstehst, was Du da getrieben hast.
Gruß Robodoc