Created and Maintained by the Real World Software Developers and Machinists at ... click here to check it out !!

Wednesday, December 11, 2013

Machine Warm-up Routine - Why? When? How?

As former field service engineers ... one of the items we always stressed to our CNC customers was the importance of performing a machine warm-up routine. Below are answers to some of their most frequently asked questions ... which pretty much tell the whole tale about this activity.

A machine warm-up routine benefits both the machine and the machining in a number of areas :

  • Running the spindle and moving the axis give the oils in the machine ... spindle oil and way lube ... an opportunity to distribute and do their jobs. Especially in a colder environment ... start of the day when perhaps the heat in the shop was reduced for the night ... running the spindle and moving the axis gives the oils a chance to warm up to their appropriate temperature and "work" the way they were intended. The end result is improved machine life, operation and reduced down time due to break downs.
  • It stands to reason also that when the oils are working as they were intended ... the accuracy of the machine can more easily be maintained. It is an unreal expectation to assume that you can walk in in the morning and start the machining and hold a tolerance of .0005" ... perhaps when the machine is brand new ... but not in the "real world". Starting your day like this will most likely result in offset adjustments being made due to the machine's "cold" condition ... and will begin the process of "chasing" size for quite a while. I heard countless times from customers how they spend 1-2 hours in the morning "chasing" size. Hello? Did you warm up the machine?

A lot of people assume that performing a machine warm-up routine is only appropriate after an extended "vacation" period ... either by the personnel or by lack of work flowing to the machine. While a longer warm-up period is recommended after an extended break ... an everyday warm-up routine is still recommended for the reasons listed above. Here are a couple of options for when to perform a machine warm-up routine :

  • Start of the Day ... whether that's at the shop opening or the start of the 1st shift.
  • After the machine has been idle for a time period of over 4 hours.
  • After an extended vacation period.
  • If the shop temperature is cold during the winter months ... a short warm-up should be performed even after lunch  / dinner breaks.
  • If the machining requires holding a tight tolerance ... a warm-up routine should be left executing during ANY breaks in the machining ... inspection time, bathroom break, at machine deburring process, etc..

Matching the situations above requires an assortment of warm-up routines. No matter what the length of time ... the warm-up routine should always include the following :

  • Spindle running
  • Axis moving along the full stroke of each axis.
The beauty part is that the various warm-up programs can be left in the CNC control and called up anytime as needed. Or in the case of just keeping the spindle warm ... it may be a case of just manually starting the spindle and leaving it running while you walk away and attend to something else.

Spindle Warm-Up

After an extended break the spindle should be run through all the speed ranges with substantial dwell times in between speed changes. Start slow and work your way up with at least 15-30 minutes between increases. An example of a Fanuc style program might be :
  • G97 S100 M03
  • G04 X1200.0 ( dwell for 1200 seconds or 20 minutes )
  • S300 
  • G04 X1200.0 ( dwell for 1200 seconds or 20 minutes )
  • S500
  • G04 X1200.0 ( dwell for 1200 seconds or 20 minutes )
  • etc. etc. etc. until a speed of at least 3500 RPM is obtained.
You can create a program like the above to be run after extended breaks ... and a program with less dwell time to be run after shorter breaks.

As mentioned above ... to maintain the spindle temperature during the course of the workday ... manually starting the spindle at say 2500 RPM and leaving it running while you leave the machine can also be quite beneficial in maintaining machining accuracy.

Axis Warm-Up
After an extended break  ALL the machine axis should be made traverse the complete length of each axis ... or if fixturing / workpieces are in the way the maximum length of the stroke that is possible ... using various speeds. You don't want to start the movement under full rapid traverse speeds ... but rather work your way up during the warm-up cycle. The easiest way to accomplish this is to utilize the RAPID OVERRIDE feature on the machine. The G code warm-up program will call for G00 / rapid ... but start the program with the RAPID OVERRIDE switch at it's lowest percentage .... then work it up manually as the routine runs. A sample Fanuc style axis warm-up program might look like this :
  • G00G91G28Z0
  • G00G91G28X0Y0
  • G00G91Z- ***** .... incrementally move the Z axis as close to the table as possible.
  • G00G91G28Z0
  • G00G91X ***** .... incrementally move the X axis to the opposite end of it's stroke
  • G00G91Y ***** .... incrementally move the Y axis to the opposite end of it's stroke
  • G00G91G28X0 ...... move the X axis back to the zero return / home position
  • G00G91G28Y0 ...... move the Y axis back to the zero return / home position
  • G00G91X ***** Y ***** .... incrementally move both axis at the same time to their stroke end
  • G00G91G28X0Y0 .... move X and Y back to their zero return / home position.
The above routine gives you an idea ... and feel free to make additions as you see fit. The main idea is to move ALL the axis along as much of their stroke as possible. Not just a "square" pattern ... try to make "fancy" moves that can move all the axis through as much of the strokes as possible.

If you don't like or don't have a RAPID OVERRIDE option ... you can simple make a longer program using FAST feedrates ... such as :
  • G00G91X ***** F100.00
  • etc.
  • etc.
  • G00G91 X**** F200.00
You can get the idea ... repeat the program and alter the feedrates as the program progresses. Again ... the good part is that once it is written, you can maintain the program in the machines memory and recall it as needed. No need to re-create it each time.

Spending some time creating these warm-up routine programs ... and instituting a policy of when and how they are to be run ... can go a long way to improving your machine's life ... as well as your machining efficiency and accuracy.

Please visit our website to investigate our Real World Machine Shop Software

Happy Chip Making ... and may you Make Chips and Prosper !!

Tuesday, November 26, 2013

Fanuc Macro Programming Series - Part #10 - Video Tutorials #7 & #8

In this final installment of our Fanuc Macro Training Series ... we'll take our macro programming outside the realm of actual machining and into the realm of set-up and probing. Illustrating how to utilize some of the functions and parameters of the controller to make adjustments and measure using cutter compensation and probing.

Click this link to view the Tool Offset Macro Example
Click this link to view the Probing Macro Example
Well that's it !!!

This was our final installment in our series ... we hope you have found it useful and informative.
We hope that you will refer back to the illustrations, explanations and videos at this site as you move forward in your professional CNC programming endeavors.

Please do us a favor ... SPREAD THE WORD about his BLOG and this SERIES so others can grow and learn as well. Thank You in advance.

Happy Chip Making from the SUPPORT TEAM of !!

Thursday, November 7, 2013

Fanuc Macro Programming Series - Part #9 - Video Tutorials #5 & #6

We are continuing our Macro Programming Series with a couple of video tutorials that deal with the creation of a bolt circle macro.

Video #4 illustrates the creation of a complete bolt circle macro ... while Video #5 illustrates how to alter the complete bolt circle macro to convert it into a partial bolt circle macro.

Video #4 - Complete Bolt Circle Macro Creation
Video #5 - Partial Bolt Circle Macro Creation

The Support Team at

Tuesday, October 22, 2013

Fanuc Macro Programming Series - Part #8 - Video Tutorial's #3 & #4

As we continue our Fanuc Macro Programming Series ... we are beginning to put the previous information to work "in the real world".

In these two video tutorials ... we will create macros for holes-on-a-line examples using sme simple examples of illustration.

Video Tutorial #3
Video Tutorial #4

See you next post ... where we will get even more REAL WORLD !!
Happy Chip Making !!

Wednesday, October 2, 2013

Fanuc Macro Programming Series - Part #7 - Video Tutorial #2

On the heels of our successful video #1 ... we're going to "Kick It Up A Notch"!! ... with an arithmetic function tutorial.

Again ... please make sure you understand what's happening here so we can move on in later posts.

CLICK the Reel Icon Below to OPEN the Video Tutorial

Making Chips? ... why not make it an Arithmetic Macro !!
In two weeks ... be here or be square !!

Tuesday, September 17, 2013

Fanuc Macro Programming Series - Part #6 - Video Tutorial #1

They say the best way to learn is to see it in action. So this post we have a real treat in our Fanuc Macro Programming Series.

This post you get to listen to my "lark like" voice explain the method of assigning variables values and the building of a simple macro program to engrave (2) squares. It's not about the machining ... it's about the building and structure of the macro program.

It should be helpful in getting started down the road to building your macros, growing in complexity. ENJOY !!! ... but make sure you understand what's happening here so we can move on in later posts.

CLICK the Reel Icon Below to OPEN the Video Tutorial

Making Chips? ... why not make it a Macro !!
See ya next month !!

Wednesday, August 28, 2013

Fanuc Macro Programming Series - Part #5 : Arithmetic Functions / Control Commands

The power of the Custom Macro language lies in the use of a variety of arithmetic functions within the custom macro body. This features gives the user the power to re-define and re-calculate the values of variables "on the fly." This post is meant as a brief explanation and overall view of some of these functions available with a more in-depth view given in following posts in this series.

Types of Commands Available 

Definition and Substitution
( #100 = #101 )

Addition and Subtraction
( #100 = #101 + #102 )
( #100 = #101 - #102 )

Multiplication and Division
( #100 = #101 * #102 )
( #100 = #101 / #102 )

Logical Sum -- Exclusive OR -- Logical Product
(  #100 = #101 OR  #102 )
(  #100 = #101 XOR  #102 )
(  #100 = #101 AND  #102 )

Trigonometric Functions
( #100 = SIN(#101)) ----- Sine
( #100 = COS(#101)) ----- Cosine
( #100 = TAN(#101)) ----- Tangent
( #100 = ATAN(#101)) ----- Arc Tangent
( #100 = ASIN(#101)) ----- Arc Sine
( #100 = ACOS(#101)) ----- Arc Cosine

Other Mathematical Functions
( #100 = SQRT(#101)) ----- Square Root
( #100 = ABS(#101)) ----- Absolute Value
( #100 = BIN(#101)) ----- Conversion from BCD to BIN
( #100 = BCD(#101)) ----- Conversion from BIN to BCD
( #100 = ROUND(#101)) ----- Rounding Off
( #100 = FIX(#101)) ----- Discard fractions less than 1
( #100 = FUP(#101)) ----- Add 1 for fractions less than 1
( #100 = LN(#101)) ----- Natural Logarithm
( #100 = EXP(#101)) ----- Exponent with base
( #100 = ADP(#101)) ----- Addition of

Another powerful feature of the Custom Macro language is the ability for the user to control the flow of the programs execution. Using a variety of what is called CONTROL COMMANDS, the user can repeat areas, jump to areas and set conditions for program execution.Again, presented here is a brief explanation and overall view of some of these functions available with a more in-depth view given in following posts in this series.

Types of Control Commands Available 

IF < condition> GOTO N----
When the <condition> is satisfied, the program execution jumps
to sequence number N----.
Example : IF [#100 = #102] GOTO N100

The following are expressions that can be used to define conditional expressions :
EQ = equal to
NE = not equal to
GT = greater than
LT = less than
GE = greater than or equal to
LE = less than or equal to

WHILE < condition> DO <number>
END <number>

While the <condition> is satisfied, the program executes blocks between the WHILE statement and the END statement.

Example : 
WHILE [#100 LT #102] DO 1
( program commands )
( program commands )
( program commands )
#100 = #100 + 1 ( add 1 to #100 at the end of each body run )

GOTO N----

Program execution jumps to sequence number N----
Example : GOTO N101


Being well versed in the information from this post will be a big help as we go forward with some macro programming examples in future posts.

The fun is just beginning ... Stay Tuned !!

Wednesday, August 14, 2013

Fanuc Macro Programming Series - Part #4 : System Variables

The last type of Fanuc Macro Variables we will cover in our series are called SYSTEM VARIABLES. System Variables are fixed variables and read and reflect on conditions or values found somewhere in the CNC system. There are a variety of System Variables available to the user but they can for the most part be classified into some major groups :

The status of various input / output signals can be read using System Variables #1000 thru #1035, #1100 thru #1115 and #1132 thru #1135. Users should consult with their own individual electrical diagrams as specific input / output signals can be designed differently by different machine tool builders. But the general configuration looks like this :

Tool offset values as well as work offset values can also be read and modified through the System Variables as well. Those variable configurations look like :

Work offset values ... G54 thru G59 ... can also be read and modified through the System Variables as well. Those variable configurations look like :

Users have the ability to generate ALARMS with user defined message using System Variable #3000. The format for using System Variable #3000 is :

#3000 = XX ( error message defined here )

In the above format ... XX is the error message # ( must be less than 999 ) and the error message to display is defined between the (   ) . For example :

#3000 = 123 ( ERROR ENCOUNTERED )

When the macro program executes the line as above, the machine would enter the alarm condition ... the CRT will display Error #123 followed by the message ERROR ENCOUNTERED. Clearing the alarm condition is as normal.

The user has complete control over the Alarm # and the message to be displayed.

Through the use of the System Variables as outlined below ... users can suppress certain machine functions. Users should exercise caution when using these System Variables.

Modal information ... up to the current block ... can be read using the System Variables as outlined below :

Using the System Variables as outlined below, the position of each axis of the machine can be read. The chart outlines the type of position ... and whether or not the tool offsets are considered.


Now that we have all the definitions out of the way ... the next posts in our series will put all these definitions to use. THE FUN BEGINS ... Stay Tuned !!

Wednesday, July 31, 2013

Fanuc Macro Programming Series - Part #3 : Local & Common Variables

Part #3 in our Fanuc Macro Programming Series is dealing a little bit more in-depth with the definition and use of Local Variables and Common Variables

Local Variables are so named because they are used "locally" in a macro program. This means that the value of the local variable is retained only in the program for which it was assigned. Values of local variables are not retained when branching out to other sub programs.

Local variables are primarily used for data transfer or for intermediate calculations within a macro. The table below represents the local variable available LETTER ADDRESS and corresponding NUMERICAL ADDRESS contained in the macro program. Local variables are assigned either through the use of the G65 command or by direct data input. All local variables are "vacant" unless assigned, and can be freely used by the user.

Program Example using Local Variables :

Assignment by Macro Call :
Macro Call : 
G65 P1234 A2.00 B5.00 ;
Result :  
G65 call assigns the value of 2.00 to local variable #1 ( A )
G65 call assigns the value of 5.00 to local variable #2 ( B )

Program Command :
G01 X#1 F#2
Actual Command :
G01 X2.00 F5.00

Direct Assignment by Program Command :
Macro Statement : 
#1 = #2
Result :
Direct assignment of variable #1 set to the value of variable #2

Intermediate Calculation within a Macro :
Macro Statement : 
#1 = #2 + #3
Result :
Variable #1 is equal to the sum of variables #2 and #3


Common Variables are different from local variables in that once a value is assigned, that value is shared by all other macros and the values are not cleared at M30 or RESET. This means that #100 used in one program is the same value of #100 used in another program. In addition, if the value of a common variable is calculated in one macro, that value is retained when called in another macro.

The main important feature of common variables lies in the fcat that they can be used between macros and that their values are not cleared at M30 or RESET. Users should be careful when performing calculations with common variables because when the program is re-started, the value of common variables is retained from any previous calculations and may produce unexpected results. Common variables can be freely used by the user.

#100 thru #149
These variables are cleared at power off

#500 thru #549
These variables retain their value even after power off.


Stay Tuned for more ... 

Monday, July 15, 2013

Fanuc Macro Programming Series - Part #2 : Variables

What Are Variables
The Fanuc Custom Macro language uses a variety of what are called VARIABLES in the language. Variables can perform a variety of chores in the language, their main job is to carry and gather data for use in the macro program.

A Variable always begins with the # sign, followed by a number. For example, #100 is a variable. In it's simplest form ( without getting into specifics of how that is done ... it will be covered later ), a variable is used to carry data. An example :

First Program Line : #100 = 2.00
Second Program Line : G01 G90 X#100 F10.0

In the above example, the macro program first defines the value of the variable #100 ... that value is 2.00 as defined in the First program line. The variable #100, carrying the value of 2.00, is called or used in the Second program line. To the control, the value of the Second program line is :

G01 G90 X2.00 F10.0

Once the variable is defined ( without getting into specifics of how that is done ... it will be covered later ) anytime the control sees the variable, it replaces it with it's defined value, in this case 2.00.

To take this just a step further ... remember anytime the control sees the variable #100 it will substitute it's defined numerical value, the following line :

G01 G90 X#100 F#100

would read to the control :

G01 G90 X2.00 F2.00

As mentioned, variables have other functions as well. The types of variables available will be discussed in more detail in various posts in our series.

Types of Variables
There are basically (3) different types of variables available ... the type to utilize is dependant on how you want the data to be transmitted.

Local Variables
( # 1 thru #33 )
Local variables are primarily used for data transfer and their value remains active only within the local program. When a sub-program is executed, the value of the Local Variable does not carry over into the sub-program. The value of a Local Variable is usually set using the G65 macro call command.

Common Variables
( # 100 thru #149 and #500 thru #509 )
The main difference between Common Variables and Local Variables are that Common Variable values are retained between programs. That means that the #100 used in one program is the same in every other program or sub-program called. The value of any Common Variable, even if arrived at via a mathematical instruction, is the same value in subsequent program use.

The value of variables #100 thru #149 are cleared at power off, while those of variables #500 thru #509 are retained, even after power off. However, these conditions may be altered via Parameter Settings.

System Variables
System Variables are normally used to obtain conditions, positions or values from areas within the CNC control. Some examples of the use of System Variables :
  • To record an axis position at a certain time
  • To record or adjust a tool offset value
  • To record or adjust a work coordinate offset setting
  • To generate s user defined alarm condition 
  • Suppress the single block, feed hold, feedrate override functions
  • Read and record modal information
Stay Tuned for more in our series !!

Tuesday, July 2, 2013

Fanuc Macro Programming Series - Part #1 : Basics

R U Sitting Down ??
OK then Buckle up !!!

We are about to begin a long ... somewhat complex ... but very beneficial series teaching the how's ... why's ... and details of the Fanuc Macro B Programming Language. If you do CNC programming and are utilizing a Fanuc Control ... your review and understanding about what we are about to present will definitely send you to the next level of CNC programming.

Over the next months ... we will be interspersing articles in this series covering Fanuc Macro B programming from the basics to the complex. We will still be including and sharing some of our sought after CNC Tips and Tricks ... but we will also be including articles in this series as we go along as well.

So check back often ... follow along ... and hopefully we can help bring your CNC programming skills to the next level.

P.S. - A lot of the information here is included in our KipwareEDU® - CNC Programming Training & Reference Software - Macro Version. So if you like what you see here ... and there's tons more in KipwareEDU® ... you can purchase the Macro Version of KipwareEDU® and have this information at your disposal on your own PC ... or use it to tech your personnel. KipwareEDU® contains the info here and tons more along with in-depth video training not included here.

Part One : The Basics
What is Fanuc Custom Macro B ?
Custom Macro is the name given by Fanuc to it's programming language that enables users to take the standard G code programming to another level. Custom Macro allows users to include instructions, mathematical equations, changing variables and a host of other advanced functions in a G code program.

Because of the power of this language, anytime a thought occurs like " I just need to repeat what I did here" or similar, it's probably a good time to consider using custom macro programming. Some examples where Custom Macro programming can be employed :

  • Dimensions or other values require calculations or re-calculations "on the fly". 
  • The programming of family of parts or parts that repeat the basic operations but contain only dimensional changes.
  • Dimensions or other values need to be stored or transferred to other addresses in a program.
  • Complex operations where the basic pattern or cutting sequence remains the same ... an example would be pocketing ... but dimensional changes, that can be defined by one or a series of mathematical formulas, need to be re-calculated "on the fly".
  • The basic "rule of thumb" is that Macro programming probably can be utilized anywhere where repetition exists.

As you explore this series, we will bring out many instances where macro programming can and should be employed ... but we are also sure that these will open doors to macro programming examples in your own world as well. Keep an open mind !!!!

Macro Programming vs. Sub Programming
There are similarities and many differences between a CUSTOM MACRO program and a standard SUB PROGRAM. We outline in this chapter some of the major differences and similarities.

  • Both types can be called from another program.
  • Both types are stored in memory  under their own program number.
  • Both types can be called to repeat a pre-determined number of times.
  • Both types can be called multiple times from other sub or macro programs.
  • Both types end with the M99 command.
  • Macro program body can perform and contain mathematical equations.
  • Macro program calls can establish values for variables used in the macro program. 
  • A macro program can be called and made "modal" to repeat until the cancel command is issued.
  • Macro programs can be called from user defined G, M and T codes via parameter settings.
The creation of a custom macro program is identical to the creation of a sub program. Both types are registered to the memory under their own program number and stored separately in the memory. As with sub programs, the end of the custom macro program is done through the use of the M99 command.

OK ... there are some basics. If you have questions ... I'm sure we will address them in the coming articles.

SOOO ... stay tuned for even Happier Chip Making !!

Wednesday, June 19, 2013

Don't Just Fill Your Oils ...

... Track Them ?

Why? I'm glad you asked !!

Did you know that filling your way lube tank can tell you a story about your machine's performance. It can, if you use the information to your advantage. How?

The best way is to make an oil fill reminder form and post it on the machine. Each time oil, any type of oil, is added to the machine, have the operator jot down the following:

  • Type of oil added
  • Date and Time the oil was added
  • Amount of oil added
  • On a turning center, when the chuck was greased

This data can be used for the following :

Type Of Oil : this tells you which oil tank might be giving you trouble. If you're filling the hydraulic tank (a closed system) - WHY and WHERE is the oil leaking from. Low hydraulic oil could result in a loss of pressure and perhaps an un-chucking of a part being machined with catastrophic results. If you're replacing way-lube (which you should), what kind of schedule are you on. This list should show a difference in the frequency of the filling which will easily and early show a way-lube system problem and head-off major repairs.

Date and Time the oil was added : this info gives you a clear view of the filling schedule. Again, not filling the way-lube tank, for example, will be easily seen and catastrophe can be averted.

Amount of oil added : as above, this info gives you a clear schedule of the filling schedule. Filling the way lube tank once every two days instead of once every three days will show up and might signal a line break or other problem that can easily be spotted and repaired in time.

As with everything in life, the info gathered is only as good as the person viewing it. Teach you operators to be hands-on people and to pay attention to this list, perhaps every morning with the machine start-up. Simple ideas like this TIP can help extend your machine's life and cut down dramatically on your machine's down time and repair bills.

Live Long ... and Make Chips !!

Wednesday, June 5, 2013

Spindle Load vs. Spindle RPM

Which is the true test of how hard your machine is working ?

If you had to watch the spindle speed meter or the spindle load meter on your CNC machine ... lathe or mill ... to determine if your machine was working too hard, which one would you choose?

The truth of the matter is that although the spindle load meter does tell you the power draw on the spindle motor, the RPM gage is a more accurate representation of how hard the spindle is working. Most machines come with a specific rating for load % per a specific time such as (in laymans terms) : "You can run this machine at 100% for 30 minutes."

That is of course a true statement and you can watch the load meter while cutting and reach that spec. However, if you watch the RPM gage while cutting and see it fluctuate wildly - basically because the motor is trying to keep the spindle at the specified (programmed) RPM - you'll never reach that 30 minute time frame. Because the cutting is so heavy in this type of case, the motor must keep "powering up" to keep the programmed RPM specified. This takes much more power draw on the motor than simply running constant at 100% load for the 30 minutes.

The Solution : When your machine is cutting, watch the RPM gage first to insure that the cutting conditions are resulting in a smooth RPM for the spindle and not wild fluctations as the motor fights to keep the speed constant. Secondly, adjust the cutting conditions so that the load meter is as high as you think you want (there is nothing wrong with 70-75%) and then recheck the RPM gauge to make sure that the RPM's are smooth at those settings. Smooth RPM cutting will result in better life for the spindle motor and smoother surface finish on the workpiece as well.

Happy Chip Making !!

Check out our Real World World machine shop software at
Conversational CAD/CAM
Quoting & Estimating
G Code Conversion
CNC Training
.... and MORE !!!

Tuesday, May 21, 2013

Multi-Part Machining Series - Part #3

Machining Multiple - Different Parts

So far in our series we have looked at machining multiple parts of all the same part mounted in our fixtures during our machining cycle. What if we want to machine different parts during the cycle ... we want to mount different fixtures on the table and machine one of each during the machining cycle.

First let's look at some reasons WHY we might want to do this.

  1. Perhaps we will be delivering an assembly made of multiple parts we need to machine. If we machine all the components at the same time ... during the machining cycle ... we can better accomplish scheduling and production of the entire assembly.
  2. Perhaps similar parts utilize similar cutting tools ... if we can machine them at the same time we can reduce and better control our tooling requirements both from a "tool in the machine" as well as from an inventory viewpoint.
  3. We need to break into a production run for some "special circumstance" ... rather than halt the production all-together, we can sneak another fixture on the table and machine both parts during the same cycle.
  4. Having lived in the real world ... we could go on and on and on ... you know !!

Looking back at Part #1 and Part #2 in our series ... any of these scenarios certainly becomes a fairly simple task.

Fixture Offsets from Part #1
As we mount the different fixtures on the table ... we can establish a Work Offset for each fixture. Now each fixture is independent of the others ... and can be called with a simple G54-G59 call.

Sub-Programming from Part #2
We could use a variety of sub-programming options to accomplish the various scenarios. The easiest is to simply have a complete machining program for each fixture ... and call it using the sub-program call in our main program. So we would utilize a main program to actually link all our different machining programs together. Something line this :

Main Program :

M98 P1234 ( program to machine fixture #1 completely )
M98 P5678 ( program to machine fixture #2 completely )
M98 P8888 ( program to machine fixture #3 completely )

When we press the cycle start at program O0001 .... it will call each of our compete machining programs and will machine the workpieces at each fixture completely. Simple. You could get very creative and efficient if you did some specific tooling / sub-programming calls ... think about it.

And .... we still have our independent programs available should we need to just machine one of the parts for some reason.

As I'm writing this ... different scenarios and reasons to utilize this approach keep popping into my head. But rather than write a long dissertation here ... look around your shop ... look at your work flow ... and see if you can view some of your own scenarios where better work flow can be achieved using some of our talking points from this series.

If you are so inclined ... please drop us an email at ... tell us some of your unique situations ... or even ask us our recommendations ... and we'll publish / add them into this post for the benefit of others to review.

Thanks in advance to everyone ... and Happy Chip Making !!

Check out our Real World World machine shop software at
Conversational CAD/CAM
Quoting & Estimating
G Code Conversion
CNC Training
.... and MORE !!!

Wednesday, May 8, 2013

Multi-Part Machining Series - Part #2

Programming for Multiple Fixtures

So the decision has been made ... "We need production ... which means we need to mount as many vises or fixtures on the table as we can fit ... to make as many parts as possible."

First scenario ...
  1. We are going to make all the same part. 
  2. For our example here ... let's say that we can fit 4 fixtures on the table ... we are going to machine 4 parts in one cycle.
Some thoughts :
  1. When the tool is in the spindle ... we want to do as much work with it as possible. That means hitting each part on each fixture while it's in the spindle.
  2. As mentioned in Part #1 ... each fixture is independent with it's own work coordinate system.
  3. As a set-up ... we want to make one part first ... confirm that it is correct dimensionally and that the cutting conditions are optimal ... and then expand those toolpaths to machine the other vises.
  4. For this article ... we are not going to be concerned with the actual G code program ... more with the flow of the program. How we can structure the program to machine all the parts.
So we mount the fixtures on the table ... set up and record our Work Coordinate Offsets ... G54 - G57.

How can we write the program to machine one part ... then expand it to 3 more parts ... with the least amount of effort. Our suggestion : Sub Programming ( for a more in-depth MAKING CHIPS blog post on sub-programming ... go here : )

Here is the structure of our initial set-up program :

O0001 ( Main Program )

G43Z1.500H01M08 -------- Put the tool in the spindle, start the spindle, position Z to clearance

G00G54X0Y0 --------------- Move to the first fixture, call the sub to do the work with this tool
M98 P1000

G00G91G28Z0 --------------- End this tools sequence

G43Z1.500H02M08 -------- Put the next tool in the spindle, start the spindle, position Z to clearance

G00G54X0Y0 --------------- Move to the first fixture, call the sub to do the work with this tool
M98 P1001

G00G91G28Z0 --------------- End this tools sequence

ETC -------------------------- Create similar cycles for all the remaining tools.

Once all of the above is confirmed ... w're ready to rock and roll on all the fixtures.
Just make these simple edits :

O0001 ( Main Program )


M98 P1000
M98 P1000
M98 P1000
M98 P1000



M98 P1001
M98 P1001
M98 P1001
M98 P1001


ETC -------------------------- Create similar cycles for all the remaining tools.

The above will work fine ... one blaring item is that we are positioning back to the first fixture ... from the last fixture each time ... some wasted movement. Easy to fix because of our structure and the use of sub-programs ... just start each tool at the last vise where the last tool was working ... like this :

First Tool :
M98 P1000
M98 P1000
M98 P1000
M98 P1000

Next Tool ( work the offsets backwards ):
M98 P1001
M98 P1001
M98 P1001
M98 P1001

Next Tool :
M98 P1002
M98 P1002
M98 P1002
M98 P1002

ETC ... ETC ... ETC.

So there you have it ... combining our knowledge of SUB-PROGRAMMING with WORK COORDINATE OFFSETS ... we machined (4) parts on (4) fixtures ... efficiently.

If you followed the other Making Chips posts on SUB-PROGRAMMING and WORK COORDINATE OFFSETS... you will have an even better understanding of why these features will prove so useful when :
  1. Johnny "bumps" the middle fixture with his hammer
  2. Paul adds a revision .... an additional hole to the part
  3. "The Boss" decides he wants to take off one of the fixtures ... who knows why !!!
Anyway ... if you aren't sure why the above are simple fixes ... just go back and review the other posts !!

In the next post in the series ... we'll take a closer look at some other scenarios and options ... Stay Tuned !!

As always ... Happy Chip Making !!!

Check out our Real World World machine shop software at
Conversational CAD/CAM
Quoting & Estimating
G Code Conversion
CNC Training
.... and MORE !!!

Wednesday, April 24, 2013

Multi-Part Machining Series - Part #1

Work Coordinate Systems

Most production shops will rarely utilize a one-vise or one-fixture setup on a VMC or HMC when running a multiple piece production run. The most efficient production will have the cutting tool performing it's function on as many parts as possible while it is in the spindle. That normally means adding as many multiple vises or fixtures as the room on the table will permit.

We will be devoting the next couple of Making Chips posts to set-up and programming tips and tricks dealing with multi-part machining.

What does that multi-part machining mean for programming? As with anything in life ... first we want to reduce the amount of work ... in this case, the amount of programming. The use of sub-programming to cut down on the amount of typing or data entry or whatever work ... is one. ( We dealt with sub programming in a previous post here : ). The other is a little feature on most machines called WORK OFFSETS. In our post here we will be explaining the Fanuc style and codes of Work Offsets ... since about 95% of machines out there are what we refer to as "fanuc compatible." And that includes the popular Haas machines as well.

Why Work Offsets?

Let's take a simpler example of placing two vises on the VMC table ... both will hold identical pieces of stock ... and we want to machine two identical workpieces using the same identical tools.

Hole dimensions are identical for both workpieces.

We could always do something like use the top left corner on the part on the left as X0/Y0 and then add the 12.300 + 3.100 to program the two holes on the part on the right ... sure, simple in this case. But even this scenario is fraught with potential problems. 

  1. What if we "bump" the vise ... and the 12.300 is no longer the case. We now have to go back into the program and adjust the X and Y coordinates to reflect the new distance. 
  2. What if one vice is a different height / thickness than the other ... the parts Z0 is different.
  3. Next time we run the job ... we have to get the vises exactly 12.300 apart ... or alter the program again.
  4. .... it goes on and on ... none of the scenarios are nice to imagine.

This type of situation ... and this is a simple one ... begs for the use of Work Offsets.

What are Work Offsets?

The Work Offsets allow the user to designate distances from the fixed Zero Return position on the machine to a certain location on the machine through an offset table. The Work Offsets are recorded distances from a fixed position on the machine ... usually the Zero Return or Reference Return position on the machine. This position is the only position that can be repeated on the machine without fail ... because it is defined from a physical limit switch. Once the electronics on the machine are powered off ... most internally recorded positions are lost ... no power to keep the computer running, it loses it's memory. When the machine is powered back on ... we can find our Zero Return by utilizing that function on the machines panel because it searches for that physical limit switch ... it doesn't rely on any memorized position ... it is dependent on the physical limit switch. For that reason ... all Work Offset positions are recorded from that Zero Return position for all axis.

The number of Work Offsets available on a machine tool can vary ... some have as little as one or two and others have 300-500 ... on Fanuc controlled machines the standard number is six ... although options to add  more are available. They are designated by G code calls ... G54, G55, G56, G57. G58 and G59.

If you were to look in the Work Offset table ... you would see something similar to :

So the user measures the distance from the fixed Zero Return position to ... let's use our example ... to the top left corner of the left hand vice as that parts X0/Y0 location. The measured distance is then entered in the Work Offset table ... both X and Y ... under one of the Work Offset designations ... we'll use G54. The steps are repeated for the left hand vice ... and the X and Y distances are entered in the G55 offset locations.

In our example, let's imagine that the vises and the stock are the same height in the Z axis ... just for simplicity ... but the Z axis could have a value similar to X and Y if required.

How to use Work Offsets in the G Code Program?

Let's say we have the scenario below .... the machines Zero Return position is the point on the top right designated with the purple circle :

Our Work Offset Table would look like :

Now for the programming part. Whenever the G code calls out a Work Coordinate System .... G54 thru G59 ... that Work Coordinate System becomes the default and any X / Y / Z coordinates called out for in the G code will reflect the X/Y/Z coordinates from the offset table. So the programming line ...
G00 G90 G54 X0 Y0
 ... would move the tool to the top left corner of the left hand vise. If we were to then command ...
X3.100 Y-2.125
.... we would position to the top left hole of the left hand vise ... because the G54 Work Coordinate System is the default. Similarly ... the command lines :
G00 G90 G55 X0 Y0
X3.100 Y-2.125 
... would position the tool to first the top left corner of the right hand vise ... then the top left hole of the right hand vise using the G55 Work Coordinate System.

So using the Work Coordinate Offsets and Work Coordinate System calls ... it is very easy to switch between the left hand and right hand vise by simply commanding G54 or G55.

The Advantages of Work Offsets

As we outlined above ... we are asking for problems when we don't use the Work Offsets. How did we fix them?

  1. If we "bump" the vise ... only the values in the Work Offset table will change ... the G code program will not need any editing.
  2. If the vises were different heights .... we could easily use the Z value in the Offset Table to make that adjustment ... again, no program editing.
  3. Next time we run the job ... we only need to adjust the G54 and G55 Offset Table values ... no program editing is required.
  4. and on and on and on. I'm sure you will see many more advantages on the shop floor.
As we progress through our Multi-Part Machining Series over the next posts ... we'll try to highlight some of the other programming Tips and Tricks that can be employed.

Stay Tuned .... and Happy Chip Making !!

Check out our Real World World machine shop software at
Conversational CAD/CAM
Quoting & Estimating
G Code Conversion
CNC Training
.... and MORE !!!

Wednesday, April 10, 2013

Circle Milling Like a Professional

Milling a counterbore or doing other circle cutting using an end mill or similar tool can be a powerful and creative machining process. Most times replacing the need for a reamer, boring bar or other sizing tool. This type of cutting, when combined with cutter compensation gives the operator much more flexibility in adjusting the size of the finished hole.

However, the main drawback is usually created using simple programs and is usually found at the entry and exit points where a small tool mark can be created due to the tool pressure caused at the entry of the cut. With a little creative programming technique and some simple calculations, a much more efficient and "professional" program can be created.

In this post, we're going to take you step by step through a program creation to mill a circle using the "loop in - loop out" method which takes the cutter from the center into the side of the hole using an arc move - then cuts completely around the hole - then loops back to the center using another arc move. This type of cutting gives a real nice finish in the hole, helps maintain size a little better and leaves no tool mark at entry or exit points.

In our example, finish milling an inside round pocket using G02 or G03, a cutter mark will remain from tool pressure at the entrance and exit point of the arc. In order to create a smooth entrance and exit, some “tricky” machining technique must be employed because most machines do not have a “canned cycle” for the type of cutting explained here. Although this employs nothing more than simple G02 or G03 commands, the manner in which the codes are used and the type of process that results, makes efficient use of the simple codes and makes a more attractive and accurate workpiece.

The objective with the example below is to create a smooth transition into and out of the cut. In the example below, we are attempting to machine a 2 in. radius circle with a 1 in. radius cutter.

STEP #1 : We calculate the arc needed to move the cutter from the center of the pocket to the finish wall edge. In the example below, we use the following formula :

2.00 (pocket radius) - 1.00 (cutter radius) = 1.00

This is the distance needed to move from the pocket center to the wall edge, allowing for the cutter radius.

STEP #2 : Next divide the total distance in half to obtain the radius needed to swing an arc from the center to the outer edge as calculated above.

1.00 / 2 = .500

If you like this concept ...
we invite you to take a look at our
it auto-creates G code from fill-in-the-blank forms ...
NO CAD experience required !!!

Cutter  Compensation  Note : 
Some controls will allow for the activation of CUTTER COMPENSATION on the example program block #1. In that case, you can calculate the same as above but do not compensate for the cutter radius, instead call the cutter compensation G Code and compensation offset number on the program block. In our example, the program block would be :

G02 G91 G42 X2.00 Y0 R.500 D12 

In this block, we are using G42 (cutter compensation right) and storing the radius of the cutter in offset #12. Using cutter comp as above will allow for the easy adjustment of the pocket size by adjusting the value in offset #12. Don't forget to cancel the cutter comp with G40 after the tools cutting is complete.

Creating a "CYCLE" : 
Using a simple combination of sub-programming, you can take the example above a step further and create a simple Z axis step-down cycle resulting in the roughing of the above example with little effort.

In the program example below, we are taking the circle cutting routine created above and storing it in a sub program. The main program will step the Z axis down - call the sub-program to machine the hole at that depth, then return to the main program which will in turn move the Z axis to another depth and start the process again. This "cycle" repeats until the total depth is achieved.

Main Program : 
{ start and position the tool to the hole center as normal }
G01 G90 Z-.100 F15.0 ; --- move to the depth of the first cut
M98 P1111 ---------------- call Sub Program O1111 which does the cutting as above
G01 G90 Z-.200 F15.0 ; --- move to the next depth of cut
M98 P1111 ---------------- call Sub Program O1111 again at the new depth
G01 G90 Z-.300 F15.0 ; --- move to the next depth of cut
M98 P1111 ---------------- call Sub Program O1111 again
G01 G90 Z-.400 F15.0 ; --- move to the next depth of cut
.... etc. till the desired depth is realized

Sub Program : 
G02 G91 X1.00 Y0 R.500 F10.0 ; -- circle to the hole edge
G02 I-1.00 ; --------------------- cut the complete circle
G02 X-1.00 Y0 R.500 ; ------------ circle back to the center
M99 ; ---------------------------- return to the main program

This is just one example of the combination use of the sub-programming feature and "simple" programming codes to create a user cycle. You can always use your initiative and create some other ideas. Maybe think about these  : 
How can you put the Z axis move in the sub-program as well ?
Call the sub program and repeat a set number of times ?
... any others ?

Happy Chip Making !!

Check out our Real World World machine shop software at
Conversational CAD/CAM
Quoting & Estimating
G Code Conversion
CNC Training
.... and MORE !!!

Wednesday, March 27, 2013

Your Way Lube System - Friend or Foe ?

Your CNC machine is equipped with an automatic oiler system. Great ! You won't have to think about oiling the machine and an alarm will tell you when the tank is dry. What a great device ? Right ?

Well, that is the design. Unfortunately, along with the "automatic" description of the system comes the "out of sight, out of mind" aspect of the system. Because many people know it is an automatic system, many people put it out of their minds and simply wait for the alarm to come up showing that the tank is empty and needs to be filled. But what if that alarm never comes on because the tank isn't empty ? Why wouldn't the tank be empty ?

As your machine gets older, the way lube system will require service just like any other mechanism. The main problem, which often gets overlooked, is that the "tank empty" alarm never comes on because the tank never drains and nobody ever notices it. Now your machine runs for months on end with no lubrication on the ways and when you finally notice a problem, it's too late. Here is the "Rest of the Story ..."

PROBLEM :  The machine's ways are not receiving any way lube oil.

  • Positioning / Repeatability Problems
  • Axis makes noise when moving
  • Axis Drive motor overload alarm coming when the axis is moving

  • Way Lube Pump burned out.
  • Way Lube Pump distribution flow set too low.
  • Way Lube Pump filter CLOGGED
  • Way Lube line BROKEN
  • Metering Units are CLOGGED

(1) Way Lube Pump Burned Out : If the way lube pump is burned out, obviously there will not be any lube getting into the system. These pumps are usually set using a timer system. There is basically two types of timer systems used :

  • The pump is on a cam and the way it works is that the pump is always running. One gear turns another which acts like a step-down system and the second gear raises a "primer" lever. When the lever reaches the top of the stroke, the "primer" lever is released and the oil is pushed into the lines. This whole cycle can take 5-20 minutes meaning that even though the pump is always running, the lines get lube only every 5-20 minutes.
  • How to Check It : Take a flashlight and look in the tank or remove the oil tank. Once looking inside, you can see the main gear that should be constantly moving. It may be at a very slow pace, but you will see it moving.
  • The pump is set to an electrical timer set in the controls PC (programmable controller) or an actual physical electrical timer in the cabinet. This type of timer only supplies power to start the pump for every cycle.
  • How to Check It : On some pumps there is no primer lever but a light comes on on the tank when the pump is activated. Make sure this light comes on every 5-20 minutes or some other sign comes on to show the pump is activated every 5-20 minutes.

(2) Way Lube Pump distribution flow set too low : As stated above, the way lube pump usually is set using a timer system. The flow amount that gets distributed into the lines during every cycle is usually set and adjusted at the pump with a manual setting mechanism. This type of adjusting mechanism is usually a knob that can be turned higher or lower to set more or less flow. Also, just look at the primer lever. During the mentioned 5-20 minute cycle, you should see the primer lever raise slowly and then start to drop after reaching the top of the cycle. Check the stroke of the lever - short stroke, less flow.
  • How to Check It : The normal pump usage is in an 8 hour shift, you should fill the tank every 2-3 days. Also, you should see way lube flowing onto the ways. Always remember, the more flow the better. Yes, it may contaminate the coolant but that is better than ruining the ways and thus the machine just to save a couple of bucks.

The photo above shows a way lube pump unit which includes a manual flow control device. Adjusting the white knob adjusts the amount of lube being distributed per one cycle of the lube pump. When this type of pump is working correctly, you can see the white knob rising slowly then retracting, pushing the lube into the lines. The amount of rise and fall, and therefore the amount of lube distributed, is determined by the flow adjustment.

(3) Way Lube Pump filter CLOGGED : The way lube tank usually has a filter between the tank itself and the oil line that starts the distribution. This filter is usually in the tank itself at the bottom of the primer lever or in-line right after the main distribution line leaves the tank. It will get clogged over time, especially if there is no filter at the oil fill hole or if someone takes off the filter when filling the tank.
  • How to Check It : Disconnect the main lube line where it exits the tank to feed the system or after the in-line filter if so equipped. When the cycle reaches the pump stage as outlined above, oil should flow through this connection. The flow should be strong at this point. If not, remove the oil tank and search out the filter or remove the in-line filter. They can often be cleaned with a cleaner but the best remedy is to replace it.
(4) Way Lube line BROKEN : Oftentimes a lube line in the system gets crimped or broken during machining or during service. These way lube systems are usually "pressurized" so to speak and if the pressure is released at one point, say at the broken line, the oil will flow all to that point, depriving all the other lines of fluid.
  • How to Check It : When the pump is in the pumping stage, the primer lever should fall slowly. This is due to the fact that it is pushing the oil into the system. If a line is broken, the primer lever will fall quickly as all oil is funneled to the broken line area only. On systems without a primer lever, the pump may have a pressure gauge on the pump. During the pumping cycle, the pressure should register for a couple of seconds as the oil is pumped into the lines. If the pressure is low or does not come up at all during the pumping cycle, a line in the system may be broken.
(5) Metering Units are CLOGGED : In order to create the "pressure" of the system needed for even distribution, each oil line leads to a "metering unit" where the flow is lowered and the oil is discharged. When the pump forces oil into the lines, they all fill and flow to the metering units where the flow is stopped. Each metering unit is set to discharge the desired amount or "drops" of oil and perform their individual duties. Since some areas require more lube, the metering units can be different for each line or area. Since these metering units have actual valve type components in their very small bodies, over time these units can be become clogged or the inner workings can become stuck.
  • How to Check It : This is a much harder area to check. The best remedy and prevention is to change these units every year as part of a yearly maintenance program. Because these units allow only drops to flow through, they are harder to see when troubleshooting. These metering units are usually located in "clumps" around the machine. Several lines lead to these central areas and lube lines are branched out from here to the various areas of the machine. Replacement metering valves should be obtained from the machine tool builder or dealer to insure that you are getting the correct replacement part. When changing these units, pay close attention to the flow arrow that is commonly marked on the units themselves. This arrow shows the direction of installation and flow. Check the original unit before removal and replace accordingly.

The photo above shows an example of some metering units. These individual fittings are usually located in one or two main terminal blocks that feed certain areas of the machine such as the axis and ball screws. As the system fills with pressure and lube, these fittings discharge the lube at their pre-set flow rate into their lube lines. Over time, like cholesterol in the arteries, these units become clogged and no longer allow lube to exit and thus deny vital areas of the machine the way lube they require. As part of a yearly maintenance program, metering units in the machine should be replaced as a precautionary measure.

Due diligence and a little tracking will 
insure your Happy ( and ACCURATE ) Chip Making
 for years to come !!

Check out our Real World World machine shop software at
Conversational CAD/CAM
Quoting & Estimating
G Code Conversion
CNC Training
.... and MORE !!!

Wednesday, March 13, 2013

Cutter Compensation - A Programmers Best Friend

In this Making Chips post ... we would like to touch on some of the points regarding cutter compensation ... when turning ... angles and radii ... on Fanuc based CNC controls.

Many programmers shy away from cutter compensation ... primarily because they have never taken the time to fully understand both it's power nor how to use it properly. But the reality is that cutter comp is one of a programmers best friends. The most common reason goes something like this "It's just as easy to have the CAD/CAM system compensate for the TNR ( tool nose radius ) and out put the hard numbers." That is true ... but life on the shop floor makes this a bad practice. A couple of reasons why :

  1. The "numbers" in the G code don't match the "numbers" on the part ... because they are taking into account the TNR. If manual edits need to be made ... even simple edits ... this makes it much harder because the part dimensions don't match the G code numbers.
  2. Say after cutting ... the conditions warrant either a bigger or smaller TNR for better cutting conditions. If cutter comp is used ... it's a simple offset change. If not ... it's a trudge back to the CAD/CAM guy or system to re-post and make a new G code program for the revised tool and it's TNR.
  3. In milling ... let's say I broke my last perfect .250R end mill ... but I have a re-ground one that is .245R.. Again, if cutter comp is used ... it's a simple offset change. If not ... it's another trudge back to the CAD/CAM guy or system to re-post and make a new G code program for the revised tool radius.

But here we are going to stick with turning here ... and here are a couple of simple rules for when to use and when not to use cutter compensation.

  • Whenever angles or radii are involved ... you must use TNR compensation or the angles and radii will be off. Because the programmed point of the cutting tool, an imaginary sharp point, does not coincide with the actual point of the cutting tool which always has some corner radius. For this reason, when machining close tolerance angle or radius cuts, inaccurate workpieces will be produced. The amount of error is proportional to the amount of the tool nose radius.
  • Only worry about using it for finishing ... It's really not worth the effort to use it roughing ... the amount you leave for finish allowance will probably "hide" the mismatch due to the TNR.
  • You must start cutter comp with a "start up block". This block is usually the move as you approach the part ... the move distance must be greater than the radius in the TNR offset. So if your tool has a radius of .032 ... make a move at least .035 ... preferably more. 
  • Make sure that your TNR is less than any radius on the part ... don't try to jam an .032 tool into a .020 radius ... alarms will greet you somewhere along the way.
  • We'll cover some additional thoughts at the end of the post.

The Details :
The CNC control has the capability to automatically compensate for the tool nose radius thru the CUTTER COMPENSATION codes of G41 and G42. G41 is called cutter compensation left. The left side is explained as the side of the workpiece the cutting tool is on when viewed in the direction of cutter movement or the cutter is moving on the left side of the programmed path. Once commanded, G41 or G42 are modal commands and remain active until the G40 or cancel condition is obtained.

In Fanuc controls, in addition to commanding G41 or G42 direction, the programmer must also tell the control two other aspects of the cutting tool which are : (a) the amount of the tool nose radius and (b) the imaginary tool tip location. Both these values are entered in the tools geometry or wear offset table. In the offset table, the R value is the amount of the tools nose radius. If the program called T0101 in the tool command, in offset table #1, under the R column, the nose radius of the tool would be entered. The T column in the offset tables holds the imaginary tool tip location.

Cutter compensation must be programmed using what is commonly referred to as a start up block. This block, which must be a G01 type block, is used to activate the cutter compensation before the cutting tool actual contacts the workpiece. The movement amount in the start up block must always be greater than the nose radius of the tool stored in the R column of the offset table. Circular commands using G02 or G03 are not allowed on start up blocks.

G40 is used to cancel the automatic compensation of the tool nose radius. G40 should always be commanded on a G00 block as the tool moves away from the workpiece with the tool in a clearance position.

More Rules and Thoughts :
Many rules apply in the use of cutter compensation as the control is always checking the tool position so it can calculate for the tool nose radius. Three rules of thumb apply and should keep you free of the controls cutter compensation alarms :

(1) Always command a start up block before contacting the workpiece and move in the
G01 mode with a move greater than the nose radius of the tool.

(2) Use cutter compensation primarily in the finishing cut and try to eliminate it in the roughing
passes. The more moves made with G41 or G42 modal, the more likely for a
problem. To finish the part, use the start up block, finish cut the part and
command G40 when done. If additional cuts are required, use another start
up block and cancel the cutter comp each time as soon as the profile cut is

(3) Always cancel G41 or G42 using the G40 command. The best place to command G40 is
on a G00 block, at a clearance point or moving to a clearance point.

Because cutter compensation causes the control to perform some powerful calculations and is a complex command, you should also consult your controls instruction manual for further info on G41 or G42.

Happy Chip Making !!

Check out our Real World World machine shop software at
Conversational CAD/CAM
Quoting & Estimating
G Code Conversion
CNC Training
.... and MORE !!!