Modbus TCP协议及通信报文解读

[复制链接]
查看36147 | 回复0 | 2024-2-21 08:37:14 | 显示全部楼层 |阅读模式
一、Modbus协议设计思想

Modbus设备使用主从(客户端-服务器)技术进行通信,其中只有一个设备(主设备/客户端)可以启动事务(称为查询)。其他设备(从设备/服务器)通过向主设备提供请求的数据或采取查询中请求的操作进行响应。从设备是任何外围设备(I/O转换器、阀门、网络驱动器或其他测量设备),它处理信息并使用Modbus将其输出发送到主设备。
主机可以寻址单个从机,也可以向所有从机发起广播消息。从属服务器会返回对单独发送给它们的所有查询的响应,但不会响应广播查询。从属服务器不会自己启动消息,它们只响应来自主服务器的查询。

主查询将包括一个从地址(或广播地址)、一个定义所请求操作的功能代码、任何所需数据和一个错误检查字段。从机的响应由确认所采取的操作、要返回的任何数据和错误检查字段组成。

请注意,查询和响应都包括设备地址、功能代码、适用数据和错误检查字段。如果没有发生错误,则从设备的响应包含所请求的数据。如果收到的查询中出现错误,或者从设备无法执行请求的操作,则从设备将返回一条异常消息作为响应。

从机消息帧的错误检查字段允许主机确认消息的内容是有效的。传统的Modbus消息是串行传输的,奇偶校验也应用于其数据帧中的每个传输字符。

在这一点上,重要的是要区分Modbus本身是一个应用协议,因为它定义了组织和解释数据的规则,但仍然只是一个消息传递结构,独立于底层物理层。
二、Modbus TCP

Modbus消息结构是一种应用协议,定义了独立于数据传输介质的数据组织和解释规则。
TCP/IP是指传输控制协议和互联网协议,为Modbus TCP/IP消息提供传输介质。

注意:TCP的主要功能是确保所有数据包都被正确接收,TCP/IP只是一个传输协议,并没有定义数据的含义或数据的解释方式,这是应用协议的工作)。



从本质上讲,Modbus TCP/IP消息只是封装在以太网TCP/IP封装器中的Modbus通信。Modbus TCP将标准Modbus数据帧嵌入到TCP帧中,没有Modbus校验和,如下图所示。



你一定会奇怪,相比串口版本的Modbus RTU,为什么没有使用Modbus错误检查字段校验。

因为TCPIP是一种可靠传输,其使用标准以太网TCP/IP链路层校验和方法来保证数据的完整性。
三、报文介绍  


还是把这张图拿过来。从图中可以看出,功能代码和数据字段与原始形式一样。Modbus TCP/IP应用数据单元(ADU)采用7字节报头(事务标识符+协议标识符+长度字段+单元标识符)和协议数据单元(功能代码+数据)的形式。MBAP标头长7个字节,包括以下字段:
    事务/调用标识符(2个字节):当客户端沿同一TCP连接发送多条消息而不等待先前响应时,此标识字段用于事务配对。协议标识符(2字节):此字段对于Modbus服务始终为0,其他值保留用于未来扩展。长度(2字节):该字段是剩余字段的字节计数,包括单元标识符字节、功能代码字节和数据字段。
    单元标识符(1字节):此字段用于标识位于非TCP/IP网络上的远程服务器(用于串行桥接)。在典型的Modbus TCP/IP服务器应用程序中,单元ID设置为00或FF,被服务器忽略,并在响应中简单地回显。
完整的Modbus TCP/IP应用数据单元嵌入到标准TCP帧的数据字段中,并通过TCP发送到系统端口502,该端口专门为Modbus应用保留。Modbus TCP/IP客户端和服务器,通过端口502监听和接收Modbus数据。
我们可以看到,Modbus在以太网上的操作对Modbus寄存器/命令结构几乎是透明的。因此,如果您已经熟悉传统Modbus的操作,那么您已经非常熟悉Modbus TCP/IP的操作。

来源:嵌入式情报局

温馨提示:
因最近微信公众平台推送规则改变,很多读者反馈没有及时看到更新的文章。根据最新规则,建议多点击“推荐阅读、分享、收藏”等,成为常读用户。

推荐阅读:

    刚刚,又一新能源车企被申请破产!

    某公司招实习生月薪只有300元被骂上热搜!

    大动作!华为8.7亿成立新公司,疑似进军新领域


请点下【在看】给小编加鸡腿

本帖子中包含更多资源

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

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

本版积分规则