讀寫型記憶體-雙Register寫入指令(30)

當數值較大時,若分別以不同資料格式(例如 float32 或 int64)進行讀取與換算,因內部計算方式不同,可能會出現非常小的差異,通常小於 1/10,000,屬於正常現象。

限使用在 Register 長度為 4 的記憶體,請參考列表。

Function Code 功能碼 30

讀寫型記憶體 雙 Register 寫入指令,功能碼 30,2 個暫存器 (32 bit),用於寫入浮點數,Float32 或Int32 等 32 位元的數據,適用於有小數、正負數、介於約 10⁻³⁸ 到 10³⁸ 之間的參數設定。 例如:設定A18 強制歸零 (Low Flow Cutoff ) 為 +5.5 、設定 A23 零點偏差校正 (Zero Offset) 為 -0.08 。

Modbus RTU 讀寫型記憶體-雙 Register 寫入指令 (功能碼 30)

以主站使用功能碼 30 ,目標向位置 "A18 Low Flow Cutoff 強制歸零" ,寫入 + 5.5。

根據 讀寫型記憶體-讀取列表 ,該參數的起始位址為00 15,Reg 長度為 2 (二個暫存器),資料型式為 float32。

1.數值轉換與資料準備 (Hex Data)

將十進制數 +5.5 轉換為 IEEE 754 Float32 (Big Endian) 格式:

5.510=40B00000165.5 ₁₀ = 40B00000 ₁₆

這 4 個位元組的數據是:40 B0 00 00

2. 主站發送寫入指令 (TX 訊框)

主站使用功能碼 30,攜帶 4 個數據位元組(Byte Count 04),寫入從位址 00 15 開始的 2 個暫存器。

  • Slave Address = 01

  • Function Code = 30

  • 讀取數據的啟始地址 = 00 15 (A18 Low Flow Cutoff 的記憶體地址)

  • 寫入暫存器數量 = 00 02 (寫入 2 個暫存器 (Float32))

  • 寫入位元組計數 = 04 (寫入 4 個數據位元組)

  • 寫入資料 (Float32) 寫入 40 B0 00 00 (寫入 +5.5 的 Hex 數據)

  • CRC 校驗碼 = 27 D1 (依 CRC 算法計算出的糾錯碼)

3. 從站回覆數據 (RX 訊框)

寫入指令成功時,從站會將收到的 TX 請求指令完整回傳,作為檢查(確認)功能。

  • Slave Address = 01

  • Function Code = 30

  • 讀取數據的起始地址 = 00 15 (A18 Low Flow Cutoff 的記憶體地址)

  • 寫入資料 = 00 02 (確認寫入 2 個暫存器)

  • CRC 校驗碼 = D1 CB (依 CRC 算法計算出的糾錯碼)

主站接收到 RX 回覆後,確認功能碼Function Code、位址、寫入資料暫存器數量都正確無誤,即可確認A18 Low Flow Cutoff 已成功設定為 +5.5 。

Last updated