用戶名  找回密碼
 立即註冊
帖子
熱搜: 活動 交友 discuz
查看: 54|回復: 0

Modbus 通訊:Word 資料正常,浮點數讀取卻錯誤的原因?

[複製鏈接]

444

主題

56

回帖

1976

積分

管理員

積分
1976
發表於 2024-12-30 21:04:30 | 顯示全部樓層 |閱讀模式
[color=var(--primary-text)][size=0.9375]Modbus 通訊:Word 資料正常,浮點數讀取卻錯誤的原因?
在進行 Modbus 通訊時,是否遇過這樣的情況:

Word 資料讀取正常。
但浮點數讀取出錯:讀到的數值與預期完全不符。
這種問題通常與浮點數的 高低字順序 (Word Order) 有關。以下將解析問題並提供解決方法。

為什麼會發生高低字順序錯誤?
Modbus 協定中,資料以 16 位元 (2 字節) 的單位傳輸,稱為一個 Word。而浮點數 (Single-Precision Floating Point) 根據 IEEE 754 標準,使用 4 個字節 (32 位元) 表示,需要分為 2 個 Word 傳輸。

這時,關鍵在於 高低字 (Word Order) 的傳輸順序:

High Word First (高位在前):

高位字先傳輸,順序為 [High Word][Low Word]。
這是 Modbus 的常見預設順序。
Low Word First (低位在前):

低位字先傳輸,順序為 [Low Word][High Word]。
某些設備可能採用這種順序。
如果設備或系統解析浮點數時,未考慮高低字順序的設定,就會導致數據錯誤。

案例分析:浮點數讀取錯誤
假設寫入浮點數值 12.34,其 IEEE 754 表示為:

01000001

01001101

01011100

11001000
01000001010011010101110011001000
分解為:

高位字 (High Word):0x414D
低位字 (Low Word):0x5CC8
正確情況:
若設備使用 High Word First,讀取的順序應為 [0x414D][0x5CC8],解析後為正確的 12.34。

錯誤情況:
若設備實際為 Low Word First,但解析時仍按照 High Word First 的順序處理,讀取結果變成:[0x5CC8][0x414D]
這將解析成一個錯誤的浮點數值,例如 7.00E-44。

如何解決高低字順序問題?
1. 確認設備的高低字設定
查閱設備手冊,確認其默認的高低字順序。
通常會標註為 High Word First 或 Low Word First,
有些HMI人機會有可選擇。








高級模式
B Color Image Link Quote Code Smilies

本版積分規則

Archiver|小黑屋|Your Industrial Automation Toolboxs

GMT+8, 2025-4-18 02:26 , Processed in 0.226980 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表