Keeping zero position

I had 3D printed mounts for NC proximity sensors on both Y axis rails and the Z axis rail and the Z axis and used sensors similar to this one (the specific ones I ordered no longer appear to be listed):

The main challenge was the sensors needed 12v or more to operate correctly and the Onefinity controller works with 3.3v logic levels so I used optocouplers between the 2. I have since moved to a Masso controller which works natively at 12v (or more) and has integrated optocouplers for isolation which simplified the setup. I’ll see if I can dig up some pics of the mounts but I don’t think I have anything saved on the 1F controller configuration.

The proximity sensor setup was well worth the time and effort to implement, I am able to power off the machine, power on, re home and pick up where I left off on a project.


Moved to a Masso controller? NC proximity sensor and mounts? Unless/until the upgrade path is available from 1F, I am extremely interested in any solution to the lack of session repeatability from my 1F J-man.

If I weren’t already bald, I’d be pulling my hair out in frustration with the open-loop stepper motors and stall homing on my 1F.

If you would expand on your solution, I would be grateful.

1F non-Masso controllers use Buildbotics, which is based on LinuxCNC.

I cannot find G02 documentation anywhere on that website, and don’t know if the interpreter would equate that with G2 (which has completely different functionality).

I’m wondering if I can manipulate my J-man’s workable area via G28.1. To be more specific, I’m contemplating a doghole-with-metal-dog-combination centered at (96, 96) to tell my machine where its workable area is via the G28.1 MDI command.

Hey Festdewalkita,

Buildbotics is not based on LinuxCNC, as Buildbotics is the own work of its creator, but its g-code syntax is patterned after the LinuxCNC g-code syntax

G2 (Clockwise Arc Move) is identical to G02, just as M3 is identical to M03.

The numbered parameters #5161#5169 store the machine coordinates of the home position for the axes X, Y, Z, A, B, C, U, V & W, therefore after homing, G28 moves to machine origin (aka ‘home’)

G28.1 sets these parameters to the values of the current position, but the position is in absolute machine coordinates.

You can check the values at any time with the g-code command:

M0 (debug, G28 settings: X=#5161, Y=#5162, Z=#5163)

I don’t know if you rather are interested in the G52 and G92 commands. After probing your workpiece in XYZ, the G92 command sets the new workpiece zero as the X,Y,Z zero position of the workpiece coordinate system. Any subsequent G0, G1, G2 and G3 motion commands will then take the workpiece zero as coordinate system zero. E.g. G0 X0 Y0 Z0 will then move to the workpiece zero. You can still move to machine zero (‘home’) with G53 G0 X0 Y0 Z0 when a workpiece coordinate system is in effect.

The G52 command is useful if you have multiple identical pieces to be milled at different positions.

1 Like

Tomatoe/tomato. The distinction might be pedantically pure, but it doesn’t do much to add to the conversation.

As I suspected. So

makes no sense to me.

This is the confirmation I was seeking. It seems to me that getting the gantries really close to snug (rather than letting the 1F BB do its stall thing) is much more likely to result in a larger machine working area, and should be a more reliable machine zero to boot.

Hey Festdewalkita,

I don’t think you can say Buildbotics “is based on” LinuxCNC. You can say the Onefinity Controller is based on the Buildbotics Controller, because the Onefinity Controller is a software and a hardware fork of the Buildbotics Controller (bbctrl-firmware, bbctrl-pcbonefinity-firmware, onefinity-pcb).

But the Buildbotics Controller is a new CNC Controller written from scratch and not based on LinuxCNC. It would be rather correct to say, the Buildbotics Controller is based on the knowledge that its authoracquired when he was writing the Camotics 3D Simulation Software (Ref.: History of the Buildbotics Controller).

So you could only say Buildbotics is based on LinuxCNC the same way you would say that LinuxCNC is based on the FANUC CNC Mill Controller. In software, usually if you say “based on”, you mean that you somehow took the software and recycle some of the code. But the softwares mentioned here are not based on the other, the developers just tried to pattern their g-code dialect after the other.

Probably a typo by the original poster.

Debian is a form of Linux, but not all Linux is Debian.

Buildbotics is a form of LinuxCNC, but not all LinuxCNC is Buildbotics.

But what did we just accomplish?

Yes, “G02” is a typo.

G92 X0 Y0 is the correct version

I think I got the G92 code from

Hey Festdewalkita,

Debian is not a form of linux, but an operating system that, among other kernels, can use the kernel as kernel. The Hurd kernel is another kernel that Debian uses.

As explained above, Buildbotics is not a form of LinuxCNC, just as LinuxCNC is not a form of FANUC CNC mill controller.

At the moment, it seems I did not accomplish explaining well enough :slight_smile:

Lol, my point was that there’s discussion that’s fruitful, and there’s discussion that’s not, :laughing:. It was not to invite even more fruitless pedantics :joy::rofl:!!!

Back to topic: has some interesting articles on homing, coordinate systems, and a brief explanation on G53.

So while I’d love to translate Wayward’s F360 additive (3D printing) file into an Aspire subtractive/milling file I could CNC proximity switch-holding brackets into, I wonder if I could just mill out a piece of wood that goes into my 96,96-centered doghole that would hold those proximity switches and then edit the ini file…

Hey Festdewalkita,

That was a joke (to explain the same point)

Woops! :joy: (post must be 20 characters)


If you use a corner fixture like one of these. You can create a starting spot that you will only need to zero x and y one time then all the following pieces will only need to be z zeroed. This keeps two sides perfectly square every time and you only need to apply side pressure on two sides to hold a piece of material in place. This has been my go to setup for turning out lots of different projects in one day.


I’ve either seen your or someone else’s posts in that regard, and appreciate its simplicity.

I have my 1F mounted on a QCW with rolling/folding.

I may end up doing a hybrid version of this as an “easy button” solution to my problem, especially if the code is complex (I haven’t looked, yet…swamped).

I hate to admit it, but the easiest solution of them all might be to re-do all my tiling files to acknowledge my specific cutting area reality (instead of the generic information 1F posted that I relied on to build my models in Aspire).

As a still-relatively-noob CNC’er, I’ve found this issue is a crucial item with the BB (classic?) controller. Of course, if you never even get close to using the full area of your 1F, it’s all moot.

1 Like

So I tried the G28.1 code in MDI, and maybe I didn’t do it right…

…but then I found this.

Visually getting x & y to zero (using the controller’s x button for the fine tuning) and then backing it off 1 mm (substituting my eyeball-data for its stall-home, then-back-off-1mm solution to define G28.1) seems to be the time-poor man’s solution. Since I’d be keeping the 1mm buffer in there, I can’t see any downside to doing it this way (other than the effort of manually setting home rather than just hitting a button).

I will admit that I don’t know what would happen if you answered “Yes” to the “Do you want to home the machine?” question asked upon successful boot-up. If it sets the existing position to zero in the x & y after doing the stall home for z, I would imagine it would be easy to clear and start over via the home button in the Axis Table.

Short of the exotic limit-switch setup WaywardWoodworker discussed above, I think this is a quick enough way to get a consistent zero position for people looking to max out their 1F workspace (especially cogent for tiling).

I am currently doing an epoxy project but too scared to try this while the project is in progress! I plan to give ti a try once I am done with this one though. I have been searching for days for a way to do this. I agree with Nogonav, this should have been one of the first things in any beginner video or instruction sheet.

1 Like

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. 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).