Merkwürdiges Verhalten nach Interrupt Stop

  • Hallo zusammen,


    folgende Situation bei Sack-Palettieranlage, KRC2, KR180-2PA:


    Die erste Lage Säcke wird mit einer festen Ablagehöhe palettiert, für alle weiteren Lagen (>=2) wird die Ablagehöhe über ein Sensor am Robotergreifer detektiert. Beim Ablagevorgang wird die Abwärtsbewegung bei Erreichen der Sackoberseite (von darunterliegender Lage) gestoppt (über Interrupt).


    Nun folgendes Problem: Bei der Aufwärtsfahrt nach dem Sackablegen fährt der Roboter bei der ersten Lage mit der programmierten Geschwindigkeit. Ab der 2. Lage ist die Geschwindigkeit/Beschleunigung der Aufwärtsfahrt deutlich reduziert. (Ich verliere ca. 1-1,5sec.). Die Geschw./Beschl. ist immer dann reduziert, wenn die vorangegangene Abwärtsbewegung (Sackablegen) durch den Interrupt gestoppt wurde. Wird ohne Interrupt immer auf feste Ablagehöhen gefahren, fährt der Roboter die nachfolgende Aufwärtsbewegung wie programmiert mit vorgegebener Geschw./Beschl..
    :nocheck:
    - Die Routine für die Aufwärtsfahrt ist für alle Lagen die selbe!
    - Dieses Verhalten ist am echten Roboter als auch bei OfficeLite zu beobachten.


    Was hat der Interrupt Stop mit meiner nachfolgenden Bewegung zur tun???


    Hat jemand ähnliche Erfahrung schon gemacht?


    Gruß HarryH



    (Ich hatte das Problem schon mal in diesem Forum gepostet "Geschwindigkeit beim Bahnfahren #2". Jedoch wusste ich zu dem Zeitpunkt noch nicht was der Auslöser
    für dieses Verhalten war.)

  • Schritt für Schritt zum Roboterprofi!
  • poste bitte mal den teil von anfang abwärtsfahrt bis ende aufwärtsfahrt und den interrupt


    MfG
    Dennis

    MfG <br />Dennis Keipp<br /><br />Geiz macht Krank... Qualität ist Geil!

  • Habe den Quelltext ein bischen abgespeckt. Das Verhalten ist aber immer noch wie beschrieben.
    ----------------------------------------------------------------------------------------------


    DEF PalletStation(nStationNo)
    DECL INT nStationNo


    ;[..] --> Hier fehlt das Sackaufnehmen


    ; Interrupt Höhenabtastung Sackstapel
    INTERRUPT DECL 10 WHEN diScan1==TRUE DO HeightScan()
    INTERRUPT DECL 11 WHEN diScan2==TRUE DO HeightScan()


    mvPalPos(nStationNo) ; Zur Palettierposition
    WAIT SEC 0
    GripperOpen() ; Sackgreifer auf


    INTERRUPT OFF 10 ; Interrupt Höhenabtastung Sackstapel
    INTERRUPT OFF 11


    mvBFPalPos(nStationNo) ; Zur Vorposition (nach Sackablegen)
    ;[..]
    END




    GLOBAL DEF HeightScan() ; Interrupt-Routine
    INTERRUPT OFF 10
    INTERRUPT OFF 11
    BRAKE F
    RESUME
    END




    GLOBAL DEF mvPalPos (nStationNo:IN) ; Zur Palettierposition
    DECL INT nStationNo
    DECL E6POS pPalPos

    $BASE=BASE_DATA[nStationNo]
    BAS (#VEL_PTP, 50.0)
    BAS (#VEL_CP, 2.0)
    $APO.CDIS=20


    PTP pPreStationS[nStationNo] C_PTP
    LIN pPrePalPosS[nStationNo] C_DIS


    IF nLayerS[nStationNo]>=2 THEN ; Wenn Lage>=2 ....
    INTERRUPT ON 10 ; Höhenabtastung 1
    INTERRUPT ON 11 ; Höhenabtastung 2
    BAS (#VEL_CP, 0.8 )
    pPalPos = pPalPosS[nStationNo]
    pPalPos.z = pPalPos.z - 2*nProduct[nBagType,3]
    LIN pPalPos


    ELSE ; Wenn Lage=1 ....
    BAS (#VEL_CP, 1.5)
    LIN pPalPosS[nStationNo]
    ENDIF


    WAIT SEC 0
    END




    GLOBAL DEF mvBFPalPos (nStationNo:IN) ; Nach Sackablage zur Sicherheithöhe
    DECL INT nStationNo
     
    $BASE=BASE_DATA[nStationNo]
    BAS (#VEL_CP, 2.0)
    BAS (#ACC_CP, 100.0)


    LIN pPreStationS[nStationNo]
    END

  • Es liegt am RESUME!
    Wenn ich das RESUME aus der Interruptroutine rausnehme, dann stoppt der Roboter kurz (BREAK F) und fährt dann weiter zur Endposition. (Für den realen Anfwendungsfall nicht möglich). Aber die darauffolgende Aufwärtsbewegung ist so wie sie programmiert wurde.


    Mache ich da was mit dem RESUME falsch? :hilfe:


    Kann noch jemand was dazu sagen?


  • Es liegt am RESUME!
    Wenn ich das RESUME aus der Interruptroutine rausnehme, dann stoppt der Roboter kurz (BREAK F) und fährt dann weiter zur Endposition. (Für den realen Anfwendungsfall nicht möglich). Aber die darauffolgende Aufwärtsbewegung ist so wie sie programmiert wurde.


    Nach einem RESUME springt das Programm in den Programmteil zurück, indem der Interrupt deklariert wurde. In deinem Fall also in 'DEF PalletStation'!
    Im UP 'mvPalPos' wird der Interrupt vor der Position 'pPalpos' eingeschaltet - deklariert wird er aber in 'PalletStation'. Wenn während der Fahrt zum Punkt 'pPalPos' der Interrupt ausgelöst wurde, springt der Programmzeiger in die Interruptroutine, wo die aktuelle Bewegung mit BREAK F abgebrochen wird. Das Resume läßt den Programmzeiger zurückspringen in 'PalletStation' und wird NACH der Zeile: mvBFPalPos(nStationNo) ; Zur Vorposition (nach Sackablegen) - fortgesetzt.


    Hoffe, das hilft weiter. Etwas mehr Code wäre interessant....

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • Zitat


    Das Resume läßt den Programmzeiger zurückspringen in 'PalletStation' und wird NACH der Zeile: mvBFPalPos(nStationNo) ; Zur Vorposition (nach Sackablegen) - fortgesetzt.

    Zitat


    @ IrrerPolterer: Warum "...NACH der Zeile: mvBFPalPos(nStationNo)"? Ich denke mal du meinst "...NACH der Zeile: mvPalPos(nStationNo);" !?


    :frust: Ich verstehe einfach nicht, warum die Routine mvBFPalPos(nStationNo) mit nur dem einen Fahrbefehl nach oben so unterschiedlich ausgeführt wird. Wird die Bewegung vorher mit RESUME abgebrochen ist die Bewegung in mvBFPalPos(nStationNo) deutlich langsamer
    :huh::nocheck:


    Sone Probleme hatte ich bei ABB (S4, S4C, S4C+) nicht!

  • Da der Roboter durch

    Code
    BRAKE F

    die Bahn verlassen kann macht er danach eine Positionierfahrt mit einer festgeschiebenen Geschwindigkeit.


    Lösung 1:

    Code
    BRAKE F

    durch

    Code
    BRAKE

    ersetzen.


    Lösung 2:
    Zuerst mit

    Code
    PTP $AXIS_ACT

    auf die aktuelle Position positionieren.



    mfg notime

    Kontrolle ist eine Illusion, denn niemand weiss was als nächstes passiert.

    Einmal editiert, zuletzt von notime ()


  • @ IrrerPolterer: Warum "...NACH der Zeile: mvBFPalPos(nStationNo)"? Ich denke mal du meinst "...NACH der Zeile: mvPalPos(nStationNo);" !?


    Stimmt natürlich - klingt alles so gleich... ;)


    Zitat


    Sone Probleme hatte ich bei ABB (S4, S4C, S4C+) nicht!


    Nicht immer gleich auf den Hersteller schimpfen... :bawling:


    Versuch erstmal den Brake F durch einen einfachen Brake zu ersetzen.


    Ein ähnlich merkwürdiges Verahltgen hatte ich auch schon mal. Ich kann's mir zwar nicht erklären, aber versuch mal die BAS(...) Befehle durch:
    $Vel.cp=2.0
    $acc.cp=2.0


    oder so zu ersetzen. Wie gesagt kann's nicht erklären, aber bei mir hat's so funktioniert. :kopfkratz:

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

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