西門子的數據存儲是低字高位,所以通常而言,浮點數是不需要高低位對換的,你這個項目居然要對換,所以我往上看了下。呃,不出意外的話,西門子對應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重新編輯 ]