ModbusTCP协议及通信报文解读

[复制链接]
查看63958 | 回复0 | 2024-3-22 21:13:27 | 显示全部楼层 |阅读模式
点击上方“嵌入式情报局”,选择“置顶/星标”
嵌入式情报,第一时间送达


1、modbus协议设计思想   

Modbus设备使用主从(客户端-服务器)技术进行通信,其中只有一个设备(主设备/客户端)可以启动事务(称为查询)。其他设备(从设备/服务器)通过向主设备提供请求的数据或采取查询中请求的操作进行响应。从设备是任何外围设备(I/O转换器、阀门、网络驱动器或其他测量设备),它处理信息并使用Modbus将其输出发送到主设备。

主机可以寻址单个从机,也可以向所有从机发起广播消息。从属服务器会返回对单独发送给它们的所有查询的响应,但不会响应广播查询。从属服务器不会自己启动消息,它们只响应来自主服务器的查询。

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

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

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

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

Modbus消息结构是一种应用协议,定义了独立于数据传输介质的数据组织和解释规则。

TCP/IP是指传输控制协议和互联网协议,为Modbus TCP/IP消息提供传输介质。

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



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



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

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

3、报文介绍  



还是把这张图拿过来。从图中可以看出,功能代码和数据字段与原始形式一样。

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的操作。
   最     后   

小哥搜集了一些嵌入式学习资料,公众号内回复【1024】即可找到下载链接!

推荐好文  点击蓝色字体即可跳转
☞ 专辑|Linux应用程序编程大全

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言


☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|从单片机到Linux

☞ 专辑|电能控制技术

☞ 专辑|嵌入式必备数学知识


☞  MCU进阶专辑

☞  嵌入式C语言进阶专辑
☞  经验分享

本帖子中包含更多资源

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

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

本版积分规则