interrupt verlassen

  • Hallo,


    ich komme mit folgendem Problem nicht weiter.
    Der Robi ( IRB 2400 L mit IRC 5 ) soll von pA nach pB und anschließend nach pC fahren.
    zwischen pA und pB wird ein Interrupt gestartet und nach pB mit IDelete ... beendet.


    Also:


    MoveL pA ...


    Connect .....
    ISignalDI


    MoveL pB .....


    IDelete....
    MoveL pC


    In der Interruptroutine soll die Bewerung gestoppt werden, die aktuelle Position gespeichert und dnn mit einem Offs verschoben werden. Anschliessend soll die Bewegung wiedr gestartet werden und der Robi soll dann von der mit Offs verschoene Position nach punkt pC fahren und im Programm normal weitermachen.
    Das Problem ist, dass er befor er nach pC fährt erst die fahrt nach pB beenden will.
    Hat vielleicht jemand eine Idee, wie ich aus dem Interrupt herrauskomme, ohne dass er nach pB weiterfährt. ???

  • ANZEIGE
  • Hi,
    schau mal im referenzhanbuch nach einem befehl der den Pfad löscht. Bin leider nicht an meinem normalen Rechner. Es gibt aber einen Befehl in dem der aktuell eingelesene Pfad gelöscht werden kann und somit eine aktuell begonnene Bewegung wirklich unterbrochen werden kann.


    Gruß


    Sven

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Hallo mischwarz,


    den Befehl, den Sven meint heißt RestoPath.
    Ich denke, wenn du den Ablauf so gestalten willst, wie du es beschreibst, könnten noch andere Probleme auftauchen. Ich denke hier einfach mal nur an den Vorlauf des Programmzeigers. Naja, probiere es aus.


    MFG
    CSH

  • sowas in der Art sollte gehen
    pTemp := CRobT();
    MoveL pTemp, v200, fine, tGreifer;



    das ist aus der aktuellen Doku
    ************************************
    VAR intnum intno1;
    ...
    CONNECT intno1 WITH go_to_home_pos;
    ISignalDI di1,1,intno1;
    TRAP go_to_home_pos
    VAR robtarget p10;
    StopMove;
    StorePath;
    p10:=CRobT(\Tool:=tool1 \WObj:=wobj0);
    MoveL home,v500,fine,tool1;
    WaitDI di1,0;
    Move L p10,v500,fine,tool1;
    RestoPath;
    StartMove;
    ENDTRAP
    Wenn der Eingang di1 auf 1 gesetzt ist, wird ein Interrupt aktiviert, der die Interrupt-Routine
    go_to_home_pos aufruft. Die aktuelle Bewegung wird gestoppt und der Roboter bewegt
    sich stattdessen an die Position home. Wenn di1 auf 0 gesetzt wird, kehrt der Roboter an die
    Position zurück, an der der Interrupt aufgetreten ist, und bewegt sich weiter auf der
    programmierten Bahn.

  • Hallo zusammen,
    vielen Dank für Eure Hilfe.
    Es ist richtg das daß Ereignis über ein Ini am Greifer ausgelöst wird, weil in der Dicke unterschiedliche Teile in eine Vorrichtung eingelegt werden sollen. Sobald der Ini auslöst, soll der Robi von dieser Position aus wieder zurückfahren, um das Teil in einer Tasche der Vorrichtung einzulegen.
    Letztendlich habe ich es mit SearchL rogrammiert. Dennoch habe ich meine Probleme mit der Interruptversion.

  • Hallo mischwarz,


    versuche mal den Interrupt in deiner Initializierung zu starten und nicht so, wie du es am Anfang beschrieben hast.
    Ich gebe zu bedenken, daß wir in der IRC5 einen Vorlauf des Programmzeigers von 50 Zeilen haben. Also,daß was man real sieht im Ablauf ist nicht der Stand vom Programm, daß ist ganz woanders.
    Ich denke mal, dann geht es, weil der Innterrupt schon scharf ist.


    MFG
    CSH

  • Hallo mischwarz!


    Vielleicht hilft es, nach pB einen Stoppunkt (fine) einzufügen?
    Interrupt -> zum Stoppunkt fahren -> mit Offset-Werten weiter zu Punkt C.


    Dann sollte der Robi eigentlich nicht mehr zu pB fahren.


    Buschmann

  • Hallo mischwarz,


    die Verwendung eines Interrupts, so wie Du ihn einsetzt, ist für Dein Problem eher ungeeignet, da die momentane Abarbeitung kurz unterbrochen wird und nach beendigen des Interrupts genau dort wieder fortgesetzt wird. Wird eine Bewegung nicht mit Stopmove angehalten, so fährt der Roboter in jedem Fall bis zum programmierten Endpunkt.


    Wird die Bahn mit Clearpath verworfen und Du setzt das Programm fort ohne eine neue Bewegungsinstruktion aufzurufen, bleibt der Roboter stehen, da keine berechnete Bahn mehr vorhanden ist.


    Die generelle Lösung für das Problem ist eigentlich der Einsatz der SearchL-Instruktion.


    Du könntest Dir aber eine eigene Suchinstruktion in Verbindung mit dem Interrupt schreiben, die Bewegung muss aber auf jedem Fall mit einem finepunkt enden (wegen Rechnervorlauf !!).


    Du verlässt Deine Interruptroutine mittels Fehlerbehandlung und Longjump und gelangst so in die Fehlerbehandlung deiner Suchinstruktion und kannst von dort Dein Programm fortsetzen.


    Deine Suchinstruktion könnte in der Grundstruktur zum Beispiel wie folgt aussehen:



    Gruß
    Micky

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

    Einmal editiert, zuletzt von Micky ()

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden