MODBUS RTU協議中浮點數是如何存儲,讀到浮點數寄存器的數值如何轉換成所需的浮點數

浮點數保存的字節格式以下:二進制

地址 +0 +1 +2 +3
內容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM方法

這裏
S 表明符號位,1是負,0是正
E 偏移127的冪,二進制階碼=(EEEEEEEE)-127。
M 24位的尾數保存在23位中,只存儲23位,最高位固定爲1。此方法用最較少的位數實現了
較高的有效位數,提升了精度。移動

零是一個特定值,冪是0 尾數也是0。浮點數

浮點數-12.5做爲一個十六進制數0xC1480000保存在存儲區中,這個值以下:
地址 +0 +1 +2 +3
內容0xC1 0x48 0x00 0x00

浮點數和十六進制等效保存值之間的轉換至關簡單。下面的例子說明上面的值-12.5如何轉
換。
浮點保存值不是一個直接的格式,要轉換爲一個浮點數,位必須按上面的浮點數保存格式表
所列的那樣分開,例如:

地址 +0 +1 +2 +3
格式 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
二進制 11000001 01001000 00000000 00000000
十六進制 C1 48 00 00

從這個例子能夠獲得下面的信息:
符號位是1 表示一個負數
冪是二進制10000010或十進制130,130減去127是3,就是實際的冪。
尾數是後面的二進制數10010000000000000000000

在尾數的左邊有一個省略的小數點和1,這個1在浮點數的保存中常常省略,加上一個1和小數
點到尾數的開頭,獲得尾數值以下:
1.10010000000000000000000

接着,根據指數調整尾數.一個負的指數向左移動小數點.一個正的指數向右移動小數點.由於
指數是3,尾數調整以下:
1100.10000000000000000000

結果是一個二進制浮點數,小數點左邊的二進制數表明所處位置的2的冪,例如:1100表示(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12。小數點的右邊也表明所處位置的2的冪,只是冪是負的。例如:.100...表示(1*2^(-1))+(0*2^(-2))+(0*2^(-2))...=0.5。這些值的和是12.5。由於設置的符號位表示這數是負的,所以十六進制值0xC1480000表示-12.5。

相關文章
相關標籤/搜索