AB7072 - Modbus ASCII?


#1

I specified two AB7072 serial to Ethernet IP converters for my Controllogix panel. The one in service as a normal RS485 Modbus link works fine but upon contacting tech support for the RS232 Modbus field device (its a gas turbine throttle valve) I have been told that it runs Modbus ASCII rather than the Modbus RTU… I wish it had said that in the manual!

Now I need to convert my Modbus RTU setup in the AN7072 to be Modbus ASCII. Your manual says that the unit is capable of ASCII but the wizard is only configured to setup RTU. Could some offer any help of an easy solution?

Alastair
QLD, Australia.


#2

Hello @ajmac,

The Communicators do not have built in support for modbus ascii, you will need to manually create transactions using modbus ascii. Modbus ascii is almost the same as modbus but all the data is sent as ascii characters rather then the values them selves. Here is an example I had created for another customer. smc_example.cfg
In the case of this example there were some issues with the checksum’s not matching. The customer managed to calculate the checksum manually for the query and add it as a constant and then use a data object for the response.

This web site is a good resource that you can use to understand how modbus ascii works.
http://www.simplymodbus.ca/ASCII.htm

Deryck


#5

Still no joy.
I have used simply modbus and have good comms with the device. I have used the simply modbus query and response info that IS WORKING to build the Anybus query and response in ASCII but I can’t get any comms to establish. I am not sure where to put the ‘data’ that is required to tell the Anybus converter where to store the response data in the Ethernet/IP datablock, any ideas?

ALV10_Simply_Modbus_q%26r


#6

Hi,

Modbus ascii involves some more overhead then standard modbus make sure you are not missing any parts. http://www.simplymodbus.ca/ASCII.htm

You will need to put date in the corresponding location depending on it purpose. Input data, data from read requests falls under 0x000 - 0x1FF. Output data, data written to the slaves, is from 0x200 - 0x3FF. (section 2.4.3)

Regards,
Deryck


#7

I honestly don’t understand why I can’t get this to operate. See attached screen shots. My Request for 10 registers is copied directly from the simply modbus request field that is working perfectly with the slave device. I think i must have something wrong in the response field, or perhaps the Anybus checksum setup is incorrect? Thoughts.ALV10.cfg (16.0 KB)


#8

Hi @ajmac ,

The screen shots looks correct, but I didn’t check that the hex values correspond to the correct characters. the .cfg file you uploaded looked different.

When I was working with a customer on a similar issue, they were running into issues with the checksum. What they ended up doing was manually calculating the checksum for the query and entering it in as a constant. The response was consumed as a data object, but written to the general area (0x400) to be ignored.
You should be able to find a twos complement calculator online, enter in the transaction and calculate the checksum.

Deryck


#9

The request checksum is correct, I have it as a static value taken from the checksum the simply modbus master successfully used while requesting the 10 registers.
When you say 0x400 area do you just mean the reply checksum portion of the response?


#10

Hi @ajmac,

If you take a log of the traffic does the message look correct? Do you see any Rx data with the slave responding back with anything?

When you say 0x400 area do you just mean the reply checksum portion of the response?
In the response rather then adding the checksum object you would add a data object and consume the checksum, but since you do not need to read this with the plc you can write it to the general memory area. This essentially has the communicator skip the checksum and just consumes it writing it to an unused part of memory.

Deryck