# Frame and tool offset

• Hello guys, i need to make some movements with frame and tool offset..can you help me?

For example, in Kuka i do something like LIN Position1 : {offset)
Thank you so much!!

• Are you talking about a relative move of a certain direction and distance?

If so
1) set up the Position variable with the direction, distance (mm)
2) use the IMOV command
for example
IMOV P020 V=200 UF#1
which would move the robot the relative direction and distance, relative to UF#1, at a velocity of 200

If not, could you please explain what you are trying to do? Thanks!

• I'D like to move to P21 position with specified offset (for example, 200mm in z direction). In Kuka i do something like that: LIN P1 : {x 0,y 0,z 200,a 0,B 0,c 0}
Thank you so much!

• Bulo

From roboprof

1) set up the Position variable with the direction, distance (mm)
2) use the IMOV command
for example
IMOV P020 V=200 UF#1
which would move the robot the relative direction and distance, relative to UF#1, at a velocity of 200

1)Select Variables, then P, then search for P020, Select the coord (pulse, robot............) you want to use.
Modify/Teach that P point (doesnt matter where the robot is), then zero all the values and write 200 on the Z

Retired but still helping

• If I am understanding what you want...

Set your offset amount into another P-var, e.g. P022, as an XYZ-type with all elements zero, except for Z=200
Then in your job, do this:

SFTON P022
MOVL P021
SFTOFF

This will move to P021, offset by the value in P022

• Nice! I'll try IT thank you so much! And IF I want IT in tool offset?

• -Position variable P022 must set to Tool
-Select SFTON then change coordinat become TF (Tool Frame)
-Instruction become :

SFTON P022 TF
MOVL P021
SFTOFF

• Be aware, you can SFTON P022 on ANY frame, not just tool. User, world work as well.

• Hi;

You can write your owen macro command by yourself.

like figure attachted, but writing program you nned to be carefull anyway it will be good practice.

## Files

• Here are several ways I have done offset moves with Motoman robots. There may be others...

1) Using IMOV instructions. As mentioned above, create a position variable using ROBOT coordinates. Leave all fields zero except for the X/Y/Z direction offset values. Then in your job do this:

MOVJ P001 VJ=100.0 -- this is a move to a known position
IMOV P002 V=800.0 -- this is an incremental linear move, P002 is the offset position variable

For example if you had set X=100 and Z=-100, the robot would linearly move, from the position P001, 100mm in the X direction and -100mm in the Z direction.

Be aware that when stepping through the job in teach mode, that the IMOV instruction moves from the robot's current position, so you may have to cursor up to the previous move instruction to get to P001 before executing the IMOV instruction. Continuing from a hold or a fence break may cause issues as well.

2) Using SFTON/SFTOFF

This is also described above, so I won't go into great detail. The thing to be aware of here is that there are conditions where the shift operation is cancelled--if I remember correctly, anytime servos are turned off.

3) Using MULMAT and INVMAT

I don't use this one often, mainly because I don't have a good understanding of how they work, but you can use a predefined offset position variable (call it P002) to generate a new position variable (call it P003) based on another (call it P001). To clarify, the instruction does matrix math on P001 and P002 to calculate P003. The "matrix math" is the part that I don't really understand.

4) Using SETE/GETE

This is the one I prefer. It's a bit more code, but gets the job done. It works really well for pick/place type operations, giving you the ability to modify only the part position and your approach and depart positions get calculated in the job. See the following example (my syntax may not be exact, I'm doing this from memory):

' put the value of P001 into P011
SET P011 P001
' put the X coordinate value of P011 into D010
GETE P011 (1) D010
' add 100mm to D010 and store the result back in D010
' put the modified D010's value into the X coordinate of P011
SETE P011 (1) D010
' move to the positions
MOVL P001 V=800.0
MOVL P011 V=800.0

Element numbers are:
1 = X
2 = Y
3 = Z
4 = Rx
5 = Ry
6 = Rz

5) Call a job with a UF# tag

This one is more useful when you have multiple user frames set up, and a common job to run in different user frames. For example I recently did a job where I was storing boxes in multiple bays, each of which had identical dimensions and box placement patterns. I created a user frame for each bay, and then called the pick/place jobs with the desired user frame. Code would like something like this:

' move to the bay approach position
CALL JOB:MOVE_TO_APPROACH
' place the part in the bay -- B001 is the user frame number, calculated elsewhere in the program
CALL JOB:PLACE_PART UF#(B001)

Every position inside the PLACE_PART job will be referenced to the provided user frame. Position variables should be taught in user frame coordinates.

You can also use any of the other offset methods available within the user frame job. All positions will be relative to the provided user frame, UF#(B001) in my example.

Scott

• 3) Using MULMAT and INVMAT

I don't use this one often, mainly because I don't have a good understanding of how they work, but you can use a predefined offset position variable (call it P002) to generate a new position variable (call it P003) based on another (call it P001). To clarify, the instruction does matrix math on P001 and P002 to calculate P003. The "matrix math" is the part that I don't really understand.

I use MULMAT rather frequently for calculating frames. It essentially calculates the result of applying a shift to a position, in 3D. For a crude explanation of theory: when creating frames with a job, you often start with the origin point. Then to create the frame you need ORG, XX, and XY. Use the MULMAT to apply an offset of whatever distance in X, to the origin, and the result will be XX.

As you might guess, INVMAT is basically the inverse of MULMAT. If you wish to calculate the offset from one point to another, the INVMAT is very useful.

That's just a quick description. After lots of , I feel like I finally figured those two instructions out so I'd be willing to help others if they were interested.

• I use MULMAT rather frequently for calculating frames. It essentially calculates the result of applying a shift to a position, in 3D. For a crude explanation of theory: when creating frames with a job, you often start with the origin point. Then to create the frame you need ORG, XX, and XY. Use the MULMAT to apply an offset of whatever distance in X, to the origin, and the result will be XX.

As you might guess, INVMAT is basically the inverse of MULMAT. If you wish to calculate the offset from one point to another, the INVMAT is very useful.

That's just a quick description. After lots of , I feel like I finally figured those two instructions out so I'd be willing to help others if they were interested.

can you post a small example of a job using mulmat and invmat? that would be very helpfull to undstand better the instructions

• This is a very delayed reply, but someone may find it useful some day. Here are some simple job examples.

Example job using MULMAT: This job will create user frame 1, rotated around Z at 45 degree from the base frame.

GETS LPX000 \$PX001
MUL LP000 0
SET LP001 LP000
SET LP002 LP000
SETE LP000 (6) 450000 Sets up an origin point at the base, rotated 45deg about Z
SETE LP001 (1) 100000 Sets up LP001 as a 100mm offset in X
SETE LP002 (2) 100000 Sets up LP002 as a 100mm offset in Y
MULMAT LP001 LP000 LP001 Overwrites LP001 as a point shifted 100mm in X from the origin point, LP000
MULMAT LP002 LP000 LP002 Overwrites LP002 as a point shifted 100mm in Y from the origin point, LP000
MFRAME UF#(1) LPX000 LPX001 LPX002 Creates the frame

Example of job using INVMAT: This will calculate the offset from a point, back to the origin of its frame.

GETS LPX000 \$PX001
MUL LP000 0
SETE LP000 (1) 100000
SETE LP000 (2) 100000
SETE LP000 (6) 450000
INVMAT LP001 LP000

Picture moving to LP000, a point 100mm in X and Y, with a 45 degree rotation. In this job, this PVAR is in base coordinates but it would be more realistic in a user frame. The INVMAT instruction then calculates the offset you would need to say IMOV the robot from LP000 to the origin of whichever frame the PVAR is in. INVMAT and MULMAT work in 3D so it's even more useful when Rx and Ry values are being used.

• summarazing the theme: what is the most elegant way to rotate tool around Z 90 degrees for a part of job? SFTON P001 TL ignores all the rotation, unfortunately.

• summarazing the theme: what is the most elegant way to rotate tool around Z 90 degrees for a part of job? SFTON P001 TL ignores all the rotation, unfortunately.

What does the controller ignore? What does the robot do? Any alarms? If your tool is defined so that the Z of the tool frame is going into the workpiece this works on the robots I use. If the tool is positioned so the Z is straight up and down with respect to the part I can jog Rz more than 300 degrees. If I can jog there the job can get there.

## I know a thing or two, because I’ve seen a thing or two. Don't even ask about a third thing. I won't know it.

• What does the controller ignore? What does the robot do? Any alarms? If your tool is defined so that the Z of the tool frame is going into the workpiece this works on the robots I use. If the tool is positioned so the Z is straight up and down with respect to the part I can jog Rz more than 300 degrees. If I can jog there the job can get there.

plz sorry, my fault. I used RZ as 90 instead of 900000. I just need to get used to that notation)

SFTON SFTOF are good.

• Thank guys. This help me a lot.

Stay safe.