Modbus Register Address Converter

Convert between Modbus protocol addresses (0-based) and display addresses (1-based) for coils, discretes, inputs and holding registers.

Modbus register address holding register coil discrete input input register

Input values

Enter values and click Calculate to see results here.

Formula

Display address = Protocol address + 1 Protocol address = Display address - 1 Coils: FC 01/05/15, 1-bit, address 00001-09999 Discrete Inputs: FC 02, 1-bit, address 10001-19999 Input Registers: FC 04, 16-bit, address 30001-39999 Holding Registers: FC 03/06/16, 16-bit, address 40001-49999

Worked Example

Given: You need to read holding register 40001 from a Modbus device.

Step 1: Display address 40001 → Protocol address = 40001 - 40001 = 0

Step 2: Use Function Code 03 (Read Holding Registers), address 0x0000

Note: Some devices use 0-based display addresses. Always check the device manual for the addressing convention.

Engineering Notes

  • Protocol vs display: Protocol addresses are 0-based. Display addresses are 1-based with a type prefix (0/1/3/4). This is the most common source of Modbus communication errors.
  • Address ranges: Standard Modbus defines: 00001-09999 (coils), 10001-19999 (discretes), 30001-39999 (input regs), 40001-49999 (holding regs). Extended addressing goes beyond these ranges.
  • Function codes: FC01=read coils, FC02=read discretes, FC03=read holding, FC04=read inputs, FC05=write single coil, FC06=write single register, FC15=write multiple coils, FC16=write multiple registers.
  • Vendor variations: Some vendors (especially Siemens) use different addressing conventions. Always verify with the device documentation.

References

  • MODBUS Application Protocol Specification V1.1b3
  • MODBUS over Serial Line Specification V1.02