Good Morning,
We recently set up an 84" GL VTL (vertical turning lathe) that operates on G/L Numeripath 8000 control.
We are currently using a modified "fanuc-turning" post that reads the X values in radial mode (post is attached).
Our problem is that Fusion generates the "IJK" coordinates in an incremental mode rather than an absolute mode.
Here is what I mean by incremental-absolute:
"Absolute means that the circle center is described in coordinates relative to the work origin (0,0), where incremental means the circle center is described in terms coordinates relative to the arc start point."
-That seemed to me like a very satisfying definition, I found it on some other forum.
Can anyone offer some guidance on this matter? Does anyone have a post for Numeripath 8000?
Please see attached the F3D file of the part, the post we generated & the CPS file that we used to generate the post.
I would appreciate your feedback!
K.
Solved! Go to Solution.
Solved by GeorgeRoberts. Go to Solution.
The easiest way is to use radius mode.
There is a property setting called "use Radius", once you set that to true, you will see R-words for circular moves instead of IJK.
So incremental/absolute doesnt matter anymore.
Good Morning,
Thanks for posting! You are correct, the post processor you are using defines the center point of an arc using incremental co-ordinates. If you would like to use absolute co-ordinates for this, you will need to make a modification inside of the post processor.
To get the incremental co-ordinates, the center points absolute position is taken from the arc start position. To change these calculations, change this:
switch (getCircularPlane()) { case PLANE_XY: writeBlock(conditional(properties.type != "A", gAbsIncModal.format(90)), gPlaneModal.format(17), gMotionModal.format(clockwise ? 2 : 3), iOutput.format(cx - start.x, 0), jOutput.format(cy - start.y, 0), getFeed(feed)); break; case PLANE_ZX: writeBlock(conditional(properties.type != "A", gAbsIncModal.format(90)), gPlaneModal.format(18), gMotionModal.format(clockwise ? 2 : 3), iOutput.format(cx - start.x, 0), kOutput.format(cz - start.z, 0), getFeed(feed)); break; case PLANE_YZ: writeBlock(conditional(properties.type != "A", gAbsIncModal.format(90)), gPlaneModal.format(19), gMotionModal.format(clockwise ? 2 : 3), jOutput.format(cy - start.y, 0), kOutput.format(cz - start.z, 0), getFeed(feed)); break; default: linearize(tolerance); } } else if (!properties.useRadius) { switch (getCircularPlane()) { case PLANE_XY: writeBlock(conditional(properties.type != "A", gAbsIncModal.format(90)), gPlaneModal.format(17), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx - start.x, 0), jOutput.format(cy - start.y, 0), getFeed(feed)); break; case PLANE_ZX: writeBlock(conditional(properties.type != "A", gAbsIncModal.format(90)), gPlaneModal.format(18), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx - start.x, 0), kOutput.format(cz - start.z, 0), getFeed(feed)); break; case PLANE_YZ: writeBlock(conditional(properties.type != "A", gAbsIncModal.format(90)), gPlaneModal.format(19), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), jOutput.format(cy - start.y, 0), kOutput.format(cz - start.z, 0), getFeed(feed)); break; default: linearize(tolerance); } } else { // use radius mode
To this:
switch (getCircularPlane()) { case PLANE_XY: writeBlock(conditional(properties.type != "A", gAbsIncModal.format(90)), gPlaneModal.format(17), gMotionModal.format(clockwise ? 2 : 3), iOutput.format(cx), jOutput.format(cy), getFeed(feed)); break; case PLANE_ZX: writeBlock(conditional(properties.type != "A", gAbsIncModal.format(90)), gPlaneModal.format(18), gMotionModal.format(clockwise ? 2 : 3), iOutput.format(cx), kOutput.format(cz), getFeed(feed)); break; case PLANE_YZ: writeBlock(conditional(properties.type != "A", gAbsIncModal.format(90)), gPlaneModal.format(19), gMotionModal.format(clockwise ? 2 : 3), jOutput.format(cy), kOutput.format(cz), getFeed(feed)); break; default: linearize(tolerance); } } else if (!properties.useRadius) { switch (getCircularPlane()) { case PLANE_XY: writeBlock(conditional(properties.type != "A", gAbsIncModal.format(90)), gPlaneModal.format(17), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx), jOutput.format(cy), getFeed(feed)); break; case PLANE_ZX: writeBlock(conditional(properties.type != "A", gAbsIncModal.format(90)), gPlaneModal.format(18), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx), kOutput.format(cz), getFeed(feed)); break; case PLANE_YZ: writeBlock(conditional(properties.type != "A", gAbsIncModal.format(90)), gPlaneModal.format(19), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), jOutput.format(cy), kOutput.format(cz), getFeed(feed)); break; default: linearize(tolerance); } } else { // use radius mode
Then finally, change this:
// circular output var kOutput = createReferenceVariable({prefix:"K"}, spatialFormat); var iOutput = createReferenceVariable({prefix:"I"}, spatialFormat); // no scaling
To this:
// circular output var kOutput = createVariable({prefix:"K"}, spatialFormat); var iOutput = createVariable({prefix:"I"}, spatialFormat); // no scaling
Hope this helps!
George Roberts
Manufacturing Product managerHi everyone!
I have same problem but for cnc mill. My mill G02 and G03 IJK understand just in absolute mode. IJK dimensions need from X0 Y0 Z0.
Can someone help this out?
Can't find what you're looking for? Ask the community or share your knowledge.