添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

一、Modbus协议介绍

Modbus 协议最初由 Modicon 公司开发,此协议支持传统的 RS-232 RS-422 RS-485 以太网 。许多工业设备,包括 PLC DCS 智能仪表 等都在使用 Modbus 协议作为他们之间的通讯标准。

Modbus协议种类

Modbus 常见的类型包括: ASCII RTU TCP 。标准的 Modicon 控制器使用 RS232 实现串行的 Modbus Modbus ASCII RTU 协议规定了消息与数据的结构、命令和就答的方式,数据通讯采用 Master/Slave 方式。

如图所示就是 RS232 的通讯线

image-20240419191528049

Modbus协议校验

Modbus 协议需要对数据进行校验,串行协议中除有奇偶校验外; ASCII 模式采用 LRC 校验, LRC 包含一个 8位二进制 的字节; RTU 模式采用 16 CRC 校验, CRC 域是两个字节,,包含一个 16 位的二进制值; TCP 模式没有额外规定校验,因为 TCP 协议是一个面向连接的可靠协议。

二、Modbus功能码介绍

Modbus协议在设计之初中定义了三类功能码,分别是: 公共功能码 用户定义功能码 保留功能码

MODBUS 基金会进行设定,其中包含 已被定义的功能码和未来使用的未指配保留供功能码 ;所有使用 Modbus 协议设备需要遵守相关功能码设定。

因为 Modbus 协议中设定的设定功能码主要针对的是对设备控制管理使用的是公共功能码。而对于设备使用内部上传下载程序使用多为用户自定义的功能码,为十进制的65至72和十进制100至110。用户没有 MODBUS 组织的任何批准就可以选择和实现一个功能码,也无法保证被选功能码的使用是唯一的。

一些公司对传统产品通常使用的功能码,并且对公共使用是无效的功能码。例如施耐德PLC设备使用的90功能码;国内安控PLC使用的89功能码。

更多的Modbus功能码

image-20240419202150665

三、Modbus通讯示例

TCP 连接后,通过 Modbus 功能码进行确定相关操作请求。 03功能码 进行读内部输出量的寄存器,从 0000 开始读取5个寄存器内部数据;在 Modbus 设备响应 Modbus 数据层首先是寄存器为03,数据长度为0a(也就是十进制的10),然后为每一个寄存器内的值。

image-20240419202214835

如下是另一个例子,首先确定功能码为01为读内部比特量输出状态;从0000寄存器开始读取到0003寄存器

image-20240419204025065

返回内容首先也为数据通讯的功能码01,长度01,因 Wireshark 使用的为十六进制,使用2进制转换得到结果即为服务端返回101,为寄存器数据信息。

image-20240419204323922

四、Modbus协议工作流程

刚才的是正常的 Modbus 的响应流程对于异常通讯用 Modbus 协议中规定响应功能码=请求功能码+0x80,用来为客户机提供处理过程中与被发现的差错相关的信息。

详细的处理错误过程为:输入有效的功能码然后进行判断是否为有效的数据地址,是否为有效的数据值,是否为有效的MB功能,如果说都正常的话会响应 Modbus 结果,每一次异常都会在功能码加上 _1,_2,_3,_4.... 加上 0x80 作为异常响应

image-20240419205215664

本文链接:

http://www.linqi.net.cn/index.php/archives/525/