What a Holding Register Is
A holding register is a read/write 16-bit data point in Modbus. Holding registers are the most commonly mapped register type in gateway configurations, used for setpoints, configuration values, and bidirectional data exchange.
Register Size and Multi-Register Values
Each holding register is 16 bits (one word). For 32-bit or 64-bit values (floats, counters), multiple consecutive registers are combined. The byte arrangement depends on word order and byte order.
| Data Type | Registers Used | Example |
|---|---|---|
| UINT16 | 1 | 0–65,535 |
| INT16 | 1 | −32,768–32,767 |
| FLOAT32 | 2 | IEEE 754 single-precision |
| UINT32 | 2 | 0–4,294,967,295 |
| FLOAT64 | 4 | IEEE 754 double-precision |
Function Codes
| Code | Function |
|---|---|
| 03 | Read Holding Registers |
| 06 | Write Single Register |
| 16 | Write Multiple Registers |
Addressing
Holding registers traditionally use the 4xxxx reference number range (e.g., 40001). The first holding register may be 40001 (reference-style) or 0 (offset-style) depending on the implementation.
[!WARNING] Reference vs offset addressing is the #1 source of Modbus integration errors. See Modbus Addressing & Register Reference.