理解Modbus通讯,看这一篇就够了!

文摘   科技   2024-11-24 10:00   山东  

Modbus是一种串行通信协议,最初由Modicon(现为施耐德电气的一部分)在1979年为其可编程逻辑控制器(PLC)开发。随着工业自动化技术的不断发展,Modbus协议逐渐扩展并应用于更广泛的领域,包括传感器、执行器、仪表以及其他智能设备之间的通信。


Modbus协议的核心特点

>


主从架构:

在Modbus网络中,请求信息的设备被称为Modbus客户端(或主站),提供信息的设备是Modbus服务器(或从站)。客户端可以向服务器写入信息,服务器则根据客户端的请求提供数据。


MODBUS协议只允许在主机(PC,PLC等)和终端设备之间通讯,而不允许独立的终端设备之间的数据交换。


轮询机制:

Modbus的轮询机制是指,客户端发送一个请求消息到服务器,服务器处理请求并返回一个响应消息。Modbus的轮询机制有两种:单播轮询和多播轮询。


单播轮询是指,客户端发送一个请求消息到服务器,服务器处理请求并返回一个响应消息,客户端收到响应消息后再发送下一个请求消息;


多播轮询是指,客户端发送一个请求消息到多个服务器,服务器们处理请求并返回响应消息,客户端收到所有响应消息后再发送下一个请求消息,这样的过程就叫做多播轮询。


多种传输模式

Modbus协议支持多种网络,可以通过串口、以太网、RS485等多种网络进行通信以适应不同的网络环境。


高效稳定


Modbus协议支持多个客户端同时连接,每个客户端可以同时发送多个请求,服务器可以高效地处理客户端的请求,保证服务的稳定性。


Modbus数据帧格式

>


Modbus 数据帧由几个关键部分组成,包括设备地址、功能码、数据和 CRC 校验。每个部分都有其特定的作用和格式。

发送端


接收端

设备地址:

这是 Modbus 网络中设备的唯一标识符,范围从 0 到 247。


功能码:

定义了帧的操作类型,如读取或写入数据。常见的功能码包括 03(读保持寄存器)、04(读输入寄存器)、06(写单个保持寄存器)和 16(写多个保持寄存器)。下图是Modubs协议的功能码及其作用。



数据:

根据功能码的不同,数据部分可以包含终端要读取或写入的寄存器的地址和数量,以及要写入的具体数据值。


CRC校验:

Modbus协议采用了16为循环冗余校验(Cyclic Redundancy Check)机制,用于验证数据传输的完整性和准确性,在数据帧的末尾添加了两个字节的循环冗余校验(CRC)。

进行CRC运算时,先将16位寄存器设为全1。接着,将每个数据字节的8位与寄存器当前值异或,然后结果左移,空位补0。每次最低位移出时,若为1,则寄存器与固定值(0A001H)再异或。重复此过程,每字节处理8次移位。所有字节处理完后,得到的值就是CRC。


Modbus数据帧示例

>


读取操作

设备地址为 01,功能码为 03,从地址 0001 开始读取 1 个寄存器的数据帧格式为 01 03 00 01 00 01 [CRC低][CRC高] 。


入操作:

设备地址为 01,功能码为 06,向地址 0001 写入数据 0017 的数据帧格式为 01 06 00 01 00 17 [CRC低][CRC高] 。


实际应用中,主站(Master)会根据具体需求发送包含特定功能码及数据的请求帧。随后,从站(Slave)会根据该请求执行相应的操作,并返回包含所需数据的响应帧。例如,若主站请求读取某些数据,从站将返回包含这些数据的响应帧。


工控大侠
关注我,持续分享工控技术干货、行业动态!笔者20余年的自动化从业经验相信可以帮到您,有问题可留言。