All calculators

Modbus Register Address Converter

Translate zero-based offsets, one-based indexes and conventional 5- or 6-digit Modbus references without off-by-one errors.

Enter your values

Try an example

Your result

Wire offset0
Address bytes (hex)
00 00
Read function
03
5-digit reference
40001
6-digit reference
400001

Calculated

The document reference is not the two-byte wire address
Modbus Register Address ConverterDEVICE MANUAL40001ON THE WIRE0x0000FC 03 / 0

How this answer is calculated

These steps use your current values. Change an input to follow a different calculation.

  1. 1

    Remove the selected reference base

    40001 − 40001 = 0
  2. 2

    Encode the zero-based offset

    0 → 0x0000 → 00 00
  3. 3

    Select the read function for the data area

    FC 03

How to use this on a job

“Register 1” is not enough information. It could mean wire offset 1, the first item at offset 0, or a holding-register reference such as 40001. Decide what the manual means before typing the number into a client.

  1. 01

    Select the data area: coils, discrete inputs, input registers or holding registers. The area determines the read function, not a prefix transmitted with the address.

  2. 02

    Select the document’s convention. Zero-based is already a wire offset. One-based indexes subtract one. Conventional 5- and 6-digit references remove the area prefix and then subtract one.

  3. 03

    Read the resulting 16-bit address and read function. Confirm this convention against a known register in the manual before writing anything. The result is a translation, not a live connection.

Work through one example

wire offset = documented index − 1 (one-based only)

Conventional holding reference 40001 becomes offset 0 and bytes 00 00, using function 03 for a read. Conventional reference 400101 in the six-digit scheme becomes offset 100, bytes 00 64. A one-based input index of 101 also becomes offset 100, but uses function 04.

Before you trust the answer

40001 is a documentation convention, not a number to send unchanged as the first holding-register address. Vendors also publish plain hexadecimal offsets and other schemes. The two prefixed modes here implement the stated conventional schemes only; they do not auto-detect every manual.

Four labels for the first holding register

ConventionEnterWire offset
Zero-based offset000 00
One-based number100 00
Five-digit reference4000100 00
Six-digit reference40000100 00

Questions that come up on the job

Do I send 40001 as the address?

Not when 40001 is a conventional holding-register reference. The request identifies holding registers with the function code, then sends offset 0 as the address. Some software asks for the documentary reference and converts it for you; other software expects the offset. Check what that specific field requires.

Should I always subtract one?

Only from a one-based number. A zero-based map already contains the wire offset. A five-digit holding reference uses a base of 40001; the six-digit scheme uses 400001. Guessing the convention can return a neighbouring register that looks plausible.

TRYPLC FIELD REFERENCE / 01

Modbus Register Address Converter

Translate zero-based offsets, one-based indexes and conventional 5- or 6-digit Modbus references without off-by-one errors.

  • Holding registers → read function 03
  • Input registers → read function 04
  • Coils → read function 01
  • Discrete inputs → read function 02
  • Wire address range: 0 to 65535
Modbus Register Address ConverterDEVICE MANUAL40001ON THE WIRE0x0000FC 03 / 0

How to use this on a job

“Register 1” is not enough information. It could mean wire offset 1, the first item at offset 0, or a holding-register reference such as 40001. Decide what the manual means before typing the number into a client.

  1. 01

    Select the data area: coils, discrete inputs, input registers or holding registers. The area determines the read function, not a prefix transmitted with the address.

  2. 02

    Select the document’s convention. Zero-based is already a wire offset. One-based indexes subtract one. Conventional 5- and 6-digit references remove the area prefix and then subtract one.

  3. 03

    Read the resulting 16-bit address and read function. Confirm this convention against a known register in the manual before writing anything. The result is a translation, not a live connection.

Work through one example

wire offset = documented index − 1 (one-based only)

Conventional holding reference 40001 becomes offset 0 and bytes 00 00, using function 03 for a read. Conventional reference 400101 in the six-digit scheme becomes offset 100, bytes 00 64. A one-based input index of 101 also becomes offset 100, but uses function 04.

Before you trust the answer

40001 is a documentation convention, not a number to send unchanged as the first holding-register address. Vendors also publish plain hexadecimal offsets and other schemes. The two prefixed modes here implement the stated conventional schemes only; they do not auto-detect every manual.

https://tryplc.com/tools/modbus-address