RobotStudio event

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
Tagged:

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,

    Harry
  • RAH101
    RAH101
    edited July 2022

    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