唯讀型記憶體-讀取指令(04)
唯讀型記憶體-讀取指令(04)
用途: 此記憶體區域專門用於儲存設備的即時狀態、測量結果和流量狀態相關的記憶體。
特性: 數據具有唯讀特性,只能通過讀取指令獲取數值,無法通過寫入指令進行修改。
控制端發指令(04)格式
Modbus RTU 讀取唯讀型記憶體讀取指令 (04) 範例
以唯讀型記憶體讀取指令(04)為例,說明在累積流量為 20000.5 公升時,應如何發送指令並將回傳的資料解析為十進位數值。
主站發送讀取指令 (TX 訊框)
根據設備規格,累積流量採 Float32 格式,佔用 2 個暫存器 (4 Bytes) 。主站需發送 Modbus 功能碼 04(讀取輸入暫存器),以讀取從位址 0000 開始的 2 個暫存器數據。
TX 請求指令: 01 04 00 00 00 02 71 CBSlave Address = 01
Function Code = 04
起始暫存器位址 = 00 00
讀取數量 = 00 02 (2 個暫存器)
CRC 校驗碼 = 71 CB
從站回覆數據 (RX 訊框)
從站收到讀取請求後,將內部儲存的 20000.5 升(Float32)數據,依 Big Endian 順序,封裝為 4 個位元組回傳。
Slave Address = 01
Function Code = 04
回傳位元數 = 04 (4 Bytes)
數據位元組 = 45 9C 40 00
CRC 校驗碼 = E2 56
數據解析與轉換 (轉回十進制)
步驟 A:排列數據
由於設定為 大端模式 (Big Endian),資料的最高位元組放在最前面,因此 4 個位元組的順序就是收到的順序:
459C4000 ₁₆
步驟 B:拆解 Float32 結構 (SEM: S-符號位, E-指數位, M-尾數位)
將 459C4000 ₁₆ 轉換為32位二進位制

部分
二進制數值
位元數
說明
S (符號位)
0
1 bit
0=正數
E (指數位)
10001011
8 bits
139₁₀。 實際指數:
139 - 127 (Float 32 偏移量) = 12
M (尾數位)
001110001...
23 bits
有效數字 1.M
步驟 C:計算數值
根據 IEEE 754 公式:

• 指數位:E = 10001011 轉換為10 進位制
在 IEEE 754 Float32 標準中,指數位採用偏移表示法表示正指數和負指數,標準規定的偏移量 (Bias) 是 127,因此實際指數是 139 - 127 = 12
• 尾數部分:M=0011100100000000000000
有效數字 1.M:1.001110001 (後面的零可以忽略)
• 得根據 IEEE754 浮點數數值表示為
將小數點向右移動 12 位:

• 將這個二進制數轉換回十進制:
得請求累積流量,RX 回覆數據: 01 04 04 45 9C 40 00 E2 56 值為 20000.5 升
Last updated