Applies To:
  • CitectSCADA 5.40 Service Pack B

My Krohne flow meter supports only modbus digital addresses greater than 001000. But, when I try to read a modbus address in the range 001001-001008 the error "Address is out of range" is returned.

I can see from the kernel debug log that Citect is requesting a 16-bit block of data beginning at address 000993 even though I have no such address configured in my variable tag database.

Debug <port name> To

READ    0000    <port name>    <IOServer>    000993    16

Is there a way to force Citect to only read addresses above 001000 so my read request will succeed?


By default, Citect will block read requests for the Modbus protocol into a 16-bit block starting on a 16-bit boundary. So if a read request is made for an address in the range 001001-001008, Citect will block the read request into a 16-bit block beginning at address 00993. If an address within the block does not exist on the I/O device then the read will fail.

The solution in this case is to allow the blocking of reads on an 8-bit boundary by adding 0x1000 to the OPTIONS field for the Modbus protocol specification in the PROTDIR.DBF located in the Citect\Bin folder (new value = 0x137f). You must perform a full re-compile of the project and restart Citect.

The new debug log should look like the following and the read request should now succeed:

Debug <port name> To

READ    0000    <port name>    <IOServer>    001001    8