What is the difference between Modbus RTU and Modbus ASCII protocol?
If I am using serial cable for connecting my system and PLC, which protocol (RTU or ASCII) should I select while developing SCADA?
Hope somone could explain this.
The primary difference is that Modbus RTU uses Hex where as Modbus ASCII uses Hex ASCII. In RTU function code for a holder register is set as one byte 0x03 in ASCII it is sent as 0x30 0x33, 2 bytes. Additionally a Modubs ASCII packet starts with a colon (:).
Usually the devices that I see now that use Modbus ASCII are legacy devices typically pumps and flow meters still used in the Petroleum Industry.
Modbus RTU messages have unformatted 8, 16, and 32 bit data. There nothing "hex" about it.
When controllers are setup to communicate on a Modbus network using ASCII (American Standard Code for Information Interchange) mode, each 8–bit byte in a message is sent as two ASCII characters.
The main advantage of this mode is that it allows time intervals of up to one second to occur between characters without causing an error.
The format for each byte in ASCII mode is:
Coding System: Hexadecimal, ASCII characters 0–9, A–F
One hexadecimal character contained in eachASCII character of the message
Bits per Byte: 1 start bit 7 data bits, least significant bit sent first1 bit for even/odd parity; no bit for no parity1 stop bit if parity is used, 2 bits if no parity.
Error Check Field: Longitudinal Redundancy Check (LRC)
When controllers are setup to communicate on a Modbus network using RTU (Remote Terminal Unit) mode, each 8–bit byte in a message contains two 4–bit hexadecimal characters. The main advantage of this mode is that its greater character density allows better data throughput than ASCII for the same baud rate.
Each message must be transmitted in a continuous stream.
The format for each byte in RTU mode is:
Coding System: 8–bit binary, hexadecimal 0–9, A–F
Two hexadecimal characters contained in each 8–bit field of the message
Bits per Byte: 1 start bit 8 data bits, least significant bit sent first 1 bit for even/odd parity;no bit for no parity 1 stop bit if parity is used; 2 bits if no parity.
Error Check Field: Cyclical Redundancy Check (CRC).