Eigene MoveRoutine mit RelTool-Kompatibilität

  • Moin,


    auch wenn so kurz vor dem Wochenende:


    Ich habe mir folgendes geschrieben: (über Sinn und Unsinn kann man sicher streiten)

    Code
    PROC Test_Move2Pos(PERS robtarget pTarget,PERS tooldata tTool,PERS wobjdata wWobj,num Offset{*},speeddata TravelSpeed,zonedata Zone\switch Finepoint)
            IF NOT Present(Zone) THEN
                MoveJ Offs(pTarget,offset{1},offset{2},offset{3}),TravelSpeed,z5,tTool,\WObj:=wWobj;
            ELSE
                MoveJ Offs(pTarget,offset{1},offset{2},offset{3}),TravelSpeed,Zone,tTool,\WObj:=wWobj;
            ENDIF
            IF Present(Finepoint) MoveL pTarget,TravelSpeed,fine,tLocal\WObj:=wWobj;
        ENDPROC


    jetzt habe ich folgendes im weiteren Verlauf versucht:

    Code
    Test_Move2Pos RelTool(pReorient,0,0,-20),tGripper,wReorient,[0,0,0],vPlace,z0\Finepoint;


    und bekomme dann

    Zitat

    [...](38,22): Argument error(123): Argument for 'PERS' parameter pTarget is not a persistent reference or is read only. 17.05.2019 14:08:24 General


    mein Problem liegt nun darin, dass ich mir zwar denken kann worüber er sich beschwert (vermutlich werden die Daten nicht als robtarget wie gewünscht übergeben), aber leider keinen Ansatz habe wie ich das beheben kann ohne 400 weitere Funktionen oder Routinen zu schreiben.


    Ist das so überhaupt machbar oder sehen die Praxiserfahreren Damen und Herren da einen besseren Weg?


    Grund ist im Übrigen dass ich das Programm schlank und lesbar halten möchte.


    Ein schönes Wochenende wer hat

    Einmal editiert, zuletzt von yuminist ()

  • ANZEIGE
  • Morgen,


    würde folgender Weise wahrscheinlich gehen:
    [list type=decimal]

    • Du definiert die Position nicht als Pers robtarget sondern nur als robtarget

    • Du definierst eine globale Position, in welche du dann den Wert des Parameters einliest

    • In der Routine verwendest du dann die globale Position (ich weiß nicht ob eine lokale robtarget Position in der Routine so funktionieren würde, wie du es dir wünscht)

    [/list]



    edit:
    gerade getestet, das PERS brauchst du sowieso nicht zwangsweise, ist ohne auch OK

    Einmal editiert, zuletzt von @was ()

  • Hallo,


    als Persistent müssen nur Tool und Wobj übergeben.


    Robtargets benötigen keinen Festlegung des Datentyps, da ansonsten nur Robtargets, die als PERSISTENT deklariert sind, verwendet werden können, d.h. Du kannst weder das Ergebnis einer Funktion noch eine Konstante übergeben.


    WObj ist normalerweise ein optionaler Parameter und muss in Deinem Fall immer übergeben werden.
    Optionale Parameter könnnen durch die Verwendung eines "?" anstelle von ":=" weitergeben werden, falls der Parameter verwendet wird.


    Siehe nachfolgendes Beispiel:


    Code
    PROC Test_Move2Pos(robtarget pTarget,PERS tooldata tTool\PERS wobjdata wWobj,...)
     MoveJ Offs(pTarget,offset{1},offset{2},offset{3}),TravelSpeed,z5,tTool,\WObj?wWobj;


    Da deine Zone kein optionaler Parameter ist, macht die Abfrage "IF Present(Zone)" keinen Sinn, da dieser Parameter immer vorhanden ist.


    Mfg
    Micky

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

  • Micky


    vielen Dank für diese Aufschlussreichen Infos


    Dass robtargets nicht pers sein müssen war mir neu -.-


    Zitat

    Da deine Zone kein optionaler Parameter ist, macht die Abfrage "IF Present(Zone)" keinen Sinn, da dieser Parameter immer vorhanden ist.


    das hätte ich fast übersehen - war ein überbleibsel und natürlich völlig korrekt dass das so keinen sinn macht :)



    @was
    auch das funktioniert :)


    ich danke euch

  • Hallo,


    natürlich muss ein robtarget als persistant deklariert sein, wenn man es beschreiben möchte.


    Gruß Sebastian

    Nichts ist für die Ewigkeit .

  • Hallo Sebastian,


    Du hast recht, Konstanten können nicht beschrieben werden.


    Aber mit der Instruktion "Test_Move2Pos" wird nicht der Wert der geteachten robtarget geändert, sondern es wird nur deren Inhalt (Positionswert) zum Anfahren der Position verwendet. Aus diesem Grund ist es überhaupt erst möglich die Funktionen "Offs" und "RelTool" direkt in dem Aufruf von "MoveL" zu verwenden.


    Mfg
    Micky

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

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