24. April 2019, 00:48:46
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

[gelöst] Überschleiffehler


normal_post Autor Thema: [gelöst] Überschleiffehler  (Gelesen 1195 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

19. September 2018, 10:00:39
Gelesen 1195 mal
Offline

Pat-187


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
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
« Letzte Änderung: 05. Oktober 2018, 06:47:29 von Pat-187 »
  • gefällt mir    Danke

Heute um 00:48:46
Antwort #1

Werbung

Gast

19. September 2018, 10:17:46
Antwort #1
Offline

Viperx


Lässt sich Deine Bahn evtl. als Spline-Block fahren?
Wenn Du in der Schleife Deinen Spline Block füllst und dann als Block abfährst? :denk:
  • gefällt mir    Danke

19. September 2018, 11:58:58
Antwort #2
Offline

fubini


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
« Letzte Änderung: 19. September 2018, 12:03:44 von fubini »
  • gefällt mir    Danke

19. September 2018, 14:43:14
Antwort #3
Offline

Pat-187


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.
  • gefällt mir    Danke

19. September 2018, 15:10:10
Antwort #4
Offline

fubini


Falls du meinst eine FOR-Schleife innerhalb eines Splineblocks
SPLINE
   FOR I =ISTART TO IEND
     XSPL
   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
  • gefällt mir    Danke

Heute um 00:48:46
Antwort #5

Werbung

Gast

04. Oktober 2018, 07:04:15
Antwort #5
Offline

Pat-187


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?
  • gefällt mir    Danke

04. Oktober 2018, 12:27:15
Antwort #6
Offline

fubini


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

« Letzte Änderung: 04. Oktober 2018, 12:37:40 von fubini »
  • gefällt mir    Danke

05. Oktober 2018, 06:31:48
Antwort #7
Offline

Pat-187


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
  • gefällt mir    Danke


Teile per facebook Teile per linkedin Teile per pinterest Teile per reddit Teile per twitter
 

über das Roboterforum

Nutzungsbedingungen Impressum Datenschutzerklärung

Sponsoren des Roboterforums

ROBTEC GmbH