- Configuring LinuxCNC
- Advanced Configuration
- Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine
Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine
- jochen91
- Offline
- Junior Member
-
Less
More
- Posts: 28
- Thank you received: 3
10 Apr 2025 09:21 - 11 Apr 2025 10:19 #326021
by jochen91
Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine was created by jochen91
Hello Folks,
I'm thinking hardly about acquiring a used Mazak Integrex200Y Millturn machine.
It uses and old Fusion640MT control with floppy drive data input. I'm planning to use Fusion for the CAM side of things.
My purchasing decision is a bit dependent on the feasibility of the project in terms of LCNC retrofit. So far i have the following requirements and parts of a solution for it:
Starting with the
Kinematics:
Since its a 5 axis Mill-turn machine i need a custom Kinematics file with switchable TCP function. Additionally the Y-Axis is interpolated with the
X- Axis and an auxiliary Y1-Axis.
Axis in Question:
X - Linear
Y - Virtual Linear
Z - Linear
C - 360° Rotary
B - +/- 90° Rotary
I've played around with ChatGPT and it seems to be somehow possible. But i would prefer an answer from a knowledgeable human being
Hardware:
I found the cards from yurtaev.com. So it should be technically possible to reuse the old Mitsubishi spindle and servo drives.
Turning + C-Axis + Clamping:
Since it is a Mill-Turn, the lathe spindle can be used as a traditional turning spindle but also as a C-Axis for 4/5 Axis simultaneous or 3+2 with clamping. I assume this involves also a bit of PP work to tell the machine when to clamp/unclamp ?
Is this possible to implement in LCNC ?
Hydraulic Tail Stock:
The machine has an hydraulically activated tailstock that moves into position by the help with the Z-Axis. I assume i can implement this functionality
with custom M-Codes and some work in the PP?
EDIT: RotarySMP Pointed my in the right direction, i will use a custom comp.#
Postprocessor:
I've read in the forum that the Fusion Nakamura-Tome Mill-Turn PP is quiet well implemented by Autodesk. Since it is for a Fanuc Control, it should be less work to get it going for LCNC? Or does anybody has a better idea?
In general I'm interested in your opinion of the whole project and please tell me if I've overseen some major pitfalls.
Thank you all in advance!
Kind regards,
Jochen
I'm thinking hardly about acquiring a used Mazak Integrex200Y Millturn machine.
It uses and old Fusion640MT control with floppy drive data input. I'm planning to use Fusion for the CAM side of things.
My purchasing decision is a bit dependent on the feasibility of the project in terms of LCNC retrofit. So far i have the following requirements and parts of a solution for it:
Starting with the
Kinematics:
Since its a 5 axis Mill-turn machine i need a custom Kinematics file with switchable TCP function. Additionally the Y-Axis is interpolated with the
X- Axis and an auxiliary Y1-Axis.
Axis in Question:
X - Linear
Y - Virtual Linear
Z - Linear
C - 360° Rotary
B - +/- 90° Rotary
I've played around with ChatGPT and it seems to be somehow possible. But i would prefer an answer from a knowledgeable human being

Hardware:
I found the cards from yurtaev.com. So it should be technically possible to reuse the old Mitsubishi spindle and servo drives.
Turning + C-Axis + Clamping:
Since it is a Mill-Turn, the lathe spindle can be used as a traditional turning spindle but also as a C-Axis for 4/5 Axis simultaneous or 3+2 with clamping. I assume this involves also a bit of PP work to tell the machine when to clamp/unclamp ?
Is this possible to implement in LCNC ?
Hydraulic Tail Stock:
The machine has an hydraulically activated tailstock that moves into position by the help with the Z-Axis. I assume i can implement this functionality
with custom M-Codes and some work in the PP?
EDIT: RotarySMP Pointed my in the right direction, i will use a custom comp.#
Postprocessor:
I've read in the forum that the Fusion Nakamura-Tome Mill-Turn PP is quiet well implemented by Autodesk. Since it is for a Fanuc Control, it should be less work to get it going for LCNC? Or does anybody has a better idea?
In general I'm interested in your opinion of the whole project and please tell me if I've overseen some major pitfalls.
Thank you all in advance!
Kind regards,
Jochen
Last edit: 11 Apr 2025 10:19 by jochen91. Reason: Gramma
The following user(s) said Thank You: RotarySMP
Please Log in or Create an account to join the conversation.
- RotarySMP
-
- Offline
- Platinum Member
-
Less
More
- Posts: 1484
- Thank you received: 546
10 Apr 2025 11:01 #326023
by RotarySMP
Replied by RotarySMP on topic Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine
I am not competent to give you advice on the feasiblity on this project, but LinuxCNC is unlikely to be a show stopper. It sounds like an awesome project. Please include some pictures so we can see that machine and what you do with it.
I implemented my pneumatic collet closer, back gear shifter, and tailstock using some inhibits in classic ladder and command them with M64/65 Px. This would be one option for controlling your hydraulic tailstock. Most would probably do this more elegantly with a custom comp.#Collet closer - created 23.10.22
# --- Collet release
# --- toggling footswitch
net collet-foot <= [HMOT](CARD0).7i84.0.0.input-16
net collet-foot => classicladder.0.in-00
# --- collet closer outputs
net collet-close <= classicladder.0.out-00
net collet-close => [HMOT](CARD0).7i84.0.0.output-10
net collet-open <= classicladder.0.out-01
net collet-open => [HMOT](CARD0).7i84.0.0.output-11
# --- Spindle inhibit
net spindle-enable => classicladder.0.in-01
# --- Turn on pneumatic SOV---
net machine-state <= halui.machine.is-on
net machine-state => [HMOT](CARD0).7i84.0.0.output-00
I implemented my pneumatic collet closer, back gear shifter, and tailstock using some inhibits in classic ladder and command them with M64/65 Px. This would be one option for controlling your hydraulic tailstock. Most would probably do this more elegantly with a custom comp.#Collet closer - created 23.10.22
# --- Collet release
# --- toggling footswitch
net collet-foot <= [HMOT](CARD0).7i84.0.0.input-16
net collet-foot => classicladder.0.in-00
# --- collet closer outputs
net collet-close <= classicladder.0.out-00
net collet-close => [HMOT](CARD0).7i84.0.0.output-10
net collet-open <= classicladder.0.out-01
net collet-open => [HMOT](CARD0).7i84.0.0.output-11
# --- Spindle inhibit
net spindle-enable => classicladder.0.in-01
# --- Turn on pneumatic SOV---
net machine-state <= halui.machine.is-on
net machine-state => [HMOT](CARD0).7i84.0.0.output-00
The following user(s) said Thank You: jochen91
Please Log in or Create an account to join the conversation.
- jochen91
- Offline
- Junior Member
-
Less
More
- Posts: 28
- Thank you received: 3
11 Apr 2025 10:25 - 11 Apr 2025 10:34 #326052
by jochen91
Replied by jochen91 on topic Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine
I've played around with ChatGPT and got at least in my limited knowledge a usefull locking Kinematics file out of it.I used the millturn example and added switchable TCP functionality from the 5Axis demo. I still did not add die virtual Y axis. I would be realy thankfull if somebody could provide feedback if the supplied code is not 100% gibberish.
Since i'm still in the phase of feasibility study i dont have many great pictures of the machine. I live roughly 3hours away from it. If everything goes well, i hope i can post pictures in the upcoming months (if I'm lucky weeks). But here at least is a picture of the 40 Tool KM63 ATC. Best i can do so far
Since i'm still in the phase of feasibility study i dont have many great pictures of the machine. I live roughly 3hours away from it. If everything goes well, i hope i can post pictures in the upcoming months (if I'm lucky weeks). But here at least is a picture of the 40 Tool KM63 ATC. Best i can do so far

#include "rtapi_math.h"
#include "kinematics.h"
static struct haldata {
// Declare hal pin pointers used for xyzcb_tdr kinematics:
hal_float_t *tool_offset_z;
hal_float_t *x_offset;
hal_float_t *z_offset;
hal_float_t *x_rot_point;
hal_float_t *y_rot_point;
hal_float_t *z_rot_point;
//Declare hal pin pointers used for switchable kinematics
hal_bit_t *kinstype_is_0;
hal_bit_t *kinstype_is_1;
hal_bit_t *kinstype_is_2;
} *haldata;
static int xyzcb_millturn_setup(void) {
#define HAL_PREFIX "xyzcb_millturn"
int res = 0;
// inherit comp_id from rtapi_main()
if (comp_id < 0) goto error;
// set unready to allow creation of pins
if (hal_set_unready(comp_id)) goto error;
haldata = hal_malloc(sizeof(struct haldata));
if (!haldata) goto error;
// hal pins required for xyzcb_millturn kinematics:
res += hal_pin_float_newf(HAL_IN, &;(haldata->tool_offset_z), comp_id, "%s.tool-offset-z", HAL_PREFIX);
res += hal_pin_float_newf(HAL_IN, &;(haldata->x_offset), comp_id, "%s.x-offset", HAL_PREFIX);
res += hal_pin_float_newf(HAL_IN, &;(haldata->z_offset), comp_id, "%s.z-offset", HAL_PREFIX);
res += hal_pin_float_newf(HAL_IN, &haldata->x_rot_point, comp_id, "%s.x-rot-point", HAL_PREFIX);
res += hal_pin_float_newf(HAL_IN, &haldata->y_rot_point, comp_id, "%s.y-rot-point", HAL_PREFIX);
res += hal_pin_float_newf(HAL_IN, &haldata->z_rot_point, comp_id, "%s.z-rot-point", HAL_PREFIX);
// hal pins required for switchable kinematics:
res += hal_pin_bit_new("kinstype.is-0", HAL_OUT, &;(haldata->kinstype_is_0), comp_id);
res += hal_pin_bit_new("kinstype.is-1", HAL_OUT, &;(haldata->kinstype_is_1), comp_id);
res += hal_pin_bit_new("kinstype.is-2", HAL_OUT, &;(haldata->kinstype_is_2), comp_id);
// define default kinematics at startup for switchable kinematics
*haldata->kinstype_is_0 = 1; // default at startup -> Milling Mode without TCP
*haldata->kinstype_is_1 = 0; // -> Turning Mode
*haldata->kinstype_is_2 = 0; // -> Milling Mode with TCP
if (res) goto error;
hal_ready(comp_id);
rtapi_print("*** %s setup ok\n", __FILE__);
return 0;
error:
rtapi_print("\n!!! %s setup failed res=%d\n\n", __FILE__, res);
return -1;
#undef HAL_PREFIX
}
EXPORT_SYMBOL(kinematicsType);
EXPORT_SYMBOL(kinematicsSwitchable);
EXPORT_SYMBOL(kinematicsSwitch);
EXPORT_SYMBOL(kinematicsInverse);
EXPORT_SYMBOL(kinematicsForward);
static hal_u32_t switchkins_type;
int kinematicsSwitchable() { return 1; }
int kinematicsSwitch(int new_switchkins_type) {
switchkins_type = new_switchkins_type;
rtapi_print("kinematicsSwitch(): type=%d\n", switchkins_type);
// create case structure for switchable kinematics
switch (switchkins_type) {
case 0:
rtapi_print_msg(RTAPI_MSG_INFO, "kinematicsSwitch:TYPE0\n");
*haldata->kinstype_is_0 = 1;
*haldata->kinstype_is_1 = 0;
*haldata->kinstype_is_2 = 0;
break;
case 1:
rtapi_print_msg(RTAPI_MSG_INFO, "kinematicsSwitch:TYPE1\n");
*haldata->kinstype_is_0 = 0;
*haldata->kinstype_is_1 = 1;
*haldata->kinstype_is_2 = 0;
break;
case 2:
rtapi_print_msg(RTAPI_MSG_INFO, "kinematicsSwitch:TYPE2\n");
*haldata->kinstype_is_0 = 0;
*haldata->kinstype_is_1 = 0;
*haldata->kinstype_is_2 = 1;
break;
default:
rtapi_print_msg(RTAPI_MSG_ERR, "kinematicsSwitch:BAD VALUE <%d>\n", switchkins_type);
*haldata->kinstype_is_1 = 0;
*haldata->kinstype_is_0 = 0;
*haldata->kinstype_is_2 = 0;
return -1; // FAIL
}
return 0; // ok
}
KINEMATICS_TYPE kinematicsType() {
static bool is_setup = 0;
if (!is_setup) xyzcb_millturn_setup();
return KINEMATICS_BOTH; // set as required
}
int kinematicsForward(const double *j, EmcPose *pos, const KINEMATICS_FORWARD_FLAGS *fflags, KINEMATICS_INVERSE_FLAGS *iflags) {
(void)fflags;
(void)iflags;
double x_rot_point = *(haldata->x_rot_point);
double y_rot_point = *(haldata->y_rot_point);
double z_rot_point = *(haldata->z_rot_point);
double dz = *(haldata->z_offset);
double dt = *(haldata->tool_offset_z);
double sc = sin(j[3] * TO_RAD); // Replaced A-axis with C-axis
double cc = cos(j[3] * TO_RAD); // Replaced A-axis with C-axis
double sb = sin(j[4] * TO_RAD);
double cb = cos(j[4] * TO_RAD);
// Define forward kinematic models using case structure for switchable kinematics
switch (switchkins_type) {
case 0: // Milling Mode without TCP
pos->tran.x = j[0];
pos->tran.y = j[1];
pos->tran.z = j[2];
pos->c = j[3]; // Replaced A-axis with C-axis
pos->b = j[4]; // B-axis
break;
case 1: // Turning Mode
pos->tran.x = j[2];
pos->tran.y = -j[1]; // Invert Y-axis
pos->tran.z = j[0]; // Swap X and Z for Turning Mode
pos->c = j[3]; // C-axis
pos->b = j[4]; // B-axis
break;
case 2: // Milling Mode with TCP
double px = j[0] - x_rot_point;
double py = j[1] - y_rot_point;
double pz = j[2] - z_rot_point - dt;
pos->tran.x = cb * px + sc * sb * py - cc * sb * pz + cb * dz + sb * dz + x_rot_point;
pos->tran.y = cc * py + sc * pz + y_rot_point;
pos->tran.z = sb * px - sc * cc * py + cc * cc * pz + sb * dx + cb * dz + z_rot_point + dt;
pos->c = j[3]; // C-axis
pos->b = j[4]; // B-axis
break;
}
pos->u = 0;
pos->v = 0;
pos->w = 0;
return 0;
}
int kinematicsInverse(const EmcPose *pos, double *j, const KINEMATICS_INVERSE_FLAGS *iflags, KINEMATICS_FORWARD_FLAGS *fflags) {
(void)iflags;
(void)fflags;
double x_rot_point = *(haldata->x_rot_point);
double y_rot_point = *(haldata->y_rot_point);
double z_rot_point = *(haldata->z_rot_point);
double dx = *(haldata->x_offset);
double dz = *(haldata->z_offset);
double dt = *(haldata->tool_offset_z);
double sc = sin(pos->c * TO_RAD); // Replaced A-axis with C-axis
double cc = cos(pos->c * TO_RAD); // Replaced A-axis with C-axis
double sb = sin(pos->b * TO_RAD);
double cb = cos(pos->b * TO_RAD);
double qx = 0;
double qy = 0;
double qz = 0;
switch (switchkins_type) {
case 0: // Milling Mode without TCP
j[0] = pos->tran.x;
j[1] = pos->tran.y;
j[2] = pos->tran.z;
j[3] = pos->c; // Add C-axis here
j[4] = pos->b; // Add B-axis here
break;
case 1: // Turning Mode
j[0] = pos->tran.z; // Swapping X and Z axes for turning mode
j[1] = -pos->tran.y; // Negating Y-axis for turning mode
j[2] = pos->tran.x; // Swapping X and Z axes for turning mode
j[3] = pos->c; // Add C-axis here
j[4] = pos->b; // Add B-axis here
break;
case 2: // Milling Mode with TCP
qx = pos->tran.x - x_rot_point - dx;
qy = pos->tran.y - y_rot_point;
qz = pos->tran.z - z_rot_point - dz - dt;
j[0] = cb * qx + sc * sb * qy - cc * sb * qz + cb * dx - sb * dz + x_rot_point;
j[1] = cc * qy + sc * qz + y_rot_point;
j[2] = sb * qx - sc * cc * qy + cc * cc * qz + sb * dx + cb * dz + z_rot_point + dt;
j[3] = pos->c; // Add C-axis here
j[4] = pos->b; // Add B-axis here
break;
}
return 0;
}
Last edit: 11 Apr 2025 10:34 by jochen91.
Please Log in or Create an account to join the conversation.
- Aciera
-
- Offline
- Administrator
-
Less
More
- Posts: 4305
- Thank you received: 1908
11 Apr 2025 12:44 #326054
by Aciera
Replied by Aciera on topic Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine
The easiest way to find out if your kinematic is gibberish is to try to compile and install it using 'halcompile'. Verifying the kinematic model is of course more difficult and usually requires either a vismach model of the machine or the machine itself.
The following user(s) said Thank You: jochen91
Please Log in or Create an account to join the conversation.
- jochen91
- Offline
- Junior Member
-
Less
More
- Posts: 28
- Thank you received: 3
11 Apr 2025 13:34 - 11 Apr 2025 13:34 #326061
by jochen91
Replied by jochen91 on topic Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine
Thank you that's a good idea, by coincidence i already started making myself familiar with vismach, cause i really don't wanna crash the machine. I try to start as soon as possible an make a crude 3D model of the machine to import it into vismach. But i still need to figure out how to do the virtual Y axis compound move. I think i need to paint a picture of the axis configuration of the machine to post it here. Cause i have a few questions in regards of the axis/joint names.
Last edit: 11 Apr 2025 13:34 by jochen91.
Please Log in or Create an account to join the conversation.
- jochen91
- Offline
- Junior Member
-
Less
More
- Posts: 28
- Thank you received: 3
11 Apr 2025 15:03 #326071
by jochen91
Replied by jochen91 on topic Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine
Please Log in or Create an account to join the conversation.
- matti.juntunen
- Offline
- New Member
-
Less
More
- Posts: 5
- Thank you received: 3
11 Apr 2025 15:12 #326073
by matti.juntunen
Replied by matti.juntunen on topic Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine
The ? would always be Y. I havent worked on these for a while, but generally, axes stay the same when shifting between lathe and mill on mazaks, but geometry switches between diametral/radial.
Fun project! Integrex's are great machines!
Fun project! Integrex's are great machines!
The following user(s) said Thank You: jochen91
Please Log in or Create an account to join the conversation.
- jochen91
- Offline
- Junior Member
-
Less
More
- Posts: 28
- Thank you received: 3
11 Apr 2025 15:56 #326075
by jochen91
Replied by jochen91 on topic Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine
I know the Y axis is interpolated. So for a straight Y movement 90° to X the X axis need to move as well. Is that correct ?
Please Log in or Create an account to join the conversation.
- matti.juntunen
- Offline
- New Member
-
Less
More
- Posts: 5
- Thank you received: 3
11 Apr 2025 16:17 #326080
by matti.juntunen
Replied by matti.juntunen on topic Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine
That is correct. The ones i have worked on are mostly newer ones and have straight X and Y axis. Do you have the manuals for it? All the geometry should be specified there. What year is it?
The following user(s) said Thank You: jochen91
Please Log in or Create an account to join the conversation.
- jochen91
- Offline
- Junior Member
-
Less
More
- Posts: 28
- Thank you received: 3
11 Apr 2025 16:33 - 11 Apr 2025 16:33 #326082
by jochen91
Replied by jochen91 on topic Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine
Sadly not. At least so far. But i saw it in motion and for Y both axis where moving. Also when i looked behind the work envelope where the column is traveling i could see the y and x at an angle ( i assume 60° between them). You can see it even a little bit on the picture if the ATC I've posted ealier.
But concluding i dont need to switch the kinematics between Mill and Lathe. That makes things easier. Its year 1998 Integrex 200Y
But concluding i dont need to switch the kinematics between Mill and Lathe. That makes things easier. Its year 1998 Integrex 200Y
Last edit: 11 Apr 2025 16:33 by jochen91.
Please Log in or Create an account to join the conversation.
- Configuring LinuxCNC
- Advanced Configuration
- Planning to Retrofit a Mazak Integrex200Y Mill-Turn Machine
Time to create page: 0.125 seconds