Keeping zero position

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.

This relies on the level of precision of the stall homing sequence, which in my testing could be +/- .2mm, and can be further impacted by dust build up on the rails and ballscrews. This might be good enough for many operations or might leave a noticeable line in a 3d carve. I implemented inductive proximity sensors for homing switches to mitigate these issues and I use the method you describe. I now run an aftermarket controller which allows me to have auto squaring, saved positions and macros.