Menu

Modbus Holding Registers

Modbus holding register overview covering 16-bit read/write values, multi-register data, and the function codes most commonly used in field integrations.

Categories:

What They Are

Holding registers are 16-bit read/write Modbus values. They are the most common register family in real integrations because they carry setpoints, configuration values, writable analog points, and many general-purpose device values.

They also create many of the mistakes people casually call “Modbus issues.” In practice, the trouble is often not the protocol itself. It is confusion about whether the point is really a holding register, which address convention the manual uses, and how a multi-register value should be interpreted.

Addressing And Numbering Reality

Holding registers are frequently documented with 4xxxx style reference numbers, but many tools and gateways expect zero-based offsets instead. That is why an apparently correct register can still read the wrong value or fail a write. The device map and the client tool must agree about whether the documented address is a reference number or a protocol offset.

Documentation StyleWhat It Usually MeansCommon Risk
4xxxx reference notationHuman-facing holding-register conventionTool may expect an offset instead of the printed number
Zero-based offsetProtocol-oriented register locationUser may add a leading 4 and shift the point incorrectly

Multi-Register Values

Larger values such as 32-bit integers or floats span multiple consecutive holding registers, which means word order and data-type interpretation matter as much as address accuracy.

Data TypeRegister CountTypical Use
16-bit integer1Simple setpoints, status values
32-bit integer2Counters and totalizers
32-bit float2Temperatures, power, flow, pressure

Multi-register values are one reason holding registers deserve their own topic page. A device may expose a perfectly healthy float, but the project still reads nonsense if the byte order, word order, or signedness assumptions are wrong.

Common Function Codes

Function CodeOperation
03Read holding registers
06Write single register
16Write multiple registers
23Read and write multiple registers

Common Failure Modes

Failure PatternWhat Usually HappenedPractical Result
Reference number versus offset mismatchThe client and manual use different numbering stylesThe wrong register is read or written
Writable assumption was too broadThe point exists in the map but is protected or context-dependentWrites fail even though reads succeed
Multi-register data was interpreted incorrectlyWord order or data type was guessedValues are obviously wrong despite healthy communications
Register family was copied looselyThe point was really an input register or vendor-specific pathThe engineering model drifts from the actual device