Modbus协议分为三种通信方式:Modbus RTU、Modbus ASCII以及Modbus TCP。 首先,Modbus TCP的通信格式和Modbus RTU非常相似,唯一的差别只是Modbus RTU最后带两个字节的CRC校验,而Modbus TCP没有。
其次,Modbus ASCII的通信格式与Modbus RTU其实“神合貌离”,就是把Modbus RTU的每一个字节(例如:27H)高四位(2)和低四位(7)拆分为两个字节,并以ASCII码的方式表现出来(32 37),再给命令帧分别加上起始符和结束符便可以,当然Modbus RTU和Modbus ASCII的校验的方式不同,这里暂不详述,所以同一条命令用Modbus RTU方式和Modbus ASCII方式表现出来,虽然在命令长度的上有很大的区别,但其实际表达的意思却是一样。
RTU方式
帧定界 :MODBUS RTU方式下,每两个字符之间发送或者接收的时间间隔不能超过1.5倍 字符传输时间。如果两个字符时间间隔超过了3.5倍的字符传输时间,规约就认为一帧数据已经接收,新的一帧数据传输开始。 RTU 模式每个字节 ( 11 位 ) 的格式为:
偶校验是要求的,其它模式 ( 奇校验, 无校验 ) 也可以使用。为了保证与其它产品的最大兼容性,同时支持无校验模式是建议的。默认校验模式模式 必须为偶校验。注:使用无校验要求2 个停止位。
字符的串行传送方式:
每个字符或字节均由此顺序发送(从左到右):最低有效位 (LSB) ……最高有效位 (MSB)
RTU 模式位序列
设备配置为奇校验、偶校验或无校验都可以接受。如果无奇偶校验,将传送一个附加的停止位以填充字符帧:
RTU 模式位序列 (无校验的特殊情况) ASCII方式
ASCII模式
帧定界:帧起始 “CR LF” 帧结束
ASCII方式用两个ASCII字符表示一个8位数据,比如16进制的3A用字符“3”和字符“A”表示。
MODBUS TCPMODBUS TCP模式下,由于模块的地址由IP地址确定,所以不再有地址域内容,考虑到TCP网络是可靠的数据传输网络,故不再有校验数据。但是考虑到在IP网上数据到达的顺序可能与我们预期的数据不一致,故增加了一个数据序号,考虑到在MODBUS TCP协议上承载MODBUS协议,还在头部数据中增加了一个地址域。
因为Modbus/TCP是一种应用层的协议,上层为Modbus 协议,下层为TCP协议,它规定了网络互联节点间的请求/应答的通信方式。帧格式必须严格遵守协议所规定的ADU ( Applica tion Data Unit)格式,才能在以太网上实现数据的传输。
|