Modbus Addressing

In setting up the address mapping when configuring a device I’m a bit perplexed: I can read indiviudal bits (inputs and outputs aka coils) but am not having much luck reading input registers. Perhaps I’m not understanding something. Instead of reading individual input bits I’d like to read the whole group as a single integer as I figure this’d be more efficient. Is this possible and if so what do I need to do exactly. Here’s what I have:

Prefix Start End Step Unit ID Modbus Type Modbus Address
DI 00001 00008 0 Discrete Input 00001
IR 1 1 0 Input Register (Int16) 00001

Input Registers are a separate area from Coils. Reading the first Input Register is not reading the same memory as the first 16 coils (unless you have some device that has specifically implemented it this way and says so in the manual).

Do not worry about the perceived inefficiency of reading 8 or 16 Coils at once; as long as they are contiguous they are still grouped and read in one modbus request.

One other thing I noticed: In the data bridge I set up a block transaction that reads DI1 - DI8. I’m also storing the quality code. However, in the db only the quality code for DI1 is 192. All the others are 600 (unknown). Any idea why?

There might be a problem reading the other addresses off that device. Is there anything in the logs? If nothing stands out call into support and we can take a look.

Oddly enough it started reporting 192 for all bits after a while. So, all’s good.