Spiralbahn beschreiben

  • Hallo Fortgeschrittene Roboterprogrammier,


    ich bin ganz neu in diesem Bereich. Meine Aufgabe besteht darin, einen ABB IRB 2400 so zu programmieren, dass er eine Spiralbahnbeschreibt.
    Dazu würde ich MoveC benutzen, aber wie ich die Punkte danach verschiebe, ist mir nicht ganz klar. Brauche ich dazu einen Vektor?



    Wichtig ist mir, dass ihr mir helft, mein Verständnis für das Programmieren zu schärfen.
    Das Programm soll benutzerfreundlich sein und daher mit vielen Eingaben gefüttert werden.


    Ich habe dazu begonnen, die Dokumentation durchzuarbeite. Ich denke, dass die Abfrage so stimmt.
    1) Habe ich die Werte, die ich abfrage, richtig weiter verwendet?
    2) Berechne ich die Punkte richtig, vorallem die Kreispunkte?
    Meine Angst liegt darin, dass ich einfach von einer Verschiebung in eine Richtung ausgehe, aber was ist, wenn diese nicht auf einer Koordinatenachse liegt?
    3) wie würde die Verschiebung der Kreispunkte aussehen, um eine Spiralbahn zu beschreiben? Muss ich dazu die Punkte mit dem Richtungsvektor addieren, also so
    p.neu= p1+p.richtung?


    Bisher habe ich folgendes verfasst. Stimmt mein Quelltext bisher?
    programm SPIRALE
    ;;int = linear


    ;---------------------------------------------
    ; 16.03.2011
    ;---------------------------------------------


    ;---------------------------------------------
    ; Variabeln erfragen
    ;---------------------------------------------


    ! Rapidhandbuch S 391ff
    TPReadNum breite, "Wie breit ist das Werkstück (in mm)?";
    TPReadNum laenge, "Wie lang ist das Werkstück (in mm)?";


    r:= breite/2
    n1:= laenge / breite ! n sind die Anzahl der Kreise
    n:=Round(n1);


    TPWrite "Benötigte Anzahl der Kreisbögen ohne Überlappung="\Num:=n;


    TPReadNum reg1, "Wie viele Kreise sollen gefahren werden?";
    FOR i From 1 TO reg1 DO
    PROC_Kreis;
    ENDFOR

    TPReadFK reg2, "Bitte fahren Sie die gewünschte Position (Werkstückbeginn, Mittelpunkt) an. Fertig?","","","","Ja!","Nein!";


    ! Befehl Cpos Rapidhandbuch S 463 für x,y,z-Werte von P1
    VAR pos pos1
    pos1:=CPos(\Tool:=tool1\WObj:=wobj0);


    TPReadNum hoehe, "In welchen Abstand soll die Bearbeitung erfolgen (in mm)?";


    ! Definition der Arbeitshöhe
    pa.x:=pos1.x
    pa.y:=pos1.y
    pa.z:=pos1.z + hoehe

    ;---------------------------------------------
    ;Berechnung der Punkte
    :---------------------------------------------



    !Berechnung des Endpunktes
    p2.x:=pa.x
    p2.y:=pa.x+laenge
    p2.z:=pa.z


    ! Ermittlung der Kreispunkte
    k1.x:=pa.x
    k1.y:=pa.y
    k1.z:=pa.z

    k3.x:=k1.x
    k3.y:=k1.y+breite
    k3.z:=k1.z

    k2.x:=k1.x+r
    k2.y:=k1.y+r
    k2.z:=k1.z

    k4.x:=k1.x-r
    k4.y:=k1.y+r
    k4.z:=k1.z



    ;---------------------------------------------
    ;Bewegungsstart
    ;---------------------------------------------

    PROC Kreis
    MoveL k1, v100, fine, tool1; ! Bewegung auf Arbeitshöhe
    MoveC k2, k3, v500, z20, tool1; ! Kreisbewegung
    MoveC k4, k1, v500, fine, tool1;
    ! Kreisbewegung wurde abgeschlossen, Verschiebung muss beginnen (Offset S 500)
    ENDPROC


    Ich bin für jede Antwort dankbar
    Lg Georg

  • ANZEIGE
  • Hallo,


    zu ABB kann ich nichts sagen, aber wie man im Prinzip eine Spirale erzeugt habe ich hier schon mal beschrieben:
    http://www.roboterforum.de/rob…rogrammieren-t4324.0.html
    Dort handelt es sich um eine Spirale, die aus einem Kreis entsteht, dessen Radius sich kontinuierlich erweitert. Die Bahn aus deiner Zeichnung ist so ähnlich zu erzeugen, nur muss man statt den Radius zu ändern, den Mittelpunkt des Kreises verschieben.


    Grüße


    Urmel

  • Danke für die schnelle Antwort. Ich werd mal versuchen, vor meinem "geistigen Auge" den Mittelpunkt der folgenden Kreise zu verschieben. hehe


    Was ich noch nicht gesagt habe: ich programmiere in rapid.
    Aber du hast recht, das Prinzip ist das selbe.


    Dankeschön.
    Stimmt den mein anderer Kram?


    Grüße Georg :danke:

  • Wenn es jetzt eine industrielle Anwendung wäre, würde ich sagen: mach 'ne Unterroutine, in welcher Zwischenpunkt und Endpunkt von beiden Kreissegmenten berechnet werden (bezogen auf die Istposition oder mit offs(..)), fahr irgendwo hin, und rufe von da aus diese Routine zyklisch auf. Nach jeder Bearbeitung verschiebst Du das Gebrauchswerkobjekt im OFrame in die Richtung, die Du gerne hättest, fertig.
    Eine Spirale ist das ja auch nicht, das sind nur überlappende Kreisbahnen, die mit einem kurzen LIN-Stück hintereinanderhängen.


    Grüße,
    Michael

  • Ok,


    danke du hast recht.
    Wie ist es eigtl., wenn ich zuerst eine position programmiere und dann kreise,
    werden diese zwei routinen dann nacheinander abgearbeitet?


    Ich will natürlich kreisen, verschieben immer abwechselnd.
    Ich hab jetzt nur angst, dass ich zuerst 10mal kreise und dann 10mal verschiebe...


    grüße Georg

  • hab mal bissel rum gespinnt ^^


    Gruß Loipe


  • Wie ist es eigtl., wenn ich zuerst eine position programmiere und dann kreise,
    werden diese zwei routinen dann nacheinander abgearbeitet?


    Man muss schon eine Schleife aussenrum programmieren.


    Das Ganze dann beliebig kompliziert machen.


    Grüße,
    Michael

  • Vielen Dank,


    @ Michael
    und
    @ Loipe


    Ok, was genau macht ein xshift (ja schon klar, eine verschiebung in x- richtung,)? Ist es so zu verstehen wie die Offs?
    Morgen kann ich wieder an den Roboter, da werd ich eure hinweise und Lösungen mal ausprobieren.


    Nachmals vielen Dank :danke:


    Lg Georg


  • Ist es so zu verstehen wie die Offs?


    Es gibt halt viele Wege nach Rom....
    Meine Anregung war, die Verschiebung nicht auf den Punkt draufzurechnen, sondern auf das zugrundeliegende Basiskoordinatensystem. offs() rechnet eine Verschiebung auf ein Robtarget, geht auch, geht gut, kein Problem. Man könnte auch mit PDispSet etc. arbeiten, zum Beispiel.
    Ich halte solch reine Verschiebungsaufgaben gerne aus dem Bewegungsprogramm raus, das simplifiziert die Sache manchmal etwas. Das OFrame des Werkobjekts ist ungefähr für diesen Zweck gut geeignet.
    Meine Variable "XShift" ist an sich verzichtbar, man könnte natürlich auch direkt dem woTemp.Oframe.Trans.X einen Wert zuweisen, aber mit einem kleinen Zwischenschritt wird's manchmal besser verständlich. [size=6pt](Und über MEINE Variablennamen sollte man sowieso besser nicht nachdenken. Hier im Forum halte ich mich zurück, aber in meinen realen Steuerungen kann ein Merker auch schon mal "Herr_Schroeder" heissen.... großer Hassfaktor, aber genialer Wiedererkennungswert.)[/size]


    Grüße,
    Michael

  • Hallo
    hier ist ein Beispiel


    PROC routine1()
    r_Spirale 50,50,5,1; So wird die Proc aufgerufen
    Break;
    ENDPROC


    PROC r_Spirale(
    num nRadius,
    num nGeschwindigkeit,
    num nDrehungen,
    num nWartezeit)


    norgAbstand:=nRadius/(nDrehungen);
    VKreis.v_tcp:=nGeschwindigkeit;
    nAbstand:=norgAbstand;
    WaitTime\InPos,nWartezeit;
    MoveL Offs(p_Spirale,0,0,0),VKreis,fine,Greifer;
    MoveL Offs(p_Spirale,nAbstand,0,0),VKreis,z1,Greifer;
    FOR i FROM 1 TO nDrehungen DO
    MoveC Offs(p_Spirale,0,nAbstand,0),Offs(p_Spirale,-nAbstand,0,0),VKreis,z10,Greifer;
    MoveC Offs(p_Spirale,0,-(nAbstand)+(norgAbstand/2),0),Offs(p_Spirale,nAbstand+(norgAbstand/2),0,0),VKreis,z10,Greifer;
    nAbstand:=nAbstand+norgAbstand;
    ENDFOR
    nAbstand:=nAbstand-norgAbstand;
    MoveC Offs(p_Spirale,0,nAbstand,0),Offs(p_Spirale,-nAbstand,0,0),VKreis,z10,Greifer;
    WaitTime\InPos,0.1;
    ENDPROC

  • Hallo Männer,


    vielen Dank für die ausführliche arbeit. Mein chef meinte nämlich zu mir, dass er mein Programm nicht intensiv gelesen hat,
    weil er es in der Zeit eben selber schreiben kann.
    Daher bedanke ich mich natürlich bei allen Autoren für die tollen und wirklich hilfreichen Antworten.


    PSmith: vielen dank für deine Variante
    Michael: danke für die Erklärungen. Ich teile deine Meinung.


    Ach wenn meine Lösung jetzt nicht mehr aktuell ist und noch falsch, zeige ich sie euch dennoch.


    PROC main() ! Hier möchte ich die einzelen Programme aufrufen
    PROC Kreis;
    PROC Verschiebung1;
    PROC Verschiebung2;
    ENDPROC

    PROC Kreis
    MoveL k1, v100, fine, tool1; ! Bewegung auf Arbeitshöhe
    MoveC k2, k3, v500, z20, tool1; ! Kreisbewegung
    MoveC k4, k1, v500, fine, tool1;
    ! Kreisbewegung wurde abgeschlossen, Verschiebung muss beginnen (Offset S 500)
    ENDPROC

    ! Benötige ich noch eine Startbedingung für die
    ! Verschiebung oder reicht die zyklische Abarbeitung im "PROC main" aus?

    PROC Verschiebung1 ! Beginn der Spirale
    k1:=Offs(k1,0,1/4*breite,0)
    k2:=Offs(k2,0,1/2*breite,0)
    k3:=Offs(k3,0,3/4*breite,0)
    k4:=Offs(k4,0,breite,0)
    boegen:=1 ! Anzahl der Kreisbögen
    naechste:
    MoveC k2, k3, v500, z20, tool1; ! Kreisbewegung
    MoveC k4, k1, v500, fine, tool1;
    boegen:=boegen+1
    IF boegen<=n GOTO nächste; ! Soll festlegen, wieoft die Kreisbewegung wiederholt wird
    ENDPROC

    PROC Verschiebung2 !Verschiebung der Kreispunkte um den Kreisdurchmesser=Werkstückbreite
    k1:=k1+breite*vektna
    k2:=k2+breite*vektna
    k3:=k3+breite*vektna
    k4:=k4+breite*vektna

    IF k3=p2 THEN ! Hier soll solange verschoben werden, bis der Endpunkt erreicht ist
    RETURN; ! S 351 Verschiebung beenden
    ENDIF
    ENDPROC


    :merci:


    Und bis bald
    Georg

  • Hallo,


    ich hab noch etwas länger an meinem Programm rumgebastelt. Leider hat mein Programm immer noch ein Problem.
    Die Spiralbahn funktioniert eigentlich für alle Raumrichtungen, sogar, wenn sich die z-Komponenten der Koordinaten unterscheiden.
    Wenn ich aber bei den geteachten Punkten P1 und P2 nur die Y-Koordinate verändere, kann der Roboter bei der Spiralbahn die Positionen nicht anfahren, da er schreibt: Der Punkt liegt außerhalb des Arbeitsbereiches... (oder so ähnlich)


    Wie kann ich den Fehler beheben bzw woran liegt es? Liegt das an meiner Übderdeckung du?


    Ich bin für jede Hilfe dankbar.


    Hier ist mein Quellcode:


    %%%
    VERSION:1
    LANGUAGE:ENGLISH
    %%%


    MODULE SPIRALE
    VAR pos km:=[0,0,0];
    VAR num betrag_u:=0;
    VAR num betrag_v:=0;
    VAR robtarget pk3:=[[1198.25,-50.74,1200.38],[0.516969,0.502349,0.508857,-0.470589],[0,1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    VAR robtarget pk2:=[[1198.25,-50.74,1200.38],[0.516964,0.502343,0.508863,-0.470595],[0,1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    VAR robtarget pk1:=[[1198.26,-50.72,1200.37],[0.516966,0.50234,0.508865,-0.470592],[0,1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    VAR robtarget pk4:=[[1198.26,-50.72,1200.37],[0.516975,0.502343,0.508867,-0.470579],[0,1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    VAR pos k2:=[0,0,0];
    VAR pos k4:=[0,0,0];
    VAR pos k3:=[0,0,0];
    VAR pos k1:=[0,0,0];
    VAR num n:=0;
    VAR pos vektu:=[0,0,0];
    VAR pos vektv:=[0,0,0];
    VAR num prozent:=0;
    CONST robtarget p20:=[[1127.64,-22.8,975.41],[0.500044,0.49173,0.507825,-0.500272],[0,1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    VAR num n_i;
    VAR num kreise:=0;
    VAR num laenge:=0;
    VAR num ud:=0;
    VAR num breite:=0;
    CONST robtarget p10:=[[1127.6,222.36,1266.72],[0.500042,0.491789,0.507844,-0.500198],[0,1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];


    PROC haupt()
    MoveJ p10,v1000,z50,tool0;
    n_i:=1;
    WHILE n_i<4 DO
    TPReadFK n_i,"Fahre","P1","P2","Spirale","Abbruch","";
    TEST n_i
    CASE 1:
    MoveL p10,v100,fine,tool0;
    CASE 2:
    MoveL p20,v100,fine,tool0;
    CASE 3:
    TPReadNum breite,"Wie breit ist das Werkstück?";
    next:
    TPReadNum prozent,"Um wie viel Prozent sollen sich die Kreise überschneiden?";
    ud:=Round(breite*prozent/100\Dec:=3);
    TPWrite "Kreisabstand="\Num:=ud;
    TPReadFK reg1,"Erneut eingeben?","","","","Ja","Nein";
    IF reg1=4 THEN
    GOTO next;
    ELSE
    ! unbenutzt
    ENDIF
    ! VEKTORBERECHNUNG
    vektv:=p20.trans-p10.trans;
    ! Vektor u senkrecht auf v (Skalarprodukt)
    vektu.x:=-vektv.y;
    vektu.y:=vektv.x;
    vektu.z:=0;
    ! Betrag
    betrag_v:=Sqrt(vektv.x*vektv.x+vektv.y*vektv.y+vektv.z*vektv.z);
    betrag_u:=Sqrt(vektu.x*vektu.x+vektu.y*vektu.y+vektu.z*vektu.z);
    ! Kreiskoordinaten
    k1:=p10.trans;
    k2:=k1+vektv*(breite/betrag_u);
    ! km=Kreismittelpunkt
    km:=k1+vektv*(breite/(2*betrag_u));
    k3:=km+vektu*(breite/(2*betrag_u));
    k4:=km-vektu*(breite/(2*betrag_u));
    ! Start Spiralbewegung
    n:=Round(betrag_v/(ud)\Dec:=5);
    FOR i FROM 0 TO n DO
    pk1.trans:=k1;
    pk1.rot:=p10.rot;
    pk1.robconf:=p10.robconf;
    pk1.extax:=p10.extax;
    pk2.trans:=k2;
    pk2.rot:=p10.rot;
    pk2.robconf:=p10.robconf;
    pk2.extax:=p10.extax;
    pk3.trans:=k3;
    pk3.rot:=p10.rot;
    pk3.robconf:=p10.robconf;
    pk3.extax:=p10.extax;
    pk4.trans:=k4;
    pk4.rot:=p10.rot;
    pk4.robconf:=p10.robconf;
    pk4.extax:=p10.extax;
    MoveC pk4,pk2,v100,z10,tool0;
    MoveC pk3,pk1,v100,z10,tool0;
    ! Verschiebung Kreiskoordinaten
    k1:=k1+vektv*(ud/betrag_v);
    k2:=k2+vektv*(ud/betrag_v);
    k3:=k3+vektv*(ud/betrag_v);
    k4:=k4+vektv*(ud/betrag_v);
    ENDFOR
    DEFAULT:
    !ungueltig
    ENDTEST
    ENDWHILE
    Stop;
    RETURN;
    ENDPROC
    ENDMODULE


    Grüße

  • Hab' keinen Nerv, die Sache bis ins Letzte verstehen zu wollen, aber kann es sein, dass einer der Kreise dann "umklappt", der Bogen zu groß wird oder gar andersrum angefahren werden will? In Deiner Rechenschleife sind ja nur zwei MoveC, der Ausgangspunkt gehört aber immer dazu. Könnte mir vorstellen, dass in dieser Hinsicht was schiefgeht.
    Lass Dir den berechneten Punkt doch mal anzeigen in der Datenansicht, bevor der Fehler erscheint, und schau, wo die Berechnung hinfahren möchte, dann siehst Du mehr....


    Grüße,
    Michael

  • Guten Morgen,


    danke für die Antwort. Ich werde diese Woche mal sehen, was in der Datenansicht passiert.


    Was meinste du mit nur 2 Move C? soll ich noch ein MoveL zum P1(Ausgangspunkt) hinzufügen? Ich dachte es reicht, wenn ich auf Punkte P1 zu Beginn stehe und er dann losfährt mit dem ersten Kreis...


    Ich finde es halt seltsam, dass er nur das Problem in y-Richtung hat, sonst nicht...


    Grüße,


    Georg

  • Hallo bumblebee,
    ich hab den Spaß gemacht deinen Code durchzugehen, ich glaube ich hab nen kleinen Fehler entdeckt der sich zur Zeit aber nicht groß auswirkt da die Beträge gleich sind.

    Code
    k2:=k1+vektv*(breite/betrag_u);
            ! km=Kreismittelpunkt
            km:=k1+vektv*(breite/(2*betrag_u));
            k3:=km+vektu*(breite/(2*betrag_u));
            k4:=km-vektu*(breite/(2*betrag_u));


    Hier müsste es passend zum Vektor v auchn jeweils der Betrag von v in die Berechnung mit einfließen. Ich glaube das könnte auch dein Problem mit der y-Richtung beheben.


    Ich hab mir außerdem auch mal die mühe gemacht deinen Code zu erweitern, so das die Spirale jetzt schon im 2. Punkt anfängt sich zu krümmen und das man jetzt wählen kann ob man die Spirale in der Ebene möchte oder als eine Art Zylinder, vielleicht kannst du damit ja auch etwas anfangen.


    MfG Jerom

  • Hallo jerom,


    danke, dass ist mir gestern auch aufgefalllen und stell dir vor, heute lief das Programm problemlos.
    Das mit dem Zylinder würde mich interessieren, wie du das gemacht hast.


    Vielleicht kannst du mir ja den code geben.


    Grüße und Danke für die Antwort


    Bumblebee

  • Hallo.
    Beschäftige mich erst seit kurzen mit ABB Roboter Programmierung.
    Habe nach einer Lösung gesucht, wo die Orientierung der Spirale beliebig sein kann.


    Meine Lösungsweg ist wie Folgt. Teache einen Punkt im Koordinatensystem Base mit beliebiger Orientierung. Verschiebe dann ein Temporäres Werkobjekt zu den Teachpunkt. Nun fahre um den Koordinatenursprung des Werkobjektes eine Spirale.


    Mein Code ist wie folgt und funktioniert bis jetzt tadellos. nur bei manchen Positionen bekomme ich Probleme mit der Singularität...
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    MODULE Spirale
    PERS wobjdata wobjTemp :=[ FALSE, TRUE,"",[ [0,0,0],[1,0,0,0] ],[ [0, 0, 0], [1, 0, 0, 0] ] ];

    CONST robtarget pZSP1:=[[450.00,0.00,647.00],[0,0.707107,0.707107,-2.10734E-08],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    CONST robtarget pZSP2:=[[498.72,-42.47,432.57],[0.316209,0.378028,0.833895,-0.248448],[0,-1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
    VAR num SpurB:=0;
    VAR num DurchM:=0;
    VAR num SpirAnz:=0;
    VAR num i:=0;


    PROC Spirale_mit_WObj()!Spirale um die Z-Achse des TCP. Orientierung in BASE kann beliebig sein und wird durch Teachpunkt pZSP2 bestimmt.

    MoveJ pZSP2, v100, fine, tool0; !Zentrum Spirale


    wobjTemp.uframe:= [pZSP2.trans,pZSP2.rot]; !Verschieben des Werkobjekt zum Teachpoint pZSP2

    SpurB:=2; !Spurbreite Maximal das 30zig-fache von DurchM
    DurchM:=1; !Anfangsdurchmesser
    SpirAnz:=3; !Anzahl der zu fahrenden Spiralen


    VelSet 100, 50; !Geschwindigkeit reduzieren für alle nachfolgenden Punkte (100% von angegebener Geschw aber maximal 50mm/s)

    MoveL [[0,0,0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]], vmax, fine, tool0 \WObj:= wobjTemp; !Mittelpunkt der Spirale
    MoveL [[DurchM,0,0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]], vmax, z100, tool0 \WObj:= wobjTemp;
    MoveC [[0,DurchM+(SpurB/4*1),0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]], [[-1*(DurchM+(SpurB/4*2)),0,0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]], vmax, z100, tool0\WObj:= wobjTemp;


    IF SpirAnz>0 then
    FOR i FROM 0 TO SpirAnz-1 DO
    MoveC [[0,-1*(DurchM+(SpurB/4*3)),0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]], [[DurchM+(SpurB/4*4),0,0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]], vmax, fine, tool0\WObj:= wobjTemp;
    DurchM:=DurchM+SpurB;
    MoveC [[0,DurchM+(SpurB/4*1),0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]], [[-1*(DurchM+(SpurB/4*2)),0,0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]], vmax, fine, tool0\WObj:= wobjTemp;
    ENDFOR
    ENDIF

    MoveC [[0,-1*(DurchM+(SpurB/4*3)),0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]], [[DurchM+(SpurB/4*4),0,0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]], vmax, z100, tool0\WObj:= wobjTemp;
    MoveL [[0,0,0],[1,0,0,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]], vmax, fine, tool0\WObj:= wobjTemp;

    wobjTemp.uframe:=[[0,0,0],[1,0,0,0]]; !Zurück Verschieben des Werkobjekt nach BASE. Nur zur Sicherheit

    ENDPROC


    ENDMODULE



    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



    Gibt es noch irgendwas daran zu verbessern???


    Die Spirale fahr ich so eigenartig damit sie am Anfang und Ende schön abgerundet/überschliffen wird...

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