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