今天突然碰到了MODBUS问题:
modbus协议是一种协议标准:他主要有三种形式:
Modbus
协议包括
ASCII
、
RTU
、
TCP
等,并没有规定物理层
ASCII、RTU、TCP等,并没有规定物理层(也就是没有规定以何种电平形式进行传输RS232还是RS485)。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。
下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。所以在这里我仅介绍一下Modbus的ASCII和RTU协议。
下表是ASCII协议和RTU协议进行的比较:
协议 | 开始标记 | 结束标记 | 校验 | 传输效率 | 程序处理 |
ASCII | :(冒号) | CR,LF | LRC | 低 | 直观,简单,易调试 |
RTU | 无 | 无 | CRC | 高 | 不直观,稍复杂 |
255是10进制数,变成16进制数是00FF,
通过比较可以看到,ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。但是因为它传输的都是可见的ASCII字符,RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII就需要传输’F’’9’的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。
Modbus
协议包括
ASCII
、
RTU
、
TCP
等,并没有规定物理层