Modbus Register Converter
Convert a Modbus register value into an engineering value using configurable raw and engineering ranges. Useful for PLCs, HMIs, SCADA systems, BAS controllers, gateways, and instrumentation.
Engineering Value
How Modbus Register Scaling Works
A Modbus register normally contains a numeric value rather than the engineering value displayed by an operator interface. The receiving device may need to scale that register into units such as PSI, °F, %, RPM, or °C.
A common linear scaling calculation is:
This is the same basic linear relationship used for many PLC analog-input scaling applications.
Example
Register value = 500
Raw range = 0–1000
Engineering range = 0–100 PSI
Engineering Value = 0 + ((500 − 0) ÷ (1000 − 0)) × (100 − 0)
Result = 50 PSI
Important Modbus Considerations
The scaling calculation is only one part of interpreting a Modbus value correctly. Always verify how the device's register is defined.
Register Addressing
Documentation may use different addressing conventions such as 0-based offsets, 1-based register numbers, or traditional 4xxxx/3xxxx notation. The address shown in a manufacturer's documentation does not always correspond directly to the address entered into a Modbus driver.
Integer Versus Floating-Point Values
Some devices store a measurement in a single 16-bit register, while others use two registers to store a 32-bit integer or IEEE-754 floating-point value.
If two registers are involved, verify the device's word order and byte order before applying scaling.
Built-In Scaling
Some devices already scale values before placing them into the Modbus register. For example, a temperature of 72.5 °F might be transmitted as 725, with an implied divisor of 10.
In that case, the register scaling documented by the device must be applied before interpreting the value as the final engineering measurement.
Common Modbus Scaling Mistakes
- Using the wrong register address or offset.
- Confusing holding registers with input registers.
- Assuming every register contains a 16-bit integer.
- Ignoring signed versus unsigned data types.
- Using the wrong byte or word order for multi-register values.
- Applying scaling twice when the device already applies it.
- Assuming the register range without checking the device documentation.