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

Modbus通信协议详解–清晰易懂–入门级文章对 Modbus 的内容做了全面的讲解 包括 Modbus 的各类特性 Modbusde 的各项分类协议 如 RTU TCP 等

大家好,欢迎来到IT知识分享网。

目录

一、什么是Modbus协议?

二、Modbus通讯方式

三、Modbus通信协议的特点

四、Modbus的4种寄存器类型

五、Modbus的协议版本

六、Modbus数据帧格式

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

1、0x03请求应答方式

补:CRC16在线校验工具

2、0x06请求应答方式

3、0x10请求应答方式


一、什么是Modbus协议?


二、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的协议版本

包括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协议版本的帧格式都是一样的Modbus通信协议详解--清晰易懂--入门级

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


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

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

1、0x03请求应答方式

主机请求:

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

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

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

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

补:CRC16在线校验工具

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

从机应答:

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

示例: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请求应答方式

 主机请求:

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

示例:01 06 27 11 00 01 12 BB

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

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

从机应答:

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

示例:01 06 27 11 00 01 12 BB

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

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

3、0x10请求应答方式

 主机请求:

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

示例: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个。

从机应答:

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

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

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

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


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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/127879.html

(0)
上一篇 2025-09-04 17:15
下一篇 2025-09-04 17:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信