For a crude explanation of theory: when creating frames with a job, you often start with the origin point. It essentially calculates the result of applying a shift to a position, in 3D. I use MULMAT rather frequently for calculating frames. All positions will be relative to the provided user frame, UF#(B001) in my example. You can also use any of the other offset methods available within the user frame job. Position variables should be taught in user frame coordinates. ' place the part in the bay - B001 is the user frame number, calculated elsewhere in the programĮvery position inside the PLACE_PART job will be referenced to the provided user frame. I created a user frame for each bay, and then called the pick/place jobs with the desired user frame. 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. This one is more useful when you have multiple user frames set up, and a common job to run in different user frames. ' put the modified D010's value into the X coordinate of P011 ' add 100mm to D010 and store the result back in D010 ' put the X coordinate value of P011 into D010 See the following example (my syntax may not be exact, I'm doing this from memory): 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.
It's a bit more code, but gets the job done. The "matrix math" is the part that I don't really understand. To clarify, the instruction does matrix math on P001 and P002 to calculate P003. 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). 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. This is also described above, so I won't go into great detail. Continuing from a hold or a fence break may cause issues as well. IMOV P002 V=800.0 - this is an incremental linear move, P002 is the offset position variableįor 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.īe 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. MOVJ P001 VJ=100.0 - this is a move to a known position Leave all fields zero except for the X/Y/Z direction offset values.
As mentioned above, create a position variable using ROBOT coordinates. There may be others.ġ) Using IMOV instructions. Here are several ways I have done offset moves with Motoman robots.