Modbus Address Calculator & Converter

Convert any Modbus address between 0-based protocol, 1-based convention, 5-digit, 6-digit, and hexadecimal formats. Auto-detects register type from standard address ranges.

Try:
Enter a Modbus address above to convert it
BT Batch Address Converter
Try:
RF Modbus Address Reference Table
Register TypeObject TypeAccess5-digit Range6-digit Range0-based RangeRead FCWrite FC
Coil1-bitRead/Write00001 - 09999000001 - 0655360 - 65535FC01FC05 / FC15
Discrete Input1-bitRead Only10001 - 19999100001 - 1655360 - 65535FC02N/A
Input Register16-bit wordRead Only30001 - 39999300001 - 3655360 - 65535FC04N/A
Holding Register16-bit wordRead/Write40001 - 49999400001 - 4655360 - 65535FC03FC06 / FC16
FC Function Code Reference
FCNameRegister TypeDirectionMax Quantity
01Read CoilsCoilRead2000
02Read Discrete InputsDiscrete InputRead2000
03Read Holding RegistersHolding RegisterRead125
04Read Input RegistersInput RegisterRead125
05Write Single CoilCoilWrite1
06Write Single RegisterHolding RegisterWrite1
15Write Multiple CoilsCoilWrite1968
16Write Multiple RegistersHolding RegisterWrite123
Built-in Address Mapping

Need to read these addresses live? Download ModBus Pro — free 7-day trial

Monitor coils, discrete inputs, holding registers, and input registers in real-time. Built-in register mapping, data format conversion, and batch read/write for every Modbus address range.

Download Free Trial

Understanding Modbus Addresses

Modbus addressing is one of the most frequently misunderstood aspects of the Modbus protocol, causing confusion for engineers, integrators, and developers working with PLCs, SCADA systems, HMIs, and other industrial automation equipment. The core of the problem lies in the fact that there are multiple addressing conventions used by different manufacturers, software tools, and documentation sources, and they do not always agree. This calculator converts between all common Modbus address formats instantly, eliminating the guesswork and off-by-one errors that plague Modbus commissioning.

The 0-Based vs 1-Based Problem

At the protocol level, Modbus addresses are always 0-based. When a Modbus master sends a request frame on the wire, the starting address field uses a 0-based index. The very first holding register is address 0 in the actual protocol data unit (PDU). However, the original Modicon PLC documentation used 1-based addressing in its register maps, where the first holding register was labeled 40001. This 1-based convention became the de facto standard for most PLC programming environments, HMI configuration tools, and device documentation. As a result, when a device datasheet says "read holding register 40001," you must subtract the offset and send address 0 on the wire. Forgetting this offset is the single most common cause of Modbus communication errors, often resulting in exception code 02 (illegal data address) responses.

5-Digit and 6-Digit Notation

The classic Modicon 5-digit notation assigns address ranges by register type: coils occupy 00001-09999, discrete inputs span 10001-19999, input registers cover 30001-39999, and holding registers use 40001-49999. This gives a maximum of 9999 addresses per type. When devices need more than 9999 registers (which is common in modern energy meters, drives, and complex PLCs), the extended 6-digit notation is used: coils become 000001-065536, discrete inputs become 100001-165536, input registers become 300001-365536, and holding registers become 400001-465536. This supports the full 16-bit Modbus address space of 65,536 addresses per register type.

Hexadecimal Addresses

Many Modbus diagnostic tools, protocol analyzers, and device manuals express addresses in hexadecimal. Since the protocol-level address is a 16-bit unsigned integer, it ranges from 0x0000 to 0xFFFF. Hex notation is unambiguous because it always represents the 0-based protocol address. There is no type prefix in hex addresses, so you must know the register type from context (the function code determines which register space is being accessed). For example, address 0x0064 is decimal 100, which corresponds to holding register 40101 in 5-digit notation when used with FC03.

How Register Types Map to Function Codes

Each Modbus register type is accessed by specific function codes. Coils (single-bit read/write) are read with FC01 and written with FC05 (single) or FC15 (multiple). Discrete inputs (single-bit read-only) are read with FC02. Input registers (16-bit read-only) are read with FC04. Holding registers (16-bit read/write) are read with FC03 and written with FC06 (single) or FC16 (multiple). Using the wrong function code for a register type will result in an exception response from the device, typically exception code 01 (illegal function).

Common Pitfalls

Using This Calculator

Enter any address in the input field, select the input format (or leave on auto-detect), and optionally specify the register type. The calculator will instantly show all equivalent address representations, the correct function codes, and the address values you need for your Modbus master configuration. Use the batch converter to generate a full address mapping table for a range of consecutive registers, which is especially useful when creating register maps for SCADA point configuration or HMI tag databases.