CalcJoinT in RW 5.16 Error Handling when arm doesn't reach
RAH101
✭
Hi, I'm using an IR120 with an IRC5 controller which as far as I am aware only supports robotware upto version 5.16.
My issue comes when using the function CalcJoinT on a position that is outside the robot's reach. I do not have the option to catch ERR_OUTSIDE_REACH as I think it was not implemented in this version.
I only have available ERR_ROBLIMIT which I am catching and allows the program to keep going.
Is there a way around this in version 5.16?
BR.
Rodrigo
My issue comes when using the function CalcJoinT on a position that is outside the robot's reach. I do not have the option to catch ERR_OUTSIDE_REACH as I think it was not implemented in this version.
I only have available ERR_ROBLIMIT which I am catching and allows the program to keep going.
Is there a way around this in version 5.16?
BR.
Rodrigo
Tagged:
0
Answers
-
HI RAH101,
I'm not sure about robotware versions on the IR120, but in regards to CalcJointT.
Does it show up as an error when you calculate a position that is out of reach? Surely if the program stops it has an error you can see?
If not I can suggest a workaround.
Regards,
Harry0 -
Forge_Engineering said:HI RAH101,
I'm not sure about robotware versions on the IR120, but in regards to CalcJointT.
Does it show up as an error when you calculate a position that is out of reach? Surely if the program stops it has an error you can see?
If not I can suggest a workaround.
Regards,
Harry
First of all, thanks for your answer.
When asking for the arm to move to an unreachable position on the flexpendant I get:
----------------------------
Event Message 40625
Limit Error
Description
Task: R_ROB1
Program reference path
Probable causes
----------------------------
The reason for the error is obvious, I just need to catch it so I can keep the program running
0 -
Hi RAH101,
Does the error show up when you execute CalcJointT? Or when you execute a MoveAbsJ?
In any case you should be able to catch the error by extracting the errdomain and errorID with a TRAP routine that triggers on all errors, and then check the domain and ID in your error handler to catch when a limit error occurs:MODULE MainModule VAR intnum err_interrupt; VAR errdomain err_domain; VAR num err_number; VAR errtype err_type; VAR trapdata err_data; PROC Main() CONNECT err_interrupt WITH trap_err; IError COMMON_ERR, TYPE_ERR, err_interrupt; ! do stuff ERROR ! Check the domain and error number IF err_domain = 4 AND errno = 625 THEN ! Limit error recovery ENDIF ENDPROC ! Trap routine to catch all errors and extract information TRAP trap_err GetTrapData err_data; ReadErrData err_data, err_domain, err_number, err_type; ENDTRAP ENDMODULE
Good Luck,
Harry
0 -
Hi Harry,Thanks again for the answer, my error is in the instruction: joints_setpoint:=CalcJointT(Inverse_Setpoint,tool0\WObj:=wobj0\ErrorNumber:=myerrnum);
I didn't manage to adapt your code to to my RAPID program. I solved it just by sending a UImsgBox in the error routine
I believe your code is missing the idelete before the connect aswell0
Categories
- All Categories
- 5.5K RobotStudio
- 396 UpFeed
- 18 Tutorials
- 13 RobotApps
- 297 PowerPacs
- 405 RobotStudio S4
- 1.8K Developer Tools
- 250 ScreenMaker
- 2.8K Robot Controller
- 316 IRC5
- 61 OmniCore
- 7 RCS (Realistic Controller Simulation)
- 800 RAPID Programming
- AppStudio
- 3 RobotStudio AR Viewer
- 18 Wizard Easy Programming
- 105 Collaborative Robots
- 5 Job listings