# Modbus Holding Register Address

**URL:** <https://forum.inductiveautomation.com/t/modbus-holding-register-address/91367>\
**Category:** Ignition\
**Tags:** opcua, modbus, scripting, ignition81\
**Created:** [June 4, 2024, 7:37pm UTC](https://forum.inductiveautomation.com/t/modbus-holding-register-address/91367 "2024-06-04T19:37:51Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [June 4, 2024, 7:52pm UTC](https://forum.inductiveautomation.com/t/modbus-holding-register-address/91367/2 "2024-06-04T19:52:49Z")

</div>

> [@Emmanuel\_Akinwale](#):
>
> According to the Modbus spec

Whose Modbus Spec? The _ **official** _ [Modbus Specification](https://modbus.org/tech.php) disagrees with whatever you are looking at.

And **device** makers don't have to implement everything, so device-specific address ranges abound.

It seems to me you are stumbling on the "area prefix" the Modbus Spec calls out for various types of data. To summarize:

- Area zero: Output coils and other writable booleans. Classic address range `00001` through `09999`, expanded to `000001` through `065536`, on the wire with function codes 0x01 and 0x05 and 0x0f as 0x0000 through 0xffff. In Ignition as `Cn`, where `n` is 1-65536 or 0-65535 depending on your zero-based-addressing setting.

- Area one: Discrete inputs or other readonly booleans. Classic address range `10001` through `19999`, expanded to `100001` through `165536`, on the wire with function code 0x02 as 0x0000 through 0xffff. In Ignition as `DIn`, where `n` is 1-65536 or 0-65535 depending on your zero-based-addressing setting.

- Area three: Analog input registers and other readonly short integers. Classic address range `30001` through `39999`, expanded to `300001` through `365536`, on the wire with function code 0x04 as 0x0000 through 0xffff. In Ignition as `IRn`, where `n` is 1-65536 or 0-65535 depending on your zero-based-addressing setting.

- Area four: Holding registers and other writable short integers. Classic address range `40001` through `49999`, expanded to `400001` through `465536`, on the wire with function code 0x03 and 0x06 and 0x10 and 0x16 as 0x0000 through 0xffff. In Ignition as `HRn`, where `n` is 1-65536 or 0-65535 depending on your zero-based-addressing setting.

Any of the "classic" or "expanded" formats need to have their prefix digit stripped off before using with Ignition's character-based prefixes. You kind of have to read the device maker's programmers' minds sometimes, but when hexadecimal is shown for an address, it almost always means the zero-based offset intended for use "on the wire". And most commonly means it is a holding register.

Your device should have more information, possibly scattered or in examples, to help you decipher what they've done.

There's also an area **six** , "File Records", that isn't supported by Ignition's native driver. See my alternate driver if you need that:

> [@Automation Professionals' Advanced Modbus Driver](https://forum.inductiveautomation.com/t/automation-professionals-advanced-modbus-driver/41312):
>
> Automation Professionals is pleased to announce the first beta for its Advanced Modbus Driver, for Ignition version 7.9. Key features: Server mode, emulating one or more slave [devices](https://www.automation-pros.com/modbus/UserManual.pdf), using any of the three typical connection types, including simultaneous connections of multiple types. Client mode, incorporating all three connection modes in one driver. Support for Modbus Function Codes 20 and 21, File Records. Configure protocol tweaks for troublesome devices per slave unit, enabling suppor…

---

_[View the full topic](https://forum.inductiveautomation.com/t/modbus-holding-register-address/91367)._
