TCP ändern im Programmablauf

  • Hallo Ihr,


    ich programmiere eine Werkzeugwechsler und würde gerne wissen, wie ich am Besten den TCP in der Programmroutine ändere, wenn ich ein Werkzeugaufgenommen habe.


    Ich habe das jetzt so gemacht, dass ich dann tSWK:= tGreifer setze,wenn der das Werkzeug aufgenommen hat, aber überspeichert dann da irgendwas oder ist das so richtig?


    PROC GreiferNehmen()
    mvHome_Platz1;
    WerkzeugGreifen 1;
    IF WkzgTypPruefen()=1 THEN
    tSWK:=tGreifer;
    TPErase;
    mvPlatz1_Home;
    Beenden;
    ELSE
    FalschesWkzg 1;
    ENDIF
    ENDPROC


    Vielen Dank schonmal


    kuchi

  • ANZEIGE
  • Mußt Du denn wirklich die TCP-Daten ändern? Oftmals fährt man doch einen Programmteil mit einem Tool und an anderer Stelle mit einem anderen TCP.
    Dann mußt Du nichts überschreiben. Das brauchst Du nur wenn Du den gleichen Programmteil mit unterschiedlichen TCPs fahren mußt.


    Aber Deine Version funktioniert auf jeden Fall auch.


    Gruß
    Stromer

  • Hallo und entschuldigung für die verspätete Antwort,


    Danke für eure Antworten.
    Ich möchte den TCP eigentlich nicht überschreiben. Im Programmablauf soll der tSWK den Greifer aufnehmen und dann mit tGreifer weiterarbeiteun und wenn der tGreifer abgelegt wird soll tSWK wieder aktuell sein. Hat da jemand eine Idee zu?


    Viele sommerliche Grüße 8)


    kuchi

  • Entweder ich bin zu einfach gestrickt oder ich versteh das Problem nicht.
    Im Fahrbefehl wird doch mit angegeben mit welchem Tool gefahren werden soll.
    Ergo fahr ich entweder mit tGreifer oder mit tSWK.
    Damit hab ich doch auch schon den TCP

    Gruß Roland


    Wie poste ich falsch?

    Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

    Einmal editiert, zuletzt von Roland Keller ()

  • Hi,
    na ja, wenn du unbedingt so machen möchtest, dann kannst du beliebig viel TCP- Daten speichern und beim greiferwechsel in temporäre speichern. Z.B.:
    ! temp Greifer
    PERS tooldata tActual:=[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]];


    !TCP 1-10
    PERS tooldata tGreifer{10}:=[
    [FALSE,[[0,0,0],[1,0,0,0]],[5,[0.2,0.2,0.2],[1,0,0,0],0.2,0.2,0.2]],
    [FALSE,[[0,0,0],[1,0,0,0]],[5,[0.2,0.2,0.2],[1,0,0,0],0.2,0.2,0.2]],
    [FALSE,[[0,0,0],[1,0,0,0]],[5,[0.2,0.2,0.2],[1,0,0,0],0.2,0.2,0.2]],
    [FALSE,[[0,0,0],[1,0,0,0]],[5,[0.2,0.2,0.2],[1,0,0,0],0.2,0.2,0.2]],
    [FALSE,[[0,0,0],[1,0,0,0]],[5,[0.2,0.2,0.2],[1,0,0,0],0.2,0.2,0.2]],
    [FALSE,[[0,0,0],[1,0,0,0]],[5,[0.2,0.2,0.2],[1,0,0,0],0.2,0.2,0.2]],
    [FALSE,[[0,0,0],[1,0,0,0]],[5,[0.2,0.2,0.2],[1,0,0,0],0.2,0.2,0.2]],
    [FALSE,[[0,0,0],[1,0,0,0]],[5,[0.2,0.2,0.2],[1,0,0,0],0.2,0.2,0.2]],
    [FALSE,[[0,0,0],[1,0,0,0]],[5,[0.2,0.2,0.2],[1,0,0,0],0.2,0.2,0.2]],
    [FALSE,[[0,0,0],[1,0,0,0]],[5,[0.2,0.2,0.2],[1,0,0,0],0.2,0.2,0.2]]];


    ...und dann
    tActual:=tGreifer{X};


    MoveL pTempPos,v500,fine,tActual;


    Sorry, aber es ist echt schwer zu verstehen, was du vorhast. :nocheck:

  • Hallo,


    tut mir Leid für die Verwirrung.


    Okay, ich hatte auch einen kleinen Denkfehler.


    Ich habe die Positionen alle mit dem tSWK anfgefahren und auch die, wenn der Roboter den tGreifer aufgenommen hat. Daher wollte ich da so machen, dass ich das Werkzeug dann einfach austausche, wenn der Greifer mit tSWK wieder in die Grundposition gefahren ist. Also dann dieses tSWK=tGreifer..aber ohne überspeichern..


    Bzw. wenn ich eine Position fein angefahren habe und auch gespeichert habe und im Nachhinein dann die tooldata ändere in wie weit ändert sich dann die Bewegung des Roboters?
    Frage verstanden?


    Viele Grüße


    kuchi



    EDIT: Ich habe auch noch eine Frage bezüglich des Programablaufs. Bei uns läuft der Roboter nur in Einrichtbetreib, das heißt während der Programmabarbeitung habe ich immer das FlexPendant in der Hand. Das Programm funktioniert, aber manchmal bricht es zwischendurch ab und als FEhlermeldung wird gesagt, dass das Programm zu komplex ist bzw zu viele Routinen oder so. Hat da jmd einen Vorschlag wie man das ändern kann?

    Einmal editiert, zuletzt von kuchi ()


  • Bzw. wenn ich eine Position fein angefahren habe und auch gespeichert habe und im Nachhinein dann die tooldata ändere in wie weit ändert sich dann die Bewegung des Roboters?


    :nocheck:
    das macht man nicht.
    wenn du mit tool0 geteacht:
    PERS tooldata tool0 := [FALSE, [[0, 0, 0], [1, 0, 0, 0]],[0.001, [0, 0, 0.001],[1, 0, 0, 0], 0, 0, 0]];
    und dann tool änderst auf tool1, wo TCP 200 mm weiter vom Roboter flansch liegt:
    PERS tooldata tool1 := [FALSE, [[0, 0, 200], [1, 0, 0, 0]],[0.001, [0, 0, 0.001],[1, 0, 0, 0], 0, 0, 0]];
    dann wird robi 200 mm vom bahn entfernt fahren.

  • Zuerst mal gebe ich Roland zul 100% recht. Unterschiedliche Programmteile - unterschiedliche TCPs. Vollkommen egal ob Greiferwechsel oder Kombigreifer.


    Wenn du eine Position, die mit einem anderen TCP geteacht wurde, anfährst dann positioniert der Robbi das Koordinatensystem des neuen Greifers genauso wie das des ersten (geteachten) TCPs. Die Robotermechanik kann dann natürlich komplett anders dastehen.


    Da das andere Tool vermutlich auch etwas anderes macht hast Du ja sowieso ein eigenes Programm in dem die von Roland angessprochenen Fahrbefehle das Tool definieren. Also nix mit =, nur MoveL blabla, tGreifer;


    Ich hoffe Du hast Deien Denkfehler jetzt soweit im Griff :zwink:


    Gruß
    Stromer

  • Hallo,


    ja habe ich. Ich habe aber immernoch nicht mein Problem gelöst.


    ICh habe alle Positionen mit tSWK geteacht und angefahren. Das Programm ist ja auch nur für einen Werkzeugwechsel da. Wenn das richtige Werkzeug am Roboter ist wird eine Grundposition angefahren und dann kann ein anderes Programm ausgeführt werden. ICh würde aber gerne bevor das Programm beendet wird noch sagen, dass dann tSWK tGreifer zum Beispiel ist. Damit dann auch die richtigen tooldata aktiviert sind wenn ein neues Programm dafür geladen wird. Versteht ihr ?

  • Für eine Grundposition würde ich mal noch ein tooldata nehmen tool0 zum Beispiel. Und die Positionen, die für beide Werkzeuge passen, auch mit tool0 teachen. Damit kannst du zwischen Stationen unabhängig vom Greifer fahren und erst dann entscheiden welches Tool verwendet wird. Dann kannst für jeder Greifer ein Programm aufrufen (wenn ich dich richtig verstanden), wo die Bewegungspositionen mit entsprechenden Werkzeug angefahren werden.

  • Hallo,


    also die Grundposition mit tool0 anfahren und wenn dann ein anderes Programm gewählt wird, werden die tooldata ja automatisch je nach Programm geändert.


    Die Positionen die ich mit tSWK angefahren habe zum Werkzeugwechsel passen für alle Werkzeuge und in der GRundposition habe ich jetzt tool0. Damit weiß der Roboter zu dem Zeitpunkt aber auch nicht das der TCP nicht mehr bei tSWK liegt sondern in tool0 obwohl ja tGreifer aktuell sein müsste. Aber das ist dann egal, weil durch das neue Programm ja ein neuer TCP gewählt wird?


    Wir haben hier nur eine Station und der Roboter wird auch nur für Praktika eingesetzt und führt wenn nur einfache ZEichen und Greif-routinen im Einrichtbetrieb aus. Ich sollte dafür jetzt ein Programm schreiben , damit der Roboter das Werkzeug ablegt und wechselt.


    viele grüße

  • Denkfehler liegt tiefe als ich dachte, :pfeif:
    Grundsätzlich, egal welche Werkzeug Robi hält, der wird die Koordinaten anfahren, mit DEM tool, das in Bewegung-Instruktion steht.
    Also: MoveJ *, v1000, fine,tool0\WObj:=wobj0;
    Egal welche Anweisung davor steht: tSWK := tStandart oder tStandart := tSWK. Der wird mit tool0 anfahren.
    Es gilt also:


    MoveJ pHome, v1000, z100, tool0;
    !Vorposition Greiferwechsel
    MoveJ pVorPos110, v1000, z100, tool0;
    !Greiferwechsel
    MoveL pVorPos150, v1000, z100, tool0;
    GreiferHolen();
    !Vorposition Greiferwechsel
    MoveJ pVorPos110, v1000, z100, tool0;
    MoveJ pHome, v1000, z100, tool0;


    IF GreiferCode=3 THEN
    MoveJ pVorPos310, v1000, z100, tGreifer;
    MoveJ pVorPos350, v1000, z100, tGreifer;
    MoveJ pVorPos310, v1000, z100, tGreifer;
    ELSEIF GreiferCode=5 THEN
    MoveJ pVorPos510, v1000, z100, tSWK;
    MoveJ pVorPos550, v1000, z100, tSWK;
    MoveJ pVorPos510, v1000, z100, tSWK;
    ENDIF


    oder mit eine Anweisung:


    IF GreiferCode=3 THEN
    tActual:=tGreifer;
    MoveJ pVorPos310, v1000, z100, tActual;
    MoveJ pVorPos350, v1000, z100, tActual;
    MoveJ pVorPos310, v1000, z100, tActual;
    ELSEIF GreiferCode=5 THEN
    tActual:=tSWK;
    MoveJ pVorPos510, v1000, z100, tActual;
    MoveJ pVorPos550, v1000, z100, tActual;
    MoveJ pVorPos510, v1000, z100, tActual;
    ENDIF

  • Hallo,


    vielen Dank. Also das mit tAktuell hatte ich auch shcon überlegt und hinter tAktuell steht dann tool0?


    Ich hab bis jetzt zb um position 1 anzufahren das hier :



    PROC mvHome_Platz1()
    MoveJ pHome,v1000,z100,tSWK\WObj:=wobj0;
    MoveJ pVorWkzg12,v1000,z100,tSWK\WObj:=wAufnahme;
    MoveL pVorWkzg1,v1000,z5,tSWK\WObj:=wAufnahme;
    MoveL pWkzg1,v40,fine,tSWK\WObj:=wAufnahme;
    ENDPROC
    PROC mvPlatz1_Home()
    MoveL pVorWkzg1,v1000,z5,tSWK\WObj:=wAufnahme;
    MoveJ pVorWkzg12,v1000,z100,tSWK\WObj:=wAufnahme;
    MoveJ pHome,v1000,z100,tSWK\WObj:=wobj0;
    ENDPROC


    dort habe ich ja immer tSWK. damit habe ich die Positionen auch angefahren. Ich versteh nich wenn du sagst das der tool0 nimmt. wenn ich doch tSWK nehme, dann fährt der die Position doch anders an.


    viele grüße und danke für die geduld :)

  • das war nur ein beispiel. macht aber auch sinn, weil ich habe 6 Greifer und jeder hat eigene tool-koordinaten, deswegen benutze ich
    normaleweise TCP mit werten vom tool0 für Vorpositionen und Grundstellung. Ich kann das nennen tDefault, tZero oder tSchiessMichTot.
    Z.B von einer station zur anderen kann ich mit einem beliebigen greifer fahren


    PROC mvHome_Abholen()
    MoveJ pHome , v1000 ,z100 ,tSchiessMichTot\WObj:=wobj0;
    MoveJ pVorPosAblage_10 , v1000 ,z100 ,tSchiessMichTot\WObj:=wobj0;
    MoveL pVorPosAblage_20, v1000 ,z5 ,tSchiessMichTot\WObj:=wobj0;
    MoveL pVorPosAblage_50, v40 ,fine ,tSchiessMichTot\WObj:=wobj0;
    ENDPROC
    PROC rAbholen_ProgrNr1()
    ...
    ENDPROC
    PROC rAbholen_ProgrNr2()
    ...
    ENDPROC
    PROC main()
    mvHome;
    while not feier_abend do
    mvHome_Abholen;
    %"rAbholen_ProgrNr" + ValToStr(nPrgNr)%;
    mvAbholen_Ablegen;
    %"rAblegen_ProgrNr" + ValToStr(nPrgNr)%;
    mvAblegen_Home;
    endwhile
    ENDPROC


    ... und jedes programm hat bewegung-instruktionen mit dem tool, der aktuell ist.
    :beerchug:

  • Guten Morgen,


    mh, ja das habe ich shcon verstanden was du sagst.


    Okay, dann nochmal zu meiner Frage. Ich habe jetzt ein Werkzeugwechselprogramm und verwende nur tSWK. Ist es sinnvoll, das tool zu ändern, wenn ich ein Werkzeug aufgenommen habe oder reicht es aus, das Programm mit tSWK durchzuführen, weil das Programm danach beendet wird und bei einem anderen Programmstart, dann ein anderes tool eingestellt ist. (Es sind alte Praktikaprogramme auf der Steuerung die dann mit tKulli programmiert sind oder so)


    Verstehst du jetzt was ich meine?



    Und hat jemand Erfahrung , wenn die Steuerung meldet, das das Programm zu komplex ist? Kann ich das umgehen, damit das Programm nicht einfach abbricht?


    Hab schon ein kurzes Programm, dass nur Routinen in einer System datei aufruft..


    viele grüße


    kuchi

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