问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

三种不同的Modbus协议PDU结构详解

创作时间:
作者:
@小白创作中心

三种不同的Modbus协议PDU结构详解

引用
1
来源
1.
https://cloud.tencent.com/developer/article/2431674

Modbus协议是一种在工业自动化领域广泛应用的通信协议,用于在不同设备之间传输数据。本文将深入探讨Modbus协议中的PDU(Protocol Data Unit)结构及其在不同通信方式(RTU、ASCII、TCP)下的应用。

Modbus PDU基础

Modbus协议定义了一个简单的协议数据单元(PDU),这个定义是独立于底层通信层的。Protocol data unit,缩写为PDU,即协议数据单元,其基本结构如下:

一个PDU单元主要由功能码和相应的数据两部分组成。功能码指示服务器要执行的操作类型,而数据部分则包含执行该操作所需的详细信息。

当MODBUS协议映射到特定的总线或网络时,会在协议数据单元上引入一些额外的字段。发起MODBUS事务的客户端构建MODBUS PDU,然后添加字段以构建适当的通信PDU。下图展示了串行总线上的PDU通信帧结构:

需要说明的以下几点:

  • MODBUS应用数据单元(ADU)由发起MODBUS事务的客户端构建。
  • 功能码字段以一字节编码,有效的代码范围是1到255的十进制数(128到255的范围是保留的,用于异常响应)。
  • 某些功能码会添加子功能码以定义多个操作。
  • 数据字段可能包含离散和寄存器地址、要处理的项目数量以及字段中实际数据字节的计数。
  • 如果发生错误,数据字段包含一个异常代码,服务器应用程序可以使用它来确定下一步要采取的操作。

RTU、ASCII和TCP协议帧

我们先通过内部的PDU结构图来看看:

Modbus RTU协议帧

Modbus ASCII协议帧

Modbus TCP协议帧

MODBUS PDU的大小受到从最初的串行线路网络(最大RS485 ADU =256字节)继承的大小限制。因此:

  • 串行线路通信的MODBUS PDU = 256 - 服务器地址(1字节)- CRC(2字节)=253字节
  • RS232 / RS485 ADU = 253字节 + 服务器地址(1字节)+ CRC(2字节)=256字节
  • TCP MODBUS ADU = 253字节 + MBAP(7字节)=260字节

三种不同类型的PDU

MODBUS协议定义了三种PDUs(协议数据单元),它们是:

  • MODBUS请求PDU,mb_req_pdu
  • MODBUS响应PDU,mb_rsp_pdu
  • MODBUS异常响应PDU,mb_excep_rsp_pdu

这三种具体的定义如下:

mb_req_pdu = {function_code, request_data}

其中:

  • function_code = [1字节] MODBUS功能码
  • request_data = [n字节] 这个字段依赖于功能码,通常包含诸如变量引用、变量计数、数据偏移量、子功能码等信息。

mb_rsp_pdu = {function_code, response_data}

其中:

  • function_code = [1字节] MODBUS功能码
  • response_data = [n字节] 这个字段依赖于功能码,通常包含诸如变量引用、变量计数、数据偏移量、子功能码等信息。

mb_excep_rsp_pdu = {exception-function_code, request_data}

其中:

  • exception-function_code = [1字节] MODBUS功能码 + 0x80
  • exception_code = [1字节] 定义在“MODBUS异常代码”表中的MODBUS异常代码,后期会单独说明,敬请持续关注。

总结

本文详细介绍了Modbus协议中的PDU结构及其在不同通信方式下的应用。通过理解这些基础概念,读者可以更好地掌握Modbus协议的工作原理,为实际应用中的设备通信提供技术支持。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号