Überschleiffehler

  • Moin zusammen,
    ich habe hier ein Problem mit einer Bewegung, die Anhand einer selbstangelegten Datenstruktur ausgeführt werden soll.
    Roboter: KR120R2500 PRO C4 FLR / V8.3.320/KUKA8.3
    Die Datenstruktur wird von der KSS mit einer errechneten Bahn befüllt und soll im Anschluss abgefahren werden. Die Daten für die Berechnung der Bahn werden von der Leit SPS gesendet.
    Wenn die Bahn berechnet ist, soll der Roboter in der Lage sein, die kompletten Punkte zusammen oder Teilstücke abfahren zu können.
    Leider ist es so, das die Punkte sehr nah aneinander liegen müssen um die Bahn sauber abzubilden. Will ich nun jeden Punkte abfahren, kommt es zu Überschleiffehlern.
    Der Fahrbefehl ist:
    I=iStartpos (z.B: 506)
    FOR I to iZaehler (z.B: 527)
    SLIN xPos[I]
    ENDFOR
    dazugehörige Datenstruktur in der .dat:


    Bewegung[506]={rPos_X 0.0,rPos_Z -87.5220413,rPos_Y -58.3800,rTCP_B -14.9560051,rAchse_E1 -156.295441}
    Bewegung[507]={rPos_X 0.0,rPos_Z -87.9601517,rPos_Y -56.7119980,rTCP_B -14.4776649,rAchse_E1 -157.188248}
    Bewegung[508]={rPos_X 0.0,rPos_Z -88.3834763,rPos_Y -55.0440,rTCP_B -14.0042725,rAchse_E1 -158.085922}
    Bewegung[509]={rPos_X 0.0,rPos_Z -88.7922363,rPos_Y -53.3760,rTCP_B -13.5356035,rAchse_E1 -158.988510}
    Bewegung[510]={rPos_X 0.0,rPos_Z -89.1866379,rPos_Y -51.7080,rTCP_B -13.0714312,rAchse_E1 -159.896}
    Bewegung[511]={rPos_X 0.0,rPos_Z -89.5668564,rPos_Y -50.0400,rTCP_B -12.6115513,rAchse_E1 -160.808395}
    Bewegung[512]={rPos_X 0.0,rPos_Z -89.9330902,rPos_Y -48.3719978,rTCP_B -12.1557541,rAchse_E1 -161.725677}
    Bewegung[513]={rPos_X 0.0,rPos_Z -90.2854843,rPos_Y -46.7040,rTCP_B -11.7038527,rAchse_E1 -162.647812}
    Bewegung[514]={rPos_X 0.0,rPos_Z -90.6242218,rPos_Y -45.0360,rTCP_B -11.2556524,rAchse_E1 -163.574768}
    Bewegung[515]={rPos_X 0.0,rPos_Z -90.9494553,rPos_Y -43.3680,rTCP_B -10.8109732,rAchse_E1 -164.506500}
    Bewegung[516]={rPos_X 0.0,rPos_Z -91.2613144,rPos_Y -41.7000,rTCP_B -10.3696404,rAchse_E1 -165.442932}
    Bewegung[517]={rPos_X 0.0,rPos_Z -91.5599365,rPos_Y -40.0319977,rTCP_B -9.93148518,rAchse_E1 -166.384}
    Bewegung[518]={rPos_X 0.0,rPos_Z -91.8454666,rPos_Y -38.3640,rTCP_B -9.49634361,rAchse_E1 -167.329620}
    Bewegung[519]={rPos_X 0.0,rPos_Z -92.1180115,rPos_Y -36.6960,rTCP_B -9.06405830,rAchse_E1 -168.279709}
    Bewegung[520]={rPos_X 0.0,rPos_Z -92.3776932,rPos_Y -35.0280,rTCP_B -8.63447189,rAchse_E1 -169.234146}
    Bewegung[521]={rPos_X 0.0,rPos_Z -92.6246185,rPos_Y -33.3600,rTCP_B -8.20743752,rAchse_E1 -170.192841}
    Bewegung[522]={rPos_X 0.0,rPos_Z -92.8588943,rPos_Y -31.6920,rTCP_B -7.78280592,rAchse_E1 -171.155640}
    Bewegung[523]={rPos_X 0.0,rPos_Z -93.0806122,rPos_Y -30.0240,rTCP_B -7.36043882,rAchse_E1 -172.122421}
    Bewegung[524]={rPos_X 0.0,rPos_Z -93.2898560,rPos_Y -28.3559990,rTCP_B -6.94019938,rAchse_E1 -173.093048}
    Bewegung[525]={rPos_X 0.0,rPos_Z -93.4867172,rPos_Y -26.6880,rTCP_B -6.52195,rAchse_E1 -174.067352}
    Bewegung[526]={rPos_X 0.0,rPos_Z -93.6712646,rPos_Y -25.0200,rTCP_B -6.10555840,rAchse_E1 -175.045166}
    Bewegung[527]={rPos_X 0.0,rPos_Z -93.8435745,rPos_Y -23.3520,rTCP_B -5.69089842,rAchse_E1 -176.026352}
    Wie kann ich alle Punkte in einer flüssigen Bewegung abfahren, ohne den Fehler zu bekommen. Alle Versuche mit verschleifen sind bisher gescheitert. Aktuell helfe ich mir damit, das ich nur jeden zweiten Punkt abfahre. Das führt aber zu Fehlern in der Qualität der Bahn.


    Gruss
    Pat

  • KUKA Handwerk
    Anzeige
  • Statt überschliffenen SLIN lieber SPL im Spline block verwenden. Meine Erfahrung ist, dass es nie so kurze Punktabstände braucht um die Wunschkontur zu erzeugen. Die überschliffenen LIN waren nur im alten Verfahrbereich notwendig um krumme Kontouren zu erzeugen.


    Willst du unbedingt überschleifen, solltest du aber noch mindestens c_spl an den slin anhängen. Um aufgrund der kurz Satzlängen nicht in Probleme mit dem Vorlauf zu geraten, sollte $Advance am besten auch noch fünf sein.


    Fubini

    Edited once, last by fubini ().

  • hi fubini,
    würde das mit dem SPL in der FOR Schleife klappen? Ich will nicht die ganzen Fahrbefehle die möglich wären abbilden, sondern ziehe mir die Daten aus der Struktur und fahre diese dann wie im letzten Beitrag gezeigt in der FOR Schleife ab.
    Bisher hatte ich noch keine große Berührung mit den "S" Bewegungen. Hier nutze ich es, da ich die Extern Achse binden muss.

  • Falls du meinst eine FOR-Schleife innerhalb eines Splineblocks
    SPLINE
    FOR I =ISTART TO IEND
    XSPL[i]
    ENDFOR
    ENDSPLINE
    geht das nicht. Fundamentale Eigenschaft des Splineblocks ist unter anderem, dass er wie eine einzige Bewegungsanweisung des alten Verfahrbereichs behandelt wird, nur eben mit mehr als einer geteachten Pose, also mit einer Folge von Punkten, die gemeinsam die Kontur definieren. Insbesondere sind daher aber auch keine Kontrollstrukturen (FOR ... ENDFOR, IF ... ELSE, ...) in einem Splineblock möglich und die Blockbewegung wird in einem Rutsch vom Startpunkt des Blocks bis zum letzten Punkt im Block durchgeplant.
    Erst so ist es z.B. möglich bei kurzen Punktabständen auf Geschwindigkeit zu kommen (was bei kurzen überschliffenen Bewegungen des alten Verfahrbereichs immer wieder für Ärger sorgt) und auch keine Vorlaufprobleme zu bekommen, da der Vorlauf im Block keine Rolle spielt. Außerdem muß die Steuerung ja immer in der Lage sein am nächsten geteachten Zielpunkt der Kontur anhalten zu können, wenn der Vorlauf "verhungert". Beim Spline kann der Block aber immer bis zum Ende durchgeplant werden, da die Steuerung eben das Anhalten erst am letzten Punkt im Block vorsehen muß.
    Was meinst du mit "externe Achse binden"? Welches Feature des Splines nutzt du da, dass der alte Verfahrbereich nicht kann?
    Fubini

  • Hey Fubini,
    vergiss was ich zuletzt mit der externen Achse geschrieben habe. Da war ich gedanklich nicht ganz bei der Sache :uglyhammer_2:
    Das eine wie von dir als Beispiel genannte FOR Schleife nicht funktioniert konnte ich der Doku und dem Forum entnehmen.
    Also habe ich eigentlich keine Möglichkeit, Daten aus einem Array mit variablen Anfang und Ende abzufahren?

  • Hallo Pat,


    mit Schleife bleibt erstmal der Weg über überschliffene Einzelsätze mit möglichst großen Überschleifradien in etwa:


    FOR ...
    SLIN XP\[i\] C_SPL
    ENDFOR
    Dann solltest du aber um auf Geschwindigkeit zu kommen möglichst deine Punktliste deutlich ausdünnen. Wie das geht ohne die Bahnqualität zu gefährden ist natürlich nicht trivial.


    Gibt es denn wenigstens eine maxinale Anzahl an Zielpunkten? Dann könntest du natürlich vor einem Splineblock alle tatsächlich verwendeten Punkte mit den gewünschten Punkten befüllen und die nachfolgenden immer auf den letzten tatsächlichen Wert setzen. Also in etwa:


    iMax = 1000;
    I=iStartpos
    FOR I to iStartpos
    SplxPos \[i\] = XP\[iSTartPos+1\]
    ENDFOR


    FOR I to iZaehler
    SplxPos \[i\] = XP\
    ENDFOR


    FOR iZaehler to iMax
    SplxPos \[i\] = XP\[iZaehler-1\]
    ENDFOR


    SPLINE
    SPL SplxPos \[1\]
    ...
    SPL SplxPos \[1000\]
    ENDSPLINE

    Achtung: SPL-Segmente keine SLINs im Block, da sonst zwischen zwei SLINs ein Knick in der Bahn entsteht und der Roboter anhalten muß!


    Das wird dich allerdings etwas Taktzeit kosten, da die Steuerung ja auch die Nullbewegungen innerhalb des Splineblocks verarbeiten muß und damit die Gesamtverfahrzeit steigt.


    Fubini


    Edited once, last by fubini ().

  • moin moin,
    ich denke das der SPLINE Block dann wohl eher nicht der Weg ist, den ich weiter verfolge.
    Eine FOR Schleife habe ich ja aktuell bereits. Werde mich damit noch einmal in einer ruhigen Minute befassen.
    Trotzdem danke allen Mitstreitern! :supi:
    Gruss Pat

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account
Sign up for a new account in our community. It's easy!
Register a new account
Sign in
Already have an account? Sign in here.
Sign in Now