Modbus TCP

I am communicating to a GE 9030 PLC over the new Modbus TCP driver. The driver errors and disconnects when trying to read any Register (%R) address above 432767.

The GE 9030 register addresses (%R00001-%R32640) are mapped into the Modbus register table from address (4xxxxx) 429185-461824. I believe the driver needs to be able to accomodate register addresses up to 65535 (ie. 465535 andnd 365535).

Also, when reading any register in the 9030 or later PAC3 the Modbus address is off by one. Is there anyway to configure an address offset or configure it to be zero based?
GE9030 Modbus Address Reference.pdf (48.8 KB)

The Modbus protocol has 2 bytes to specify the address so from 0 to 65535. Some PLC addresses have a 0, 1, 3 or 4 in front of the Modbus address and is not covered in the Mobus spec. However, the follow designations apply: 0xxxxx is a Coil, 1xxxxx is an Input, 3xxxxx is an Input Register, 4xxxxx is a Holding Register.

Because the Modbus driver is in Beta and we don’t have the documentation complete, send an email to, requesting the Modbus documentation and we will send what we have to you.

The zero base addressing can be accounted for in the address mapping mode. The documentation has more information about address mapping vs. Modbus specific addressing.

I agree that Modbus addresses should be allowed from 0-65535 (two bytes). When an address is entered at or above 32768 the device disconnects. No addresses above 32767 can be read.

Currently testing 7.0.9-beta1 (b4875). When entering information for a new row in the Modbus TCP Driver’s Addresses if you enter an address of 32768 or above and save the new settings the device disconnects. This driver should be able to build addresses from 1-65535.

If you create a new row and start the base setting at 32767 the system will build the address successfully. However if you create a row with more than 10000 addresses in it the OPC Server browsing get VERY Sluggish. Still can not get to Modbus address space from ~32768 to 65535.

You are correct and it has been fixed in development release build 4884. It should be on the download page shortly.

When communicating to an address configured as Holding Register (BCD) the module error when trying to write a value to the PLC.

“Bounds of result set does not match that of value set. See log for details.”

The same address point can be written to when confgured as a plange Holding Register.

I’m unable to reproduce the problem here but if you can provide the following we can narrow in on the problem:

Are you entering the value in the Quick Client or the Designer?

I know it is set for Holding Register (BCD), but what OPC DataType is selected?

Also, please reproduce the problem and then email the wrapper.log file(s) to

I was finally able to reproduce the problem. The next development release will contain the fix.

Also, the next development release includes the following improvements:

  1. Address mapping has a step check box to allow skipping by 2.

  2. Added more Modbus types that specify the data encoding to use. They include Holding Register (Float), Holding Register (Int32), Holding Register (UInt32), Holding Register (Int16), Holding Register (Uint16) and Holding Register (BCD) . There are Modbus specific address designator that can be entered into the OPC path of a SQLTag for each. The cooresponding designators are HRF, HRI, HRUI, HR, HRUS, HRBCD. The previous C, DI, IR and IRBCD still apply. Please keep in mind that as a result of this change the export/import file format is different.

  3. Because of item 2, the DataType has been removed and is determined automatically by the Modbus type.