第一、
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校验LCRC校验H8位8位N*8位8位8位(N<=124,传输数据过大会引起通信错误)
2、功能码介绍:
功能码
0x01
0x02
0x03
0x04
0x05
0x06
0x0F
0x10
含义
读线圈(PLC输出位(单或多位操作))
读离散输入状态(PLC输入位(单或多位操作)
读保持寄存器
(单或多字操作)
读输入寄存器
(单或多字操作)
写单个线圈
(单位操作)
写单个保持寄存器
(单字操作)
写多个线圈
(多个位操作)
写多个保持寄存器
(多个字操作)
3、主对从写操作的数据帧格式:
从机地址功能码数据地址L数据地址H数据L数据HCRC_LCRC_H0x010600010010略略从机对主机响应:
从机地址功能码数据地址L数据地址H数据L数据HCRC_LCRC_H0x010600010010略略4、主机对从机读数据操作:
从机地址功能码数据地址L数据地址H数据L数据HCRC_LCRC_H0x010300010001略略从机对主机响应:
从机地址功能码数据字节个数数据1数据2CRC_LCRC_H0x0103020000略略第三、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个,待验证....