Hallo,
bei Deinem Programm solltest Du beachten, dass wenn Du dich in einer Trap Routine befindest, kein weiterer Interrupt ausgeführt wird, bis Du die Trap-Routine wieder verläßt. Aus diesem Grunde funktioniert auch Der Interrupt in Deiner move_2 Routine nicht.
Du musst also Deine Trap-Routine verlassen und wieder zurück in Dein Hauptporogramm springen und von dort die nächste Bewegung starten.
Dies kannst Du am einfachsten über einen Long-Jump mit Hilfe der Fehlerbehandlung erreichen.
Code
VAR errnum ERR_FORCE_OK:=-1;
PROC move_1()
VAR num nMove:=0;
IF ERR_FORCE_OK=-1 BookErrno ERR_FORCE_OK; !Erzeugen der Fehlernummer
IDelete int1;
CONNECT int1 WITH trap1;
ISignalAI ai,AIO_OUTSIDE,100,-100,0,int1;
MoveL Offs(p10,50,0,0),v100,fine,tool; !Wichtig ist hier der Finepunkt, um den Vorlauf des Programmzeigers zu verhindern
IDelete int1;
!Bewegung wurde über Interrupt gestoppt
IF nMove=1 THEN
CONNECT int1 WITH trap1;
ISignalAI ai,AIO_OUTSIDE,100,-100,0,int1;
MoveL Offs(p10,-50,0,0),v100,fine,tool;
ENDIF
IDelete int1;
ERROR (ERR_FORCE_OK) !Adressierung für Long Jump, da ansonsten der Aufruf der Fehlerbahndlung in der TRAP Routine ins leere geht
IF ERRNO = ERR_FORCE_OK THEN
INCR nMove;
TRYNEXT;
ENDIF
ENDPROC
TRAP trap1
StopMove\ Quick;
Clearpath;
Raise ERR_FORCE_OK; !Programmzeiger springt in die Fehlerbehandlung von Move_1
ERROR
RAISE;
ENDTRAP
Alles anzeigen
Probier mal den oben beschrieben Ansatz.
Anhand der numerischen Variablen kannst Du überprüfen ob Deine Bewegung aufgrund der Kraft gestoppt wurde
Gruß
Micky