25. Mai 2019, 03:02:23
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

[gelöst] Eigene MoveRoutine mit RelTool-Kompatibilität


normal_post Autor Thema: [gelöst] Eigene MoveRoutine mit RelTool-Kompatibilität  (Gelesen 935 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

17. Mai 2019, 14:12:14
Gelesen 935 mal
Offline

yuminist


Moin,

auch wenn so kurz vor dem Wochenende:

Ich habe mir folgendes geschrieben: (über Sinn und Unsinn kann man sicher streiten)
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:
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
« Letzte Änderung: 20. Mai 2019, 13:40:46 von yuminist »
  • gefällt mir    Danke

Heute um 03:02:23
Antwort #1

Werbung

Gast

20. Mai 2019, 07:30:48
Antwort #1
Offline

@was


Morgen,

würde folgender Weise wahrscheinlich gehen:
  • 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)


edit:
gerade getestet, das PERS brauchst du sowieso nicht zwangsweise, ist ohne auch OK
« Letzte Änderung: 20. Mai 2019, 08:00:07 von @was »

20. Mai 2019, 11:15:00
Antwort #2
Offline

Micky


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:

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)

20. Mai 2019, 13:40:14
Antwort #3
Offline

yuminist


@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
  • gefällt mir    Danke

21. Mai 2019, 16:10:50
Antwort #4
Offline

Sebastian78


Hallo,

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

Gruß Sebastian
  • gefällt mir    Danke
Mein privater Beitrag zu Informationen über Industrieroboter: http://www.industrie-roboter.com

Heute um 03:02:23
Antwort #5

Werbung

Gast

21. Mai 2019, 16:39:23
Antwort #5
Offline

Micky


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
  • gefällt mir    Danke
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)


Teile per facebook Teile per linkedin Teile per pinterest Teile per reddit Teile per twitter
 

über das Roboterforum

Nutzungsbedingungen Impressum Datenschutzerklärung

Sponsoren des Roboterforums

ROBTEC GmbH