Kann mir jemand sagen was das Fragezeichen bei WobJ soll?
MoveAbsJ Pos,speed,zone,tool\WobJ?WobJ;
Vielen Dank
Kann mir jemand sagen was das Fragezeichen bei WobJ soll?
MoveAbsJ Pos,speed,zone,tool\WobJ?WobJ;
Vielen Dank
Wo kommt denn die Codezeile her? Wie ein großer dt. Philosoph mal sagte: "Ich brauche mehr Details..."
Aus der Hüfte sage ich: das ist ein Darstellungsfehler, möglicherweise durch ein ext. Programmiertool (zB. UltraEdit, notepad++ o.ä.) erzeugt.
Vielen Dank AtoK09
Das steht so im Roboterprogramm auf dem Flexpendant.
Also nur rein als Vermutung:
Da du eine absolute Achsbewegung fahren möchtest ist ein Werkobjekt nicht erforderlich und demnach als Info auch nicht von belang.
Normal wäre das Wobj:=wobj0
...
MoveAbsJ Pos,speed,zone,tool\WobJ?WobJ;
...
das ist keine Anweisung in Rapid, "Pos", "speed", "zone" aber auch "tool" sollten normalerweise mit Werten belegt sein, wie zB.p1,v500,z200 oder tTool1, somit würde die Anweisung
MovsAbsJ p1,v500,z200,tTool1; aussehen. Wobei wie Sven Weyer schon schrieb für eine MoveAbsJ sind eineige Werte nicht notwendig, zum Beispiel auch die Zone.
Wenn wir mehr Details bekämen würde sich das evtl. aufklären. Hat der Programmierer möglicherweise eine eigene Bewegungsanweisung geschrieben?
Vor Urzeiten hat ein kontrollverliebter Programmierer eine Funktion geschrieben damit er der SPS jederzeit seine Position im Roboterprogramm mitteilen kann. Sieht so aus:
PROC Move_J(num regGST,
robtarget Pos,
speeddata speed,
zonedata zone,
PERS tooldata tool
\PERS wobjdata WobJ)
VAR triggdata tPos;
TriggIO tPos,0\Time\GOp:=goPosition,regGST;
TriggJ Pos,speed,tPos,zone,tool\WobJ?WobJ;
pAkt:=Pos;
BACKWARD
MoveJ Pos,speed,zone,tool\WobJ?WobJ;
pAkt:=Pos;
SetGO goPosition,regGST;
ENDPROC
Dies ist die aufrufende Instruktion:
Move_J 1421,Ablegen_Montage_Typ3{2},vHigh,zPos2,tGreifer1\WObj:=wBand;
Okay, gut zu wissen, aber bringt uns deiner eingebrachten Frage leider nicht wirklich weiter.
Die Instruktion MoveJ und MoveAbsJ sind zwei unterschiedliche Themen aus Sicht der Positionsdaten.
Gehen wir einmal davon aus das es nicht nur für die MoveJ sondern auch für die MoveAbsJ so eine Routine in deinem Programm gibt, wäre es dann nicht besser diesen Quellcode zu veröffentlichen?
Demnach weiß ich jetzt nicht wie dein letzter Post mit dem ersten Post in Verbindung steht?
Das gibt es für MoveAbsJ, MoveL, MoveJ, MoveL RelTool, MoveJ RelTool, MoveL Offs, MoveJ Offs,
PROC Move_AbsJ(num regGST,
jointtarget Pos,
speeddata speed,
zonedata zone,
PERS tooldata tool
\PERS wobjdata WobJ)
MoveAbsJ Pos,speed,zone,tool\WObj:=WObj;
pAkt:=CalcRobT(Pos,tool);
SetGO goPosition,regGST;
BACKWARD
MoveAbsJ Pos,speed,zone,tool\WObj:=WObj;
pAkt:=CalcRobT(Pos,tool);
SetGO goPosition,regGST;
ENDPROC
Ich hab das gerade mal ins RobotStudio eingebunden deinen Quellcode.
Es ist mir zwar neu, aber das will ja nix heißen, aber scheinbar ist es auch möglich das ":=" gegen ein "?" zu ersetzen.
Welche genauen Auswirkungen das hat kann ich dir leider aktuell nicht sagen aber die Steuerung scheint diesen Syntax als gleichwertig zu akzeptieren.
Ich habe dies auch bei einem anderen Projekt gerade getestet, mit positiven Erfolg.
Tja Sachen gibt's, man lernt nie aus.
Jetzt wird's witzig,
Bei deiner Move_Abs sind keine "?" verwendet aber bei deiner Move_J schon?
Doch eigentlich bei allen. Ich habe aber die ? schon durch := ersetzt. Sorry.
Hab es noch einmal getestet.
Es ist so das die Übergabe des Wobj als optionaler Parameter gilt und das "?" verhindert einen Fehler wenn Wobj nicht übergeben wird.
Also denke ich solltest du aufpassen wenn du die "?" alle ersetzt durch die ":=" Anweisung. Dies führt dazu das du bedingt immer die Variable WobJ innerhalb deiner Routine mit Daten vorhanden haben musst.
So zumindest mal der aktuelle Stand, meiner Meinung nach.
Also ich hab es jetzt noch einmal getestet.
Das Fragezeichen verhindert im RobotStudio einen Fehler, die Steuerung selber merkt dies aber und bringt diesen Fehler in einem normalen Programm wenn man bei der Werkobjetübergabe in Bewegungsinstruktionen das ":=" mit "?" ersetzt und das Werkobjekt nicht vorhanden ist.
Bei deiner Routine ist es so, dass der Übergabeparameter WobJ optional ist und da bei den Bewegungsinstruktionen, auch MoveJ etc., das Werkobjekt nicht zwingen übergeben werden muss, Default wäre wobj0. Wird hier mit dem Fragezeichen dafür gesorgt das du ohne weitere Auswertung, ob die Übergabevariable initialisiert wurde oder nicht innerhalb deiner Routine, die Instruktion für den Roboter abarbeitungsfähig bleibt ohne einen Fehler zu generieren.
Wenn du jetzt alles auf ":=" änderst kann das unter Umständen Fehler erzeugen.
Interessante Information, liegt aber nur daran das die Bewegungsinstruktionen den Parameter wobj als optional ansehen.
Also schön vorsichtig mit deinen Änderungen.
Am besten mal im gesamten Programm nach schauen ob dort deine Routinen auch einmal ohne Wobj-Übergabe aufgerufen werden.
Das wusste ich auch noch nicht...
Das ? kann für die Übergabe von optionalen Parametern verwendet werden. Ist der Parameter angegeben/vorhanden, dann wird dieser verwendet. Wenn nicht vorhanden, dann wird dieser nicht verwendet.
Kann alles im Handbuch RAPID Kernel nachgelesen werden, z.B. im Kapitel "Optional or conditional arguments".
Moin DS,
danke für den Hinweis, da kann man so alt werden wie man will aber das mit der Doku lesen wird im alter nicht besser.
Ich habe einmal einer Doku vom RobotStudio nachgesehen und konnte leider dein Kapitel nicht finden.
Ich verwende gerade:
Technical reference manual
RAPID kernel
RobotWare 6.14
Document id: 3HAC050946-001
Revision J
Könntest du einmal prüfen, wenn du Zeit hast , mit welcher Dokumentenversion du arbeitest?
Die Beschreibung zu dem Thema würde mich schon interessieren.
Gruß
Danke dir.
Moin Sven,
ich habe genau die gleiche Revision zur Hand. Ich habe das Dokument allerdings aus der ABB Library, wobei das keinen Unterschied machen sollte.
Schau mal in Kapitel 3.11 Function calls. Dort wird das Ganze beschrieben.
Danke Dir,
jupp dort habe ich es gefunden.