modbus-tcp协议详解
·
本系列文章分为三章:
1.modbus-tcp协议解释
2.modbus-tcp:功能码具体详细解释
3.modbus协议栈源码详细解读:libmodbus协议栈
后续会更新完.....
如有问题欢迎评论区或者私信交流
目录
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画反了,但不影响解读)
的 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协议栈,根据收到的报文先进行一系列的检查,才会进行数据的处理(其实和我们写代码一样,先进行边界检查,再处理)
更多推荐
已为社区贡献4条内容
所有评论(0)