Refining the Macro
These tips will help you optimize the structure of your part family custom macro.
Share
Kurt Manufacturing Company
Featured Content
View MoreECi Software Solutions, Inc.
Featured Content
View MoreTakumi USA
Featured Content
View MoreIn the past three columns, I have provided suggestions for developing part family custom macros. I’ll conclude this series by discussing a few more techniques to help you tweak and
optimize the structure.
Minimize program execution time. In my recommended structure, a lot of data must be active before the machining portion of your program can be executed. This data includes variables related to part definition, cutting conditions, cutting tools and system constants. In addition, any error trapping also must be done. All of this can lead to a lengthy pause during program execution.
Since the related (common) variables will remain active until the power is turned off, all of the variable assignment and error trapping commands need only be executed once, unless running a different workpiece.
Here is technique that will eliminate the pause in all but the first execution. It keys on a part number variable included in the part definition program to see if it has changed since the last time the program was executed.
O0001 (Ring turning center program)
G65 P1000 C1.0 (Get current value of #100)
IF [#500EQ#100] GOTO 1 (Test if variable settings are needed)
M98 P1000 (Call part definition program)
M98 P8001 (Call system constraints program)
M98 P8003 (Call cutting conditions program)
M98 P8004 (Call tool selection program)
M98 P8002 (Call error trapping program)
#500=#100
N1 (Side one, process one – rough face and turn)
M98 P8031
N2 (Side one, process two – rough bore)
M98 P8032
N3 (Side one, process three – finish bore thru and face)
M98 P8033
N4 (Side one, process four – finish turn)
M98 P8034
M30 (End of program)
The G65 command gets the part number value from the part definition program (O1000) and stores it in common variable #100. This value is then compared to the value of #500, and if they differ (meaning a different workpiece is being run), all the variable assignment and error trapping commands are executed. Then #500 is set to #100 so the next time the program is run for the same part, the time-consuming commands are skipped.
Use a template part definition program. This helps out the person creating part definition programs and ensures that all data is entered.
O1000 (Part definition program)
#100=#0 (Part number)
IF [#3EQ1.0] GOTO 99
#101=#0 (Material specification – 1018 or 1045)
#102=#0 (Inside diameter)
#103=#0 (Outside diameter)
#104=#0 (Bolt circle diameter)
#105=#0 (Thickness)
#106=#0 (Slot depth)
#107=#0 (Slot width)
#108=#0 (Hole diameter)
N99 M99
Note that all variables are set to vacant (#0). A test for vacancy can be done in the error trapping program to ensure that each mandatory variable has been assigned a value.
Error-trap suspected problems. At the very least, confirm that all input variables have been assigned a value. Here is an example for the previous part definition program:
O8002
#1=100 (Counter)
N1 IF [#1GT108] GOTO 50 (Start loop to test input variables)
IF [#[#1] NE #0] GOTO 5 (Test current variable)
#3000=100 (Data missing)
N5 #1=#1+1 (Step counter)
GOTO 1 (Go back to test)
N50 (More error trapping here)
M99
You can also test for a variety of potential input mistakes, such as a bolt circle diameter (#104) that is larger than the outside diameter (#103).
Try to eliminate raw material size specification. Last month, we addressed minimizing the amount of process-specific information in input data, including cutting conditions related to different materials. Your custom macro also must “know” the size of the raw material to be machined, but, as with other process-related information, try to keep raw material size
specification out of the part definition program since this information is not on the blueprint. Hopefully, there is some logic related to how raw material size is determined. Build this logic into your custom macro(s).
Try to eliminate program zero assignment. Similarly, do your best to minimize the task of program zero assignment. For a round ring held in a V-block vice, for example, the XY program zero point (center of ring) location can be calculated with simple trigonometric functions, and the appropriate fixture offset registers can be updated from within the part family program. This eliminates the task of program zero assignment.
Related Content
2 Secondary Coordinate Systems You Should Know
Coordinate systems tell a CNC machine where to position the cutting tool during the program’s execution for any purpose that requires the cutting tool to move.
Read MoreObscure CNC Features That Can Help (or Hurt) You
You cannot begin to take advantage of an available feature if you do not know it exists. Conversely, you will not know how to avoid CNC features that may be detrimental to your process.
Read More5 Reasons Why You Should Know How to Write Custom Macros
Custom macros enhance what can be done in G-code programs, giving users the ability to code operations that were previously not possible.
Read MoreTroubleshooting Differences in Programming Methods, Machine Usage
Regardless of the level of consistency among machines owned by your company, you probably have experienced consistency-related issues. Here are some tips to help solve them.
Read MoreRead Next
Registration Now Open for the Precision Machining Technology Show (PMTS) 2025
The precision machining industry’s premier event returns to Cleveland, OH, April 1-3.
Read More5 Rules of Thumb for Buying CNC Machine Tools
Use these tips to carefully plan your machine tool purchases and to avoid regretting your decision later.
Read MoreBuilding Out a Foundation for Student Machinists
Autodesk and Haas have teamed up to produce an introductory course for students that covers the basics of CAD, CAM and CNC while providing them with a portfolio part.
Read More