Refining the Macro
These tips will help you optimize the structure of your part family custom macro.
In 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
A Higbee Thread Milling Custom Macro
Higbee threads provide a full thread form at the very start of the thread. The sharp edge is removed during the machining process.
Read More7 CNC Parameters You Should Know
Parameters tell the CNC every little detail about the specific machine tool being used, and how all CNC features and functions are to be utilized.
Read MoreThe Best Point of Reference for Program Zero Assignment Entries
Correctly specified program zero assignment and coordinate position values enable the CNC to determine how far to move the cutting tool during each positioning motion.
Read MoreStrange But True: Odd Things That Happen With CNCs
These oddities in the way a CNC naturally behaves can help explain some rather unusual situations that may occur during machining.
Read MoreRead Next
Inside Machineosaurus: Unique Job Shop with Dinosaur-Named CNC Machines, Four-Day Workweek & High-Precision Machining
Take a tour of Machineosaurus, a Massachusetts machine shop where every CNC machine is named after a dinosaur!
Read MoreIncreasing Productivity with Digitalization and AI
Job shops are implementing automation and digitalization into workflows to eliminate set up time and increase repeatability in production.
Read MoreThe Future of High Feed Milling in Modern Manufacturing
Achieve higher metal removal rates and enhanced predictability with ISCAR’s advanced high-feed milling tools — optimized for today’s competitive global market.
Read More