top of page

How can I assign more than six program zero points on Fanuc controlled machining centers?

I would like information on creating more than 6 work offsets on the older Seiki (Fanuc compatible) controls. Any ideas how to reuse or create more offsets? Thank you, Eugene Caton



As you may know, Fanuc (and most Fanuc compatibles) are quite limited when it comes to the number of fixture offsets that come standard with the control. While you can buy more fixture offsets as an option (Fanuc offers an extended fixture offset feature containing 48 total fixture offsets), there is a way to assign as many program zero points as you want with but one fixture offset!

However, you do have to give up one important feature of fixture offsets if you use this technique. It is the ability that fixture offsets give you to separate program zero assignment from programs. With the technique we show, you'll be entering program zero assignment values into sub-programs (instead of fixture offsets).

Our technique involves using the G10 command to enter program zero assignment values into fixture offset number one (G54). We'll just keep overwriting this offset over and over again, meaning again, you'll only need one fixture offset!

Here's the technique:

Program zero assigning sub-programs. We recommend using a special series of program numbers (for example, O6001 to assign coordinate system number one, O6002 to assign coordinate system number two, and so on). Here are a few program zero assigning sub-programs.

  • O6001 (Coordinate system number one)

  • G90 G10 L2 P1 X-22.3837 Y-12.2827 Z-11.0387 (Assign fixture offset, this line will be edited whenever coordinate system number one is modified)

  • G54 (Invoke the offset just assigned)

  • M99 (End of sub-program)

  • O6002 (Coordinate system number two)

  • G90 G10 L2 P1 X-15.3332 Y-11.1122 Z-11.3341 (Assign fixture offset, this line will be edited whenever coordinate system number two is modified)

  • G54 (Invoke the offset just assigned)

  • M99 (End of sub-program)

  • O6003 (Coordinate system number three)

  • G90 G10 L2 P1 X-21.1200 Y-13.9377 Z-10.9736 (Assign fixture offset, this line will be edited whenever coordinate system number three is modified)

  • G54 (Invoke the offset just assigned)

  • M99 (End of sub-program)

The L word (L2 in our case) specifies what kind of data is being set. For one popular control, L2 specifies fixture offsets. You'll need to confirm the value of the L word for the specific control's with which you'll be using this technique. P specifies the offset number (number one in our case). We're simply overwriting the current values stored in fixture offset number one in each of these sub-programs. The subsequent G54 ensures that the coordinate system just changed is instated.

You can have as many program zero sub-programs as you need. You're only limited by how many programs your control can hold.

In the main program (or whenever you want to change coordinate systems), simply invoke the related sub-program with an M98 command. Here's a simple program example main program that invokes two of the previously created coordinate systems.

  • O0001 (Main program)

  • N005 T01M06 (1/2 Drill)

  • N010 G90 S600 M03 T02

  • N015 M98 P6001 (Select coordinate system number one)

  • N018 G00 X1.0 Y1.0

  • N020 G43 H01 Z0.1 M08

  • N025 G81 R0.1 Z-0.3 F5.0

  • N030 G80 M09

  • N035 G91 G28 Z0 M19

  • N040 M01

  • N045 T02 M06 (1/4 drill)

  • N050 G90 S1000 M03 T01

  • N055 M98 P6002 (Select coordinate system number two)

  • N060 X2.0 Y2.0

  • N065 G43 H02 Z0.1 M08

  • N070 G81 R0.1 Z-0.5 F3.0

  • N075 G80 M09

  • N080 G91 G28 Z0 M19

  • N085 M30

Again, the one negative to this technique is that the setup person will be modifying programs (O6001, O6002, O6003, etc.) to assign program zero points as opposed to entering values into fixture offsets.

Follow-up question:

Thanks for your help, We basically did this by creating one sub-program but it took too long for it to search through the program to find the code. Is there not a way to input theses sub programs after the M30? Then when this program is loaded it can search for that sub program inside the program? This way, the operator does not have to load 48 sub-programs with each program? Your thoughts are appreciated. Thanks, Eugene



Yes, you can include the sub-programs (the programs in the O6000 series in the example above) right after the M30 in the main program (one big file), but you must also confirm that the control will read all of these programs during a program transfer. Note that a parameter controls when the control will stop reading from a DNC device. The default setting will have the control stop reading at the very first M02, M30, or M99 that it comes across. With this setting, the control will NOT read the subprograms. You can set this parameter so that it will not stop reading until it sees an end of file word (usually a percent sign [%]). This parameter (its number and setting information) is documented in the Fanuc Operators manual in the section on program registration.

414 views0 comments

Recent Posts

See All

How does G66 work?

G66 is one of the more misunderstood custom macro B commands. Fanuc calls it a modal custom macro call. It looks just like a G65 command. Consider these two commands: N045 G65 P1000 X3.0 Y3.0 Z0 A45.0

What are directional vectors?

Current model CNC controls make it easy to create circular commands. You simply specify the direction (G02: clockwise or G03: counter clockwise), the end point (usually X and Y), and the radius (with


bottom of page