My company is rewriting our standard Rapid templates for ABB robots, and one of the biggest things I want to improve is recovery and auto-homing. Right now, we use MoveJSync/MoveLSync to count steps as the robot moves through each position. The step number and current program are stored in persistent variables because with IFWC homing always requires a start @ main command and we need some way to remember where the robot was. This is a huge pain because if a corner path failure occurs, the sync instructions can be missed. The old template even used MoveXSync with fine points, which was another issue. If the step is not correct, the robot will not recover correctly.
I would like to use the path recorder to make recovery easy. I've already set up some tests with it and have had success, but I have some questions I haven't been able to find answers to or test:
1.) Since recovery means the program pointer gets reset, does this also destroy any recorded paths? If so, this whole idea is mute unless I can do something in the UNDO handler.
2.) Can PathRecMoveBwd be used even if the robot deviates from the programmed path, say for example with a SearchL \Stop instruction? I think that as long as a PathRecStop \Clear hasn't been executed then it should work and the recorded path will be a little different than the programmed path, but the wording in the documentation is causing some doubts.
3.) Can multiple PathRecMoveBwd's be executed in a row? The idea is that if the robot does deviate from the programmed path, I would first like to move backwards to the closest point along the path, then move backwards all the way back. I have multiple path recorder ID's set up, and IFWC comes with a handy little CheckLocation function, so the process would be to check which location I am closest to, see if a valid backwards path exists to that ID, execute a PathRecMoveBwd to that ID, see if a valid backwards path exists to the first ID, then execute another PathRecMoveBwd to that ID at the start of the path. Nothing in the manual says that this isn't possible, but there also aren't any examples where they do this.
Here's an example of what I'm trying to do:
IF (bHoming = TRUE) THEN IF (CheckLocation(20,p50,tGripper) = TRUE) THEN IF (PathRecValidBwd(\ID:=pathInStep4) = TRUE) THEN StorePath; PathRecMoveBwd \ID:=pathInStep4; IF (PathRecValidBwd(\ID:=pathInStep1) = TRUE) THEN PathRecMoveBwd \ID:=pathInStep1; ENDIF PathRecStop \Clear; ENDIF ENDIF ENDIF MoveJ p10,v1000,z200,tGripper; PathRecStart pathInStep1; MoveL p20,v800,z30,tGripper; PathRecStart pathInStep2; MoveL p30 v200,z20,tGripper; PathRecStart pathInStep3; MoveL p40,v200,z20,tGripper; PathRecStart pathInStep4; SearchL \Stop,di2,sp,p50,v50,tGripper;