Keeping zero position

So I decided to give it a try tonight. unfortunately it didn’t work.
I first moved the router to a different section of the board and tried to get it to go home with the g01 command. It gave me an error so I shortened it from 117.103 to 117.10. Same with Y. This time nothing at all happened. No movement or error.
Later on in the evening we had a power outage due to storm. Thankfully I was already at my 0,0 so I can run the rest of the job without homing. But just for fun I tried it again and this time got the error below. It doesn’t make sense to me because the x I put in was 117.10 but it recognized it 3107.
Seems like it should be much more straightforward to dial in any spot on the board and go there. Or maybe it is and I’m just doing it wrong.

If you are using the go command zero your machine first then use the go command. Or zero the machine first and simply move your machine to where you want the new zero position to be and zero it on the controller.

Hey Dave,

what do you want to do? Is this still about Resetting after a power outage?

Were you able to follow what I explained in my reply? What you have to note or screenshot for the case of a power outage is the offsets column. These numbers say where your workpiece zero is in relation to the absolute machine origin, so having these data is crucial. The offsets are usually created by probing the workpiece prior to running the program or at the beginning of a new tool pass. On probing, the new coordinate system is activated to have its XYZ zero position exactly where your workpiece zero is in your 3D model.

In case you had a power outage, but noted the offsets, you can enter them with the G92 (Coordinate system offset) command. This corresponds to moving the machine to the coordinates that you noted (manually by jogging, or with a G0 command) and then pressing one of the zero buttons on the CONTROL page (available for a single axis or for XYZ). This in fact executes a G92 X0 Y0 Z0 command (or G92 axis with only one axis). This is the command to set a new workpiece zero at the position that you moved to. It is also the most important command in every probing routine, as it tells the machine where the workpiece zero is, (or in case of probing after a tool change, how long the new bit is).

If you have the coordinates of the offset colum, I can tell you how to re-enter them after a power outage.

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. On the buildbotics-derived Onefinity Controller of the Original/PRO Series, 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 and PRO Series, optional on Original 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, if you want or need to go to the machine home position again, e.g. 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 (see also here)), or to have the milling motor out of the way to attach a new workpiece, you don’t call the homing sequence again but it is a command like ‘G53 G0 X0 Y0 Z0’ (G53 – Move in machine coordinates)) that is called instead, or ‘G30 (G30 – Go to predefined position)’. This can be important because the homing sequence deletes the machine coordinates and re-establishes them new by driving the carriages to the limits, and on many machines, this does not guarantee an accurate positioning repeatability, while with G53 or G30, the machine still moves on the machine coordinates that were established at startup.

  • Zeroing: This is what tells the machine where your workpiece is in real. It is the representation of the workpiece zero coordinate in your 3D model in reality.

    It means after having moved the tip of the bit and thereby all axis carriages to a desired position, a procedure you can do manually with the jog pane, the gamepad, or with g-code commands entered into the command entry field of MDI tab, or in most cases with a probing procedure with a touch plate or touch probe, the current position is then set as the new zero of a temporary workpiece coordinate system. In fact this means, after zeroing, a new coordinate system is in effect, represented by the “position” and the “offsets” column. This allows the machine to exactly know where you attached your workpiece and your g-code program to be run.

    You can zero one single axis, or all axes at the same time, with the corresponding button, in case you changed only one dimension of your workpiece.

    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