『7x24小时有问必答』
Modbus家族的三位成员,按照时间顺序分别是:
老大(Modbus ASCII)
老二(Modbus RTU)
老三(Modbus TCP)
关于Modbus相关还可参考:
Modbus ASCII
Modbus ASCII协议是Modbus通信协议的一个变体,它使用ASCII字符集来编码数据。Modbus  ASCII协议主要设计用于早期的计算机系统和终端设备,这些设备通常使用ASCII编码进行通信。
帧结构:
每个Modbus  ASCII消息都以冒号":"开始,以回车换行符"CR/LF"结束。
消息中包含开始字符、设备地址、功能码、数据、LRC(纵向冗余校验)、结束符。
LRC是通过对消息中除起始和终止字符之外的所有字符进行异或运算得到的校验值,用于检测传输错误。

帧格式说明:
名称字节数

说明

Start1以冒号":"开头,ASCII十六进制是3A

Address

2

地址,十六进制字符表示

Function

2

功能码,十六进制字符表示
Datan

数据,根据功能码变化
LRC

2

纵向冗余校验码
End2CR LF

示例:

注意!数据以ASCII字符的形式发送,每个字节由两个ASCII字符表示(一个十六进制数字对应一个字符)。例如,十六进制的"03"会被编码为"0"和"3"两个字符。
如上图所示,发送的数据是": 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格式的可读性可以便于技术人员理解和分析通信数据。
特点:
数据以ASCII字符形式传输

消息格式独特(开始和结束符)

传输速度低于Modbus RTU

兼容性不高(为了兼容不能处理二进制数据的旧设备)

Modbus RTU

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

字面意思就能看出,Modbus TCP是基于TCP/IP协议栈的Modbus通信协议扩展,它允许Modbus设备通过以太网进行通信。Modbus  TCP结合了Modbus协议的简单性和TCP/IP协议的网络功能,使得Modbus设备可以轻松地集成到互联网中。
TCP/IP相关可参考:  OSI七层模型构建网络世界的基石

帧结构:
名称字节数

说明

事务处理标识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. 数据类型也是通用的
数据类型可参考:  Modbus协议数据类型只有这四种

总结:
ASCII协议相对于其他两个来说拥有开始和结束标记,所以对数据包的处理时能更加方便;ASCII字符在调试阶段也更加直观。ASCII的主要缺点是传输效率低,而且ASCII相对比较老旧,现在很多设备不再支持这种协议。
在工业现场使用最多的应该是Modbus RTU协议,Modbus TCP次之,一般大家说的串口Modbus通信协议就是指Modbus RTU通信协议。Modbus TCP协议则是在RTU协议上加一个MBAP报文头,并且由于TCP是基于可靠连接的服务,RTU协议中的CRC校验码就省略了。
RTU和TCP都是当前使用较多的Modbus协议,实际使用中需要根据实际业务选择。
相关阅读:

</crlf>

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码