Moin, alles mit Case aufbauen ist aber sehr aufwendig.
Ich würde mir einen eigenen Bewegungsbefehl programmieren.
z.B. SMoveLGO
der Befehl würden dann z.B. so aussehen:
SMoveLGO p510,vSchnell,z10,tGreifer\WObj:=wSchublade,510;
Ich würde so vergehen, das ich die gesuchte Positionnummer in den neuen Bewegungsbefehlen suche.
d.h. bPosSearchRun=TRUE setzen und nPos_Search auf die gesuchte Positionsnummer vorbesetzen.
Danach in der Bewegungsroutine mit den vielen SMoveJG die position suchen.
Der Programmzeiger wird die Befehle durchgehen und die Position vergleichen, ist die nicht identisch wird einfach mit RETURN herausgesprungen, wenn er identisch ist wird an der Position eingerastet
und die Variable bPosSearchRun auf FALSE gesetzt. Jetzt wird das Programm an der Stelle fortgesetzt.
Beispiel:
bPosSearchRun:=TRUE;
nPos_Search:=530;
SMoveLGO p510,vSchnell,z10,tGreifer\WObj:=wSchublade,510;
SMoveLGO p520,vSchnell,z10,tGreifer\WObj:=wSchublade,520;
SMoveLGO p530,vSchnell,z10,tGreifer\WObj:=wSchublade,530;
SMoveLGO p540,vSchnell,z10,tGreifer\WObj:=wSchublade,540;
SMoveLGO p550,vSchnell,z10,tGreifer\WObj:=wSchublade,550;
Bei der Positions Nr. 530 würde das Programm fortgesetzt.
Quelltext:
MODULE ABB_LIB(SYSMODULE,NOVIEW)
PROC SMoveLGO(
robtarget ToPoint,
speeddata speed,
zonedata zone,
INOUT tooldata tool
\INOUT wobjdata WObJ,num ActPos)
IF bPosSearchRun=TRUE AND nPos_Search=ActPos
!Wenn IST-Positionen gleich Soll-Position dann Pos. anfahren
MoveLGO ToPoint,speed,zone,tool\WObj?WObJ,goPosNr\Value:=ActPos
ENDIF
bPosSearchRun:=FALSE;
ELSE
!Wenn IST-Positionen ungleich Soll-Position zurück und dann zur nächsten Pos.
RETURN ;
ENDIF
!
ELSE
! Normale Bewegung ohne bPosSearchRun
MoveLGO ToPoint,speed,zone,tool\WObj?WObJ,goPosNr\Value:=ActPos;
!
ENDIF
BACKWARD
! Backward
MoveLGO ToPoint,speed,zone,tool\WObj?WObJ,goPosNr\Value:=ActPos;
ENDPROC
ENDMODULE
Gruß
Michael