Reading Modbus TCP Holding registers

I have a PH controller that is set up for Modbus TCP port 502 Standard format. I am trying to read the value in Ignition. I am not getting what I am expecting for data, and it is varying wildly. I have verified with the manufacturer that the registers being used are correct. The controller is reading 13.06 mA, I have ignition set up for linear scaling 4 - 20 mA and I am and getting data anywhere from -3,500 to -4,000. I tried reverse word order and it didn't help. Anyone have a clue where I should look next?

Are you sure you're not off by one on the registers being read? Ignition uses one-based addressing by default, some documentation uses zero-based addressing.

What address are you reading, using what syntax? Reverse Word Order only matters with multi-register datatypes.

Make sure your data type is correct for multi register reads.

I also like to use a modbus peak and poke tool to verify that the data looks approximately what I expect in UINT form before trying to read it in to Ignition. Schnieders modbus tester is decent.

It is multi-register and I have step turned on to read two consecutive registers.

Applying scaling to things you're reading as floating point to begin with is unusual.

Are you sure you shouldn't just be reading those as 32-bit integers?

I'd advise against using the address mapping tool. It really doesn't save that much time.


It's also incredibly confusing to troubleshoot because it introduces a layer of indirection that makes your NodeIds (OPC Item Paths) completely meaningless and provides no indication of what the actual address/type being read are.

I got rid of the scaling, and set the engineering limits to 0 -100. I kept the addressing but set all the unit ID's to 0. I am now getting expected values in Ignition. Thanks for your help.

1 Like