Workshop detail header
Field note

Lathe Failures That Teach You More Than Success Ever Could (Fusion 360 → Lathe Workflow)

Today I learned: sometimes a tiny macro tweak can save your sanity on the lathe! 🤯 Just swapped in a custom M200 after M6, and now my tool changes are spot on. Mach4 quirks, you've met your match! 🛠️ Curious minds, dive deeper here https://thebitcoinwatchmaker.com/post/view/lathe-failures-that-teach-you-more-than-success-ever-could-fusion-360-lathe-workflow/

Here's the scoop: While setting up a gang-style tool system with Mach4 and Fusion 360, I hit a snag where Mach4 didn't update the Y-offset immediately after a tool change, leading to misalignments. My fix? A custom macro, M200, ensures the Y-offset is correctly applied by temporarily adjusting the Z-axis, then moving Y to zero, and restoring Z. This tweak turned a potential headache into a smooth workflow, reminding me that overcoming quirks teaches more than smooth sailing ever could. 🛠️

Learning, Trying, Failing… but Happy

This week, I hit an unexpected behavior while setting up my gang-style tool system with Mach4 and Fusion 360.

Here’s the layout:

  • Tool 1 is positioned manually and sets G54.
  • Tool 2 and beyond use XYZ offsets relative to Tool 1.
  • Fusion 360 doesn’t emit Y moves for tool changes in lathe ops — it assumes only XZ movement.

So far, so good... until I discovered this 🤯:

After a tool change using M6, running G0 Y0 still uses the previous tool’s Y offset!

What I mean is this: (M6 macro)

mc.mcToolSetCurrent(inst, selectedTool)
mc.mcCntlGcodeExecuteWait(inst, "G0 Y0") 👈 This uses the previousTool YOffset!!! ⚠️ 🤯

This happens because M6 internally calls setCurrentTool, but Mach4 doesn't apply the Y-offset until after the macro finishes. That means if you issue any move (like G0 Y0) immediately after M6, you’re still running with the old offset. Yikes.

My solution: I created a custom macro: M200.

So then, I modified Fusion 360’s Mach4 Turning Postprocessor to call M200 immediately after each M6 command.

how you may be wondering, well like this: (this is in the mach4-turning postprocessor downloaded from Autodesk website)

function onSection() {
...
 if (insertToolCall) {
...
    writeToolBlock("T" ...)
    writeBlock("M200"); // 👈 Inserted this

And M200 looks like this:

local initialZ = mc.mcAxisGetPos(inst, mc.Z_AXIS)
local safeZ = 5.0
mc.mcCntlGcodeExecuteWait(inst, string.format("G0 Z%.4f", safeZ))
mc.mcCntlGcodeExecuteWait(inst, "G0 Y0") // ✅ now it works
mc.mcCntlGcodeExecuteWait(inst, string.format("G0 Z%.4f", initialZ))

It does three things:

  • Moves Z up 5mm
  • Moves Y to 0 (now under the correct tool offset)
  • Restores Z

Now every tool change is reliable and precise — no more misaligned cuts or offset confusion. It’s a small fix, but one that makes the difference between frustration and confidence on the lathe.

Mach4's quirks taught me a lot this week — and solving them made me enjoy the process even more.

3 reactions

NOSTR:

npub1nvhq9vgkpahlugwcf3jsnpaq5lj3w3rk6lknnvf9r8h8ft2ja2asaqcn2a
npub1nvhq9vgkpahlugwcf3jsnpaq5lj3w3rk6lknnvf9r8h8ft2ja2asaqcn2a
Copyright 2025 The bitcoin watchmaker