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.
| Register Type | Object Type | Access | 5-digit Range | 6-digit Range | 0-based Range | Read FC | Write FC |
|---|---|---|---|---|---|---|---|
| Coil | 1-bit | Read/Write | 00001 - 09999 | 000001 - 065536 | 0 - 65535 | FC01 | FC05 / FC15 |
| Discrete Input | 1-bit | Read Only | 10001 - 19999 | 100001 - 165536 | 0 - 65535 | FC02 | N/A |
| Input Register | 16-bit word | Read Only | 30001 - 39999 | 300001 - 365536 | 0 - 65535 | FC04 | N/A |
| Holding Register | 16-bit word | Read/Write | 40001 - 49999 | 400001 - 465536 | 0 - 65535 | FC03 | FC06 / FC16 |
| FC | Name | Register Type | Direction | Max Quantity |
|---|---|---|---|---|
| 01 | Read Coils | Coil | Read | 2000 |
| 02 | Read Discrete Inputs | Discrete Input | Read | 2000 |
| 03 | Read Holding Registers | Holding Register | Read | 125 |
| 04 | Read Input Registers | Input Register | Read | 125 |
| 05 | Write Single Coil | Coil | Write | 1 |
| 06 | Write Single Register | Holding Register | Write | 1 |
| 15 | Write Multiple Coils | Coil | Write | 1968 |
| 16 | Write Multiple Registers | Holding Register | Write | 123 |
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 TrialModbus 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.
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.
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.
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.
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).
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.