Modbus Addressing and combing 32 bit addresses

I am trying to correctly address these tags that cover a range of addresses. I have tried HR(float) and IR(float) with no luck. Can anyone offer some help or point me in the right direction on how to wrap my head around how addressing is supposed to work? Thank you!

Please show the documentation for that device. (The address mappings pages are not recommended any more--just use the documented address syntax on your tags' OPC Item Path.)

That's a Micro8xx controller (which I'm patiently waiting for the native driver to be released), and you'll have to turn on reverse word order, and turn off span gaps in the modbus driver advanced settings. I also reduced my Max Holding Registers per Request to 32.

Once you have those settings changed, like @pturmel mentioned, don't use the address mappings and do the addressing directly in your tags/UDTs. I'm also assuming your tags like PT_15A_Val si actually an array of 30 REALs? I don't know that I've ever used BOOLs with it, but you should be able to read those with something like HR1 for TAS_Panel_Val and your reals would be HRF80 for the first item of PT_15A_Val

Thank you for the help! I applied the settings changes you mentioned and have been trying to correctly address the tags without using the OPC item browser. Is there any documentation out there to help me understand? I have tried variations of HR1, HRF80, IR1, and IRF80 for my addresses. My syntax might be wrong.

You may need a slave unit number in your addresses. Ignition's driver defaults to unit #0 if not included.

I just checked my tag config and you will need the modbus ID, so you'd need 1.HRF1

For example, here's the first few modbus mappings I have:

To read 400001 here's my OPC Item Path:


Thanks again! This might be a dumb question but where do I find or distinguish the modbus ID?

I believe on these Micro8xx controllers it will always be 1.

1 Like

Thank you sir.

One other thing I just noticed you were doing is using coil addresses (each address is a single bit) instead of holding registers. Is this what you intended? Holding registers are more typically used, and as you can see in mine we used INT arrays for packing our individual bits.

That could be part of your issue especially with the REALs. Start your REAL at 400001 and it will only use 2 16-bit addresses instead of 32. So your next one would be 400003, etc.

Edit: To read the 400001 REAL value, you'd use 1.HRF1