Hallo,
ich habe folgendes Problem:
ich möchte den Roboter linear in eine Richtung bewegen und auf ein Objekt drücken bis eine Kraft (z.B. 100 N) erreicht ist.
Die Kraft wird am analogen Eingang abgefragt und dann ein Interrupt gestartet. Wichtig dabei ist die zu erreichende Kraft und nicht der zurückgelegte Weg, weil der Weg ist eher unbekannt.
Daraufhin soll der Roboter sofort anhalten und jetzt in die entgegengesetzte Richtung fahren. Diesmal soll der Roboter am Objekt ziehen bis -100 N erreicht ist.
Das Ganze klappt leider nur teilweise. Entweder wird nur einmal die Interrupt-Routine ausgeführt oder wenn ich "ClearPath" weglasse, dann wird die Offset-Verschiebung bis der Weg erreicht ist durchgeführt ohne die Kraft zu berücksichtigen, das heißt das Programm geht zwar in die Interrupt-Routine, fährt aber an der Stelle weiter fort, wo die Interrupt Routine aufgerufen wurde.
Hat jemand eine Lösung wie man das Problem besser bewältigen könnte?
Hier der Programmauschnitt:
PROC move_1()
IDelete int1;
CONNECT int1 WITH trap1;
ISignalAI ai,AIO_OUTSIDE,100,-100,0,int1;
MoveL Offs(p10,50,0,0),z50,tool;
ENDPROC
PROC move_2()
IDelete int2;
CONNECT int2 WITH trap2;
ISignalAI ai,AIO_OUTSIDE,100,-100,0,int2;
MoveL Offs(p10,-50,0,0),z50,tool;
ENDPROC
TRAP trap1
StopMove\ Quick;
Clearpath;
move_2;
ENDTRAP
TRAP trap2
StopMove\ Quick;
Clearpath;
move_1;
ENDTRAP
Alles anzeigen