Geschwindigkeit externe Achse

  • Hallo Allerseits.


    Ich habe folgendes Problem:


    Eine externe Achse (nicht geometrisch gekoppelt) soll eine bestimmte Geschwindigkeit fahren. Konkret ist eine Schneidbewegung des Bauteils durch einen Plasmaschneider zu realisieren.


    Es ist nun so, das mit einer Lin-Bewegung jegliche Geschwindigkeitsvorgabe von der Achse ignoriert wird, sie fährt immer maximal schnell. PTP Bewegungen lassen sich zumindest über den Override anpassen.


    Wenn bei einer anderen Bewegung diese Achse mitgefahren wird, kommt diese Achse zeitgleich an. Der Roboter soll aber während der Schneidbewegung stehen bleiben.


    Probiert habe ich schon folgendes:


    Vel.CP = abc
    LIN {E2 xyz} oder LIN_REL{E2 xyz}
    - :down:


    E6Pos Testpos
    Vel.CP = abc
    TestPos = $POS_ACT
    TestPos.E2 =xyz
    Lin TestPos
    - :down:



    Die Kuka Hotline weiss keinen Rat, und ich erst recht nicht. Habe mir jetzt erstmal so beholfen, die Achsgeschwindigkeit in den Maschinendaten auf meinen maximal benötigten Wert einzustellen und dann den benötigten Wert mittels Overrideänderung im Programm anzupassen. Das geht zwar, aber so habe ich natürlich nur eine eingeschränkte Genauigkeit.

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


    wenn deine ext Achse nicht gekoppelt ist, schiebst Du eigentlich auch den TCP nicht.
    Dein vel.cp ist aber TCP geschwindigkeit.


    Wenn Sie unabhängig ist, sollte man die Gechwindigkeit regeln können über
    $vel_extax[x].


    Besser wäre aber eine Kopplung.


    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • Hallo,
    nur das ich es richtig verstehe!?


    Du möchtest die Geschwindigkeit einer externen Achse Variabel vorgeben können, unabhängig von der Roboter-Geschwindigkeit?


    INT VEL
    $VEL_EXTAX[1]=VEL ; Externe Achse E1


    Danach wird die Achse mit dieser Vorgabe, in Bezug auf deinen Override prozentual gefahren.

  • Danke schonmal für die schnellen Antworten.
    Aber jetzt nochmal ein bischen genauer, ich hoffe das klärt eure Nachfragen:


    Die externe Achse ist eine (eigentlich) eine Rundachse. Diese Achse ist aber als Linearachse parameteriert, weil diese Achse mehrere Umdrehungen fahren muss. Hat der Mensch von KUKA mir so empfohlen, weil eine Rundachse immer den kürzesten Weg zum positionieren wählt und eine Drehung von mehr als 360 nicht drin ist. Ist aber soweit kein Problem, da jetzt 1mm 1° entspricht.


    Das mit $Vel_EXTAX hab ich schon gelesen, das ist aber doch eine prozentuale Vorgabe :huh:


    An Marka:
    Ist die Angabe von $Vel_EXTAX dann prozentual auf die schon prozentuale Angabe $OV_PRO? Dann wären ja schon 100*100 Möglichkeiten möglich, das würde dann auf jeden Fall reichen. Ich werds nach dem Frühstück mal testen :)


    An SJX: -> Besser wäre aber eine Kopplung.
    Da meine Achse ja eigentlich eine Rundachse ist, die als Linearachse deklariert wurde, wäre dann trotzdem eine Kopplung denkbar? Ausserdem kann diese Rundachse noch rauf und runtergefahren werden. Diese Position kann aber nicht in den Roboter eingelesen werden.


    Oder gibt es eine Möglichkeit eine Rundachse auch mehr als 360° fahren zu lassen? Dann könnte ich die doch geometrisch koppeln und es dann auf andere Art versuchen. Die Geschwinigkeit auf den Umfang umzurechnen ist ja kein Ding.

  • Hallo Grubba,


    wäre eine Möglichkeit.


    Ist Deine ext.Achse eine Verfahrachse?


    Das Problem ist einfach, wenn sie nicht gekoppelt ist,
    kann er ja den TCP-Speed gar nicht berechnen mit einfluss dieser Achse.


    Also wird ein achsspezifisches Verfahren der ext.achse die Folge sein.


    Darum diese Variable.
    Ob du mit festen Werten fährst oder eine Variable, ist egal.
    Override sollte diese Bewegung auch beeinflussen, solange sie nicht asynchron ist.


    Besser wäre aber definitiv die Kopplung.
    Dann kannst $vel.cp nutzen.


    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.


  • Ist Deine ext.Achse eine Verfahrachse?


    Sorry, mache erst seit 3 Wochen mit dem KUKA rum, deshalb: was meinst Du mit Verfahrachse?


    An der Achse befindet sich ein Drehfutter, in dem Rohre eingespannt werden. Diese sollen entlang des Umfangs geschnitten/geschweisst werden. Vorgabe beim Schweissen ist halt, das Drehungen um mehr als 360° möglich sein müssen. Deshalb die Konfiguration als Linearachse.

  • Die Geschwindigkeit sollte sich auf $OV_PRO beziehen. So läuft es zumindest bei einer miener Anlage, wo der Greifer über eine Externe Achse betrieben wird.


    Die Achsen lassen sich in R1/... /$Machine.dat auf endlos drehen


    INT $AXIS_TYPE[12] ;ACHSENKENNUNG
    $AXIS_TYPE[1]=3 ;1 = LINEAR, 2 = SPINDEL, 3 = ROTATORISCH, 4 = ENDLICH DREHEND, 5 = ENDLOS
    $AXIS_TYPE[2]=3
    $AXIS_TYPE[3]=3
    $AXIS_TYPE[4]=3
    $AXIS_TYPE[5]=3
    $AXIS_TYPE[6]=3
    $AXIS_TYPE[7]=5 ; Externe Achse E1


  • Die Achsen lassen sich in R1/... /$Machine.dat auf endlos drehen


    Der Mann von KUKA und ich haben das mit dem endlos drehend ausprobiert. Trotzdem dreht die Achse nicht mehr als 360°, bzw sie überfährt zwar die 360° Marke, dreht sich aber immer Modulo. Steht die Achse bei 0° und du gibst 721° vor, dreht sie sich nur um 1°. Sogar bei Angabe einer Relativbewegung LIN_REL{E2 10000.0} dreht sie sich auf kürzestem Weg auf die Moduloposition.


    Hat der Kuka-Mann auch erst mal so :shock: geschaut!

  • Hallo Grubba,


    das Verhalten Modulo ist halt so.
    Könnte man nur umgehen wenn man eine Bewegung > 179 Grad in mehrere Bewegungen unterteilt und überschleift.


    Sonst bleibt nur der Weg über definition als Linearachse.


    Meiner Meinung nach sollte auch in deinem Falle eine Kopplung funktionieren.
    Eine rotative Achse abgewickelt betrachtet gibt ja eine Gerade.
    Habe es selber aber noch nie gemacht.
    Da sollte KUKA Hotline aber Dir klären können.



    Noch zu $Vel_EXTAX :
    ja, ist natürlich Wert in Prozent.
    Wäre vermutlich bisschen tüftelsache.
    Hauptsache aber, Du kannst den Speed mal regeln.


    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.


  • Das mit dem Überschleifen möchte ich eigentlich ungern, da das irgendwie "gebastelt" aussieht.


    Baue mir jetzt gerade eine kleine Funktion, die mir aus 2 Ovt-Werten die am besten passende Komnination ermittelt. Soweit läuft die Anlage ja auch schon. Wenn dann demnächst ein bischen Zeit ist, werde ich das mit der Kopplung auch mal probieren.



    Besten Dank aber schon mal an alle :blumen:

  • Hallo,


    1.a) Die externe Achse ist eine rotatorische Achse (also die Materiell vorhandene). Um aber eine absolute Winkeleingabe zu bekommen muss diese als linear deklariert werden. (360° <-> 360mm). Denke nicht, dass dann eine math. kopplung möglich ist. Der Roboter geht von einer Linearachse aus.... die transformation wäre also linear. Du braucht aber eine rotatorische Transformation.


    1.b.) Wenn du diese als endlos deklarierst, musst du die Drehbewegung in <120° Schritte aufteilen. Die Achse dreht in richtung des kürzeren weges. Jetzt ist eine math. Kopplung möglich. Programmierfehler der externen Achse sind verbunden mit schnellen Roboterbewegungen!!!


    2.) Welche Bahn willst du abfahren?
    Bei "Wickelbewegungen" müsstest du mit math. Kopplung eine Spirale abfahren. -> geht nicht (oder?)
    Ohne Kopplung einfach Linear + Drehe um n Umdrehungen.


    3.a.) mit math. Kopplung gibst du die Geschwindigkeit mit vel.cp an.
    3.b.) ohne math kopplung muss die externe Achse die langsamste sein. Sonst bremst die CP bewegung die Linearachse aus.


    Und diese % Angabe finde ich auch etwas ungeeignet.
    Habe die externe Achse mit unterschiedlichen Geschwindigkeiten dehen lassen und mir mit dem Oszi die Drehzahl angezeigt. Wahscheinlich kommt so etwas heraus. 0% = 0 1/min ; 100% = 2700-3000 1/min.
    Die Motorderhzahl kannst du dann mit der Getriebeübersetzung auf dein Futter umrechen. -> Faktor
    Dann kannst in Umdrehungen/min programmieren und rechnest mit dem Faktor in % um.


    4.) wenn du die Punkte überschleifen willst, wirst du feststellen, dass nicht math. gekoppelte Achsen nicht mit einbezogen werden. Falls du damit probleme bekommst, kann ich dazu noch etwas schreiben.


    Gruß Lars

  • So...


    Jetzt mal meine bescheidene Antwort dazu..Habe vor Jahren das selbe Problem gehabt,als ich mit einer 7.Achse eine Kleberpumpe vorne am Robi antreiben musste..Robi war ein Saferobot,was die Sache zusätzlich erschwert hat.


    Problem war,wie du sagtest,mehr als 360Grad zu drehen..Also Achse linear betreiben.
    Um die Pumpe anzutreiben,hab die Achse asynchron geschaltet,um sie unabhängig vom TCP drehen zu lassen.Oder um die Pumpe in Warteposition zu spülen.


    Um die Achse einzuschalten:


    Damit fährt die Achse vor,egal was der TCP macht.Da musst dann nur mit Geschwindigkeit und Beschleunigung spielen.


    if not $in[134] then
    ; wenn $IN[134]=true,dann ohne kleben


    $advance=0
    $ov_async=7


    xp100.E1=$pos_act.E1
    xp100.E1=xp100.E1+(10000000)
    asyptp xp100
    ;E1 bewegen

    $advance=1
    endif


    Zum Ausschalten,egal ob der Robi noch fährt oder nicht:
    $advance=0


    asycancel 1

    $advance=1




    Dann kannst noch zurückdrehen:


    $advance=0
    $async_axis='B0001'
    $ov_async=50


    xp100.E1=$pos_act.E1
    xp100.E1=xp100.E1+(-1000)
    asyptp xp100
    ;E1 bewegen

    $advance=1



    Da ich die Achse immer nur vor gedreht habe,musste ich sie ab und zu neu automatisch justieren,weil sonst der Drehgeber in Überlauf gegangen wäre...


    Zusätzlich musst bei SafeRobot noch beachten,dass du dann eventuell die Achse abkoppeln musst,um Bremsen- und Referenzfahrt auszuführen,da die Achse ja irgendwo stehen kann und nicht extra zurückgedreht werden muss.



    Bei weiteren Fragen sag Bescheid..

  • auch mein bescheidener Senf dazu:

    Ich würde die Achse als EndlosRotatorische definieren und sie auch mathematisch koppeln.
    Vorteil:
    -meine programmierten Geschwindigkeiten werden auch gefahren, sprich ich kann tatsächliche
    Bahngeschwindigkeiten vorgeben.(kein Ausrechnen der Bahngeschwindigkeit über Radius des Rohres + VelExtAx
    + $OV_PRO)
    Nachteil:
    - Modulo


    Den ModuloNachteil kann man leicht umgehen indem man sich die besagte Funktion bastelt.
    Wir haben bei uns genau das gleiche realistiert Mehrlagenschweissen einer nicht rotationssymetrisch verlaufenden, geschlossenen Schweißnaht.

  • Hallo,


    wie man sieht, hat beides Vor- bzw. Nachteile.


    Interresant wäre zu wissen, wie die zu fahrende Bahn aussehen soll ?!?


    soma:


    Wie würdest du diese besagte Funktion realisieren?


    z.B.:


    Robi steht an p0


    p1=p0
    p1.z = p0.z+500
    p1.E1 = p0.E1+winkel


    LIN p1



    diese eine LIN bewegung müsste man ja dann in x Punkte zerlegen. ???
    wie soll man das flexiebel umsetzen?


    Gruß

  • soma,stethi und Lars,


    danke euch dreien für die weiteren Antworten.


    Ich sehe schon, das mein Problem durchaus eines ist :mrgreen:


    Wenn ich euch dann alle richtig verstanden habe, gibts zwei Möglichkeiten:


    -Entweder Achse koppeln und Geschwindigkeit direkt vorgeben
    -Achse nicht koppeln und Geschwindigkeit nicht direkt vorgeben



    1.a) Die externe Achse ist eine rotatorische Achse (also die Materiell vorhandene). Um aber eine absolute Winkeleingabe zu bekommen muss diese als linear deklariert werden. (360° <-> 360mm). Denke nicht, dass dann eine math. kopplung möglich ist. Der Roboter geht von einer Linearachse aus.... die transformation wäre also linear. Du braucht aber eine rotatorische Transformation.


    Was würde denn passieren, wenn man die Achse als Linearachse vorgibt und dann koppelt? 1mm Vorgabe entspricht jetzt schon bei meiner Einstellung 1°. Die Geschwindigkeit auf den Umfang zu beziehen, ist im Programm ja nur eine Normierung.
    Hauptaufgabe ist es für mich im Moment, den Roboter mit seinem Werkzeug (Plasmaschneider oder Schweisspistole) zu positionieren und dann das Rohr einen Winkel x drehen zu lassen. Diese Drehung kann eben auch größer 360° sein.


    ->


    Woher weiss denn die Steuerung, wie schnell sie das Rohr drehen muss, damit eine bestimmte Umfangsgeschwindigkeit erreicht wird? Ich denke mal, dass sie den Abstand zur Drehachse kennt, da die Drehachse ja vorher vermessen wurde. Ich habe nun aber das Problem, das diese Drehachse höhenverstellbar ist. Und diese Verstellung wird manuell ohne Positionsrückmeldung durchgeführt....


    Ich habe mich heute für die Geschwindigkeitsvorgabe über die beiden Overrides entschieden, das reicht erstmal für meine Zwecke. Mit der Kombination der beiden lässt sich die Geschwindigkeit für meine Zwecke hinreichend genau einstellen. (5000 Geschwindigkeitsstufen auf das komplette Drehzahlband bezogen)


    Werde, wenns die Zeit zulässt mal eure Vorschläge durchspielen, wahrscheinlich ist da doch die bessere Lösung als die meine dabei.


    Ansonsten nochmal danke für die ganzen Vorschläge, bin ja schon froh gewesen, das dieses Problem wirklich vorhanden ist und nicht nur bei meiner Anlage.

  • Hallo,


    Zitat

    Was würde denn passieren, wenn man die Achse als Linearachse vorgibt und dann koppelt?


    gute Frage?
    man müsste in den Maschinendaten den Kinematiktyp zuweisen?
    Entweder BASE - Kinematik oder ROBROOT - Kinematik.
    Wie sich eine BASE-Kinematik mit Linearachse verträgt weiss ich leider nicht.



    Zitat

    Woher weiss denn die Steuerung, wie schnell sie das Rohr drehen muss, damit eine bestimmte Umfangsgeschwindigkeit erreicht wird?


    1. mit math. Kopplung:
    Deine programmierte Bewegung wäre eine Kreisbewegung. Der Robi würde um das Bauteil fahren. Damit sich dieser nicht um das Bauteil wickelt, drehst du die externe Achse entgegen. Die Geschwindigkeit ist dann einfach dein vel.cp.


    2. ohne math. Kopplung:
    siehe oben


    Beim verstellen musst du diese neu einmessen.


    Wie machst du das mit der "Geschwindigkeitsvorgabe über die beiden Overrides?" Softkeys?


    Gruß


  • Beim verstellen musst du diese neu einmessen.


    Das geht bei unserer Anlage leider nicht. Der Bediener drückt eine Taste und alles muss laufen. Theoretisch soll der Mann nicht mal ein KCP bedienen müssen, geschweige denn, eine Kinematik vermessen. Ausserdem wechseln bei und die Bauteile (und damit auch die Verstellung der externen Achse im Minutentakt. :-|


    Zitat


    Wie machst du das mit der "Geschwindigkeitsvorgabe über die beiden Overrides?" Softkeys?


    VelExtAx und $OV_PRO werden vor Beginn der Drehbewegung durch das Programm so eingestellt, das die gewünschte Geschwindigkeit möglichst genau erreicht wird. Im Gegensatz zur Einstellung mit nur einem Override ist die "Feinheit" der Abstufungen um etliches höher. Wenn ich z.B. einen Override von 22.5% benötige, wird der eine OVR auf 50%, der andere auf 5% eingestellt. Klar gibt es unendlich viele Overrides, die ich nicht exakt einstellen kann, aber ich komme immer auf eine recht niedrige Toleranz. Zumindest für meine Zwecke reicht das vollkommen aus.

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