foxclever / Modbus

一个Modbus通讯协议栈
336 stars 155 forks source link

可能的bug #3

Closed mttbx closed 5 years ago

mttbx commented 5 years ago

SetRegisterObjectValue函数中index一次只加1,但是判断条件是index<dataObject.quantity*2,是不是有点问题啊。 还有一些中文错别字方面的错误以及slave写成salve(不知道是不是想写成slave)。 哥们,给点模拟的例程,方便调试

mttbx commented 5 years ago

说的再多点下面的索引乘了2,是一次跳两个,应该没问题,但是index本身是一次只加1个的。还在研读代码,不确定是不是bug哈。 node->hiByte=value[index2]; node->loByte=value[index2+1];

foxclever commented 5 years ago

非常感谢你指出我们的错误!关于例程尚在整理中,整理完成就会发布!

jianhun9527 commented 5 years ago

这个是好的吧,value[]是uint8_t的,所有寄存器是uint16_t的,两个value数据才能凑齐一个寄存器数据

mttbx commented 5 years ago

判断错了,不是说上面两行代码错了 if((i>=dataObject.startingAddress)&&(index<dataObject.quantity*2))

foxclever commented 5 years ago

这个并不是Modbus协议栈的一部分,我们希望可以以量表的方式来实现从站部分数据的存储实例,目前这个实例尚不完整,给大家带来理解上的困扰非常抱歉,我们将修正这一实例,并完善其余部分的实例!再次感谢各位的关注!

jianhun9527 commented 5 years ago

确实是有问题,理解上应该是if((i>=dataObject.startingAddress)&&(index<dataObject.quantity))才对,不过因为for(int i=robject.startingAddress;i<(dataObject.startingAddress+dataObject.quantity);i++)里面参数i的影响,if里面的判断是2还是1对结果应该没影响。