曾姚王
紙上得來終覺淺,絕知此事要躬行!
級(jí)別: 略有小成
|
今天用臺(tái)達(dá)的一個(gè)DVP-08SN 485RTU讀一個(gè)儀表的數(shù)據(jù),始終是1,后來用串口讀出,發(fā)現(xiàn)數(shù)據(jù)類型只有選擇FLOAT INVERSE才正確,請(qǐng)問,浮點(diǎn)反轉(zhuǎn)這個(gè)數(shù)據(jù)是怎么回事。讀出42F6CCCDH怎么浮點(diǎn)數(shù)是123.4 [ 此帖被曾姚王在2024-10-17 17:03重新編輯 ] |
---|---|
|
暴躁小白兔
級(jí)別: 略有小成
|
圖片:
什么儀表,秀出來長(zhǎng)長(zhǎng)見識(shí) ------------------------------------ 在工業(yè)通信和數(shù)據(jù)采集領(lǐng)域,"Float Inverse"(浮點(diǎn)反轉(zhuǎn))這個(gè)術(shù)語通常用于描述一種特定的數(shù)據(jù)格式,特別是在Modbus協(xié)議中。在這種格式下,浮點(diǎn)數(shù)的字節(jié)序(byte order)是相反的,也就是說,浮點(diǎn)數(shù)的高位字節(jié)(most significant byte, MSB)存儲(chǔ)在較低的地址,而低位字節(jié)(least significant byte, LSB)存儲(chǔ)在較高的地址。這種存儲(chǔ)方式與標(biāo)準(zhǔn)的大端(big-endian)或小端(little-endian)字節(jié)序相反。 在某些情況下,儀表或設(shè)備可能使用浮點(diǎn)反轉(zhuǎn)格式來存儲(chǔ)或傳輸浮點(diǎn)數(shù)。例如,根據(jù)西門子官方支持論壇的討論 ,當(dāng)從Modbus儀表讀取浮點(diǎn)數(shù)時(shí),如果發(fā)現(xiàn)讀取的值與預(yù)期不符,可能需要考慮字節(jié)序的問題。在這種情況下,可能需要在讀取數(shù)據(jù)后對(duì)字節(jié)序進(jìn)行調(diào)整,以獲得正確的浮點(diǎn)數(shù)值。 處理浮點(diǎn)反轉(zhuǎn)數(shù)據(jù)的一般步驟可能包括: 讀取包含浮點(diǎn)數(shù)的兩個(gè)連續(xù)的Modbus寄存器(通常為16位,或2個(gè)字節(jié))。 交換這兩個(gè)寄存器的字節(jié)序,使得原本的高位字節(jié)變?yōu)榈臀蛔止?jié),反之亦然。 將調(diào)整后的字節(jié)重新組合成一個(gè)浮點(diǎn)數(shù),以獲得正確的數(shù)值。 需要注意的是,處理浮點(diǎn)反轉(zhuǎn)數(shù)據(jù)時(shí),應(yīng)確保了解設(shè)備的文檔和規(guī)范,以正確理解數(shù)據(jù)格式和所需的字節(jié)序調(diào)整。在某些情況下,可能需要使用特定的軟件工具或編程技巧來實(shí)現(xiàn)這一過程。 樓主留言:謝謝,我再看看怎么轉(zhuǎn),臺(tái)達(dá)都十幾年沒用了。 [ 此帖被暴躁小白兔在2024-10-18 14:13重新編輯 ] |
---|---|
|
hgz284631157
工控小君
級(jí)別: 略有小成
|
123.4 是42F6CCCD H (H表示16進(jìn)制) 對(duì)應(yīng)的十進(jìn)制是 1123470541 |
---|---|
|
高邁德io模塊
佛山高邁德科技專業(yè)研發(fā)生產(chǎn)Profinet轉(zhuǎn)modbus模塊
級(jí)別: 探索解密
|
浮點(diǎn)數(shù)?16進(jìn)制的? |
|
---|---|---|
|
sjm213
有小知識(shí),無大學(xué)問。
級(jí)別: 論壇版主
|
42F6CCCD對(duì)應(yīng)的浮點(diǎn)數(shù)為什么是123.4,這是二進(jìn)制浮點(diǎn)數(shù)的結(jié)構(gòu)決定的; 至于為何要反轉(zhuǎn),你可以監(jiān)控一下臺(tái)達(dá)存儲(chǔ)數(shù)據(jù)的兩個(gè)寄存器,比如說是D10/D11,那么現(xiàn)在D10里數(shù)值的16進(jìn)制是42F6,D11里面數(shù)值的16進(jìn)制是CCCD。 而臺(tái)達(dá)的32位數(shù)據(jù)結(jié)構(gòu)是[D11,D10],所以這個(gè)數(shù)值就變成了CCCD42F6,顯然是不對(duì)的。 |
---|---|
|