Achswinkel 6 der Zielposition mit Variable abgleichen

  • Hallo zusammen,


    ich habe folgendes Problem:

    Es geht um die korrekte rotatorische Ausrichtung eines zylindrischen Werkstückes nach einer Durchgangsbohrung.

    Bei einer Position wird durch eine vorherige Berechnung eine Verdrehung auf A aufgerechnet. Das funktioniert auch hervorragend, bis manchmal (scheinbar völlig zufällig) ein merkwürdiger Wert errechnet wird (wobei der bisher immmer -34.xxx war) der die Achse 6 in den Softwareendschalter treibt. Ausgangsposition ist die Achse 6 bei -28Grad während der Winkel A 0.00 beträgt. Darauf wird dann der vorher berechnete Winkel aufgerechnet. Man hat also in jede Richtung mehr als genug Rotation übrig um das Werkstück mehr als 180 Grad zu drehen.


    Ich hätte nun gerne mit einem Interrupt die Situation abgefangen in der die Zielposition bei >345Grad nicht mehr angefahren wird. (oder was immer funktioniert, falls jemand Vorschläge hat)


    Meine Versuche bisher waren:

    in der sub.sps (USER PLC):

    position_aktuell = $POS_ACT


    in dem besagten Programm dann:


    INTERRUPT DECL 4 WHEN position_aktuell.A6 >= abbruchwinkel (wenn es eine Positionsvariable war: abbruchwinkel.A6) DO winkel_ueberschritten()

    wobei position_aktuell als E6POS und abbruchwinkel in verschiedenen Verusuchen als REAL, als INT, als E6AXIS mit {A1-A5 0.00, A6 -345} und als E6POS Variable deklariert waren.

    Die Variablen gingen aber nie zusammen. Laut Panel Syntaxcheck gehörten die alle nicht zum Typ der E6POS.


    Ich habe als nächstes dann versucht $AXIS_FOR (in der Doku gefunden) mit E6AXIS Variablen abzugleichen. Hat aber ebenfalls nicht funktioniert. Ich hatte den Befehl position_aktuell=$AXIS_FOR vor den eigentlichen Bewegungsbefehl und eine IF Abfrage gesetzt. Da ergibt $AXIS_FOR aber keine nutzbaren Werte.



    Falls bis hierhin jemand durch meinen Kauderwelsch durchgeblickt hat, kann mir bitte jemand einen Tipp geben?

    Ich bin etwas ratlos und würde ungern einfach die Holzhammermethode ( IF (Winkel < -34 AND > -35) THEN Winkel=Winkel +1) anwenden

    um den (scheinbar kritischen) Winkel -34Grad zu übergehen.


    Gruß

    :S

  • Schritt für Schritt zum Roboterprofi!
  • Über die Inverse - Funktion lassen sich die Achswerte für die Zielposition im Vorlauf ermitteln. Das wäre eine Alternative zu dem Interrupt. Bei einer Verletzung der SW-Endschalter wird ein entsprechender Fehlerstatus ausgegeben.

  • Wie bereits im englischsprachig Forum erklärt gibt es einen Unterschied zwischen ACT.A6 und Winkel A.

    Wird der berechnete Winkel auf Winkel A (Rotation um Z-Achse) aufgerechnet ?

    Wäre endlos drehende A6 eine Lösung?

  • Ausgangsposition ist die Achse 6 bei -28Grad während der Winkel A 0.00 beträgt. Darauf wird dann der vorher berechnete Winkel aufgerechnet. Man hat also in jede Richtung mehr als genug Rotation übrig um das Werkstück mehr als 180 Grad zu drehen.

    zulässige Winkelbereiche:

    A: +/- 180.0 Grad

    B: +/- 90.0 Grad

    C: +/- 180.0 Grad

  • E6POS deutet ja darauf hin, dass Du Status und Turn mit übergibst. Bist Du da PTP unterwegs oder LIN? Falls PTP, bist Du sicher, dass der Achsbegrenzungsfehler explizit A6 erwähnt? (Ich weiss, ist eine vordergründig dumme Frage, aber tatsächlich kann es vorkommen, dass der Robbi versucht, A1 hintenrum zu drehen, das im Vorfeld schon aufgibt, und man sieht in der Fehlermeldung den Wald vor lauter Bäumen nicht....)


    Generell hab ich bei sowas auch immer eineWhile-Schleife eingebaut (While winkel > 180 do winkel=winkel - 360 und andersrum auch dahinter), um die Angabe Modulo 1 Umdrehungsbereich zu bekommen.


    Bei E6Pos gibt es kein A6, sondern nur A als Bestandteil einer Orientierung, A ist REAL.


    An Deiner Stelle würde ich die Vorposition als POS oder E6POS anfahren bzw. derart sicherstellen, dass die Armkonfiguration stimmt, und dann nur noch mit FRAMES arbeiten. Den aufgeschlagenen Winkel (evtl. nach obig beschriebener Normierung, Schlauchpakete etc. beachten) dann in einen eigenen Frame werfen (korrwinkelframe=$NULLFRAME; korrwinkelframe.a=korrekturwinkel) und per Doppelpunkt an den Zielframe hängen:

    LIN originalposframe:korrwinkelframe (setzt voraus, dass das Greiftool zentrisch ist, aber das muss es auch schon vorher gewesen sein, sonst geht es ja eher nicht.)

  • Abend.

    Ich würde die berechnete Zielposition (E6POS) mit Inverse in eine E6AXIS wandeln. Aus der kannst du dann direkt die A6 ziehen und dann damit dein Vergleich anstellen. Inverse wird auch in der Doku beschrieben.

    Ich nutze diese Funktion zum Beispiel um auf eine Position einen Kartesischen ToolOffset, BaseOffset und AchsOffset drauf zu rechnen. Funktioniert auch recht gut.

    Hoffe das hilft weiter.

  • Link zu Post im englischen Part des Forums:


    Compare joint axis 6 with variable - KUKA Robot Forum - Robotforum - Support and discussion community for industrial robots and cobots (robot-forum.com)


    Da gibt es noch zusätzliche Infos / Programmcode wie.

    Code
    The Position gets calculated with the same variable
    xvp_joch_offset.A = xvp_joch_offset.A - Winkel_Versatz

    Wenn man Achswinkel Achse 6 anschaut: Winkel A 0 Grad => A6 - (Minus) 28 - - (Minus Minus) 34 = + (Plus) 6

    => Würde eine Turnänderung generieren der Achse 6, was das Phänomen beim Anfahren der auch berechneten Vorposition (SPTP) erklären würde.

    Abhilfe könnte schon das Verwenden von FRAME statt E6POS bringen.

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

  • Ich bewege mich mit PTP über die Position, dann mit LIN in ein Sackloch was auch klar Lineares Verfahren benötigt.

    Ich werd mir deine Vorschläge für das nächste Mal aufschreiben wenn ich wieder an dem Roboter bin.

    Danke dafür!

    Aktuell hab ich es halt hintenrum gelöst dass der Roboter bei bestimmten Winkeln nicht mehr fährt sondern den nächsten Takt beginnt. Das Teil wird dann NiO...

    so umgehe ich wenigstens das Problem. Tritt ja nur bei vllt 2% auf.

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