关注+星标公众号,不错过精彩内容
upp2velokqq64032870440.jpg
作者 | 嵌入式情报局
Modbus大家都用过,或者听说过吧?在嵌入式领域算是非常热门的一种通信协议,今天来解读一下ModbusTCP协议及通信报文。1、modbus协议设计思想 Modbus设备使用主从(客户端-服务器)技术进行通信,其中只有一个设备(主设备/客户端)可以启动事务(称为查询)。其他设备(从设备/服务器)通过向主设备提供请求的数据或采取查询中请求的操作进行响应。从设备是任何外围设备(I/O转换器、阀门、网络驱动器或其他测量设备),它处理信息并使用Modbus将其输出发送到主设备。
主机可以寻址单个从机,也可以向所有从机发起广播消息。从属服务器会返回对单独发送给它们的所有查询的响应,但不会响应广播查询。从属服务器不会自己启动消息,它们只响应来自主服务器的查询。
主查询将包括一个从地址(或广播地址)、一个定义所请求操作的功能代码、任何所需数据和一个错误检查字段。从机的响应由确认所采取的操作、要返回的任何数据和错误检查字段组成。
请注意,查询和响应都包括设备地址、功能代码、适用数据和错误检查字段。如果没有发生错误,则从设备的响应包含所请求的数据。如果收到的查询中出现错误,或者从设备无法执行请求的操作,则从设备将返回一条异常消息作为响应。
从机消息帧的错误检查字段允许主机确认消息的内容是有效的。传统的Modbus消息是串行传输的,奇偶校验也应用于其数据帧中的每个传输字符。
在这一点上,重要的是要区分Modbus本身是一个应用协议,因为它定义了组织和解释数据的规则,但仍然只是一个消息传递结构,独立于底层物理层。
2、modbusTCP Modbus消息结构是一种应用协议,定义了独立于数据传输介质的数据组织和解释规则。
TCP/IP是指传输控制协议和互联网协议,为Modbus TCP/IP消息提供传输介质。
注意:TCP的主要功能是确保所有数据包都被正确接收,TCP/IP只是一个传输协议,并没有定义数据的含义或数据的解释方式,这是应用协议的工作)。
mik1nzld4nl64032870540.png
从本质上讲,Modbus TCP/IP消息只是封装在以太网TCP/IP封装器中的Modbus通信。Modbus-TCP将标准Modbus数据帧嵌入到TCP帧中,没有Modbus校验和,如下图所示。
4ozdlq0x1ff64032870640.png
你一定会奇怪相比串口版本的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的操作。
声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。
------------ END ------------
ctxq2l1wfwk64032870740.gif
●专栏《嵌入式工具》●专栏《嵌入式开发》●专栏《Keil教程》●嵌入式专栏精选教程
关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。
点击“阅读原文”查看更多分享。 |