Probing inbetween Tool Changes

It sounds like people are crossing streams here, so lets try to shed some light on it a bit - there are two conversations taking place:

  1. Output all gcode together, and use M06 T##
  2. Use separate gcode, with each tool’s code broken out into it’s own gcode file.

Both methods work on the OneFinity (BB Controller)

All GCode together:
This relies on your post-processor knowing that your CAM uses multiple tools, and will inject M06 T## into the GCode. This then relies on your machine’s M06 code (macro) to detect when a tool change is needed, and move the machine to a safe place, so that a tool change can occur. If this is used, the machine is still running (motion control) (please stop the spindle :wink: ) - so you cannot job the machine anywhere, the controller will not let you. If you do it manually (force it) you’ll now be out of step.
(Edit Update) - This only works either when used with the Probe, or some other method for accurately placing the tool bit into the spindle. The system needs to know the difference between the last tool and the new tool. The Probe (as demonstrated in @makingmagick video) creates and stores this off-set, so the machine knows how to compensate. You “could” do this without a probe, if you had an accurate method of setting all tool bits (spacer block, or collet on the bits to register on the spindle cap, etc). But if you do not have a way to register the offsets, your machine will lose Z positioning in relation to your new tool, since you could have tightened it at any height.

Separate GCode Files
With this, each cut for each tool is run independently of the other. You setup the machine for each tool (bit), zero the machine, and run the code. When it’s done, and presumably ready to run the next tool, the program has fully ended. You can jog the machine, or do whatever you want, just as if no program is running (aka - during setup, or when a job is done). Jog the machine to where YOU want it to change the bit, and when complete, load in the next set of GCode (presumably for the next bit) and start a whole new program.

I haven’t tried a M06 on the BB controller yet, so no clue what it has pre-programmed in it’s M06 macro, so can’t speak on where the spindle goes. This should be adjustable, and preferably place the spindle somewhere safe, and spindle at the top of it’s movement. So that you have room to change the tool.


Am I mistaken, or is this working well (meaning one exported gcode file and multi-tool) with the competition, i.e. X-Carve, Shapeoko?

I actually haven’t used a Shapeoko or X-Carve (but do have a Nomad, from makers of Shapeoko, but a different beast all together). But I know the folks at Carbide3D recommend the “Separate GCode” method, simply from a reliability stand point. It contains the same features in the controller, but like the OneFinity, lacks a mounted tool setter, and is dependent on the user performing probing/zeroing. Others have been able to do the same thing as outlined here with an all-in-one, and a probe on Shapeoko as well. I think some have even mounted a fixed tool setter, but none of that was “out-of-the-box”, and required some customization.

I expect the same will occur here, it just takes time. One could easily create a fixed tool setter spot with a Z-touch probe mounted somewhere on one’s machine, alter the tool change macro to position for change, and auto probe after, etc.

For this, I (and most of these machine companies) recommend those who are starting out to simply break out your code into each tool path. Since you’re already having to manually change the bits, or connect a probe, etc, changing out the program isn’t any more effort and its “safer”, as less prone to error.


Good point, Thanks Tim!

As a guy new to cnc with my “woodworker” expected in roughly 3 weeks, this topic is of great interest. At this point I have only used Easel and am curious how you make a design that may require a standard bit but then need a smaller bit or v-bit to get in and complete the fine detail work? Easel allows 2 bits to be used and would generate a g-code for both bits yet based on this thread, it sounds like this can’t be done with the Onefinity. At this stage I don’t plan on buying another program to design and generate g-codes. I guess this has me a bit concerned as the cost to buy another design program (albeit would be significantly better than Easels capabilities) is not something I am entertaining at this time. Any feedback or guidance would be greatly appreciated.

I have made carves that use multiple tool paths using different endmills and V carve bits–it definitelycan do it… 2 tool paths are no problem at all. Simply load your first toolpath, run it, when it’s finished change your bit & run your 2nd toolpath. Once you get your machine, there are lots of great people on here to help you walk through the process.

I was sitting on the fence trying to decide if I wanted to upgrade to a Vectric product as Carbide Create is letting me do what I want to do as a beginner but, I am starting to find the limitations of that software. Almost everything is doable, it is just not very easy. The big sticking point I had was the concern with tool changes. It appears that Vectric put the required steps in Vcarve to allow for this according to the video you posted. Thanks for the informative video.

I tried to learn Fusion 360 but there was a pretty steep learning curve there and I gave up. I learned a lot of stuff using Carbide Create but, it was taking me a long time and a lot of struggles to design stuff. I finally committed to buying Vcarve. I am still learning the ins and outs of this software, but, I can say this, it it much easier and intuitive to learn for my experience level. I am working on an inlayed cutting board for my son and his wife. Practicing on scrap wood right now, but, it was pretty easy to do the design and cut the pocket. The “plug” has presented some interesting challenges, but, I think I figured it out. The scrap pieces I cut are glued and I will figure out how to get the excess wood off the plug tomorrow.

1 Like

This is easy enough to fix. I modified my tool changer script in onefinity’s controller (Settings, Tool Change)

Change it to following:

(Runs on M6, tool change)
M0 M6 (MSG, Change tool and tighten collet)
G0 X0 Y0
M0 (MSG, attach probe)
(probe to minimum z soft limit, which is -10)
G38.2 Z-10.0
G92 Z15.4
g0 Z30
M0 (MSG, Remove probe, start spindle)

G28 then lifts the spindle z axis and then moves the machine all the way to basically your home position. Then you get the message (M0 M6 > “change tool and tighten collet”)

Then it brings you to( G0 X0 Y0 ) your workpiece X,Y = 0 location.

From here, you can change Z-10 to for example Z-25.4 if you want to probe for 1 inch (or 25.4 mm), etc. If you went from a taller endmill to a smaller one, 10mm travel might not be enough for you. This will solve that problem. You can also change it to (i changed mine to -100mm which travels for like 4 inches until it finds the z 0 on probe.


Thanks for this, I am new to CNC but 30 years woodworking and IT experience. I am confused by your post and would appreciate additional help. I received my 1F a few weeks ago and the controller already has tool change code:
(Runs on M6, tool change)
M0 M6 (MSG, Change tool and attach probe)
(probe to minimum z soft limit, which is -10)
G38.2 Z-10
G92 Z15.4
g0 Z30
M0 (MSG, Remove probe, start spindle)

I am using Carbide Create for now because it is simple and free, I will may choose a replacement when I get some CNC experience under my belt.

I don’t understand the exact context in the bigger picture. Here is a snippet of gcode file CC created.
M0 ; T102

I was thinking I needed to change the M0 pause to an M6, then I realized you have another M6 on a M0 message after the state save and machine home. If I insert your code into my controller how will it know there is a tool change?

Would you mind posting a bit of code as it looks in the actual gcode file, showing the trigger telling my controller there is a tool change along with your code to make the tool change.


The command in your gcode file that will trigger the tool change and probe cycle is “M6” - there is a comment at the top of that text box that says “runs on M6 tool change”. The edits made were to move to a specific position prior to starting the probe cycle.

In other words, if the setting for “Home /Start position” isn’t high enough, you won’t be able to join the machine up to pull your tool out.

You can also edit the post processor to only include that position on the tool change itself. All of the rest of your Z clearances can be using the “Rapid Z Gaps”.

1 Like

If you edit the post one can put whatever Z level they wish and never have that problem.

What would really be slick would be to:

  • Raise the Z
  • M6
  • M0

(Change out you tool bit)
(Hit start)

  • feed down to a Z level
  • initiate probe macro
  • m00
1 Like

You can edit the probe routine to meet your specific needs in the Onefinity controller to raise Z height and such.

It looks like you could pretty easily modify the tool change routine to move Z+ a certain amount, then change tool & probe. The issue can be that your XY location may not be suitable to probe from. Your machine may be parked over the center of a pocket waiting for the tool change, when in reality you need to be able to jog to a different XY location where the base material has not been carved.

@popec I know this is old but for a 2 stage carve I noticed that when stage one is done the machine returns but not to EXACTLY the same spot nor the same height. Is that right? I was doing a carve the other day and when it did not return to its initial origin I went ahead and changed the bit and rehomed it to where carve 1 began and it messed up the whole carve. What am I doing wrong? Do I just need to leave the placement as is, change the bit and hit play? I hope this makes sense to you. Thanks for any advice you can possibly give.

As long as the machine knows where it is, where it goes is not really important. The only thing you should need to do for the 2nd stage of a carve is re-probe the Z, as it’s highly unlikely you will have inserted the new bit to extend down the exact same distance from the spindle as the previous bit.

EDIT: This particular thread is kind of all over the place between using the tool change routine and creating separate tool files. I may have incorrectly assumed that you were indicating the use of separate tool files.

1 Like

Hey Kneepit,

you might be interested in → this.

There, you will see that at the beginning of the ‘tool-change’ g-code example, all settings of the machine at this point are saved by the command M70 (Save Modal State), and after the manual tool change, the machine will resume the program after the command M72 (Restore Modal State) which tells the machine where it was before the tool change. The only thing you definetely will want to be updated then (as @Matticustard already pointed out), is the machine to know about the length of the new tool. This is the purpose of the g-code routine example shown, which you can use in your ‘tool-change’ field. You may adust the settings e.g. for the height of your touch probe and also the value with which Z is raised at tool-change position in order to fit your bit lengths. You may also alter the position where the tool change has to be done (if you don’t like it to be done at the home position). Hope this helps, the g-code commands are all explained if you follow the link above. You could also first test them one by one in the MDI field (maybe without a bit first) in order to learn to know them and what they are doing.

1 Like

I havent had any trouble changing out the bits between carves. I dont rehome or redo my xy, I only probe Z…as every bit is different & how far in the collett is different. If you reset the home and the xy, without moving your work piece it should not have screwed up. I do save all of mine as separate toolpaths, I dont like combining them…its caused me more problems and confusion than any time savings.

Chris, I too always only probe Z between tool changes. So far everything has worked great. The only time a problem comes up is when I mess something up myself. I just finished my first 3D carve with 4 tool changes and had no problem, the project turned out great. This is a great forum to get tips, help and advice.

1 Like