测试第一步
先查询0x0001的原始数据01 03 00 01 00 01 D5 CA
结果如下:
让我们对这两组数据进行分析。
首先是主机发送的01 03 00 01 00 01 D5 CA:
01-地址,也就是你传感器的地址
03-功能码,03代表查询功能,查询传感器的数据
00 01-代表查询的起始寄存器地址。说明从0x0001开始查询。这里需要说明以下,Modbus把数据存放在寄存器中,通过查询寄存器来得到不同变量的值,一个寄存器地址对应2字节数据
00 01-代表查询了一个寄存器。结合前面的00 01,意思就是查询从0x0001开始的1个寄存器值。
D5 CA-循环冗余校验,是modbus的校验公式,从首个字节开始到D5前面为止;
接下来,就是从机回复的数据01 03 02 00 22 38 5D的分析:
01-从机返回给主机自己的地址,说明这就是主机查的从机;
03-功能码;
02-代表后面数据的字节数。因为上面说到,一个寄存器有2个字节,所以后面的字节数肯定是2*查询的寄存器个数;
00 22-寄存器的值是00 22,结合发送的数据看出,01这个寄存器的值为00 22;
38 5D-循环冗余校验。
这也就是查询功能码0x03的使用。
测试第二步
就是修改功能码0x06的使用
以上数据是修改后得到的数据,首先就是原本的03换成了06,06就是修改功能码,从机得到命令后就将0x0001处的数据改成00 11,从机返回的数据意味着修改成功,那怎么验证它确实修改过呢?那我们就再查询一遍......
测试第三步
你看看,这不就改成了!
测试第四步
我们测试一下CRC校验码不匹配的情况,结果如下:
测试第五步
最后测试一下从机地址不匹配的情况
这就非常的nice,这也是刚刚跑通modbus,如果有不对的地方希望大家多多交流哦~