Bootstrap

Modbus通信协议详解--清晰易懂--入门级

目录

一、什么是Modbus协议?

二、Modbus通讯方式

三、Modbus通信协议的特点

四、Modbus的4种寄存器类型

五、Modbus的协议版本

六、Modbus数据帧格式

七、报文结构解析(Modbus RTU版本)

1、0x03请求应答方式

补:CRC16在线校验工具

2、0x06请求应答方式

3、0x10请求应答方式


一、什么是Modbus协议?

        Modbus协议是一种用于工业控制的网络通讯协议,可以片面的理解为,Modbus协议一种机器与机器之间进行数据、信息传递的一种格式规范。
        Modbus协议还遵循主从协议,支持单主机,多从机,最多支持247个从机设备。并且,在同一个通信线路上只会有一个主机,所有的通讯过程全部由主机主动发起,从机接收到主机请求后,会对请求做出响应。从机不会主动进行数据的发送,从机之间也不会有通讯过程。


二、Modbus通讯方式

Modbus的通讯方式有:串行通讯方式以太网通讯方式串行-以太网转换方式无线通讯方式

表现在物理层就是,可使用3线232、2线485、4线422进行主从机之间的连接,或通过光纤、网线、无线网络等进行主从机之间的连接

通俗一点来说
主机从机之间想要实现通讯,需要将主机与从机进行连接,然后再进行数据传输。而连接方式有上述4种方式,连接实现之后,主机与从机之间就可以进行数据传输了。而它们传输的数据内容,均按照Modbus协议规定的格式进行转换。这样,就保证了能够让同一个主机与不同功能、不同厂家的设备之间进行准确的通讯。


三、Modbus通信协议的特点

  • 标准、开放、免费
  • 支持多种电器接口,如串行接口RS-232、RS-485等,还可以在各种介质上传递,如:光纤、无线等
  • Modbus的帧格式简单、紧凑、通俗易懂。用户使用简单,厂商开发简单。

四、Modbus的4种寄存器类型

  • 线圈(Coils)
  • 离散量输入(Discrete Input)
  • 输入寄存器(Input registers)
  • 保持寄存器(Holding registers)

暂不细讲,大家可以自行了解,或者等我更新。


五、Modbus的协议版本

包括Modbus RTU、Modbus ASCII、Modbus TCP/IP、Modbus UDP/IP

Modbus RTUModbus ASCII,都使用串口通讯协议,Modbus RTU使用二进制格式进行数据传输,通讯效率更高,Modbus ASCII使用ASCII码进行数据传输,可读性好,但通讯效率更低。

Modbus TCP/IP是基于以太网的一种通讯方式,它将Modbus协议封装在TCP/IP协议栈中,通过以太网传输数据。具有高速、稳定的特点。

Modbus UDP/IP是基于UDP/IP协议的一种通讯方式。与Modbus TCP/IP不同,Modbus UDP/IP采用无连接的通讯方式,不保证数据的可靠性和顺序。相比于Modbus TCP/IP,Modbus UDP/IP的通讯开销较小,可以减少网络负载。


六、Modbus数据帧格式

无论哪一种Modbus协议版本的帧格式都是一样的

  • 地址域:主机要访问的从机的地址
  • 功能码:主机对从机实现的操作,功能码有很多,不同的功能码也对应操作不同类型的寄存器。比如:0x01读线圈、0x03读保持寄存器、0x06写单个寄存器、0x10写多个寄存器等。(更多功能码见下方Modbus功能码列表
  • 数据:根据功能的不同,以及传输的数据为请求数据还是响应数据的不同,会有不同的内容。(详见七、报文结构解析
  • 差错校验:为保障传输数据的准确性,modbus会进行差错校验,如Modbus CRC16校验等。详情请自行了解。
Modbus功能码列表(全)
功能码解释翻译作用
0x01Read Coils读线圈状态读取远程设备中1到2000个连续的线圈的状态
0x02Read Discrete Inputs读离散输入状态读取远程设备中1到2000个连续的离散输入的状态
0x03Read Holding Registers读保持寄存器内容读取远程设备中1到125个连续的保持寄存器的内容
0x04Read Input Registers读输入寄存器内容读取远程设备中1到125个连续的输入寄存器的内容
0x05Write Single Coil写单个线圈在远程设备中把单个线圈状态改变为打开或关闭的状态
0x06Write Single Register写单个保持寄存器在远程设备中写入单个保持寄存器
0x07Read Exception Status (Serial Line only)读取异常状态(仅限串行线路)读取远程设备中八个异常状态输出的内容
0x08Diagnostics (Serial Line only)通信系统诊断(仅限串行线路)
0x0BGet Comm Event Counter (Serial Line only)获取通讯事件计数器(仅限串行线路)从远程设备的通信事件计数器获取状态字和事件计数
0x0CGet Comm Event Log (Serial Line only)获取通讯事件日志(仅限串行线路)从远程设备获取状态字、事件计数、消息计数和事件字节字段
0x0FWrite Multiple Coils写多个线圈强制远程设备中线圈序列中的每个线圈接通或断开
0x10Write Multiple registers写多个保持寄存器在远程设备中写入连续寄存器块
0x11Report Slave ID (Serial Line only)报导从机信息(仅限串行线路)读取远程设备特有的类型、当前状态和其他信息的说明。数据内容特定于每种类型的设备
0x14Read File Record读取文件记录
0x15Write File Record写文件记录
0x16Mask Write Register带屏蔽字写入寄存器
0x17Read/Write Multiple registers读、写多个寄存器执行一次连续写和连续读,写入操作在读取之前执行
0x18Read FIFO Queue读取先进先出队列
0x2BEncapsulated Interface Transport封装接口传输


七、报文结构解析(Modbus RTU版本)

此处以使用Modbus RTU版本、使用Modbus CRC16校验的保持寄存器(Holding registers)做演示,解析其三个常用功能0x03读、0x06写单个、0x10写的报文结构。

1、0x03请求应答方式

主机请求:

示例:01 03 00 01 00 0A 94 0D

含义:从机设备地址(01)+功能码(03)+起始寄存器完整地址(00 01)+要读取的寄存器个数(00 0A)+CRC16校验码(94 0D)

解析:从地址为1的从机读取寄存器块内容,寄存器开始地址为1,连续读取10个寄存器,即读取地址为1到10的寄存器块。

补:CRC16在线校验工具

从机应答:

示例:01 03 14 00 D7 3F 70 00 14 00 0F 00 11 00 08 00 0B 00 0B 00 02 00 00 7E 3F

含义:从机设备地址(01)+功能码(03)+数据字节数(14)+读取到的数据内容(00 D7 3F 70 00 14 00 0F 00 11 00 08 00 0B 00 0B 00 02 00 00)+CRC16校验码(7E 3F)

解析:从地址为1的从机读取寄存器块内容,返回的数据字节20个,寄存器返回数据:寄存器1--215,寄存器2--16240,寄存器3--20,寄存器4--15,寄存器5--17,寄存器6--8,寄存器7--11,寄存器8--11,寄存器9--2,寄存器10--0。

2、0x06请求应答方式

 主机请求:

示例:01 06 27 11 00 01 12 BB

含义:从机设备地址(01)+功能码(06)+寄存器完整地址(27 11)+写入的数据(00 01)+CRC16校验码(12 BB)

解析:在地址为1的从机中,向地址为10001的寄存器,写入数据1。

从机应答:

示例:01 06 27 11 00 01 12 BB

含义:从机设备地址(01)+功能码(06)+寄存器完整地址(27 11)+成功写入的数据(00 01)+CRC16校验码(12 BB)

解析:在地址为1的从机,地址为10001的寄存器中,成功写入数据1。如果06功能写入成功的话,请求码和响应码会是一样的。

3、0x10请求应答方式

 主机请求:

示例:01 10 4E 21 00 03  06 00 01 00 11 00 08 BB 05

含义:从机设备地址(01)+功能码(10)+起始寄存器地址(4E 21)+写入的寄存器个数(00 03)+数据字节数(00 06)+数据内容(00 01、00 11、00 08)+CRC16校验码(BB 05)

解析:在地址为1的从机中,向起始地址为20001的连续3个寄存器,分别写入1、17、8,字节数6个。

从机应答:

示例:01 10 4E 21 00 03 C7 2A

含义:从机设备地址(01)+功能码(10)起始寄存器地址(4E 21)+写入的寄存器个数(00 03)+CRC16校验码(C7 2A)

解析:在地址为1的从机,起始地址为20001的连续3个寄存器中(20001、20002、20003),写入数值。


本文到此完结,文章内容均为我个人理解所创作,如有偏差误解欢迎指正!

;