Modbus address converter

Enter a reference such as 40001, or a plain address with its area. You get the notations manuals use, plus the function codes that reach it.

AreaHolding register
Protocol address (0-based)107
In the frame0x006B
1-based number108
5-digit reference40108
6-digit reference400108
Read with function03
Write with function06, 16

Runs in your browser. The values you type stay on your device.

Why one register has three numbers

Modbus frames carry a 16-bit address from 0 to 65535. Manuals often use the older data-model reference instead, where the first digit names the area and numbering starts at 1. In a manual, 40108 means holding register 108, which the frame carries as address 107, or 0x006B.

ReferenceAreaReadWrite
0xxxxCoil0105, 15
1xxxxDiscrete input02none
3xxxxInput register04none
4xxxxHolding register0306, 16

The full explanation, with frames captured from a real server, is in Modbus register addressing: 40001, 0-based and off-by-one errors.

Questions

What is the protocol address of 40001?

0. The 4 selects holding registers, and the remaining digits count from 1, so 40001 is the first holding register. On the wire the request carries address 0x0000 with function code 03.

Is 40001 the same as 400001?

Yes, both point to the first holding register. The six-digit form exists because five digits only reach 9999 registers per area, while the protocol allows 65536.

Why does my device manual show address 108 for register 40109?

The manual uses 0-based protocol addresses in one column and data-model references in the other. Register 40109 is protocol address 108. Check both numbers with a small read on a known value.