Anwenderkoordinaten bei NX100

  • Hallo zusammen,
    ich habe einen HP20 mit der NX100 Steuerung. Der Roboter ist mit einem Greifersystem ausgerüstet, der TCP ist eingerichtet. Ein einfacher Handlingsjob, Pos1 anfahren, Z nach unten, Werkstück aufnehmen, Z nach oben und auf einer anderen Position ablegen, das funktioniert.
    Nun liegt mein Werkstück 15Grad geneigt (Rx) in einer Kiste. Die Z-Achse muss nun dieser 15 Grad schräge nach unten bzw. nach oben folgen.
    Wie kann das in einem Job realisiert werden?
    Danke für vielen Infos.... ;)

  • ANZEIGE
  • Programmiermodus oder Erweiterter Modus:


    Externes Koordinatensystem auf die Kiste legen. Zu finden unter Roboter -> Anwenderkordinaten - Freies Koordinatensystem UF#(x) mit "Kiste" beschriften, in das Koordinatensystem hinein, Framepunkte ORG(Ursprung)/XX(Pos. X-Richtung und Ebene/XY(Pos. Y-Richtung und Lage) jeweils mit einer Bezugsspitze im/vom Greifer teachen und jew. mit Modify->Enter Punkte schreiben -> Menü bestätigen. Taste Koord bis oben rechts in der Statusleiste Userframe angewählt. Wenn nicht das eben eingerichtete (Nummer im Bild des Frame) U-Frame angewählt -> Shift+Coord -> Frame "x" (Kiste) mit Cursor markieren und ebenfalls mit Shift+Koord wieder aus der Auswahl raus. Jetzt den Roboter manuell in X/Y/Z verfahren und kontrollieren ob das U-Frame zur Ebene der Kiste stimmt. Ansonsten erneut Frame einrichten. Wenn Z+ nach unten fährt liegt XY auf der falschen Seite der ORG->XX-Strecke.


    Positionen der Framepunkte. XY ist nicht richtungsweisend und bestimmt nur noch die Lage, kann also beliebig auf der Ebene platziert werden.
    _____________
    | |
    | XY |
    | Kiste |
    | |
    | |
    |ORG_____XX_|



    Teachen ist nun im U-Frame "x" auf der Ebene möglich. Für Berechnungen mit dem Ursprungspunkt muss dieser in UF#(x) konvertiert werden, nun können Distanzen usw. in dem Frame verrechnet werden falls notwendig.

    Einmal editiert, zuletzt von RacingHell ()

  • Hallo, vielen Dank für deine Antwort.
    Habe es gleich versucht, jedoch klappts nicht so richtig.
    Anwenderkoordinatensystem #1 eingerichtet.
    Der Kopf ist in Rx um 15Grad gedreht wenn die 3 Positionen geteached werden.
    Variablendefinition:
    Variable: 99: X60, Y1325, Z0, Rx15 entspricht ORG
    Variable: 98: X60, Y1325, Z-800, Rx15


    JOB:
    MOVL P099
    CNVRT PX097 PX098 UF#1
    MOVL P097 --> Fährt nach unten, jedoch nicht entlang der 15 Grad Schräge sondern ca 25 Grad.


    Nach dem Ablauf des Jobs steht in 097: USER #1 und einige Werte in X,Y,Z


    Schalte ich auf Anwenderkoordinaten U1 um, fährt Z entlang der 15 Grad Schräge runter.


    Hat jemand noch ein Idee?
    Danke.....

  • Ich weiss nicht was du mit der Pos. P098 machst. Das scheint wenn überhaupt eine alte Position von irgendenem Versuch zu sein die dort noch abgelegt ist und zufällig anfahrbar ist. Du solltest wahrscheinlich CNVRT P097 P099 eintragen.


    Sinnvollste Lösung wäre:
    P099 auf Greifposition teachen (in Pulsdaten),


    im Ablaufprogramm dann:
    CNVRT P098 P099 UF#(1)
    GETE D0xx (3) P098
    ADD D099 xxxxx <---- Hier die Distanz eintragen die in Z über das Teil gefahren werden soll
    (1000 = 1mm)
    SETE P098 (3) D0xx


    Jetzt kannst du die Positionen fahren:
    MOVJ P098...
    MOVL P099...
    .....
    MOVL P098...

  • Hallo,
    vielen Dank für die schnelle Antwort. Das klappt nun einwandfrei!!!! SUPER !!!
    :merci:
    Habe noch eine prinzipielle Frage zu Anwenderkoordinaten:
    Ich stelle den Winkel auf 15 Grad ein und teache die 3 benötigten Positionen.
    Geht das nur über das Teachen? Oder Kann ich die Positionen und Winkel in P Variablen speichern und dann in das Koordinatensystem übertragen?
    Es kann vorkommen, dass beim Kunde der Winkel nicht exakt stimmt und nachgestellt werden muss.
    Und das soll so einfach wie möglich gehen.


    Gruß und Danke.....

  • Das freut mich zu hören :)


    Generell muss beim Teachen des Koordinatensystems der Winkel - also die Werkzeugorientierung NICHT plan zur geteachten Oberfläche sein. Es muss lediglich die gewählte Orientierung (klein x,y,z) für ORG, XX und XY gleich bleiben da der Bezug der geteachten Ebene sich durch die drei Bezugspunkte die man ja ergo ablegt ergibt.


    Korrekturen sind einfach, die werden direkt im Setup des Userframes gemacht. Hierzu einfach (wissentlich in welcher Richtung der Fehler liegt und dem Wissen wieviel man in etwa korrigieren muss) den Punkt (NICHT ORG!) XX und/oder XY abgleichen indem man ihn im Setup anwählt und mit FWD anfährt, den Korrekturwert von Hand verfährt und wieder mit Modify+Enter speichert. Nach jeder Korrektur durch amnuelles Abfahren erneut prüfen, ist im Prinzip ein Annäherungsverfahren.
    Wenn nichts hilft, alle drei Punkte neu teachen -> mit dem Wissen, dass sich alle Positionen die in dem UFrame abgelegt wurden um den Versatz zwischen ORGalt->ORGneu verschieben werden.
    Bsp.:
    Beim Abfahren des Frames ergibt sich ein Fehler in X-Richtung:


    = = tatsächliche Frame-Ebene
    - = abgefahrene Ebene


    ORG======================XX ^
    ------------- Fehlerdistanz und Richtung
    --------------
    -----------XX _____


    Alternativ könnte ich mir vorstellen, dass so eine Korrektur auch über Zahlenwerte machbar ist. Hierzu bitte näher mit dem Befehl MFRAME PXxxx PXxxx PXxxx (make Frame) auseinandersetzen. Wenn es Möglich ist, die drei Positionen aus dem Frame in drei Positionen auszulesen könnte man sie evtl. (wenn nicht schon in UF#(x) ) ins bestehende Frame konvertieren, aus den nötigen Positionen die korrekturrelevante/n Daten in eine Double auslesen, den Korrekturfaktor den der Kunde über eine Double oder Integervariable definiert addieren->Wert zurück in Position, die drei Pos. wieder ins Frame zurückspielen. Hierfür würde ich dann einen "Korrekturjob" basteln den der Kunde nach Korrekturwerteingabe im Teachbetrieb ausführt.


    Generell kannst du dann eben auch jeden der geteachten Punkt nach erfolgreichem einrichten wieder mit FWD anfahren und in eine Pos.variable packen (und dem Bediener Korrektur über die Direkwerte der Positionen überlassen - Vorteil hierran wäre, das Progr. ist nur ein Einzeiler bestehend aus MFRAME. Nur um den Winkel der Ebene zu korrigieren wirst du nicht über div. Winkelfunktionen deren Berechnung du selbst erstellen musst herumkommen.

    Einmal editiert, zuletzt von RacingHell ()

  • Hallo RacingHell,
    vielen Dank für deine ausführlichen Infos.
    Bin gerade dabei das alles so zu programmieren. Erste Versuche sind schon vielversprechend.
    Tschau und bis demnächst...

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