CalcJoinT in RW 5.16 Error Handling when arm doesn't reach

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

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

Hi 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

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

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 aswell