12-07-2022, 04:19 AM
That example uses ProgramStart() / MoveJ() / Finish() to create a program on the fly (which is useful, since I was also confused about ProgramStart()). But in my case I have a program in the tree which I don't think I can run with that approach? I normally use RunProgram(), but with RUNMODE_SIMULATE I get a modal dialog box about "Target at instruction MoveJ (Target 1) is not reachable", which blocks my code until I click. If I use QUICKVALIDATE it doesn't give me any indication that there's a problem.
Is RUNMODE_QUICKVALIDATE only intended for use with ProgramStart() / Finish() and not RunProgram/MakeProgram?
Steps to reproduce:
New station, load UR10e model, create a program, create a MoveJ, then:
>>> t = rdk.Item("Target 1")
>>> t.Valid()
True
>>> t.setPoseAbs(robomath.transl(5000,0,0)) # Move target out of reach of robot
RoboDK item (93857965933680) of type 6
>>> rdk.RunProgram("Prog1")
0
>>> # ^ Here I get a modal dialog in the GUI about the unreachable target
>>> rdk.setRunMode(robolink.RUNMODE_QUICKVALIDATE)
>>> rdk.RunProgram("Prog1")
0
>>> # ^ Here I get no indication there's anything wrong
Also, if I don't dismiss the dialog box soon enough, the API drops:
Traceback (most recent call last):
File "", line 1, in
File "/home/j/RoboDK/Python/robodk/robolink.py", line 2226, in RunProgram
prog_status = self.RunCode(fcn_param, True)
File "/home/j/RoboDK/Python/robodk/robolink.py", line 2254, in RunCode
prog_status = self._rec_int()
File "/home/j/RoboDK/Python/robodk/robolink.py", line 918, in _rec_int
buffer = self.COM.recv(4)
socket.timeout: timed out
Huh, looks like maybe calling Update() and checking the valid_ratio does what I want? But the modal dialog still seems like a bug and messed up a long batch job of mine.
Is RUNMODE_QUICKVALIDATE only intended for use with ProgramStart() / Finish() and not RunProgram/MakeProgram?
Steps to reproduce:
New station, load UR10e model, create a program, create a MoveJ, then:
>>> t = rdk.Item("Target 1")
>>> t.Valid()
True
>>> t.setPoseAbs(robomath.transl(5000,0,0)) # Move target out of reach of robot
RoboDK item (93857965933680) of type 6
>>> rdk.RunProgram("Prog1")
0
>>> # ^ Here I get a modal dialog in the GUI about the unreachable target
>>> rdk.setRunMode(robolink.RUNMODE_QUICKVALIDATE)
>>> rdk.RunProgram("Prog1")
0
>>> # ^ Here I get no indication there's anything wrong
Also, if I don't dismiss the dialog box soon enough, the API drops:
Traceback (most recent call last):
File "
File "/home/j/RoboDK/Python/robodk/robolink.py", line 2226, in RunProgram
prog_status = self.RunCode(fcn_param, True)
File "/home/j/RoboDK/Python/robodk/robolink.py", line 2254, in RunCode
prog_status = self._rec_int()
File "/home/j/RoboDK/Python/robodk/robolink.py", line 918, in _rec_int
buffer = self.COM.recv(4)
socket.timeout: timed out
Huh, looks like maybe calling Update() and checking the valid_ratio does what I want? But the modal dialog still seems like a bug and messed up a long batch job of mine.