如上图所示,发送的数据是": 01 03 0000 0001 FB <crlf>"十六进制表示是"3A 30 31 30 33 30 30 30 30 30 30 30 31 46 42 0D 0A" ASCII码对照表
使用场景:
Modbus ASCII协议在现代工业通信中使用较少,但是这某些情况下,如与遗留系统交互或需要较高可读性和易理解的工业自动化场景中。比如,在调试过程中,ASCII格式的可读性可以便于技术人员理解和分析通信数据。
特点:
兼容性不高(为了兼容不能处理二进制数据的旧设备)
Modbus RTU(Remote Terminal Unit)协议是一种广泛应用于工业自动化领域的串行通信协议。它使用二进制编码和CRC校验的方式来提高数据传输的效率和准确性,帧结构简单并且支持多种功能码。相对于Modbus ASCII而言,Modbus RTU应用更广泛。
Modbus RTU数据帧如下表所示,看起来很简单:
| 名称 | 字节数 | 说明 |
| 地址 | 1 | 从站设备地址 |
| 功能码 | 1 | 要执行的操作 |
| 数据 | n | 要读取或接收的数据 |
| CRC校验 | 2 | 用于错误检测 |
示例:
如上图所示,"01 03 00 00 00 01 84 0A"为十六进制,读取设备地址是01的从站设备的保持寄存器,寄存器开始地址是00,读取的数量是01
返回的报文"地址01"、"功能码03"和读报文保持一致,"数量02"表示有两个字节的数据(一个寄存器占两个字节),"数值19 98"就是对应的数据,CRC校验是"B2 7E"
使用场景:
Modbus RTU在当今工业自动化领域使用非常广泛,包括对设备的监控、远程数据采集、设备参数配置等等,Modbus RTU可靠且经济高效,特别适合工业环境中的远程通信。
特点:
使用二进制编码来表示数据,相比ASCII编码,它更为紧凑且效率更高
消息的校验算法为CRC循环冗余校验
物理层通常使用RS-485,半双工通信
字面意思就能看出,Modbus TCP是基于TCP/IP协议栈的Modbus通信协议扩展,它允许Modbus设备通过以太网进行通信。Modbus TCP结合了Modbus协议的简单性和TCP/IP协议的网络功能,使得Modbus设备可以轻松地集成到互联网中。
帧结构:
| 名称 | 字节数 | 说明 |
| 事务处理标识 | 2 | 客户端生成的随机数,如00 00 |
| 协议标识 | 2 | 固定为 00 00 |
| 数据长度 | 2 | 在此之后的数据长度 |
| 单元标识符 | 1 | 一般为0,或从站地址 |
| 功能码 | 1 | 要执行的操作 |
| 数据 | n | 读取或接收的数据 |
如上图示例(00 01 00 00 00 06 01 03 00 00 00 0A),Modbus TCP的报文也很简单,相较于Modbus RTU省略了CRC校验,增加了前面Mbap报文头。
使用场景:
Modbus TCP特别适合需要高速数据传输和远程监控的工业自动化应用中,比如远程监控工厂自动化系统中的设备、楼宇自动化系统中的集中管理控制等等。
特点:
基于以太网,可以运行在任何支持TCP/IP的网络硬件上
全双工通信,相对于Modbus RTU的半双工,提高了通信效率
高速数据传输,以太网加持,可实现快速数据传输
1. 功能码是通用的,Modbus功能码有21种,但是常用的只有下面8种:
0x01: 读线圈寄存器
0x02: 读离散输入寄存器
0x03: 读保持寄存器
0x04: 读输入寄存器
0x05: 写单个线圈寄存器
0x06: 写单个保持寄存器
0x0f: 写多个线圈寄存器
0x10: 写多个保持寄存器
2. 数据类型也是通用的
总结:
ASCII协议相对于其他两个来说拥有开始和结束标记,所以对数据包的处理时能更加方便;ASCII字符在调试阶段也更加直观。ASCII的主要缺点是传输效率低,而且ASCII相对比较老旧,现在很多设备不再支持这种协议。 在工业现场使用最多的应该是Modbus RTU协议,Modbus TCP次之,一般大家说的串口Modbus通信协议就是指Modbus RTU通信协议。Modbus TCP协议则是在RTU协议上加一个MBAP报文头,并且由于TCP是基于可靠连接的服务,RTU协议中的CRC校验码就省略了。 RTU和TCP都是当前使用较多的Modbus协议,实际使用中需要根据实际业务选择。 |
相关阅读:
</crlf>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!