ModBusRTU和ModbusTCP的学习整理

第一、

Modbus RTU协议需要对数据进行校验,串行协议有奇偶校验,ASCII模式LRC校验,RTU模式用16位CRC校验.。其采用Maser/Slave方式。 
ModbusTCP模式没有规定校验,因为TCP协议是一个面向连接的可靠协议。其采用服务器和客户端方式,MODBUS TCP是
传输在TCP/IP网络上的,多了一个报文头,少了CRC校验,采用TCP的502端口。

         在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数(端口,波特率等)或者选择IP+端口号(502),因此,如果要进行Modbus RTU协议和ModbusTCP协议的转换,需要物理转换器RS485 to Ethernet的转换模块。

第二、Modbus RTU协议

             1、基本格式:起始位(T1_T2_T3_T4)+设备地址+功能码+数据+CRC校验+结束符(T1_T2_T3_T4)

数据传输时注意:数据帧之间间隔必须大于3.5个字符,帧内数据间隔要小于1.5个字符(低位字节在前,高位字节在后)

ModbusRTU协议格式

设备地址 功能码 数据格式 CRC校验L CRC校验H
8位 8位 N*8位 8位 8位

(N<=124,传输数据过大会引起通信错误)

               2、功能码介绍:

功能码

0x01

0x02

0x03

0x04

0x05

0x06

0x0F

0x10

含义

读线圈(PLC输出位(单或多位操作))

读离散输入状态(PLC输入位(单或多位操作)

读保持寄存器

(单或多字操作)

读输入寄存器

(单或多字操作)

写单个线圈

(单位操作)

写单个保持寄存器

(单字操作)

写多个线圈

(多个位操作)

写多个保持寄存器

(多个字操作)

               3、主对从写操作的数据帧格式:

从机地址 功能码 数据地址L 数据地址H 数据L 数据H CRC_L CRC_H
0x01 06 00 01 00 10

                 从机对主机响应: 

从机地址 功能码 数据地址L 数据地址H 数据L 数据H CRC_L CRC_H
0x01 06 00 01 00 10

               4、主机对从机读数据操作:

从机地址 功能码 数据地址L 数据地址H 数据L 数据H CRC_L CRC_H
0x01 03 00 01 00 01

                从机对主机响应:

从机地址 功能码 数据字节个数 数据1 数据2 CRC_L CRC_H
0x01 03 02 00 00

 第三、ModbusTCP协议格式

              发送:0x00  0x00  0x00  0x00  0x00  0x06  0x01  0x04  0x00  0x00  0x00  0x10

Byte1

Byte2

Byte3

Byte4

Byte5

Byte6

Byte7

Byte8

Byte9

Byte10

Byte11

Byte12

0x00

0x00

0x00

0x00

0x00

0x06

0x01

0x04

0x00

0x00

0x00

0x10

事务处理标识H

事务处理标识

L

协议标识符H

协议标识符L

长度H

长度L

设备地址

功能码

寄存器起始地址H

寄存器起始地址L

读输入寄存器个数H

读输入寄存器读输入寄存器L

           返回:0x00  0x00  0x00  0x00  0x00  0x22  0x01  0x04  0x20 +Bytes[32]

Byte1

Byte2

Byte3

Byte4

Byte5

Byte6

Byte7

Byte8

Byte9

Byte10~ Byte41

0x00

0x00

0x00

0x00

0x00

0x22

0x01

0x04

0x20

Bytes[32]

事务处理标识

H

事务处理标识

L

协议标识符H

协议标识符L

长度H

长度L

设备地址

功能码

返回寄存器数据长度

返回的寄存器的数据

      疑问:Byte9:如果表示数据长度,由于其是一个字节表示,所以其值最大位0xFF即255,所以返回数据长度有限制。搜索帖子有说长度不超124个,待验证....

                   

猜你喜欢

转载自blog.csdn.net/m0_49047167/article/details/108375105