【modbus学习笔记】Modbus协议解析
参考教程
第二节 modbus协议解析(下)_哔哩哔哩_bilibili
1.Modbus协议格式
MODBUS 协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。 特 定总线或网络上 的MODBUS协议映射能够在应用数据单元(ADU)上引入一些附加域。
通用帧格式:
功能码分类:
公共功能码定义:
2.Modbus_RTU协议要求
由发送设备将Modbus 报文构造为带有已知起始和结束标记的帧。这使设备可以在报文的开始接收 新帧,并且知道何时报文结束。不完整的报文必须能够被检测到而错误标志必须作为结果被设置。 在 RTU 模式,报文帧由时长至少为3.5 个字符时间的空闲间隔区分。在后续的部分,这个时间区 间被称作t3.5。
整个报文帧必须以连续的字符流发送。 如果两个字符之间的空闲间隔大于1.5 个字符时间,则报文帧被认为不完整应该被接收节点丢弃。
3.使用工具捕获Modbus数据
configure virtual serial por driver :com口逻辑连接
modbus poll:模拟主机
modbus slave:模拟从机
步骤1:使用cvspd进行com1和2建立虚拟连接
步骤2:modbus poll连接com2,modbus slave连接com1,修改发送数据
步骤3:点击TC右边的放大镜
可以看到发送的数据(以第一行数据为例子):
01 03 00 00 00 0A C5 CD
地址 功能码 数据 校验
4.功能码解释
1.功能码 0x03(连续读取寄存器)
查看功能码:
主机发送: 01 03 0 0 00 00 0A C5 CD
地址 功能码 数据内容(起始地址,读取个数) 校验
从寄存器00开始往后读10个
主机接收: 01 03 14 00 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 CD 51
地址 功能码 数据内容 (0x14表示20个数据,内容) 校验
14是数据的个数,转换为10进制就是20,表示后面有20个数据
2.功能码 0x06(写单个寄存器)
use function中选06
Slave Id:1 Address:0 Value:6
主机发送: 01 06 00 00 00 06 09 C8
地址 功能码 数据内容 (地址 内容) 校验
主机接收:01 06 00 00 00 06 09 C8
地址 功能码 数据内容(地址 内容) 校验
3.功能码 0x10(写多个寄存器)
主机发送: 01 10 00 00 00 01 02 00 00 A6 50
地址 功能码 数据内容 (起始地址0000 寄存器数量0001 修改字节数02 内容) 校验
主机接收:01 10 00 00 00 01 01 C9
地址 功能码 数据内容(起始地址0000 寄存器数量0001) 校验