Why does my Modbus register read 0?
Updated 18 September 2026
A register stuck at zero is rarely a broken sensor. Five things cause it, and only the last is the equipment's fault: you are reading the wrong table (an input register with the holding-register request, or the reverse), the address is off by one, the value is really a 32-bit number split across two registers and you are looking at the empty half, the register is genuinely unused on this model, or the reading really is zero right now. The quickest way to tell them apart is to read a block around it and look at the neighbours.
1. Wrong table (the most common)
Modbus keeps measurements in two different lists — input registers (read with function code 4) and holding registers (read with function code 3). Ask the wrong one and many devices return zero rather than an error. If a value reads 0 on FC3, try FC4, and vice versa. See function codes explained.
2. Off-by-one address
If the map lists 40001 and you read protocol address 1 instead of
0, you land one slot early — often on an unused register that reads zero. This
is the single most common Modbus addressing mistake. See
why is my Modbus address off by one?
3. It is half of a 32-bit value
A 32-bit float or integer occupies two registers. If the real number is small, one of those two registers is often all zeros — so reading just that half gives you 0, and reading just the other half gives you nonsense. The fix is to read the pair as one 32-bit value, in the right word order. See why does my Modbus value look wrong?
4. The register is genuinely unused
Maps reserve blocks for features a given model does not have fitted, or for future use. Those read a steady zero forever. If a whole run of registers reads zero and never moves, you are probably in reserved space — check the map for where the real data starts.
5. It really is zero
A flow of zero, a fault count of zero, a stopped motor's speed — sometimes the honest answer is zero. Make something change physically and watch: if the register moves, it was live all along.
The fast way to tell which
- Read a block, not one register. Ask for 0 to 20 and look at the pattern. Isolated zeros among live values point at addressing or a 32-bit split; a solid wall of zeros points at the wrong table or reserved space.
- Compare with the device's own display. If it shows 72.5 and the register reads 0, the value is elsewhere — keep moving the address.
- Let the app decode it. Easy Modbus shows the raw registers in hex and, through its Analyzer, flags when a zero is really the empty half of a 32-bit value next door — the case people miss most.
If instead of a zero you got an error reply — illegal data address — that is different and more helpful: the device is answering, the address just does not exist. See Modbus exception codes.