In this article, we describe G04 Dwell code for CNC programming with all details and some examples.
Dwell is a technical name for a pause in CNC programs – it is an intentional time delay applied during program processing, at the machine. In this time period – specified in the program – any axis motion is stopped, while all other program commands and functions remain unchanged (function normally). When the specified time expires, control system resumes processing of program block immediately following the dwell command.
Programming a dwell is very easy and can be quite useful in two main applications:
- During actual cutting,
when the tool is in contact with material
- For operation of machine accessories,
when no cutting takes place
Each application is equally important to programmers, although the two are not used simultaneously.
Applications for Cutting
When cutting tool is removing material stock, it is in contact with the machined part. A dwell can be applied during machining for a number of reasons. If the spindle is running, the spindle speed (r/min) is very important.
In practice, the application of dwell during a cut may be used for breaking chips while drilling, grooving, countersinking, counter boring, or parting-off. Dwell may also be used while turning or boring, in order to eliminate any physical marks left on the part by end thrust of the cutting tool. This thrust is the result attributed to various tool pressures during cutting. In many other applications, the dwell function is useful to control cutting feed deceleration on a corner during very fast feedrates, for example. This use of dwell could be particularly useful for older control systems with a possible backlash problem. In both cases, specified dwell command ‘forces’ the machining operation to be fully completed in one block, before the next block can be executed. CNC programmer still has to supply the exact length of time required for the pause duration. This time has to be sufficient – neither too short nor too long.
Dwell command is always completed before the next operation begins!
Applications for Accessories
The second common application of dwell is after certain miscellaneous functions – M functions. Several such functions are used to control a variety of CNC machine accessories, such as barfeeder, tailstock, quill, part catcher, custom features, and many others. Programmed dwell time must allow for the full completion of a certain procedure, such as the operation of a tailstock. During such a procedure, the machine spindle may be either stationary or rotating. Since there will be no contact of the cutting tool with part material in this situation, it is not important whether the machine spindle actually rotates or not.
On some CNC machines, the dwell command may also be needed when changing spindle speed, usually after gear range change. This applies mainly to CNC lathes. In these cases, the best advice as to how and when to program dwell time is to follow the CNC machine manufacturer’s recommendation.
G04 Dwell command
Standard preparatory command for dwell is G04. Like other G commands, G04 used by itself only will do nothing. It must always be used with another address, in this case, specifying the length of time to dwell (pause). Three addresses can be used for dwell – they are X, P or U (address U can only be used for CNC lathes). Actual time duration specified by the selected address is either in milliseconds, or in seconds, depending on which address was used. Some control systems may use a different address for programming dwell, but its main purpose as well as programming methods remain identical.
Several fixed cycles for CNC machining centers also use dwell. This dwell is programmed together with the cycle data, not in a separate block (G04 is not used). Only fixed cycles that require a dwell time can use it in the same block. For all other applications, the dwell command must be programmed as an independent block. Dwell will always remain active for one block only and does not carry over to the next block. Dwell is a one-block function – it is not modal. During dwell execution, there is no change in status of program processing, only the overall cycle time will be affected.
Dwell Command Structure
The structure – or format – for the dwell time is:
X5.3 ( All machines, excluding fixed cycles )
U5.3 ( Lathes only )
P5300 ( All machines, including fixed cycles )
In any case, the typical representation is five digits before and three digits after the decimal point, although that may vary on different control systems.
Since milliseconds or even seconds can be used as units of dwell, their relationship can be established:
1s = 1000ms
1ms = 0.001s
s = second
ms = millisecond
Examples of practical application of the dwell format are:
G04 X2.0 ( preferred for long dwells – in seconds )
G04 P2000 ( preferred for short or medium dwells – in ms )
G04 U2.0 ( lathe only – in seconds )
In these examples, the dwell is 2 seconds or 2000 milliseconds. All three formats are shown with identical results. The next example is similar:
This example illustrates a dwell of 500 milliseconds, or one half of a second. Again, all three formats are shown.
In a CNC program, the dwell function may be used in the following way – note the dwell is programmed in a separate block, between two motions:
N21 G01 Z-1.5 F12.0
N22 G04 X0.3 (DWELL COMMAND 0.3 SEC)
N23 Z-2.7 F8.0
Programs using X or U addresses may cause a possible confusion, particularly to new programmers. The X and U addresses may incorrectly be interpreted as an axis motion. This will never be the case. By definition, the X axis and its lathe application, the U axis, is the dwelling axis.
X axis is the only axis common to all CNC machines.
No axis motion will take place when the X, P or U address is used with the dwell command G04.
The control unit interprets commands X or U as dwell, not as axis motion. This is because of presence of the preparatory command G04, which establishes meaning of the address that follows it. If using the X or U address for dwell does not feel comfortable, use a third alternative – the address P. Keep in mind, that the P-address does not accept decimal point, so any dwell is programmed directly as the number of milliseconds in order to control the elapsed time. One millisecond is 1/1000th of a second, therefore one second is equivalent to 1000 milliseconds.
Both addresses X and U can also be programmed in milliseconds with G04, without a decimal point – for example;
G04 X2.0 is equal to G04 X2000
Leading zero suppression is assumed in the format without decimal point (trailing zeros are always required):
P1 = P0001 … 1 millisecond =0.001 second
P10 = P0010 … 10milliseconds =0.01 second
P100 = P0100 … 100 milliseconds =0.1 second
P1000 = P1000 … 1000 milliseconds =1.0 second
While minimum dwell is more important than maximum dwell, each control has a limit for maximum dwell duration. For the format using five digits in front of a decimal point and three digits following it, the dwell range is between 0.001 and 99999.999 seconds. That is equivalent to a dwell range from the minimum of 1/1000th of a second, up to 27 hours, 46 minutes and 39.999 seconds.
Dwell programming applications using the X and P addresses are identical to both machining centers and lathes, but the U address can only be used in lathe programs. The selection of either metric or imperial dimensional units has no effect on the dwell function whatsoever, as time is not dimensional.