geteachte Punkte verschieben

  • Guten Morgen liebe Robo-Gemeinde, ich habe folgendes Problem: :hilfe:


    Ich habe einen aufwändigen Bewegungsablauf in Bezug zu einem falsch positionierten Werkobjekt geteacht. Das Werkobjekt wurde nun korrigiert was dazu geführt hat, dass nun alle Teachpunkte 70 mm zu tief sitzen.


    Ich möchte gerne bei allen Punkten 70 zur Z-Koordinate addieren, ist das automatisch möglich?


    Es handelt sich bei den Punkten nicht um benannte RobTargets sondern um als * geteachte Punkte. Leider fällt damit eine FOR-Schleife mit GetDataVal(robtarget.trans.z+70) ins Wasser. Wie ich nun feststellen musste funktioniert die RobotStudio-Funktion RobtargetAdjust leider auch nur mit benannten Punkten, nicht aber mit *.


    Die Benutzung von PDispSet verschiebt mir meinen Bewegungsablauf zwar dahin wo ich ihn haben will, dauerhaft ist das für mich aber nicht die Lösung; es soll schon die Koordinate des Teachpunktes geändert werden und auch das Werkobjekt muss da bleiben wo es hingehört.


    Beim KUKA gibt es doch auch die Möglichkeit beliebig viele Teachpunkte um einen beliebigen Wert zu verschieben wobei deren Koordinaten angepasst werden.


    Falls irgendjemand eine komfortable Lösung beim ABB kennt, ich bin für jede Anregung dankbar. Im Moment hoffe ich noch ich sitze nur auf dem Schlauch und es gibt eine einfache Lösung für mein Problem die ich nur nicht sehe. :wallbash:


    Freundlicher Gruß,


    FlashbackXXL

  • ANZEIGE
  • ich habe von ABB ein Tool bekommen, wo man aus * punkten-> RobTargets mit einem Klick umändern kann.
    geht aber nur bei MoveL und MoveJ instruktionen.
    Also bei z.B. ArcL etc geht es nicht.


    ist dein Werkobjekt zu Baseframe in Z verkehrt oder sind deine Punkte zum Werkobjekt in Zverkehrt?

  • eine mögliche lösung die ich Persönlich aber unsauber finde wäre folgendes.


    Beispiel:
    wobj_akt.oframe.trans:=[0,0,70];


    MoveL c1p100, v15, z0, formcutter\WObj:=wobj_akt;
    MoveC c1p120,c1p130, v15, z0, formcutter\WObj:=wobj_akt;
    MoveL c1p160, v15, z2, formcutter\WObj:=wobj_akt;
    MoveC c1p170,c1p180, v15, z2, formcutter\WObj:=wobj_akt;
    MoveL c1p100, v15, z0, formcutter\WObj:=wobj_akt;
    MoveL c1p220, v15, fine, formcutter\WObj:=wobj_akt;


    wobj_akt.oframe.trans:=[0,0,0];

  • Hallo Aleks, danke für die Nachricht.


    So ein Tool wäre super und genau das was ich suche! :genau:


    Mein Werkobjekt auf das sich die Punkte beziehen ist tatsächlich als [[x,y,z,],[0,1,0,0]] definiert, also die +Richtung der Z-Achse ist dem Baseframe entgegengesetzt.


    Kannst du mir dieses Tool vielleicht zukommen lassen, ist dass von der Größe her als E-Mail-Anhang versendbar?



    EDIT: Dein Beispiel hat quasi den gleichen Effekt wie die Benutzung von PDispSet, aber wie du selber schon sagst finde ich es auch unsauber und möchte das ungern so lassen.

  • habe das Programm versucht zu starten, da ich es selber noch nie gebraucht habe und die Datei ist zerstört.


    das Tool heißt Shop Floor Editor.


    das wurde damals für die S4 Steuerung gemacht.


    guck mal ob du da was findest.

  • Wenn Du auf Deinen Positionen im Bereich des Z-Wertes einfach die 70 dazu addierst bei jeder Position.
    Machst Du nur einmal und fertig. Sollte eigentlich nicht so lange dauern, oder?


    Gruß


    Sven

    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!


  • Wenn Du auf Deinen Positionen im Bereich des Z-Wertes einfach die 70 dazu addierst bei jeder Position.
    Machst Du nur einmal und fertig. Sollte eigentlich nicht so lange dauern, oder?


    Gruß


    Sven


    Das ist natürlich richtig, nur bei ein paar hundert Punkten natürlich ärgerlich und ich hatte ähnliche Situationen schon ab und zu mal... Deshalb auch die Frage ob das ganze irgendwie mit Robotstudio o.ä. komfortabel geht. Kann es wirklich sein, dass so eine vermeintlich "einfache" Funktion beim KUKA standardmäßig implementiert ist und beim ABB völlig fehlt?


    Der Tipp von Aleks hat mich bisher nicht weiter gebracht, ich finde diesen Editor nirgends und es scheint sich dabei trotz des hohen Alters um kostenpflichtige Software zu handeln.


    Also wenn noch jemand einen Tipp hat wie das ganze mit RobotStudio o.ä. komfortabel zu bewerkstelligen ist wäre ich nach wie vor dankbar, auch für die Zukunft wäre das Tool/die Funktion nützlich.


  • Mit einem OffLineEditor schon versucht? Module importieren, in Weltkoordinaten alle Punkte um 70mm verschieben, Module exportieren.?


    Kennst du denn einen offline Editor bei dem ich automatisiert oder wenigstens komfortabel die Z-Koordinate von vielen Punkten ändern kann?


    Als offline Editor benutze ich Notepad ++ mit Rapid Syntax Hervorhebung aber ich wüsste nicht wie ich das damit machen könnte.


    Dennoch vielen Dank für die Anregung.


    Gesendet von meinem SM-G900F mit Tapatalk

  • Mit Offline-Editor meinte er FAMOS oder sowas. Damit wärest Du ganz vorne.


    Theoretisch kann das sogar UltraEdit mit dem eingebauten JavaScript, oder ein kleines Python-Programm. Allerdings kann u. U. die Konfiguration ungültig werden, was die Sache nur halb wertvoll macht.
    Ich habe mir für eine ähnliche Situation (Chef baut Anlage, in der alles gleich ist, außer die Position der Roboter in Y) mal ein Ding gebastelt, was ungefähr so funktionierte:
    - Eine Ereignisroutine auf "Schritt" (-Routine "YYY" -Shelf "STEP" -Task "T_ROB1") fragt bei jedem schrittweisen Start einen Ausgang ab, den ich
    - mit dem Keypad umschalten konnte mit einer der vier Tasten
    - und verzweigt dann auf ein PDispSet, wenn man das überhaupt mit einer Persistenten aktiviert


    Dadurch konnte ich dann das Programm schrittweise durchfahren und je nach Stellung des Ausgangs entweder mit oder ohne PDispSet anfahren. (Programmzeiger auf dieselbe Bewegungsanweisung setzen.) Bei mir waren es nur Umsetzpunkte, daher habe ich dann sofort die Bewegung abgebrochen und dann einfach umgeteacht. Man könnte das Ding aber auch so erweitern, dass die Bewegung erst mal nur mit 0% Override ausgeführt wird und man dann sofort umteachen kann, ohne dass sich was bewegt.
    Man muss nur sehr aufpassen, dass man einen umgeteachten Punkt nicht doppelt umteacht, und dass man nicht im falschen Modus sonstwohin fährt.
    -
    Eine Möglichkeit ist es noch, das Programm mit dem falschen Werkobjekt an der richtigen Stelle abzufahren, mit CJointT die Ist-Position draus zu machen (als Jointtarget) und daraus mit dem richtigen Werkobjekt an CalcRobT als Parameter übergeben wieder ein Robtarget zu erzeugen. Man muss dann nur sehen, wie man das hinpfriemelt. Geht sogar ohne Bewegung: Umrechnung Robtarget in Jointtarget mit dem einen WObj, Umrechnung Jointtarget in Robtarget mit dem anderen WObj.


    Vorbereitend dazu kann man sich seine Sternchen-Punkte mit UltraEdit oder Notepad++ o. Ä. und regulären Suchausdrücken in leere Variablen(Konstanten-)Zuweisungen kopieren lassen, dass ist deutlich einfacher als die Javascript-Lösung, macht dem Ungeübten aber sicher auch einen Tag Kopfzerbrechen, insbesondere durch die eckigen Klammern... geht aber.


    Grüße,
    Michael


  • Wow ... Danke, das sind ja gleich mehrere interessante Ansätze... :gutidee:


    Ich muss das erst mal sacken lassen, aber das mit der Event-Routine und dem Robtarget berechnen lassen probiere ich auf jeden Fall aus.


    Aber so oder so erst nochmal :danke: und eine erholsame Nacht !

  • Hallo FlashbackXXL,
    mit Offline Editor meinte ich etwas anderes als Notepad ++... Obwohl, mit z.B. C++ Kenntnissen kann man ein kleines Programmchen schreiben und alle Z Werte suchen und um 70 ändern. Bei so einer Änderung wird wahrscheinlich die alte Konfiguration des Roboters noch passen. ABER, keine 100% Garantie.
    Kinderleicht wäre es, so wie Michael sagte, z.B. mit FAMOS. Schau bei Youtube wie das funktioniert. Oder frage Michael, ob er für dich das als Werbungsgeschenk macht. Vlt. kannst Du damit deinen Chef überzeugen eine FAMOS-Lizenz zu kaufen.


    Grüß


  • Hallo FlashbackXXL,
    mit Offline Editor meinte ich etwas anderes als Notepad ++... Obwohl, mit z.B. C++ Kenntnissen kann man ein kleines Programmchen schreiben und alle Z Werte suchen und um 70 ändern. Bei so einer Änderung wird wahrscheinlich die alte Konfiguration des Roboters noch passen. ABER, keine 100% Garantie.
    Kinderleicht wäre es, so wie Michael sagte, z.B. mit FAMOS. Schau bei Youtube wie das funktioniert. Oder frage Michael, ob er für dich das als Werbungsgeschenk macht. Vlt. kannst Du damit deinen Chef überzeugen eine FAMOS-Lizenz zu kaufen.


    Grüß


    Hallo Bocmok


    danke für die Nachricht. Wie der Zufall so will hat mir gestern noch mein Kollege offenbart, dass er leidenschaftlicher C++ Programmierer ist in seiner Freizeit. Habe ihm meine Aufgabenstellung bereits gestern als Projekt mit nach Hause gegeben, aber das wird wohl keine Lösung auf die Schnelle ... aber vielleicht wird ja ein brauchbares Tool daraus geboren...


    Ich muss gestehen das mir bis gestern Abend FAMOS gar kein Begriff war. Habe mir dann nur mal kurz auf YouTube einen kleinen Überblick geschaffen und muss sagen dass ich auf den ersten Blick beeindruckt bin und auch verstehe warum mit dieser Software mein Problemchen ganz schnell gelöst wäre.


    Aber meinen Chef davon überzeugen, dass sich die Investition in eine neue Software lohnt? Ich traue mir vieles zu aber das nicht. Software macht keine Geräusche wenn man mit dem Finger dagegen klopft. :uglyhammer_2: Dabei kann es sich also um nichts wertvolles handeln ... und an Offline-Programmierung glaubt er sowieso nicht. :-|

  • Wenn Dein Kumpel (der Programmierer) Dir helfen will, dann lass ihn lieber was machen, was alle "*"-Punkte in Variablen umwandelt. Er sollte sich mit Regular Expressions gut auskennen. Im Prinzip geht es darum, diesen

    Code
    (\[\[.*\],\[.*\],\[.*\],\[.*\]\])

    regulären Ausdruck zu finden, am Auftreten mit einem fortlaufend erzeugten Namen zu ersetzen und dann noch eine Liste zu erzeugen, in der jener fortlaufend erzeugte Name in der Form:

    Code
    TASK PERS robtarget (name) := \1;

    rausgeschrieben wird. (Wobei \1 der Platzhalter für die oben gefundene Klammer sei).
    Notfalls lass ihn ein Notepad++-Script schreiben dafür, das wird Dir eher helfen als die einmalige Verschiebung in einer Richtung.


    Grüße,
    Michael


  • Wenn Dein Kumpel (der Programmierer) Dir helfen will, dann lass ihn lieber was machen, was alle "*"-Punkte in Variablen umwandelt. Er sollte sich mit Regular Expressions gut auskennen. Im Prinzip geht es darum, diesen

    Code
    (\[\[.*\],\[.*\],\[.*\],\[.*\]\])

    regulären Ausdruck zu finden, am Auftreten mit einem fortlaufend erzeugten Namen zu ersetzen und dann noch eine Liste zu erzeugen, in der jener fortlaufend erzeugte Name in der Form:

    Code
    TASK PERS robtarget (name) := \1;

    rausgeschrieben wird. (Wobei \1 der Platzhalter für die oben gefundene Klammer sei).
    Notfalls lass ihn ein Notepad++-Script schreiben dafür, das wird Dir eher helfen als die einmalige Verschiebung in einer Richtung.


    Hallo Michael


    Lass mich Dir zunächst für deine ausführlichen Ratschläge und Gedankenansätze danken.


    Ich habe mittlerweile nach deinem Vorbild aus dem letzten Post eine Event-Routine mit dem -shelf "STEP" verknüpft und mir ein virtuelles Signal "voShift" auf Taste 3 am FP gelegt.



    Die Idee dahinter war, jeden Punkt einmal im Einzelschritt verschoben anzufahren, dann einen weiteren Step zu machen und wenn die Meldung "Stop, ...." kommt den Zustimmtaster loszulassen, den noch markierten vorangegangenen Punkt im nicht mehr verschobenen Koordinatensystem zu überspeichern und den nächsten Punkt wieder im verschobenen Koordinatensystem anzufahren usw. usw.
    ...und was soll ich sagen... ...das funktioniert super.... ...für genau einen Punkt, und sobald ich auf "Position korrigieren" drücke verliere ich ohne vorherige Warnung den PZ und muss mich wieder von vorne durch das Programm wurschteln. :wallbash: :wallbash: :wallbash:


    Ich hätte noch ne Idee wie ich das Problem mit dem Zusammenspiel von Event-Routine und SemiTask lösen könnte, aber leider hat mein Chef bei diesem Robi die Option Hintergrundtask "vergessen" mitzubestellen (obwohl wir Programmierer bei uns intern in dem Punkt einig sind und darauf bestanden haben dass diese Option generell mitbestellt werden muss). Naja, er hat entschieden das es jetzt auch einmal so gehen muss.



    Zu Deinem aktuellen Post:


    Ich habe schon die gleiche Überlegung gehabt (also ob ich nicht besser mal noch alle Teach-Punkte als Variablen anlege). Ob ich das bei dieser Anlage noch umsetze weiß ich noch nicht, aber für die Zukunft stelle ich fest:


    Grundsätzlich habe ich beim ABB immer die Freiheit genossen Teachpunkte nicht deklarieren zu müssen. Ich habe mich dagegen gewehrt RobTargets pauschal anzulegen und fortlaufend zu benennen, habe dies eigentlich nur dann getan wenn ich einen sinnvollen Nutzen darin gesehen habe, z.B. wenn ich mit Offset-Verschiebungen arbeiten wollte. Ich bin nach dieser Geschichte ehrlich gesagt geläutert. Wenn ich dran denke wie einfach und schnell und auf vielfältige Weise ich mir hätte helfen können wenn ich mit deklarierten RobTargets gearbeitet hätte könnt ich gut und gerne mal ein bisschen :wallbash:


    Viele Grüße

  • Hm, ich denke, dass Du zum Umteachen aus der Ereignisroutine auf jeden Fall erst wieder raus sein musst. So wie ich das sehe, ist der Programmzeiger bei Dir noch in der Ereignisroutine, wenn Du den Punkt änderst. Da könnte ich den ABB schon verstehen, wenn er dann pampig wird. Du entziehst der geplanten Bahn ja die Grundlage. Ich würde in der Ereignisroutine irgendwas mit dem Override machen oder mit StopMove/StartMove, aber diese erst vollständig wieder beenden vor "KorrPos".


    Grüße,
    Michael

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

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