Cracking the Code: G28 G-Code for Machinists

CNCCookbook’s G-Code Tutorial: G Code Learning

What does G28 Return to Reference Position G Code Do?

G28 is one of those odd g-codes that you don’t use very often, but when you need it, it’s pretty darned handy. Its function is to return to the machine’s reference position, sometimes called the machine zero position.

That zero return position is where most programs begin, most machines will go to this position when you manually home or reference the machine, and it is the reference or zero position for calculating fixture offsets for mills and geometry offsets for lathes.

Typically, G28 g code allows the movement to be done via an intermediate position. The movement to the reference position is done at rapid speed (G0), and the intermediate position is used to ensure there are no collisions along the way.

On many machines, if you have Single Block on, you push the Cycle Start twice–once to go to the intermediate position and once to finish at the reference position.



Specifying the G28 Intermediate Position on Mills

The intermediate position is specified using one or more axes (X, Y, or Z) after the G28. If the machine is in absolute mode, those position coordinates are relative to program zero (part zero). In relative mode, the coordinates are relative to the tool’s current position. Let’s try some examples:

Basic Example: Move Straight to the Reference Position

     G91 G28 X0 Y0 Z0

In this case, we’re telling the machine the incremental position is at 0, 0, 0 relative to the tool’s position. Since it thinks it is already at the intermediate position, this version essentially causes the intermediate position to be ignored and we get coordinated motion straight to the zero position.

Move straight a distance, then on to the Zero Position

     G91 G28 X0 Y0 Z4.0

This variation is telling G28 that the intermediate position is 4″ above the current tool position, hence the machine moves up 4″ before heading straight from there to the reference position. This z-axis move makes it much less likely to hit some errant fixture or part of the workpiece than just commanding a move straight to the reference position.

Beware absolute mode!

You’ll notice the examples started with a G91 to put the machine in incremental mode. In absolute mode, the intermediate point is relative to part zero. That means it will bounce the tip off part zero, which could easily result in a crash.

It’s really hard to know a safe intermediate point in absolute mode, whereas it’s pretty easy to use the relative mode with X0 Y0 Zn to make a safe move to an intermediate position that’s straight up from the current tool position.

What to Think About When Using a G28 G Code

The main thing to think about is where is the right Intermediate Position that gives a safe straight line to the zero position.  You will want to make sure the point you pick doesn’t add too much extra travel because that will slow down your machine each time it runs.  Probably the best way to avoid collisions is to move the Z-axis first.  Move it up and away from the workpiece until you have that straight-line access to the zero position.




G28 on CNC Lathes

Same idea, but we have a little different coordinate system to work with on a turning center or CNC lathe.

Let’s assume we will use U and W to represent incremental moves. Then

     G28 W0

is the analog of G91 G28 Z0 on a mill. Hence, the tool moves in X only (since the incremental Z move is 0), and that’s the intermediate point. It follows that up with the remaining motion in Z.

It’s even more important for most turning operations to be aware of the intermediate point as collisions with the turret or gang tooling are easy to come by if you’re not watchful.

G28 in Mach3

The discussion of G28 g code up until now has centered on the way Fanuc controls operate. Here’s how it works:

G28 X~ Y~ Z~

X, Y, and Z determine an intermediate position that will be interpreted as though a G0 X~ Y~ Z~ appeared before a G28 without the XYZ. This is the same as Fanuc.

G30 is the same as G28

G28.1: Home the Axes

Issuing a G28.1 just does what happens when you manually use “Ref All” to home all the axes of your machine.


1. Get out the programming manual for your machine and see how G28 g code is supposed to operate.

2. Write some practice code using G28 and execute it on your machine. Set up so part zero is well up in the air so there’s no real chance of collision.

Next Article: Tool Compensation: The Poor Man’s CAM


Recently updated on April 27th, 2024 at 03:09 pm