TOOL bezogen auf WORLD an SPS sende

  • Hallo Leute, ich hätte hier ein größeres Problem.


    An dem Roboter ist ein Kopf angeschraubt der um ein Bauteil rotieren muss, d.h. der Kopf muss sich >350 Grad drehen, daher auch den Kopf nicht genau auf 0 Grad angeschraubt.


    Mein Problem ist nun, dass ich das eingemessene TOOL gerne einmal ausrichten will und dann sage: Dies ist bezogen auf WORLD in B und C = 0 Grad.


    Diesen Wert will ich dann gerne in der SPS.sub an die SPS weiterleten.

    Das Programm dazu sieht so aus:


    ; Sollposition des TCP bezogen auf das BASE-Koordinatensystem
    TOOLINBASE=$POS_ACT_MES


    ; Sollposition des Werkstücks (eingemessene BASE) bezogen auf das WORLD-Koordinatensystem
    BASEINWORLD=$BASE_C


    ; TOOL Koordinaten in Bezug auf das WORLD Koordinatensystem setzen
    TOOLINWORLD=BASEINWORLD:TOOLINBASE


    ;Um eine Nachkommastelle für die SPS zu erzeugen
    VariableB=TOOLINWORLD.B*10
    VariableC=TOOLINWORLD.C*10


    Die Berechunng klappt auch soweit, aber ich bekomme es einfach nicht hin, dass ich ich das TOOL einmal genullt bekomme . 6D Methode auch schon zick mal ausprobiert.


    Ziel meines Programm´s ist:


    Während das TOOL sich einmal um das Bauteil dreht hängt dadurch eine Liniearachse in verschiedenen Positionen und muss so beispielsweise auf dem Kopf gedreht mehr Strom bekommen (um auf Nullstellung zu bleiben) als beispielweise wenn diese in der Waage steht.


    Nur wie bekomme ich der SPS korrekt die TOOL Position übertragen, ich habe auch schon mit KUKA Telefoniert, aber das wäre wohl nicht so einfach und die Lösung rein mit der 6D Methode hat nicht funktioniert.


    Wäre super, wenn ihr mit Lösungsvorschlägen helfen könntet.

  • Schritt für Schritt zum Roboterprofi!
  • Hallo Tobias88888,


    ich kann mir deine Applikation aufgrund der Beschreibung nicht vorstellen
    jedoch denke ich dass du die Funktion:


    E6POS INV_POS(E6POS POS_VALUES : IN)


    suchst.
    Schau mal bitte nach den Beiträgen welche diese Funktion benutzen.


    Gruß
    Twister

    Kleinere Wunder werden sofort erledigt... größere nach der Mittagspause...

  • Morgen,


    ja war etwas schlecht erklärt von mir. Diese Funktion habe ich mir schon ein paar mal angeguckt, allerdings muss ich gestehen, dass ich diese noch nicht wirklich verstanden habe. Leider finde ich auch keine generelle Beschreibung von Seiten Kuka´s darüber.


    Noch mal zu einer kurzen vielleicht klareren Beschreibung.


    Der Roboter steht mit seinem Flanch senkrecht zu World X, alle Winkel stehen stehen in der Grundposition natürlich auch nicht auf genau Null, sondern sind eben so ausgerichtet, dass der Kopf in Startposition steht.


    Jetzt soll der Roboter einmal um eine Türe (Beispiel: Haustüre) fahren und dabei seine Masse auftragen, da der Kopf aber immer senkrecht zur Tür bleiben muss, dreht der Kopf sich somit logischerweise einmal um 360 Grad um die Türe herum. Da hier mit einem gleichbleibinden Druck gearbeitet werden muss, ist die "Spritzdüse" auf einer Liniearachse am Kopf befestigt.
    Diese Linieachse brauch wenn sie in derWaage steht natürlich viel weniger Strom um eine gewisse Kraft zu drücken, als wenn diese auf durch das herum drehen auf dem Kopf steht umd somit auch ihr Gewicht von der "Spritzdüse" halten muss.


    Aus diesem Grund, muss ich der SPS live weiterleiten, wie mein TOOL "Spritzdüse" zum Worldkoordinatensystem oder Base Koordinatensystem steht, damit diese dies Achse dem entsprechend ansteuern kann um den Druck gleichbleibend zu halten.


    Hoffe es ist nun klarer?

  • Hallo Tobias88888,


    nun kann ich mir was drunter vorstellen.


    Eine Möglichkeit wäre:
    Ich würde ausgehend vom tool_data[0] (Flanschkoordinatensystem) immer zwei
    virtuelle Punkte im Submitinterpreter mit berechnen in relation zum $World.
    Am besten zwei Punkte im Abstand von 100mm auf deiner Linearachse.
    Dann kannst anhand des Z-Unterschiedes genau sagen wieviel "Schwerkraft" auf deine Linearachse wirkt.
    Der Wertebereich sollte dann zwischen +100mm und -100mm sein.
    Beschleunigungen sind hier aber unberücksichtigt.


    Gruß
    Twister

    Kleinere Wunder werden sofort erledigt... größere nach der Mittagspause...

  • Hallo zusammen,


    das was du gern hättest
    TOOLINWORLD=INV_POS($BASE_C):$POS_ACT_MES


    und zur vollständigkeit flansch in Welt
    TOOL0INWORLD=INV_POS($BASE_C):$POS_ACT_MES:INV_POS($TOOL_C)


    und Flansch in Base
    TOOL0INBASE=$POS_ACT_MES:INV_POS($TOOL_C)



    Gruß Loipe

  • Es ist ein KR 180L an einer KRC4 Steuerung.


    @ Loipe Muss ich vorher noch den Winkel für das TOOL mit der 5 oder 6D Methode anwenden? Oder kann ich einfach den TCP einmessen, dein Programm in die SPS.sub eintippen und fertig?
    Wärst du so nett, mir noch zu erklären, wass dieses Funktion genau macht, damit ich es für zufünftige Projekte vielleicht mal anwenden kann.?


    Palletieren geht leider nicht.


    @ Twister: Hört sich an sich auch gut an die Idee, nur bin ich noch nicht all zu lange dabei und weiß nicht wie man die zwei Punkte dauerhaft miteinander verrechnen kann ohne einen Vorlaufzeigerstopp auszulösen.

    Einmal editiert, zuletzt von Tobias88888 ()

  • Mach dir doch ne Lehre an der du dein werkzeug genau drauf positionieren kannst.
    mess ne base ein die den ursprung und die Roationen deine werkzeuges enspricht.
    dann kannst du auch bei Crash dein Werkzeug wieder hinbringen
    teacht einen punkt in der vorrichtung ab mit tool null in der neuen base
    Tool_data[XYZ]=INV_POS(xPunktInVorichtungsBaseMitTool0)
    dann hast du dein Tool eingemessen.


    INV_POS invertieren einer Pose ist eine meiner liebsten Funktionen einfach mal ausprobieren

    Einmal editiert, zuletzt von Loipe ()

  • Hallo Tobias88888,


    der Loipe hat dir schon die richtigen Funktionen beschrieben.
    (toller Beitrag von Loipe)
    Die brauchst nur noch ein bisschen erweitern.


    Die Funktion:
    TOOL0INWORLD=INV_POS($BASE_C):$POS_ACT_MES:INV_POS($TOOL_C)
    ist der Schlüssel.
    Jetzt kennst die Position von Tool_data[0] in $World.
    Nun brauchst du noch zwei (TCP)-Punkte in Richtung deiner Linearachsenbewegungsrichtung.
    Beispiel wenn die Linearachse in X-Richtung von Tool_data[0] (Flanschkoordinatensystem) angebracht wäre:
    P1 = {X 50,Y 0,Z 100,A 0,B 0,C 0}
    P2 = {X -50,Y 0,Z 100,A 0,B 0,C 0}
    (wichtig sind nur X,Y und Z)


    P3= TOOL0INWORLD:P1
    P4= TOOL0INWORLD:P2


    Gravitation = P3.Z - P4.Z


    Die Variable Graviation hat nun den Wertebereich von -100 bis +100 und kann bequem an
    die SPS übergeben werden, welche diese als Zusatzstrom an die Linearachse gibt.


    Ich denke die Berechnungen sind richtig, jedoch nicht getestet, und sollten im Submit ausgeführt werden.


    Gruß
    Twister

    Kleinere Wunder werden sofort erledigt... größere nach der Mittagspause...

    Einmal editiert, zuletzt von Twister ()

  • @ Twister, ja so habe ich das auch verstanden, aber super das du es noch mal erklärt hast. :danke: Mit den TCP Punkten meinst du doch 2 TOOLS einmessen oder? Da diese sich ja sonst nicht mit dem Flanch mitbewegen.



    Ist auf jeden Fall eine saubere und schnell realisierbase Lösung :merci:

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