Modbus address converter

A datasheet says 40001, the frame needs 0x0000, and the difference has cost more commissioning hours than any wiring fault. Enter a reference and get the table, the offset on the wire and the function code to read it.

Offset to reference

How Modbus addressing works

Four tables

Coils (read and write bits), discrete inputs (read-only bits), input registers (read-only words) and holding registers (read and write words). The leading digit of a conventional reference names the table: 0, 1, 3 and 4.

Reference numbers start at 1, offsets at 0

The rest of the reference counts from 1, but the address in the frame counts from 0. So 40001 is holding register offset 0, and 40100 is offset 99. This off-by-one is the most common Modbus mistake there is.

Five or six digits

Five-digit references reach offset 9998. Six-digit references such as 400001 reach the full 65535 range. Some datasheets skip the convention entirely and list the raw offset in hex, which needs no conversion at all.

Frequently asked questions

Is 40001 the same as register 1 or register 0?

It is holding register 1 in the documentation and offset 0 on the wire. The frame to read it carries 00 00 as the start address.

Which function code reads a holding register?

0x03. Input registers are read with 0x04, coils with 0x01 and discrete inputs with 0x02. Holding registers are written with 0x06 (one) or 0x10 (several).

The datasheet lists 0x0013. Do I convert it?

No. A hex address in a register map is normally the offset already, sent as is. Only conventional references like 40020 need the leading digit removed and one subtracted.

Reading Modbus sensors in the field?

Genesis reads RS485 Modbus sensors, analogue transducers and 1-Wire probes on the same four ports and reports them over cellular. Tell us what you need to read.

Talk to us →