Applies To:
  • CitectSCADA 5.xx

I have reviewed the published Modbus spec (Ref: PI-MBUS-300 Rev J) several times and found no direct reference to 6-digit addressing. What is 6-digit addressing? 

As this is not part of the Modbus specification per se, few people will be able to provide you a solid definition.

I have heard two meanings when people refer to six digit addressing in Modbus:

a) The function codes that Modbus defines to read the 4xxxx registers (FC3 for read and FC6 for write) theorectically have a 9999 register range (ie 40001 - 49999). However, the actual coding in the protocol allows for 2 bytes (ie 0 - 65535). Some people refer to this as 6-digit addressing. Citect's format is designed to be as close to what a Modicon user would see in his PLC program and thus the range is defined as 40001-49999. Users wanting to access registers past the 49999 barrier have done so by using the register range of 400001 to 465535 instead of 40001 to 49999 (please note that for Citect's Modbus driver addresses 40001 to 49999 are equivalent to addresses 400001 to 409999).

b) The Modbus function codes FC20 & FC21 (Read Write General reference) are for accessing the 6xxxxx registers. I believe that this is more commonly the 6-digit addressing that people refer to. Using FC20 & FC21, some 16Meg of address range is available. Keep in mind that transmitting 16Mb of data over a 19.2Kbaud link will take a while. The Modbus/TCPIP specification may be more suited to this case when your primary concern is tranmitting large volumes of data (this is documented on Modicon's web site: The Quantum PLC makes more use of this register area than other models. The Citect Modbus driver is being modified to support the 6xxxxx registers.

Note: Whilst this KB article refers to the MODBUS driver, the comments can generally also be applied to the rest of the Modbus family of drivers (MBPLUS, MODBUSA, MBSLAVE, MODNET, etc.).