用人话读懂modbus协议
modbus协议简介:Modbus协议是一种串行通信协议,主要用于工业自动化领域。它是由Modicon公司(现为施耐德电气的一部分)于1979年发明的,用于可编程逻辑控制器(PLC)之间的通信 |
modbus通讯规则
主从架构:Modbus网络采用主从架构,即只有一个主机(Master)可以发送请求,而多个从机(Slave)则响应这些请求。这种架构确保了网络中的数据流是有序的,避免了冲突和混乱。
通讯方式:Modbus支持多种通讯方式,包括串行通讯(如RS-232、RS-485)、以太网通讯(如TCP/IP)以及无线通讯等。不同的通讯方式适用于不同的应用场景和需求。
数据帧格式:Modbus协议定义了数据帧的格式,包括地址域、功能码域、数据域和错误校验域。地址域用于标识目标从机;功能码域指定要执行的操作;数据域包含要传输的数据;错误校验域用于验证数据的完整性。
功能码:Modbus协议定义了一系列功能码,用于指定从机要执行的操作。例如,读线圈状态(功能码0x01)、读保持寄存器(功能码0x03)、写单个寄存器(功能码0x06)等。这些功能码使得主机能够对从机进行精确的控制和数据交换。
错误校验:为了确保数据传输的准确性,Modbus协议采用了错误校验机制。常用的校验方法是CRC(循环冗余校验)。在发送数据时,发送方会计算并附加一个CRC校验码;接收方在接收到数据后,会重新计算CRC校验码并与接收到的校验码进行比较,以验证数据的完整性。
通讯过程:Modbus通讯过程通常包括查询和回应两个步骤。主机首先发送一个查询消息给从机,从机接收到查询消息后,会根据查询内容执行相应的操作,并返回一个回应消息给主机。这种查询-回应机制确保了主机和从机之间的有效通信。
-
存储区:Modbus协议还规定了从机的存储区结构,包括线圈(Coils)、离散量输入(Discrete Inputs)、输入寄存器(Input Registers)和保持寄存器(Holding Registers)等。这些存储区用于存储不同类型的数据,以便主机进行读写操作。
image.png
modbus通讯讲解
假设你在现在要去小明家读电表度数。
你: 小明,你好我是抄电表的。
小明: 哥,你来了。我这边有二款电表。一款电表是走网线的。需要你用网线来读出我的电表数据。另一款电表是RS485的电表。需要你接线走串口读数据。
你: 没问题,都是小问题。
你 :这个走网线的电表IP地址是多少啊?端口号又是多少?电表度数地址是多少?
小明 : 这个网线IP是127.0.0.1 端口号是502。电表度数是1.3.0。
你: 好。
这个时候你打开modbus调试工具配置信息。
你: 小明啊!你家第一个电表,这个月用了100度电表啊
小明 : 那你再看看,另一个电表用了多少度电。
你 : 另一个电表的,波特率、数据位、停止位、校验位是多少啊?
小明 : 9600波特率 8数据位、1停止位、无校验位。
你: 好的,我读一下。
这个时候你打开modbus调试工具。用RS485转USB串口调试工具连接上RD,RX,GND这个三根线连接到你电脑上。
打用modbus调试工具。选择好串口配置好工具。
你:小明你的第二个电表这个月用了150度的电。
这个时候小刚走了过来。说道
小刚: 你是用软件读出来,你知道这中间发生了什么???
你 :我给你看看哦。
Tx:064-06 B0 00 00 00 06 01 03 00 00 00 01 Rx:065-06 B0 00 00 00 05 01 03 02 00 96
我们TX:代表是我发送的数据。RX代表接收到的数据。
要064-06 B0 00 00 00 06和065-06 B0 00 00 00 05这几个是我们软件模仿的所以多了出来。实际有郊报文是
TX:01 03 00 00 00 01
RX:01 03 02 00 96
数据帧1 (Tx:01 03 00 00 00 01)
- 地址: 01,表示目标设备的地址。
- 功能码: 03,表示读取保持寄存器。
- 起始地址: 00 00 (十进制: 0),表示读取的起始寄存器地址。
- 寄存器数量: 00 01 (十进制: 1),表示读取一个寄存器。
这个请求是向地址为1的设备读取一个保持寄存器的值,从地址0开始。
数据帧2 (Rx:01 03 02 00 96)
- 地址: 01,表示响应设备的地址。
- 功能码: 03,表示读取保持寄存器的响应。
- 字节计数: 02,表示后续数据的字节数为2个字节。
- 数据: 00 96,表示实际读取的数据。
你: 你看哦我读出来的有效数据是 00 96这个数据是16进制的所以我们要转换成十进制
说者你打开计算机,你看这个电表转出来数据是150也就是说你这个月的电表用了150度电
你们明白了吗?