The Optional Stop newsletter
Home | More Issues | Contact Us
From our website:
On-Line Classes
CD-Rom Courses
CNC Books
CNC Jobs
CNC Schools
CNC Tips
Educator's Page
Tech Talk Forum

December 21, 2010

Dear Subscribers,

Welcome to Issue 85! 

Our biggest news this issue is the updating of our on-line CNC classes - and their placement on a new hosting web-site -

As of February 1, 2010, I will no longer be allowed to conduct my classes at as they are discontinuing their third party instructor program.  I've been assured that any students that are enrolled in a class at as of February 1st will be allowed to finish in the normal manner. 

Since the classes had to be moved, I decided it was a good time to update most of them as well.  See the Product Corner article to learn more.

As always, enjoy this issue!


Mike Lynch

Product Corner: We've updated on-line CNC classes!
Instructor Note: Prepare students for hiring interviews
Manager's Insight: What is included in your setup documentation?
G Code Primer: Help for manual programmers
Macro Maven: Rounding or truncating to a specific number of decimal places
Parameter Preference: Limiting a wear offset adjustment for turning centers
Safety First: Watch out for block delete applications

Product Corner: We've updated our on-line CNC classes!

I have been conducting on-line CNC classes since 2005. Until now, has been the hosting website. But as of February 1, 2011, they will no longer be allowing “third party” instructors (like me) to use their system. This means I had to find another website to host my classes. The selected site is

Four of the on-line classes have been dramatically updated, including:

Along with an increase in number of lessons, the course materials have been improved and expanded. Lesson text and PowerPoint presentations have been upgraded.

We’ve also maintained the pricing structure – the setup and operation classes are just $89.00 including (upon successful completion) a certificate and letter of recommendation. The programming classes are $109.00 – again – including certificate and letter of recommendation.

We have also moved the Advanced Techniques With Basic CNC Features and the Parametric Programming For CNC Machine Tools classes to the new training platform.



Top of page

Instructor Note: Prepare students for hiring interviews

As educators, we spend most of our allotted training time making sure students understand presented material. We want them, of course, to pass their courses and/or get their degree or certificate. Among many other teaching responsibilities, we make presentations, we assign homework, we help with lab exercises, and we go over assignments if mistakes have been made.

One topic that goes largely overlooked, however, is related to what students will do once they complete our courses and get their degrees. In order to get a job, students must be able to relate what they have learned in your school to the people doing the hiring. Unfortunately, many – even older – students tend to struggle in this regard.

If you doubt this, take a moment in class and ask a student what they have learned from you. If they hesitate and/or have to think much about it, it should be taken as a signal that they need to get more prepared in order to interview for a CNC-related position. And you can help.

Be sure students can communicate intelligently about their accomplishments. While there is no need to brag – or sound arrogant – students should be able to show a quiet confidence in their new-found abilities. As an assignment, have them make an outline of bullet-points that summarize what they feel are the most important goals they have achieved – and see if you agree.

If you come from a manufacturing background (as many CNC instructors do), you should know the ins-and-outs of manufacturing companies. You know that there are some pretty tough-minded people in this industry – maybe as in any industry – that won’t have much patience for or interest in people who cannot concisely explain what they will be able to do for the company.

To me, motivation is a key component. People that are self-motivated and eager to do whatever it takes to get a job done are highly valued, even over more experienced people that are less interested. So make sure your students know how to show their enthusiasm for what they’ve learned – and help them show perspective employers that they are motivated.

Relate your own success and failure stories. If you’ve gleaned an insight into what it takes to impress an employer, by all means relate it to your students. You can even conduct practice interviews. Take the role of an employer and have students interview for a job.


Top of page

Manager's Insight: What is included in your setup documentation?

In most companies, the programmer/s will provide – for every job – a setup sheet that tells the setup person how to make the setup for the job. But programmers vary with regard to just how much documentation they provide.

Admittedly, the amount and quality of setup documentation that is required is dependent upon the skill level of your setup people. If you have highly qualified and experienced people, your programmers don’t need to provide much. Indeed, a highly skilled setup person may be able to make some setups without any documentation at all. But as skill levels drop – possibly due to hiring new people – good setup documentation becomes more critical.

One easy way to judge the quality of your company’s setup documentation involves walking the shop floor when setups are being made. Look for times when machines sit idle because the setup person is unsure how to proceed. Maybe they have contacted a programmer or another engineer to help. Or maybe they’re spending excessive time studying – or asking other setup people what to do.

Some items that should be documented are pretty obvious. The location and description of cutting tool components, fixtures, and other needed components should be spelled out. Placement on/in the machine (tool station numbers and workholding device placement) should be documented. Again, the physical items used to make setups are pretty easy to spot.

But again, look for things that your programmer has missed that can cause wasted time during setup:

What offsets are used for each tool or workpiece attribute? In many cases offset selection is pretty basic. The offset number is usually tied to the tool station number in some way. But when secondary offsets are used, it can be difficult for setup people to determine which offsets are related to a given tool.

Are there any valves to set? With turning centers, for example, the chuck pressure may be changed from setup to setup. The documentation for every setup should spell out the chuck pressure to be used.

Is it necessary to change any control parameters? With major change-overs – like placing a rotary axis on a vertical machining center or changing a chuck on a turning center – there may be some parameters that must be changed. Be sure they’re spelled out in the setup documentation.


Top of page

G Code Primer: Help for manual programmers

Computer aided manufacturing (CAM) systems are extremely helpful (if not mandatory) for generating complex programs. With a CAM system, you can import geometry that has been drawn in a computer aided design (CAD) system and create the entire program (including tool paths) for machining the shape/s of your workpiece.

But CAM systems can be expensive – and difficult to initially set up. With simple work, a good manual programmer can often outperform even a good CAM system programmer. For these reasons, there are still many CNC programmers who elect to create their programs manually – at G code level – at least for some of the jobs they program.

The most difficult part of manual programming is calculating coordinates needed in the program. Again, for simple work, these coordinates are often specified right on the drawing. If machining a series of holes on a machining center, for example, hole locations are usually specified right on the print.

It becomes more complicated for manual programmers when coordinates needed in the program are difficult to calculate. Possibly a contour must be milled or turned that requires right angle trigonometry to be used in order to come up with program coordinates.

If a manual programmer has access to the CAD system drawing file (often a .dxf file), it is possible to create G code without having to buy an expensive CAM system. There are many inexpensive dxf-to-G-code software programs available to do just that. Some are even available as free-ware programs. A search in Google for “dxf to G code” will expose many of them. By the way, the tool path plotting program we sell ( NCPlot ) also has this ability.

A dxf-to-G-code converter will automatically create the tool path (in G code of course) needed to program even the most complicated two axis contour. This portion of the program can be copied and pasted into the actual program that will be used to machine the workpiece. This is not, of course, a CAM system. Only the tool path (typically for only one of the tools) is generated. The manual programmer must still write the commands needed for other tools.

If the programmer does not have access to the CAD drawing file (or the .dxf file), there is still inexpensive help available to minimize the effort needed to program tool path for complicated contours. There are many inexpensive CAD software programs available. Delta CAD (, for example, sells for only $39.00 (at the time of this publishing) and will allow a manual programmer to easily draw the complicated shape in need of machining. Many others are out there – as a search in Google will quickly confirm.

Once drawn in the CAD system, the shape can be exported to a .dxf file – or the programmer can use the CAD system’s dimensioning capabilities to determine the coordinates needed within the G code level program. Either way, this eliminates the need to manually calculate any coordinates.


Top of page

Macro Maven: Rounding or truncating to a specific number of decimal places

Suggested by Keith Recker of GMT Corporation

There are times when a custom macro programmer needs to round a calculated value to a given number of decimal places. Say for example, a given variable is going to represent something that only requires (or allows) a two decimal place format. Having more decimal places will interfere with the functionality or use-ability of the variable.

This was Keith Recker’s problem. He required a two place decimal format: “We bore a hole and then probe it’s depth. The depth dimension of the bore depth is 42.30 +/-.15mm. All I want to engrave is 42.XX (note again the two place format). Since the probe checks the depth, there’s normally a reading of more than two places, like 42.3053 or 42.3073, The bore depth is not that critical so we do not need to go out 3 or 4 decimal places and engrave an extra number/s. Once this part gets assembled, the line operator will look at the engraved dimension (say 42.36), then they’ll grab the desired shim pack needed, lay it at the bottom of the bore, then install a bearing.”

With the DPRNT command (used to send data through the communications port), it is possible to specify the number of decimal places before and after the decimal point. However, the actual value of the variable being transmitted will remain the same. So the DPRNT command will not help with this problem.

Some computer programming languages have functions that allow the easy manipulation of decimal places for variables, but custom macro B has no such “easy” function. With custom macro B, much more ingenuity is required.
There are, of course, two custom macro B functions that provide truncation (FIX) and rounding (ROUND). But these functions force the result to be a whole (integer) number. While these functions will be used in our algorithm for truncating and rounding decimal places, by themselves they do not achieve the intended goal.

Here is an example calling command that we’ll use to get the results we want. It is pretty flexible, allowing you to specify the value to be manipulated, whether you want the value truncated or rounded, the number of decimal places (after the decimal point), and the common variable number in which the calculated value will be stored.

  • N050 G65 P1000 S#121 M1.0 D2.0 V100.0

S: The value to be manipulated. It is a variable that has been attained by a prior calculation – and could have any number of decimal places after the decimal point.

M: This specifies how the value will be manipulated. If set to 0 (M0.0), the value will be truncated. If set to 1.0 (M1.0), the value will be rounded.

D: This is the number of decimal places we desire in the resulting value.

V: The variable number in which the result will be stored. In our example, the result will be stored in common variable #100.

The calling command in line N050 is our “wouldn’t it be nice if…” command. It lets us set some goals for the custom macro. With the current settings, we’re saying “Wouldn’t it be nice if our custom macro would take the value of #121 (we’ll say it is currently 44.1783) and round it (not truncate it) to two decimal places after the decimal point and store result in variable #100?” With #121 set to 44.1783, the value being stored in #100 will be 44.18. Note that if M is set to zero in the calling command, the value will be truncated to two decimal places, meaning the resulting value in #100 will be 44.17.

A note about returning a value from the custom macro - Even if you don’t have a need to manipulate decimal places, the technique we use to return a calculated value will be helpful whenever you need your custom macros to calculate a value needed back in the main program. It lets the user specify which common variable will be used. And since common variables will be retained from custom macro to custom macro, the calculated value will be available for use in the calling program (after line N050 in our example).

Now comes the hard part. We have to come up with a way to round or truncate to the specified number of decimal places.

While you may be able to come up with a better/shorter method, here is one method that works. Note that we begin by obtaining the whole number value for the value. We then start working on the decimal portion, multiplying it time 1, or 10, or 100, and so on to attain the appropriate number of decimal places as a whole number value. We then round or truncate again to get just the whole number value for this amount. We divide this result by the same value as we multiplied by before to get back to the decimal portion. And finally, we add the decimal portion to the whole number portion. Again, you may be able to come up with a better algorithm.

Here is the custom macro. The notes in the  macro follow along with what happens form our example calling command, with 44.1783 as the value to round to two decimal places.  Local variable representations for letter address arguments are S: #19, M: #13, D: #7, V: #22.

  • O1000 (Custom macro to manipulate decimal places)

  • #1 = FIX[#19] (Attain whole number portion: #1 is 44)

  • #2 = #19 - #1 (Get decimal portion: #2 is 0.1783)

  • #11 = 1 (Begin loop to determine number to multiply: it will be #10)

  • #10 = 1

  • N1 IF [#11 GT #7] GOTO 5

  • #10 = #10 * 10

  • #11 = #11+1

  • GOTO 1

  • N5 #3 = #2 * #10 (Get decimal places value as whole number portion: #3 is 17.83)

  • IF [#13 EQ 0] GOTO 6

  • GOTO 10

  • N6 #4 = FIX[#3] (Truncate to decimal places: #4 is 17)

  • GOTO 30

  • N10 IF [#13 EQ 1.0] GOTO 20

  • GOTO 25

  • N20 #4 = ROUND [#3] (Round to decimal places: #4 is 18)

  • GOTO 30

  • N25 #3000 = 100 (M MUST BE 0 or 1)

  • N30 #5 = #4 /#10 (Get back to decimal format: #5 is 0.17 or 0.18)

  • #[#22] = #1 + #5 (This is the format you want: #100 is 44.17 or 44.18)

  • M99 (End of custom macro)



Top of page

Parameter Preference: Limiting a wear offset adjustment for turning centers

When making sizing adjustments, turning center operators often use the +INPUT soft key to enter the adjustment amount. This, of course will modify the selected offset register value by the amount of the entry. If the currently selected register value is 0.004 when the operator enters -0.0001 and presses the +INPUT soft key, the new register value will be 0.0039. Again, this is the preferred method for sizing adjustments. The machine does the calculation, keeping the operator from having to do so.

One potential mistake an operator can still make has to do with the size of the value they enter. If the operator mistakenly enters 0.1 instead of 0.001, the machine will simply make the adjustment – and if the operator doesn’t notice their mistake, the results can be disastrous.

There is a parameter that controls the maximum amount of incremental (+INPUT) offset entry. For a 16T Fanuc control, it happens to be parameter number 5014. If not set (set to zero) there is no limit. But should you want to limit the maximum incremental adjustment to – say – 0.02 inch, you can set parameter 5014 to 0200 (note the fixed format – 0200 is 0.0200 inch.

Once set, the control will ignore any entries over the maximum amount. Note that if larger adjustments are required, the operator can make consecutive 0.02 entries until the desired value is reached.

M01Top of page

Safety First: Watch out for block delete applications

As you know, block delete can be used to give the operator a choice between two conditions. The operator is told to turn the block delete switch on for one of the conditions or off for the other.

With many block delete applications, there are no safety implications. If the switch is set in the wrong position, the machine may not behave in the desired manner, but there is no change in safety. Consider, for example, using block delete to control whether coolant comes on in the program or not. Maybe a given workpiece can be made from two different materials – one requiring coolant and the other not. If the switch is in the wrong position, coolant may come on when it is not required – or it may stay off when it is required. But again, the operator is not placed in any immediate danger.

Now consider a more questionable application. Maybe a turning center programmer has been told that raw material is varying in length. It is supposed to have 0.1 inch of facing stock – and some raw material parts do have this amount of stock. But others have much more – say up to 0.5 inch facing stock.
The programmer may elect to program a series of additional facing cuts to remove the excess material with block delete codes. The operator is then told to turn on the block delete switch if there is 0.1 inch facing stock on a given workpiece. They are told to turn it off if there is more than 0.1 inch facing stock.

Consider what will happen now if the operator has the block delete switch in the wrong position. There will be no safety issue if the switch is turned off when a workpiece having 0.1 inch facing stock is run. The machine will simply make more passes than necessary. But if the operator has the block delete switch turned on when they run a workpiece having 0.5 inch facing stock, the machine will try to machine all of the facing stock in one pass.

At best, this may stall the spindle. Worse, it’s likely that the workpiece will be pushed out of the chuck – causing damage to the machine and possibly injuring the operator.

So again, before you decide to use the block delete function, always ask the question: “What is the worst thing that can happen if the operator has the switch in the wrong position?” If safety will be compromised in the least, don’t use block delete.



Top of page

Sofware ad
Machining center training materials
Parametric programming ad

The Optional Stop newsletter is published quarterly by CNC Concepts, Inc. and is distributed free of charge to people subscribing to our (email) distribution list and to those downloading it from our website ( Information is aimed at CNC users and instructors teaching live CNC classes. All techniques given in this newsletter are intended to help CNC people. However, CNC Concepts, Inc. can accept no responsibility for the use or misuse of the techniques given.

To subscribe: Simply email us ( and let us know you'd like to be added to our distribution list.

To unsubscribe: Respond to this email, typing REMOVE in the subject. Please accept our apologies if we have disturbed you.