Keeping zero position

Hey Bill,

I think what you are saying is totally correct but you use zero for both home and zero here. But I would be careful to always distinguish between

Homing ≠ Zeroing

  • Homing: Triggering the homing process by pressing the corresponding home button (for a single axis, or for all axes) causes all carriages to be driven to their home positions. Once the carriages reached these positions, the machine is able to sense this, either by the limit sensors located at those home points (usually inductive proximity sensors or optical infrared sensors, or, as is the case with the stock Standard Series Onefinity CNC, with motor stall detection, which means by sensing that the motor does not move anymore, which is a function of the TI DRV8711 stepper drivers). When the CNC controller sensed that the corresponding carriages reached their home position, it resets the absolute machine coordinate of the corresponding axis to zero. The column that shows these values is the “Absolute position” column.

    Where these home positions really are located, differs between CNC machines and brands. On the Onefinity, X home is on the leftmost position, Y is on the frontmost position, while Z is on the topmost position. As the numbers on every machine always increase by moving away from bottom front left and by moving towards top rear right (as the G-Code standard says, see image below), on the Onefinity the X and Y numbers are positive, while Z is always negative, because since Z home is at the topmost position, and the numbers increase towards upper direction, but home is exactly 0, the Z axis has only negative numbers (0 to -133 mm on Onefinity Standard Series Z-16 slider, 0 to -163 mm on Heavy duty Z-20 slider (=standard on Elite Series, optional on Standard Series).

    Cartesian coordinate system with right hand orientation

    Schematic Representation of a CNC vertical milling center
    – Source: Smid, Peter: CNC Programming Handbook , Industrial Press, South Norwalk, CT, USA, ISBN 9780831133474

    Schweizer Nationalbank, Public domain

    On other machines, “home” (aka machine origin) often is on other positions. Usually home is where the tools are changed, which is top front left on the Onefinity, but e.g. on industrial vertical milling centers (VMCs), home is often on top right rear position, as this is where the tool magazine is. On those machines, the absolute machine coordinates are all only negative values, as the numbers always increase towards top rear right and decrease towards bottom front left.

    Homing is usually necessary only once after startup of the machine. Its purpose is to enable the machine to know where its carriages are, which is possible because it is a repeatable starting position. Without homing, the machine would not know where its carriages are, since they could have moved while the machine was switched off. Later, going to the machine home position is usually done to allow a manual tool change as part of the ‘tool-change’ routine (on the Onefinity CNC, it is to be found on the SETTINGS page).

  • Zeroing: This means after having moved to a desired position, defining this position as the new zero (mostly called “workpiece zero” as this position is usually determined by the probing procedure and shall be an identical representation in real space of the workpiece origin in the 3D model and toolpath). In fact this means a new coordinate system is in effect, represented by the “position” and the “offsets” column.

    In fact, Position minus Absolute Position equals to Offset.

    The command that sets the current position to the new workpiece zero is G92 (Coordinate Offset), which is the most important command in every probing routine. It is also the “zero” button on CONTROL page, which in fact executes the command “G92 X0 Y0 Z0” (or the corresponding buttons for only one axis).

Thanks for trying to help. Yes, i am still trying to figure what to do after a power outage. It would also be helpful knowledge when doing a multicolor epoxy inlay like I’m doing now. I have 5 colors and each one takes 1-2 days to cure. It would be nice to not have to keep the machine on and idle for that long but still be able to reliably get back to my zeros for the job. Then, i could do other projects but still get back to zero for the next color/layer.
My offsets are the same as my 0,0. Though i still don’t think I understand how to use the g0 or g92 commands.

Hey Dave,

noting and restoring the offsets makes only sense if you let the workpiece clamped on the machine bed until the next pass. If you reposition it, you would re-probe instead.

Let’s say you have a workpiece clamped on the machine bed and prior to first pass, you probe XYZ. The result is that you have the offset numbers which in fact designate the workpiece zero in relation to the absolute machine zero.

  • If you let the machine on until next pass, you avoid homing and you can directly run the next pass, as these values did not change.

  • But if you switch the machine off or have a power outage, you got to re-enter these offsets before you can run the same program (or a pass that is based on the same program and workpiece) again.

    There are two possibilities:

    • One is if you didn’t change the carriages, i.e. the program was pausing when the power outage or the shutdown occured, so in this case you don’t re-home, and not only enter the offsets but also tell the machine where its carriages are (=the positions in absolute machine coordinates. I described this case here yesterday.

    • Or the more simpler case, you home the machine after bootup and need only to enter the offsets, which in fact means to set the workpiece zero to its previous values (that were lost on power loss).

To enter these values, you use the G92 command and you enter it into the command entry field of the MDI Tab, but with their sign changed (i.e. the Additive Inverse):

Let’s say according to your image, your offsets for the workpiece were X=117.702, Y=129.392 and Z=-57.41. You re-home the machine, then you enter this into the command entry field of the MDI Tab:

G92 X-117.702 Y-129.392 Z57.41

Take care of the signs in front of the numbers, which were changed!

This command activates a new coordinate system, which is the workpiece coordinate system, which has its zero exactly where the workpiece zero is in your 3D model.

You can check whether a G92 offset is active by entering:

(debug, Offset=#5210)

If the output is 1, then there is a G92 offset active, if it is 0, not. (Don’t forget the parantheses when you use ‘debug’.)

Now to go to the workpiece zero, you enter:

G0 X0 Y0 Z0

Magic, eh? :wink:

To delete any offset, use


PS: If you forgot to note the offsets and they were lost due to a power outage, they can be extracted at any time later from the file /var/log/bbctrl.log.

After you have zeroed the machine make a note of the offset numbers on the X and Y or take a picture of them.
When you restart your machine home it in the usual way then go into the mdi setting and enter g01 X… Y… The dots represent the offsets that you made a note of, press enter and you are back at your preset zeros

Hey Bill,

yes, this is the other way to achieve the same goal: Move to that position with a motion command (G00 or G01) and then zero there (what I described above is the same, but just the other way round). But only if you press the “zero” icon on the CONTROL page then, or enter G92 X0 Y0 Z0 (which is the same as pressing the “zero” icon for all axes), this new position will come into effect!

By the way, no reason to use G1 (linear move at set feedrate), usually you would use G0 (rapid move) to quickly go somewhere. A problem with G1 is that a laser stays firing during a G1 movement, during a G0 move not.

I find that there is enough room on the sides of the waste board that are next to the rails to make a fixture as I was suggesting above to form a corner. The one on the x axis I made removeable for those tiling situations. Since the machine will never be in the same place when it homes. The only solution to a repeatable x and y is a fixed location on the spoil board that can be probed and set each time the machine is turned on. For example for the epoxy guy who wants to make multiple pours. With this method he could actually remove the piece and let it dry and then return it to the machine when he was ready because the start position will be the same for all pieces that start in the set corner fixture.


Hey JDog,

beautiful fixtures / jigs!

I think reducing the use of the touch probe to only once per bootup period because you have a fixed jig is something that really saves time. I think when using this, it is important that you can ensure accurate positioning and clamping of the workpiece at the jig, I mean the faces would need to be perpendicular and first of all perfectly parallel to machine axes. As Dr-Al mentioned the other day, when you mill the faces of your angular jig with the machine itself, the parallelity to the machine axis is absolutely perfect and reliable.

Another way to achieve positioning repeatability is to retrofit inductive proximity sensors to decommission the stock stall homing. This brings perfect positioning repeatability. With inductive limit sensors, you can rely on the absolute machine coordinates, which means if you want to move to a specific point, you could do that with motion commands and a coordinate, and it would accurately be the same position everytime, even after shutdown or power outage.

A positive side effect of limit sensors is that you can square the machine without unbolting and repositioning main parts of the machine. You can simply move the sensors a bit. Elite Series with Masso G3 Touch use a comparable way to achieve its auto-squaring.

1 Like

Thanks for the advice Aiph5u. I did give it a try tonight and unfortunately, still no luck. I put in the offsets as you suggested, with the negative numbers and using the g92 code. Then I used the go code and got the error in the picture below. I tried positive numbers just in case, but still got an error. I also tried to use the debug as you suggest but there is no = sign on the buildbotics screen so couldn’t put that in.

I believe that I have tried this before but it didn’t move. I will try again tomorrow.

I’m that guy! I made the project work this time by creating that fixed point as you suggested. That way my workpiece goes to the exact same spot so if I have to re-do the x and y zeros, at least the corner of the workpiece is always in the same position. I also got around the problem by bringing the machine back to xoyo between each pour so it started in the same position. That wouldn’t work off course if there was a power outage midrun.
This has been a bit of a frustrating learning curve but one I am determined to figure out.

Hey Dave,

what exactly did you do? I’d really like to provide support, but I can not diagnose what happened without the positions, absolute positions and offsets before, a step-by-step description of what you exactly did or entered, and how the values are after your input.

The values in your error screen photo suggest that we didn’t or don’t have a situation like I described before or that you described, or that you entered something different, or you entered something else earlier that you forgt to mention(!). Numbers like 2989.63 mm are much too big and I cannot see any reason where you got such values from (except if you had units set to imperial and entered millimeters!)

I have tested all my suggestions on my controller and it worked perfectly.

Can you provide the details requested above?

1 Like

Hey Dave,

oh man, you really did! :slight_smile: You really entered 117.702 mm but you were in imperial mode. I just tried to reproduce your numbers. That exactly gave me “X axis position 2989.63mm is greater than maximum soft limit”, exactly as in your screen photo. Okay, it’s clear that cannot work, if you mix up units modes :frowning:

G20, G21 (Units mode)

G20 ; Set imperial units mode, use inches for length units.
G21 ; Set metric units mode, use millimeters for length units.

Okay, with making sure to stay with one unit system during one operation, everything should work.

1 Like

Agreed about homing, although if you manually home, you can get your machine’s absolute zero pretty reliably in the same spot in order to maximize the workable area (i.e., the soft limits).

I could maybe see squeezing a corner alignment jig onto a QCW/rolling-folding and having something set up to give you a gnat’s butt accurate/repeatable workplace zero that is therefore inside the soft limit area (based on the above repeatable/accurate absolute zero).

As you (and @Aiph5u) mentioned, for a smaller project well within the soft limit area defined by the absolute x,y zero, it would be enough to just (re-) define the workpiece zero when the workpiece is re-mounted, or alternatively continue on using the offsets mentioned in Aiph5u’s “Resetting after a power…” post.

1 Like

I will suggest this method of keeping track of your origin.
I am now in the middle of a 3 day carve. ( not 3 days long but i am splitting up a 4 hour program over 3 days since I only get an hour or so a night to work on it. )
I do not leave the controller on. It is shut off. And I do not worry about keeping the axis in the position I left off at.

Start by clamping a block on your table that can be permanent, for the duration of your job, and away from your work. I have a notch cut out of the front left corner of the wasteboard that is for this purpose.
Use your tool setter block to find the front left corner of that block. Make that the origin for now.
Write down the numbers circled in the pic below:
Then find your origin on your actual workpiece and make that your origin in the usual way.
Write down those numbers as circled in the pic below:
Now use paper and pencil or Notepad as I did to organize those numbers and subtract the first set from the second set as done below:
“ORIGIN OF WORK:” is the origin of the actual workpiece I am working on.
“FAR FRONT LEFT CORNER:” is the origin of the cutout on my waste board. This would be the permanent block you clamp somewhere. This number will be different every time I start the machine and home it. Only by .010 to .020 but enough that it would ruin my work. This is why I do not just use the offsets from the home position.

Then start your job in the usual way and stop it when you want and shut every thing down. Move the axis if you want - it doesn’t matter.

Then when I come back to start the job again be it a day or a week later - I start my machine and home it.
Then I find the front left corner of that permanent block I still have clamped to the table and make that the origin temporarily.
Don’t write down any numbers now - it is not needed.
Go the the MDI and type in the X and Y distance to move I calculated before:
I leave the the Z out of it for now because rapiding on X Y and Z at the same time is dangerous if anything is in the way. Leave the spindle up high. ← I stress again PUT YOUR SPINDLE UP HIGH BEFORE YOU PRESS PLAY! ( Don’t ask me how I know this is so important)

Press play on the MDI and go to the new offset position. Make that new place the X and Y origin.
Then move the spindle to a safe place and press the Z0 button on the controller to take it down to the Z0 of that permanent block.
Then type in the MDI again G0 G90 Z.651 ← this is the number I computed earlier.
Set that new place as the new Z0.

That’s it. ( it takes longer to explain it than to do it )
You are now back to your original origin.
If you take the time to setup this separate block and record these numbers before you start a big or expensive job you will not have to worry about finding your origin after a power failure either.

You will also note I wrote down “Roughed to .980 above Z0”
That is so I can stop a 4 hour program, go into it latter and edit it to start right where I left off. That is a discussion for another day.


A vey good explanation using offsets to re establish a work offset or zero point to resume a program. If this is something that is a very common operation I would suggest looking into implementing proximity sensors for homing from stall homing, I have been able to repeatability home +/- .02mm using them (possibly more precise than this but my measuring instrument only shows .02mm graduations). Then I can apply the offset without the extra step of probing a previously fixed position.

Also I had decent success boring a .250 hole somewhere that could become my base point on my fixtures and jigs vs having a fixed block to work from. This was precise enough for reuse of a program to create a part over and over at different time. I affix the fixture somewhere on the waste board, align to the .250" hole in the fixture, insert stock, hit go.


Hey Chris,

in fact you do the same as what @JDog does as mentioned above, which means to circumvent the unreliable stall homing by using the touch probe on a corner that is fixed on machine bed, thereby reducing the use of the touch probe to once per bootup period, and to achieve practically perfect repeatibility. Great!

But I agree to Derek @WaywardWoodworker that with retrofitted inductive proximity sensors you would not even need this probing once, but just entering any value you like and it would be perfectly reliable.

As you can see on the datasheet of a typical inductive proximity sensor (Omron E2B), the moment when it is triggered is very predictable and therefore brings accurate homing repeatability.

Source: Omron E2B Inductive Cylindrical Proximity Sensor Datasheet

Hi Derek and Aiph5u,

I agree sensors are better than stall homing for this but I am trying to show how anybody with a stock Onefinity machine with no mods can get very accurate reliable results and does not have to leave the machine on to pickup where they left off. It just takes an extra 5 minutes before a carve to clamp any block of wood down somewhere to find a temporary origin on and record the numbers.

Also a question that comes up a lot is if someone has to change a tool but the Z0 surface they used is gone - what do they do?
Just find the origin of that permanent block as I call it but on Z only. Then again in the MDI type the offset difference number you calculated for Z earlier. Go to that new place then make that the Z0 on the controller. Your back in business.

I guess I just want to stress that it is important to think and prepare for things like power failures and is possible to recover from if you make a plan before you start a carve.

1 Like

Hey Chris,

yes, I agree, absolutely. That’s why I wrote this and this to help people to understand what the values on the control page mean and how you can enter them to (re-)create a certain machine state.

By the way, I found out here the other day that the offset values are not lost after a power outage or a machine shutdown. I found that they are recorded in the bbctrl log file and this file is still there after reboots or power outages, in fact it lives as long as the logrotate configuration lets them live, which is rather long.

Understood and I agree 100%. This process will be different for Onefinity Elite owners with the Masso controller and will start to highlight the differences and benefits.

1 Like

think we are overcomplicating a simple procedure. This is all that is needed.