Scara: Rotation während X/Y-Bewegung

  • Guten Morgen all zusammen,


    wie schon mal hier erwähnt, bin ich selber KEIN Roboterprogrammierer, kenne mich da nur schlecht aus und bin eigentlich in der Siemens-Welt (Step7, TIA, ...) zu Hause. Zur Zeit bin ich aber an einem Projekt dran, wo eine Siemens SPS über ProfiNet mit einem ABB-Roboter (in diesem Fall ein Scara) kommuniziert. Von unserem Dienstleister der die Programmierung übernimmt, höre ich aber oft, daß einige Roboterbewegungen die ich benötige nicht möglich sind. Daher meine Bitte/Frage an euch, ist die nachfolgende Funktion möglich ist und wenn ja, wie.

    Folgender Ablauf ist notwendig:

    Der Scara holt von der Position A mein Objekt ab, fährt dann mit der Z-Achse komplett hoch und bekommt dann von der SPS das Kommando dieses Objekt auf Position B oder C abzulegen. Bei dieser Fahrt bleibt die Z-Achse immer oben. Das abgeholte Werkstück ist quadratisch und hat nur auf einer Seite ein Prüfzeichen. Dieses Prüfzeichen muss schnellstmöglich überprüft werden. Dafür ist am Scara selbt ein Sensor installiert, der die Prüfung sehr schnell (<100 ms) machen kann. Jetzt der Knackpunkt. Diese Kontrolle sollte schnellstmöglich und während der Fahrt von Position A zu B/C erfolgen. Dafür wird, sobalt die Z-Achse oben ist und die Rotationsachse von Scara auf 0 Grad steht, der Trigger am Sensor ausgelöst der die Prüfung vornimmt. Ist das Ergebniss der Prüfung IO, kann das Werkstück so wie es ist (mit der Rotation 0 Grad) abgelegt werden. Ist aber das Ergebniss nIO, muss (noch währedn der XY-Fahrt ) die Rotations-Achse um 90 Grad drehen und es wird einene neue Prüfung ausgelöst. Dieser Vorgang kann bis zu 3 mal (90, 180 und 270 Grad) notwendig sein.

    Wichtig ist, dass diese Prüfung während der Fahrt von Position A nach B oder C erfolgt, d,h, also auch die Rotation muss individuel während der Fahr erfolgen.


    Gibt es für diese Anforderung eine Lösung, bzw. ist das mit einem ABB Scara-Roboter möglich???

  • Moin,

    das wird so nicht funktionieren.

    Aus folgendem Grund: Sämtliche Achsen des Roboter gehören zu einen Gesamtsystem und sind für die Interpolation notwendig. Dies würde nur funktionieren wenn die Z_Achse eine externe Achse wäre und du diese als "Independent Axis" definiert könntest. Nur dann hättest du die Möglichkeit diese durch ein Hintergrundtask parallel während der Bewegung des Grundsystems zu bewegen.

    Einen Prüfung durchzuführen während der Roboter sich bewegt ist kein Problem. Aber eine geänderte Z-Achse während der Bewegung des Robotersystems macht dir dieses Thema unmöglich in einer normalen Roboterkonfiguration.


    Gruß

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Guten Morgen zusammen,


    darf ich mich da mal einmischen, auch wenn ich nicht der ABB-Experte bin ?


    Ich sehe das etwas anders als Sven und würde nicht sagen, dass da eine unabhängige Achse gebraucht wird. Es scheint sich eher um die Überlagerung von zwei Bewegungen zu handeln, einmal die Fahrt von A nach B und parallel eine Rotation der Z-Achse.


    Mit einem Stäubli Scara könnte ich mir so eine Bewegung vorstellen: Man berechnet zu Fuss den Weg von A nach B und fährt ihn dann in einem synchronen Task mit dem alter()-Befehl, also in jedem 4ms Schritt ein Stückchen des Weges. Die zusätzliche Drehung der Z-Achse kann man dann einfach in jedem Schritt aufaddieren.


    Wahrscheinlich ginge das bei ABB nur über eine externe Berechnung der Bahn, die dann mit der External Guided Motion Option übertragen wird. Mit einem C++ Task auf der SPS oder einem externen Rechner.


    Grüße


    Urmel

  • Ja denke auch das man da etwas hin bekommt aber nicht in der laufenden Bewegung, lasse mich da aber gern auf neuen Input ein Urmel .


    Wäre schön wenn RoboDummie uns da dann die Lösung offenbart. ;-)


    Gruß

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • lasse mich da aber gern auf neuen Input ein

    Naja, wir machen in unseren Anlagen hauptsächlich Anwendungen mit diesen Echtzeitschnittstellen zur Roboterbewegung. Da ist die Denkweise etwas anders, mehr wie bei Computeranimationen.


    Der Grundansatz ist nicht den Interpolator der Roboterprogrammiersprache für diese spezielle Bewegung zu verwenden, sondern die Bewegung im Interpolationstakt selber vorzugeben.


    Den Stäubli habe ich erwähnt, weil man das da sehr schön ohne externe Hardware hinkriegen könnte. Tasks kennt ihr ja von ABB. Ein synchroner Task beim Stäubli bedeutet, dass er einmal in jedem Interpolationstakt des Roboters ausgeführt wird. Und der alter()-Befehl ist ein Bewegungsbefehl, der immer genau einen Takt dauert.


    Bei normalem Pick & Place wäre es natürlich Verschwendung von Arbeitszeit, so seine Bewegungen zu machen. Man muss den Weg von A nach B in kleine Päckchen packen, inklusive Anfahren und Bremsen. Der Vorteil dabei ist aber, wenn man jetzt unterwegs noch was machen muss, z.B. diese Drehbewegung, von der man erst unterwegs erfährt, wie sie aussieht, dann kann man einfach die zum Drehen benötigten Bewegungsanteile auf die 4ms Schritte aufaddieren. Man hat dann eine flüssige Bewegung, die erst während sie ausgeführt wird vollständig festgelegt wird.


    In Stäublis Val3 geht das, wie gesagt, auch mit Bordmitteln direkt im Roboterprogramm. Andere wie Mitsubishi oder der Kuka LBR haben da eine Netzwerkschnittstelle für ein externes C++ Programm. Sowas hat ABB ja auch, in Form der Option [689-1] Externally Guided Motion. Würde also vermutlich gehen.


    Ob das für den Fragesteller realisierbar ist, kann ich nicht beurteilen.

  • Das hätte ja den Vorteil gegen über einer Independent Axis das der TCP und die Bahnplanung aufrecht erhalten bleibt, oder?


    Klingt auf jedenfall interessant. Danke dir Urmel !

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Ja, der Roboter bleibt ganz wie er ist.


    Man erzeugt sich quasi seinen eigenen Bewegungsbefehl. Der ist dann wahrscheinlich auch schneller, weil man nicht zwischendrin die Bewegung stoppt.


    Allerdings ist die Programmierung aufwendiger. Insoweit ist das eine Abwägungsfrage ...

  • Hallo, vielen Dank für die schnellen Infos.

    aber so sollte das schon gehen

    Bei NIO Ergebnis => Interrupt=> Stop Move => CRobT => neue Bewegung => Start Move

    Ich es sollte am besten ohne Zwischenstoppp gehen.


    Wäre schön wenn RoboDummie uns da dann die Lösung offenbart. ;-)

    Würde ich gerne machen, wenn ich eine Lösung hätte.


    Ist es bei ABB nicht möglich während der XY-Bewegung (Z bleibt konstant oben) über ein oder mehrere Interups die Roatation der Z-Achse seperat auszuführen?


    Ein zusätzliches/externes C++ Programm (Option [689-1] Externally Guided Motion) wäre wahrscheinlich viel zu komplex, für mich und auch für das Team was zur Zeit die Roboterprogrammierung erledigt.



    Sind den grundsätzlich folgende Bewegungen bei ABB möglich?

    A.)

    Startpunkt A: x=0; y=0; z=0; Rotation=0°

    Endpunkt B: x=1000; y=300; z=0; Rotation=90°


    Der Scara startet seine Bewegung von dem Startpunkt A mit dem Ziel B. Jetzt wird, so weit ich es richtig verstanden habe, die Bahnbewegung so berechnet, dass alle Bewegungen (XYZ) gleichzeitig am Ziel B ihre Bewegung beenden. Ist es den möglich das die Rotation nicht erst am Ziel beendet wird, sondern so schnell wie möglich ausgeführt wird? Z.B. schon nach einem Drittel der XYZ-Bewegung,


    B.)

    Bei Start der Bewegung von Punkt A zu Punkt B möchte ich während der Fahr und ohne Stopp das Ziel verändern, z.B. x=800; y=200.

    Ist das während der Bewegung möglich?

  • Moin,

    A und B, soweit mir bekannt "Nein".

    Beide von dir beschriebenen Varianten werden nicht ohne eine Stopp auskommen der euch 0.8 - 1.2 sec Zeit kosten wird.


    Wie gesagt, ohne tief ins eigentliche System einzugreifen wird das mit der Standardvariante nicht gehen.


    Was sagt eigentlich ABB dazu? Habt ihr einfach mal die Hotline angerufen und euch einmal Rat geholt. Eventuell gehen wir ja von falschen Annahmen aus und ABB hat bei Scara da eine Lösung?


    Gruß

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Ok, Vielen Dank für den Input.


    Was sagt eigentlich ABB dazu? Habt ihr einfach mal die Hotline angerufen und euch einmal Rat geholt.


    Ich würde auch empfehlen, sich mit ABB in Verbindung zu setzen.

    Um ehrlich zu sein, war der Support/Hotline von ABB da sehr enttäuschend. Die haben selbst bei Problem wie dem Byte-Tausch bei einem Integer keine Lösung gehabt und geschrieben, dass das nicht geht. Dabei habe ich hier erfahren (Integer Werte via Profinet), dass es einen sehr einfachen und schnellen Weg gibt dies zu tun.

  • Ohh das tut mir leid, da die Thematik mit dem High/Low Byte eigentlich Basics sein sollten.:/

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Ohh das tut mir leid, da die Thematik mit dem High/Low Byte eigentlich Basics sein sollten.:/

    Ja, das sehe ich ebenso, aber man wollte uns lieber einen Serviceeinsatz verkaufen.

    Hier die Mail von ABB:


    Quote

    Sehr geehrter Herr ...,

    wie telefonisch besprochen, gibt es seitens ABB keine ausgearbeitete Lösung für Ihr Problem. Allerdings besteht die Möglichkeit einer Inbetriebnahmeunterstützung durch einen unserer Techniker.

    Hierzu benötigen wir eine ausgefüllte Serviceanforderungen und zur Vorbereitung ein aktuelles Backup.

    Und wir reden hier NUR von dem Theme High/Low-Byte-Tausch.



    Aber trotzdem vielen Dank für eure Unterstützung.

    Evtl. kann mir ja jemand was dazu (Simulation/Darstellung des Roboters in der HMI) sagen.

    Edited 2 times, last by RoboDummie ().