The dwell command (G04 for most controls) will cause axis motion to pause for a specified period. The period is commonly specified in seconds. With one popular control, the command G04 X1.0 will cause the axes to pause for one second. Note that all other activities (spindle, coolant, and so on) will continue to function. Only the axes will pause.
The primary application for the dwell command is to allow time for tool pressure to be relieved. When grooving on a turning center, for example, most programmers like to include a short pause after the grooving tool has reached the groove bottom to allow the grooving tool to clean up the bottom of the groove. In like fashion, after plunging an end mill to the bottom of a pocket on a machining center, most programmers include a short pause to allow the tool pressure to be relieved.
We’ve seen some CNC users, rather inappropriately, use the dwell command in order to program around certain machine limitations. (Worse, we’ve seen some machine tool builders actually recommend using the dwell command in this manner.)
Say, for example, your CNC turning center’s coolant system isn’t reacting fast enough. Maybe there’s a bad check valve. You specify an M08, but it takes 2-3 seconds before the coolant comes on at full blast. Yet you have a tool (possibly a coolant-through-the-tool drill) that requires coolant to be flowing at its maximum before the drill can enter a hole. If it’s not, the drill could be damaged. In this case, some programmers will simply program a 2-3 second dwell command after the M08 and before the drill is allowed to enter the hole. While this does take care of the problem, it adds time to the cycle and who’s to say that the coolant system’s check valve won’t eventually worsen (taking 5-6 seconds to fully activate the coolant). The right way to handle this problem is, of course, to fix the machine.
With the coolant system example, at least the machine was originally designed to function properly. It was a machine problem (the bad check valve) that caused the programmer to add the dwell. However, we have seen many poorly interfaced M codes (designed by the machine tool builder) that do not provide full confirmation that the M code has been completed prior to allowing the machine to continue with the program.
One turning center manufacturer, for example, did not fully interface the chuck-jaw open-and-close M codes. When an end user attached a bar feeder, it was found that when the jaw-close M code was specified (to clamp on the bar after feeding), the program continued before the jaws fully closed. The bar stop moved away while the jaws were still closing and allowed the bar to feed too far. The proper long-term solution to this problem would be, of course, to have the jaw-closing M code fully interfaced so that the machine must receive a confirmation signal that the jaws are closed before it is allowed to continue with the program. Yet when this user contacted the machine tool builder, the user was told to include a dwell command after the jaw-close M code to allow time for the jaws to close. Programming around non-interfaced M codes with the dwell command can be very dangerous. In this example, if for any reason the jaws don’t close in the allotted time, the program will simply continue.
You should never have to use the dwell command to program around non-interfaced M codes. Given the technology of today’s programmable controller logic, machine tool builders can modify the way M codes behave with relative ease. So if you happen across an M code that is not fully interfaced, and especially if its function could be hazardous, we urge you to contact the machine tool builder to have it fully interfaced (and don’t take no for an answer). CNC machines are dangerous enough when all M codes are properly interfaced.
Other M codes you should never program around with dwell commands include indexing devices, pallet changers, tailstocks, tool changing, or just about any other machine function that takes time to complete.
Another time the dwell command is inappropriately applied has to do with spindle acceleration. You may be tempted to program a dwell command to handle a machine problem. But, if you do this work on a regular basis, it's likely that you could forget, and the results could be disastrous.
Again, the better long-term solution is to get the machine tool builder to fix the machine. This problem may be as simple to solve as a parameter change.