Robtarget Namen optimieren ;)

  • Hallo,


    gibt es eine mögkeit aus Movel pMachMal_40,v10,z1,.....


    das zu machen:


    MoveL pMachMal_+strtobyte(strProduct{byProduct_ID}),v10,z1,.....


    PERS string strProduct{10}:=["40","50","","","","","","","",""];
    !--Akt.Produktnummer
    PERS byte byProduct_ID:=1;


    Danke im Voraus!

  • ANZEIGE
  • Soweit ich weiß nicht.
    Aber versuch doch einmal ein Datenfeld zu verwenden (Array)
    Für Dich würde das Bedeuten
    PERS robtarget pMachMal{10}:=[" 10 positionsdaten"] = Am besten ist es Du definierst das Array im Roboter dann kannst DU keine Klammer vergessen.
    Und der Aufruf kann dann so erfolgen: MoveL pMachMal{nPosition},v10,z1,.......


    mit nPosition kannst Du dann mach was Du möchtest. (PERS nPosition)


    Gruß


    Sven

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Hallo,


    versuch es doch mal mit der folgenden Funktion:


    Code
    FUNC robtarget GetRobt(string Name)
        VAR robtarget pPoint;
    
    
        !Read the type depending position
        GetDataVal Name,pPoint;
        RETURN pPoint;
        !
      ENDPROC



    Dein Aufruf könnte dann wie folgt aussehen:


    Code
    MoveL GetRobt("pMachMal_"+strProduct{byProduct_ID}),v10,z1,.....


    Gruß
    Micky

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

  • Hallo,


    erstmal Danke für Deine Mühe. Da sieht man sofort dass einer von der Materie viel versteht.


    Geht es auch mit Offs oder Reltool?


    MoveL offs(GetRobt("pMachMal_"+strProduct{byProduct_ID}),0,0,0,v10,z1,.....

  • Hallo,


    da die Funktion "GetRobt" eine Robtarget zurückliefert, kannst Du alle anderen Funktionen die eine robtarget verändern benutzen, d.h. RelTool und Offs können, genauso wie Du es angegeben hast, verwendet werden.


    Gruß


    Micky

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

  • Cool, Danke nochmal! :danke:


    Ich habe da noch eine Frage:


    Das selbe Problem mit tools und wobj


    MoveL GetRobt("pMachMal_"+strProduct{byProduct_ID}),v10,z1,
    To_Gripper_40\WObj:=wo_HolPal;


    Kann man so etwas ähnliches mit To_Gripper_40 machen?


    Danke im Voraus!

  • Hi,


    mit der Instruktion GetDataVal kannst Du im Prinzip jeden beliebigen Wert auslesen. Vielleicht kannst Du auch die Instruktionen GetSysData bzw. SetSysData verwenden.


    Code
    FUNC tooldata GetToolData(string Name)
        VAR tooldata tool;
    
    
        !Read the type depending position
        GetDataVal Name,tool;
        RETURN tool;
        !
      ENDPROC



    Du solltest aber bei solchen Konstrukten darauf achten, dass dein Programm noch zu handhaben ist, denn beim Teachen der Positionen können sich dadurch recht schnell Fehler einschleichen. :aufsmaul:


    Gruß
    Micky

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

    Einmal editiert, zuletzt von Micky ()

  • :danke:


    Kann man den auch GetToolData("To_Gripper_"+strProduct{byProduct_ID})
    so bearbeiten, dass nur die ersten 2 oder die letzten 2 stellen im strProduct{}
    genommen werden? "4040"->"40" Und nicht den gesamten String.



    MoveL Offs(pHolPal{nProductNew},nPal_OffsX{nProductNew,byHolPalPos},
    nPal_OffsY{nProductNew,byHolPalPos}-150,
    nPal_OffsZ{nProductNew,byHolPalPos}+260),v1000,fine,
    GetToolData("To_Gripper_"+strProduct{byProduct_ID})\WObj:=wo_HolPal;

    PERS string strProduct{20}:=["4040","5050","","","","","","","","","","","","","","","","","",""];




    Ach ja, noch etwas. Bei dieser Func.
    FUNC tooldata GetToolData(string Name)
    VAR tooldata tool;


    !Read the type depending position
    GetDataVal Name,tool;
    RETURN tool;
    !
    ENDPROC


    kommt fehler raus:


    Argument `Pers`-Parameter Tool ist kein Verweis auf eine Persistente oder ist Schreibgeschützt.

  • Hi,


    wie Du die Werte des Arrays in der Funktion auswertest bleibt im Prinzip Dir überlassen.


    Du musst in Deinem Fall auf die Stringoperation StrPart zurückgreifen.




    Die Funktion "GetToolData" hat bei mir einwandfrei funktioniert. Du musst nur sicherstellen, dass das Tool als TASK PERS deklariert ist.


    :gutidee:


    Code
    TASK PERS tooldata tGripper1:=[TRUE,[[66.1163,0,77.3762],[0.92388,0.000172633,0.382683,0.000172633]],[4.6,[-44,56.5,18],[1,0,0,0],0.372,0.082,0.317]];
    TASK PERS tooldata tGripper2:=[TRUE,[[166.1163,0,77.3762],[0.92388,0.000172633,0.382683,0.000172633]],[4.6,[-44,56.5,18],[1,0,0,0],0.372,0.082,0.317]];
    
    
    tGripper1:=GetToolData("tGripper2");


    Gruß
    Micky

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

  • Ich hab das jetzt so gemacht :


    MoveL Offs(pHolPal{nProductNew},nPal_OffsX{nProductNew,byHolPalPos},nPal_OffsY{nProductNew,byHolPalPos}-150,nPal_OffsZ{nProductNew,byHolPalPos}+260),v1000,fine,GetTool("To_Gripper_")\WObj:=wo_HolPal;


    FUNC tooldata GetTool(string Name)
    VAR tooldata tool;
    VAR string stName;

    stName:=Name+StrPart(strProduct{nProductNew},1,2); !--Verwendung der ersten beiden Zeichen
    GetDataVal stName,tool; !--Read the ToolData
    RETURN tool;
    !--Aufruf
    !MoveL GetRobt("pMachMal_"+strProduct{nProductNew}),v10,z1,GetTool("To_Grippe_")\WObj:=wo_HolPal;
    ENDFUNC


    Und trotzdem kommt ein Fehler!


    Task Pers ist drin


    Argument `Pers`-Parameter Tool ist kein Verweis auf eine Persistente oder ist Schreibgeschützt.
    Keine () um das Argument verwenden

  • Hi,


    in einer MoveL Instruktion müssen die übergebenen tool und wobj-Daten als persistent deklariert werden.


    Aus diesem Grund darf der Aufruf der Function GetTool nicht in einer Bewegungsinstrukion (Movel) verwendet werden, da diese nur eine Wert zurückliefert.


    Du musst die Instruktion zweiteilen:


    1. Erforderliches Tool und wobjdata auslesen und einer persistenten zuweisen
    2. Bewegunginstruktion mit den zuvor zugewiesenen persistenten verwenden.


    Code
    Beispiel:
    
    
    TASK PERS tooldata tGripper:=...
    
    
    tGripper:=GetTool("To_Grippe_");
    MoveL  GetRobt("pMachMal_"+strProduct{nProductNew}),v10,z1,tGripper\WObj:=wo_HolPal;



    Gruß
    Micky

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

  • Hi,


    Du könntest Dir für diesen Fall einen eigene Move-Instruktion schreiben, bei der Du den Toolnamen als String übergibst und dieser intern ausgewertet wird.






    Gruß
    Micky

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

  • Micky,


    wieso funkt. bei Dir mit der Klammer und bei mir nicht?


    MoveL Offs(pHolPal{nProductNew},nPal_OffsX{nProductNew,byHolPalPos},
    nPal_OffsY{nProductNew,byHolPalPos}-150,
    nPal_OffsZ{nProductNew,byHolPalPos}+260),v1000,fine,
    GetToolData("To_Gripper_"+strProduct{byProduct_ID})\WObj:=wo_HolPal;

    was mache ich falsch?


    Kann man es auch als Proc ausrufen lassen anstatt der Func?

  • Hi,


    wie bereits erwähnt kannst Du die Funktion GetToolData bei der Instruktion MoveL nicht einsetzen, da diese eine persistente und keine Funktion erwartet.


    Aus diesem Grund hatte ich Dir ja vorgeschlagen eine eigene Move-Instruktion zu verwenden, die zuerst das Tool ausliest und einer persistenten zuweist um dann die Bewegung mit dem zuvor zugewiesenen Tool auszuführen.


    Leider habe ich deine Frage nicht verstanden, welche Klammers meinst Du den ?


    Du Kannst auch anstelle einer Funktion eine Prozedur mit Rückgabewert erstellen, aber diese kannst Du nicht innerhalb der MoveL Instruktion aufrufen, sondern muss vorher ausgeführt werden.


    Gruß
    Micky

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

    Einmal editiert, zuletzt von Micky ()


  • Kannst du mir schreiben, was mit (?) aufsich hat?


    MyMoveL Offs(pHolPal{nProductNew},nPal_OffsX{nProductNew,byHolPalPos},nPal_OffsY{nProductNew,byHolPalPos}-150,nPal_OffsZ{nProductNew,byHolPalPos}+260),v1000,fine,"To_Grippe_"\WObj:=wo_HolPal;

  • Hi,


    bei der Movel-Instruktion gibt es optionale Parameter, die man nutzen kann oder auch nicht.


    Wenn Du an eine Routine optionale Parameter übergibst, und diese beim Aufruf an eine anderen Routine übergeben möchtest, musst Du Prüfen ob der Parameter übergeben wurde und den Aufruf der Instruktion einmal mit und einmal ohne diesen Parameter programmieren.


    Code
    proc MyMoveL(...\num T,...)
    
    
      IF Present(T) THEN
          MoveL ....\T:=T....;
      ELSE
          MoveL ....
      ENDIF


    Wenn man aber wie in unserem Fall mehrere optionale Parameter übergibt, müsste man jede mögliche Kombination im Programm abfangen.


    Um dies zu vereinfachen gibt es das "?", d.h. bei einem optionalen Parameter schreibt man anstelle von "\T:=T einfach "\T?T".
    Wird z.B. bei unserer Routine der optionale Parameter "\T" verwendet, so wird er duch das "?" an die MoveL-Instruktion übergeben. Wird der Parameter "\T" aber nicht verwendet, so wird auch nicht weitergegeben.


    Der Programmieraufwand bei optionalen Parametern die weitergegeben werden müssen, wird durch die Verwendung des Fragezeichen erheblich reduziert.


    Gruß
    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