|
发表于 2023-10-21 12:44:57
|
显示全部楼层
本帖最后由 arison 于 2023-10-21 12:45 编辑
MODBUS协议
应用层报文传输协议 一问一答协议 和硬件无关
两种传输模式:ASCII模式和RTU模式,常用RTU模式
RTU模式:16进制传输,连续传输,从低位开始
1起始+8位数据+奇偶校验位(可有可无)+停止位
一帧数据后 + 3.5个字符时间空闲 +下一帧
RTU帧:通过波特率可以计算出空闲时间
写多寄存器:
数据功能: 地址 功能码 寄存地址 寄存器个数 写入字节数 写入数据 校验
偏移字节: 0 1 2 3 4 5 6 7~ CRC16
字节数量: 1byte 1byte 2byte 2byte 1byte 2*n byte 2byte
01 10 0100 0004 08 124564890ABCDEF CE12
偏移0:此字节为从机设备地址,用于指定本次接收处理的从机地址,取值为0x000xT。从机设备地址是唯一的。
一般0x00用于广播(比如发送同步帧),从机不返回信息。上例从机设备地址为0x01
偏移1:此字节为功能码,表明本次命令的操作功能,(这个可以查询 MODBUS支持的各种功能),上例的功能码0x10就是“写多寄存器”。
偏移2:此2字节为要写入的寄存器首地址0x0100, MODBUS协议对数据的都是基于寄存器访问的,每个寄存器2个字节(一个WORD)。高字节在前,低字节在后。
偏移4:此2字节为要写入的寄存器个数,0x0004表示要写入4个寄存器。
偏移6:此字节为要写入的字节数,0x08表示要写入8个字节(4个寄存器)。
偏移7:此8个字节为要写入的数据。
最后两个字节:CRC16校验值0x12CE,低字节在前,高字节在后(算法与电脑通用,小端模式)。
各个从机接收到信息后,有多种方式去判断是否是自己的数据,一般习惯先校验,校验通过才做数据解析,然后做出应答。
如果校验通过,从机地址正确,则机一定要做应答(即使是错误的命令)。
上述命令从机返回:
数据功能: 地址 功能码 寄存地址 寄存器个数 CRC16
偏移字节: 0 1 2 3 4 5 6 7
字节数量: 1byte 1byte 2byte 2byte 2byte
01 10 0100 0004 C033
偏移0:此字节为从机设备地址,同上述描述。
偏移1:此字节为功能码,同上述描述。
偏移2:此2字节为要写入的寄存器首地址,同上述描述。
偏移4:此2字节为已经写入的寄存器个数,0x0004表示已经写入4个寄存器。
最后两个字节:CRC16校验值0x33C0,低字节在前,高字节在后(算法与电脑通用,小端模式)。
如果命令解析错误,则从机返回错误帧:(自定义错误码)
数据功能: 地址 错误码 CRC16
偏移字节: 0 1 6 7
字节数量: 1byte 1byte 2byte
01 90 404D
|
|