西门子的数据存储是低字高位,所以通常而言,浮点数是不需要高低位对换的,你这个项目居然要对换,所以我往上看了下。呃,不出意外的话,西门子对应MODBUSRTU的首地址,应该是40001对应0,那么你读取的首地址,应该是40007才对,而你读了40006。。。我觉得你应该回头看看这个项目了。
毕竟因为浮点数的计算方法,你对换以后,6 8 10这种主要数据位可以保证符号位指数位和主要数据部分没有问题,但是精度一定会受影响。220.123456789对应43 5C 1F 9A,380.123456789对应43 BE 0F CD,你读取了7.8然后对换得到的是43 BE 1F 9A,这个数是380.24688720703125。差别很小,但是你的做法确实不正确。如果你读的不是电压电流功率这种相对恒定的变量而是读了有功总电能的话,累加越大,误差会越大。
数据首地址+1,无需对换高低位。回头有空还是去看下吧。
[ 此帖被phoenixyqc在2021-07-20 11:38重新编辑 ]