Modbus address Problem with TCP/IP device

I'am using ABB controller TCP/IP device here attched all details

But am getting error can you please help us regarding this issue how can we solve by entering correct value?


Based on the hexadecimal values, which typically are used for one-the-wire documentation, I would expect you to need zero-based addressing (a device setting in Ignition).

With modbus TCP, you may also need to use UnitID zero, not 1. The docs should say or should have an example.

Thanks for the quick response

can you please give me example based on the mobus mapping register
it will help us

I don't use the modbus mapping feature, so I cannot help you. {In fact, I don't use IA's Modbus driver at all. I wrote my own to supply some missing features.}

If i did zero this is what i got

The modbus address field should not include the function offset. Holding registers are in the 40000 range so if you had 43254 and you are zero indexed it would be 3254.

However the register you had highlighted is in the 30000 range, which is not the holding registers but rather the input registers. So you need to change the drop-down to the appropriate mode and then subtract the base value from the register (30000 or 30001, depending on the configuration)

Maybe this is helpful Standard Modbus Data Address Format

No, the material from the docs, particularly the hexadecimal offsets, very clearly indicate that these are offsets without the '3' or '4' prefix. (Modbus offsets are 16-bit unsigned integers. Only the oldest devices are limited to 9999. Which is clearly shown in your Fernhill link.)

Huh I've never seen a device that was programmed like that. Admittedly I've only used a dozen or so, but all of them had decimal register addresses, and I never needed to use the offsets. I can't see the headers for the mapping document so I was guessing that the 2nd column was the address, which look like 32 bit input registers.

@yogesh_n, consider contacting support. They can look over your shoulder while you try various combinations.

The first column is the hexadecimal of the second column. I can't recall ever seeing the hexadecimal shown when it wasn't the zero-based protocol offset.

Well based on the document shown at the top and the assumption that we are zero-indexed my guess to read the first three contiguous registers would be something like this

edit: should be float not double, since they are 2 registers wide

Sigh. No.

I am confused why you think this isn't possible -- the first column being hex addresses lines up perfectly with the second column being decimal addresses. 9002x0 == 36866. 30000 is coded to Input Registers, and while I don't know that those fields aren't 32 bit integers voltage seems like it would be some kind of float. Maybe it should be Input Register (Float) instead of Input Register (Double)?

In your modbus device connection, under "Show advanced properties," try setting the Zero-based Addressing to true. This is what he meant.

The unit ID should be changed from 0 to whatever the Modbus ID of your device is.

Here's an example i eventually got to work:

Setting the Start address to be the same as the Modbus Address worked for me.

only in "Modicon" syntax. It would be strange for them to give you an offset in hex, translate it to decimal, then expect you to treat the first digit as an area specifier.

We're all just sitting here bickering for no reason though because none of us can verify this.

1 Like

I guess it could feel like bickering if you assume that everyone involved already know everything they could know. However, I just learned that there are multiple syntaxes for Modbus TCP -- I've never personally seen a device with a 6 digit address schema. I also have never needed to use hex offsets when I have the decimal address available to me.

What I posted was my honest guess at how to solve the problem :man_shrugging:. Like I said I can't see the headers for the data sheet so I don't know if those are holding registers designated in a 6 digit format, if I was handed the sheet I would look at them and assume they are input registers. In a 6 digit format they could be either input or holding registers, in which case the map rows might look like


either of which is different than what @yogesh_n put in the original page (Unit ID 0, [start-end] == 3 as they are spanning 6 registers before there is a gap -- I have seen devices reject requests for data where there are no registers mapped, although it's not a given).

For completeness, if it were indeed an input register (which is seeming less likely, with the observation that the hex offsets are per-datatype rather than global), I think it would look like this:

From what I understand about the modbus mapper, the start and end addresses are for the tags that become available in Ignition -- while you can set them to be the same, they really just need to span the range that you want to map.

IIRC when i set this up, doing a 0-10 start didn't work for me.

Could have been because you couldn't sweep all of them in one fell swoop, you'd need to do still the three rows but from 0-4 each. They'd then look like LS50-LS54, LS60-LS64, and LS70-LS74.

I think that then if you wanted you'd be able to do three rows with just LS as the header and then 0-4, 5-9, 10-14 and you'd functionally have LS0-LS14 (it may default to three folders, but I think you could add them to project all into one). I'm not 100% sure about this though, I'd have to try and see if it worked.