问题场景
今天项目连接调试的时候,出现了读取数据有误的情况,但是恰好只有一个寄存器发生错误,这个寄存器的数字号又很熟悉,123,寄存器的起始地址是0,即第124个寄存器的报文有问题。之前在测试两个模拟软件poll和slave的时候,poll设置功能码为04读取数据的时候,不能将读取寄存器的长度设置太大,只能有个范围,如下图。
问题原因
后来查阅资料modbus的报文长度有限制,最后导致一次最多只能读取123个寄存器,因此在做主机poll的时候,当需要读取寄存器的长度大于124时可以进行分段读取,比如需要读取的寄存器为200个,可以第一次读取0到123的,第二次读取124到199,这样就可以规避这个限制问题。如果不进行分段处理,最后获取的报文段将只有前123个寄存器的数据加上一个随机两位数,就是这个随机两位数导致我项目中出现了问题。