G04 is the rare code whose purpose is universal, pause here, motion held, spindle running, and whose number is a per-control riddle: the same P500 can mean half a second or five hundred seconds depending on which control reads it and how its settings stand, and the difference between P0.5 and P500 is either nothing or a factor of a thousand. Dwell is the decimal-trap family’s most repeatable member, and the protection is one manual check plus one counted test.

What a dwell actually is

Mechanically, G04 holds the axes still for its duration while everything else continues: spindle turning, coolant flowing, modal state intact, the program clock running. It is not a program stop, no operator interaction, no cycle interruption, and not a feed hold, nothing pauses but motion. That narrow definition is why the units question is the entire topic: a dwell has exactly one parameter, time, and a code with one parameter concentrates all of its dialect risk into that parameter’s reading.

The format landscape, honestly hedged

WorldThe conventionThe caution
Fanuc-familyP without decimal: milliseconds (P500 = 0.5 s); X or U with decimal: secondsDecimal handling on P varies by control and settings: the manual rules
HaasP-based dwell per its own documented conventionsHaas manuals state the reading; verify per machine
LinuxCNCG4 P in seconds, decimals welcomeThe one documented simply: P0.5 is half a second
Ported programsWhatever the source control meantEvery G04 is a dialect checkpoint

The LinuxCNC row is the readable public baseline: G4 P reads seconds, stated plainly. The Fanuc-family row carries the heritage: tape-era number formats distinguished integer input (in least-increment units, milliseconds for time) from decimal input (natural units, seconds), and dwell preserved the distinction, P500 for half a second sitting in the same programs as X0.5 for the same half second. Haas, as throughout this site, is honestly hedged: its manuals document its conventions, and the general Fanuc-reference habit of checking the specific machine applies doubly to a units question.

Why a fraction of a second deserves this much care

Dwell lives where time is the tool: the bottom of a G82 spot-face cycle, holding a revolution or two for the finish; chip-clearing pauses; spindle stabilization after a speed change; coolant arrival before a deep hole commits. Two properties make its units trap expensive. Multiplication: dwells ride inside cycles, so one wrong number runs hundreds or thousands of times per shift, a half-second error becoming minutes of cycle time or a full run of sub-par finishes. And silence: a wrong dwell raises no alarm, the state species of error in its purest form, visible only as cycle time that crept or counterbores that look torn.

The wrong-direction error is the sneaky one: a dwell a thousand times too long announces itself as a machine that appears hung, and more than one operator has investigated a stuck-seeming cycle that was faithfully counting out a P-value someone meant as milliseconds on a control reading seconds.

The two habits that retire the trap

Verify once per machine: the manual’s dwell paragraph, read in thirty seconds, settles P-versus-X and integer-versus-decimal for that control permanently, the same once-per-machine ritual as every dialect edge. Prove empirically when it matters: command G04 with a deliberately long value and count, ten seconds of test against a stopwatch beats any amount of forum consensus, and it is the only verification that includes your machine’s actual settings. Then write for the next reader: a comment stating intent, (DWELL 0.5 SEC), converts every future port of that program from a riddle into a checklist line, the comment-the-why craft applied where it pays most. The awareness underneath, that dwell formats are per-control at all, is the actual protection, and it is part of the dialect-sense the free 60-second rounds on the G-code practice page keep current alongside the core vocabulary.

Sources

Frequently asked questions

What is the G04 dwell time format on Fanuc versus Haas?

Both pause; the number’s reading is per-control. Fanuc-family convention: P without decimal as milliseconds, X or U with decimal as seconds, decimal handling varying by control and settings. Haas documents its own P conventions. Verify in the manual, confirm with a counted test dwell.

Why does the decimal point change what a dwell number means?

Heritage: tape-era formats read integers in least-increment units (milliseconds) and decimals in natural units (seconds), and dwell kept the distinction. P500 and P0.5 can be identical or differ a thousandfold, per control.

Where do dwells actually matter in real programs?

Where time is the tool: spot-face bottoms, G82 pauses, chip clearing, spindle stabilization, coolant arrival. Living inside cycles, a wrong dwell multiplies by the hole count.

How do I write dwells that survive moving between controls?

Comment the intent, (DWELL 0.5 SEC), verify per machine, and treat every G04 as a dialect checkpoint when porting. Knowing the trap exists is the protection.