---
title: "G04 Dwell Time Format: Fanuc vs Haas and the Decimal Trap"
description: "G04 means pause everywhere; the number's meaning is dialect: P as milliseconds or seconds, X and U as alternatives, and a decimal that changes everything."
url: https://gcodepractice.com/journal/g04-dwell-time-format-fanuc-vs-haas/
canonical: https://gcodepractice.com/journal/g04-dwell-time-format-fanuc-vs-haas/
author: "Lawrence Arya"
authorUrl: https://www.linkedin.com/in/vibecoding/
published: 2026-06-07
updated: 2026-06-07
category: "Code reference"
tags: ["g04", "dwell", "dialect trap", "formats"]
lang: en
---

# G04 Dwell Time Format: Fanuc vs Haas and the Decimal Trap

> **TL;DR** G04 commands a dwell on essentially every control, and the trap is entirely in the number's units: on Fanuc-family controls, P conventionally reads as milliseconds when written without a decimal (P500 = half a second) while X or U with a decimal reads as seconds (X0.5), with decimal-point handling varying by control and settings; Haas documentation states its own P conventions; and LinuxCNC's G4 P is simply seconds. The professional habits are two: verify the dwell convention in your machine's manual once, and prove a new dwell empirically, command a long one and count, because a wrong assumption here runs a thousand times per shift in a drilling cycle.

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](/journal/missing-decimal-point-in-g-code-crash/) 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

| World | The convention | The caution |
| --- | --- | --- |
| Fanuc-family | P without decimal: milliseconds (P500 = 0.5 s); X or U with decimal: seconds | Decimal handling on P varies by control and settings: the manual rules |
| Haas | P-based dwell per its own documented conventions | Haas manuals state the reading; verify per machine |
| LinuxCNC | G4 P in seconds, decimals welcome | The one documented simply: P0.5 is half a second |
| Ported programs | Whatever the source control meant | Every G04 is a dialect checkpoint |

The [LinuxCNC row](https://linuxcnc.org/docs/html/gcode/g-code.html) 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](https://www.helmancnc.com/fanuc-alarm-codes-for-cnc-machines/) 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](/journal/g81-vs-g83-drilling-canned-cycles/), holding a revolution or two for the finish; chip-clearing pauses; spindle stabilization after a [speed change](/journal/spindle-speed-calculation-for-g97-lathe/); 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](/journal/how-to-read-g-code-to-find-errors/) 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](/journal/cnc-machine-stuck-on-m30-won-t-rewind/) 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](/journal/lnc-controller-g-code-list/). 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](/journal/how-to-add-comments-in-g-code-parentheses/) 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](/g-code-practice/) keep current alongside the core vocabulary.

## Sources

- [LinuxCNC: G-code reference](https://linuxcnc.org/docs/html/gcode/g-code.html)
- [Helman CNC: Fanuc reference material](https://www.helmancnc.com/fanuc-alarm-codes-for-cnc-machines/)
- [Wikipedia: G-code](https://en.wikipedia.org/wiki/G-code)

## 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.

---

Source: https://gcodepractice.com/journal/g04-dwell-time-format-fanuc-vs-haas/
Author: Lawrence Arya — https://www.linkedin.com/in/vibecoding/
