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.
| Area | Holding register |
|---|---|
| Protocol address (0-based) | 107 |
| In the frame | 0x006B |
| 1-based number | 108 |
| 5-digit reference | 40108 |
| 6-digit reference | 400108 |
| Read with function | 03 |
| Write with function | 06, 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.
| Reference | Area | Read | Write |
|---|---|---|---|
0xxxx | Coil | 01 | 05, 15 |
1xxxx | Discrete input | 02 | none |
3xxxx | Input register | 04 | none |
4xxxx | Holding register | 03 | 06, 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.