本系列文章分为三章:

1.modbus-tcp协议解释

2.modbus-tcp:功能码具体详细解释

3.modbus协议栈源码详细解读:libmodbus协议栈

后续会更新完.....

如有问题欢迎评论区或者私信交流

目录

1 引言  

2.modbus报文帧

2.1.报文格式

2.1.1.ADU报文长度

2.2.报文字段含义

2.3.MODBUS 数据模型

2.4.功能码

2.4.1.功能码分类

2.4.2.公共功能码

2.5.报文的数据流图 

2.5.1.正常响应

2.5.2.异常响应

 2.6.modbus协议栈报文处理流程


1 引言  

MODBUS OSI 模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备
之间提供客户机 / 服务器通信。
自从 1979 年出现工业串行链路的事实标准以来, MODBUS 使成千上万的自动化设备能够通信。
目前,继续增加对简单而雅观的 MODBUS 结构支持。互联网组织能够使 TCP/IP 栈上的保留系统端 口 502 访问 MODBUS
MODBUS 是一个请求 / 应答协议,并且提供功能码规定的服务。 MODBUS 功能码是 MODBUS
请求 / 应答 PDU 的元素。
通俗理解:modbus协议是基于tcp/ip的一个c/s模型的应用层协议 ,由Modicon公司开发,大众协助而成的一个应用层协议,其实和我们平时做的应用层通信很类似,没什么难度。

2.modbus报文帧

2.1.报文格式

MODBUS 协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上
 的 MODBUS 协议映射能够在应用数据单元(ADU)上引入一些附加域。( 注意:个人认为文档里面这个ADU和PDU画反了,但不影响解读

2.1.1.ADU报文长度

RS232 / RS485 ADU = 253 字节 + 服务器地址 (1 byte) + CRC (2 字节 ) = 256 字节
TCP MODBUS ADU = 249 字节 + MBAP (7 字节 ) = 256 字节
注:如果只是了解报文,这个长度不需要关心,如果想阅读协议栈源码需要留意一下

2.2.报文字段含义

地址域:以太网里面的TCP/IP的头部数据,进行标识以太网里面的哪个设备
差错检验:以太网里面的校验
modbus-ADU(功能码 + 数据)
功能码:标识该modbus报文是干嘛的,对数据有标识作用
数据:用户的数据(在某种请求中, 数据域可以是不存在的(0 长度),在此情况下服务器不需要任何附加信息。功 能码仅说明操作)

2.3.MODBUS 数据模型

modbus数据存储主要是寄存器和线圈(为什么叫线圈,是因为电气开关的原因)

2.4.功能码

2.4.1.功能码分类

 

有三类 MODBUS 功能码。它们是: 公共功能码(公认的功能码,不可以去修改,不然会不兼容其他设备),用户定义功能码(由用户自定义的功能码,不同用户定义不同),保留功能码

2.4.2.公共功能码

注:这里只需要知道有这些功能码,大概是这些功能,每一个详细的功能码的作用,后面会单独出一章,篇幅会很多,具体也可以去看看源码,会有不一样的收获。

2.5.报文的数据流图 

前面介绍过,modbus是一个c/s模型的协议,客户端给服务器发送请求,服务器进行响应回复客户端。根据服务器的响应分为:正常响应和异常响应

2.5.1.正常响应

modbus协议栈校验通过可以正常处理该功能码的功能,将正常处理的结果回复给客户端(modbus协议栈的处理流程可以看2.5小节

2.5.2.异常响应

modbus协议栈校验没有通过,将错误码通回复给客户端,用户根据该错误码可以进行异常处理或者进行告警告知用户(modbus协议栈的处理流程可以看2.5小节

 2.6.modbus协议栈报文处理流程

modbus协议栈,根据收到的报文先进行一系列的检查,才会进行数据的处理(其实和我们写代码一样,先进行边界检查,再处理

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐