我目前正在用modbus tcp掙扎,並且遇到了解釋模塊響應的問題。該響應包含兩個值,這些值以三個UInt16
值的數組的位進行編碼,其中r [0]的前8位必須被忽略。如何進行位移和連接以獲得正確的結果?
比方說,UINT16數組稱爲r
和「最後」的價值觀我想是val1
和val2
,那麼我就必須做到以下幾點:
在上面的例子中,對於輸入值r[0]
= 768,r[1]
= 1536和r[2]
= 0,期望的輸出值是val1
(= 3)和val2
(= 6),所有值都是UInt16。
我已經嘗試過(邏輯上)8位右移r[0]
,但是高位會丟失,因爲它們存儲在r[1]
的前8位中。我必須先連接所有的r值,然後再進行位移嗎?我怎樣才能做到這一點?提前致謝!
你爲什麼用UINT16工作?該協議是基於(8位)字節設計的,這使得一切都更簡單。你不能簡單地使用字節嗎? – DrKoch 2015-03-13 13:36:47
嗯,模塊本身返回UINT16(通過Wireshark驗證),我的modbus庫也適用於這種類型...所以我會堅持。 – Robert 2015-03-13 13:41:38