KRC2 - Ethernet KRL Interface - C_PTP Überschleifen funktioniert nicht

  • Ich hab hier einen KR16 stehen, mit einer alten KRC2 Steuerung. Auf der Steuerung ist KUKA.Ethernet KRL XML Version 1.2 installiert.

    Ich steuere den Roboter mit Hilfe von ROS über ein, für KRC2 angepasstes, EKI Interface.


    Hier ist das angepasste KRL Programm, mit dem ich einige Probleme habe:


    Das erste Problem, welches mir aufgefallen ist:

    Generell alle EKX_Get Funktionen haben einen Flag, der das Ausleseverhalten des Buffers festlegt. In der Dokumentation steht folgendes:

    Zitat

    INTEGER
    Determines whether the next value or the current is to be read from the buffer
    INT=0: the next value is read (First In First Out)
    INT=1: the current value is read (Last In First Out)

    Das entspricht nicht der Realität. Flag=0 resultiert in LIFO und Flag=1 in FIFO obwohl es in der Dokumentation genau andersrum steht. Entweder ist die Dokumentation falsch oder ich habe eine fehlerhafte EthernetKrl Version oder ich habe etwas falsch verstanden. Mit Flag=1 ist das Problem jetzt soweit aber behoben.


    Jetzt das eigentliche Hauptproblem: Überschleifen mit C_PTP funktioniert nicht.

    Ich verschicke immer maximal 5 neue Wegpunkte an die Robotersteuerung (das überprüfe ich mit Hilfe der id_count Variable). Der Roboter bleibt jedoch bei jedem einzelnen Punkt stehen, bevor er zum nächsten weiterfährt.


    Ich bin kein Kuka-Programmierer und weiß ab hier einfach nicht mehr weiter. Kann sich jemand bitte das KRL-Programm anschauen und mir sagen, wieso das Überschleifen ignoriert bzw. abgebrochen wird?

  • Schritt für Schritt zum Roboterprofi!
  • LOOP

    elements_read = eki_hw_iface_get(joint_pos_tgt)

    ptp joint_pos_tgt c_ptp

    ENDLOOP

    Ich kenn jetzt wiederum ethernet KRL nicht gut. Hast du mal versucht 5 Positionen vor der Loop einzulesen und dann in der Loop die 5 Positionen am Stück auszüfhren. Also ohne eki_hw_iface_get() dazwischen.

    Wenn es dann geht würde ich vermuten das Problem liegt an einem Vorlaufstop den diese Funktion produziert. Ob und welche aufrufe von Etherner KRL Vorlaufstopp triggern sollte aber auch in der Doku stehen.


    Außerdem würde ich prüfen ob du wirklich jedesmal von eki_hw_iface_get() eine geänderte Position bekommst. Eventuell schickst du ja x mal die gleiche und erst x+1 ist anders.


    Fubini

    Einmal editiert, zuletzt von fubini ()

  • Ich hab gerade einige Sachen ausprobiert und es scheint, dass das eigentliche Problem nicht am Überschleifen liegt, sondern an dem FIFO/LIFO Flag.


    Wenn das Auslesen auf FIFO steht (laut Doku INT=0) und ich immer nur die selbe Position (0, -90, 90, 0, 0, 0) verschicke, dann oszilliert der Roboter zwischen meiner Position und der Null Position (0, 0, 0, 0, 0, 0). Dabei funktioniert das Überschleifen!


    Leider verstehe ich nicht, wieso der Roboter die Null Position überhaupt anfährt.

  • Ergänzung:

    Ich hab gewartet bis der Roboter mit der Oszillation fertig war und an seiner eigentlichen Zielposition angekommen ist. Das ist erst nach ca. 10-15 "Oszillationen" passiert.


    Dann habe ich dem Roboter drei Wegpunkte einer Trajektorie geschickt(Startpunkt, Mittelpunkt, Endpunkt). Der Roboter ist direkt zum Endpunkt gefahren, ist dort aber nicht angekommen, weil er den Mittelpunkt überschliffen hat und direkt zum Startpunkt zurückgekommen ist. Dieser Prozess wurde mit dem (angeblichen) FIFO Flag durchgeführt (INT=0). Das sieht aber nicht nach einem FIFO sondern eindeutig nach einem LIFO Verhalten aus.


    Ich verstehe nicht was ich hier falsch mache, das ist alles sehr verwirrend.

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