I am programming a Fanuc welding robot and my table sits at an angle to the cartesian axes of the robot. I have defined the table surface as a user frame and I am welding multiple small circular motions on the table. The circles are offset 130 in the "table x" and 130 in the "table y". I wrote a programme for one circle which I want to call with offsets instead of teaching many individual points.
What I am struggling with is how to offset the called programme. In the material I have gone through on offsets, I realise that one can use the offset function per individual point, but that would be very tedious to do as I have to add offsets to everything, even my lead-in and lead-out points. I have looked at changing the user frame dynamically. How I did this was:
- write the original table UF coordinates into a position register (say PR1).
- write PR1 into PR2 (PR2 is the dynamic PR)
- write PR2 into UF[2]
- call programme. The programme uses UF2
- offset PR2 [2,1 &2,2&2,3] as desired
- write the new PR2 into UF[2]
- call programme
- write PR1 into PR2 to cancel out the offset
- write the reset PR2 into UF[2]
- offset PR2 with new values.
- Write the new PR2 into UF[2]
- call programme
.... the cycle repeats.
The challenge I am facing now is that since the table is at an angle to the robot's cartesian (see attached picture), assuming I need one circle to be 130 mm ahead of the other one only in "table x", I have to go and calculate how much "world x" and "world y" I need to adjust PR2 by.
Is there a way in which I can have a PR that's already in the table user frame that I can use to adjust only the x in the table UF if I want to offset only in the table x?