tm_useraction.src Geschwindigkeiten reduzieren

  • Hallo zuasmmen,


    wir haben bei einem KR240 die Kollisionserkennung aktiviert. Das funktioniert auch relativ gut.
    Nun haben wir aber beim abarbeiten des Kollisionsprogramms ein Problem, die Bewegungsgeschwindigkeit definiert langsam zu schalten.
    Leider finde ich die Ursache dafür nicht.


    Der Code lautet in etwa so:


    TQM_OK=FALSE ;MELDUNG absetzen
    BRAKE


    wait for i_crash_ignore or i_move_up or NOT sTQM_SPSACTIVE ;SPS-Signale sind im ersten Moment FALSE, Vorlaufstop wird ausgelöst


    BAS(#Base,0)
    BAS(#VEL_PTP,5)
    BAS(#ACC_PTP,50)
    BAS(#VEL_CP,0.1)
    BAS(#ACC_CP, 50)
    $APO.CVEL=10
    $APO.CPTP=10


    wait sec 0
    LIN_REL {z 250}




    Die $APO.CVEL reduziert sich auf 10% aber die $APO_C.CVEL bleibt auf 100% stehen. Somit ist die Geschwindigkeit bei LIN_REL auch 100%
    Wenn dann das Kollisionsprogramm beendet wurde und der normale Programmablauf bearbeitet wird, wird die Geschwindigkeit übernommen. Alle weiteren Bewegungen werden dann mit 10% gefahren.


    Kann mir jemend sagen, wie ich die Geschwindigkeit im tm_useraction.src reduziert bekomme?


    Vielen Dank schon mal.

    Einmal editiert, zuletzt von SJX ()

  • Schritt für Schritt zum Roboterprofi!

  • wir haben bei einem KR240 die Kollisionserkennung aktiviert.


    Wichtiger bei solchen Problemen ist die Steuerungsversion / Softwareversion



    Der Code lautet in etwa so:


    Bitte, Bitte: Immer Originalcode posten.



    Die $APO.CVEL reduziert sich auf 10% aber die $APO_C.CVEL bleibt auf 100% stehen. Somit ist die Geschwindigkeit bei LIN_REL auch 100%


    $APO.CVEL ist das Verhalten des Überschleifens Geschwindigkeitsbezogen.
    $VEL.CP wäre in Deinem Falle zuständig für das Geschwindigkeitsverhalten für die LIN_REL.
    Das Programm TM_USERACTION.SRC läuft standardmässig als Interruptprogramm ab. Vorlauf gibt's da keinen.



    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • Steuerungsversion ist 8.3.39


    Danke für den Hinweis.Werde es mit der $Vel_CP testen
    Dachte dass dies bereits mit BAS(#VEL_CP,0.1) funktionieren müsste.



    Sorry, habe den Code Übersichtshalber einfach eingekürtzt. Gelobe Besserung!

  • hab jetzt den Test mit $Vel_CP=0.1 probiert.
    Leider fährt der Roboter nicht wie gewünscht langsam sondern mit der letzt geschrieben Geschwindigkeit
    Hat jemand noch eine Idee woran das liegen könnte?


    Hier der ganze Code:


    DEF TM_USERACTION( )

    ;===================
    ; Stop robot
    ;===================

    ;Kollision wurde erkannt
    tMOVE_up=false
    tCrash_ignore=false

    TQM_OK=FALSE ;MELDUNG absetzen
    BRAKE
    REPEAT
    o_Crash_identified = TRUE

    wait for i_crash_ignore or i_move_up or NOT sTQM_SPSACTIVE

    IF i_crash_Ignore THEN
    tCrash_ignore=TRUE
    ENDIF
    IF i_move_up Then
    tMOVE_up=TRUE

    ;FOLD (+) Parameter setzen
    BAS(#Base,0)
    BAS(#VEL_PTP,5)
    BAS(#ACC_PTP,50)
    BAS(#VEL_CP,0.1)
    BAS(#ACC_CP, 50)
    $APO.CVEL=10
    $APO.CPTP=10
    $VEL.CP=0.1
    ;ENDFOLD

    wait sec 0
    LIN_REL {z 250}
    wait sec 0
    o_above_Crash=TRUE
    wait for i_Ack_above_Crash
    o_above_Crash=FALSE
    ;ENDWHILE

    wait for NOT i_move_up AND NOT i_crash_ignore

    ENDIF

    IF tCrash_ignore OR o_above_Crash THEN
    o_Crash_identified=FALSE
    tMOVE_up=FALSE
    ENDIF

    UNTIL tCrash_ignore OR NOT sTQM_SPSACTIVE OR NOT tMOVE_up OR o_Crash_identified



    wait for (NOT i_crash_ignore AND NOT i_move_up) or NOT sTQM_SPSACTIVE

    wait sec 0
    o_above_Crash=FALSE
    o_Crash_identified = FALSE

    TQM_OK=TRUE ;MELDUNG löschen


    PTP $POS_ACT


    END

  • Moin,
    programmiertechnisch bin ich nicht besonders fit. Daher weiss ich nicht, ob ich richtig liege.
    Nach dem Setzen der Verfahrparameter kommt sofort der LIN_REL. Ich meine, dass die Parameter erst mit einer PTP , LIN, CIRC .. Bewegung aktiviert werden. Schiebe doch einfach mal ein PTP $POS_ACT zwischen Parametrierung und LIN_REL ein. Dabei bewegt sich der Robbie nicht...

    never touch a running system

  • Hallo Mike,


    Problematik Deines Problems besteht eben wie schon erwähnt, dass TM_USERACTION.src als Interruptprogramm ausgeführt wird.



    Gut erklärt findest Du diese Problematik mit Workaround in einem Post von Fubini:


    https://www.robot-forum.com/ro…el-cp-speed-in-interrupt/


    When Workaround mit $OV_PRO, würde ich vor Änderung alten Wert speichern und nach Lin_Rel direkt wieder zurückwechseln auf alten Wert.


    Workaround von Nosochek über Resume zu handeln wäre meine bevorzugte Variante.
    In Deinem Fall aber fast unmöglich umzusetzen (gegebene Struktur aus InlineFormular)


    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

    Einmal editiert, zuletzt von SJX ()

  • :danke: SJX


    Jetzt wird mir einiges klar. Dieser Beitrag erklärt die Siuation recht gut.


    $OV_PRO könnte funktionieren, wenn nicht die SPS zyklisch den Sollwert vorgeben würde. Könnt ich aber ggf. in dem Interrupt blockieren


    Würde es mit einem Inlineformular Punkt funktionieren?
    Dann könnt ich ja den Punkt vorab um Z 250 manipulieren.
    In etwa so:


    xPosUp=$Pos_Int:{x 0.0,y 0.0,z 250.0,a 0.0,b 0.0,c 0.0}


    Inlineformular: LIN xPosUP


    oder ist das Verhalten identisch?


  • $OV_PRO könnte funktionieren, wenn nicht die SPS zyklisch den Sollwert vorgeben würde. Könnt ich aber ggf. in dem Interrupt blockieren


    Alternativ zu $OV_PRO sollte es auch mit $RED_VEL funktionieren. ($OV_PRO x $RED_VEL = $OV_ROB)



    Versteh nicht ganz, was Du meinst, aber:
    Inlineformulare funktionieren in Interruptprogrammen wie TM_USER_Action.src nicht.
    Und eben, es hat zu tun, dass Interruptprogramme die Hauptlaufbewegungsparameter verwenden.


    Müsste also Ablauf Abbrechen mit Resume, landet dann auf Deklarationshöhe des Interrupts zurück im Hauptlauf und da müsste man dann direkt den Rückzug ausführen.
    Dies lässt aber so das Inlineformular gar nicht zu. Interruptdeklarationen wurden Global deklariert, was mit Resume zusammen nicht erlaubt ist. Auch ist die Verschachtelung dazu Unmöglich, den Überblick zu behalten. Hab sie Dir vereinfacht mal attached.


    Also wenn Du's einfach machen willst, mit $OV_PRO oder $RED_VEL.


    Gruss SJX

  • danke für die ausführliche Erklärung.
    Du hast recht.


    Ich werde das jetzt so machen, dass bei aktiver TM_USERACTION.src die $OV_PRO von der SPS nicht mehr überschrieben werden kann. Am Ende des Kollisionsprogramms schalte ich die Geschwindigkeitssteuerung über die SPS wieder ein


    Dankeschön!

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