讀寫型記憶體-四個Register寫入指令(31)

circle-info

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

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

Function Code 功能碼 31

讀寫型記憶體 四個 Register 寫入指令,功能碼 31 ,4 個暫存器 (64 bit),可寫入 Int64 等 64 位元的數值範圍。 當您設定 D11 累計目標 (Total Target 64) C04 批量控制 (Dosing Target 64) 大數值參數時,建議使用功能碼 31。

circle-exclamation

讀寫型記憶體-四個Register寫入指令(31)格式

功能碼 31 採用鏡像回覆機制。當寫入成功時,從站回覆的 RX 訊框格式與內容將與 TX 請求完全相同。

Modbus RTU 讀寫型記憶體-四個Register寫入指令 (功能碼 31)

本範例將演示如何以主站使用功能碼 31 ,向位置 "C04 Dosing Target 批量控制 " ,將目標值設定為 +999,999,999。

根據 讀寫型記憶體-讀取列表 ,該參數的起始位址為02 83,Reg 長度為4 ,資料型式為int64。

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

  • 目標數值: 999,999,999 (十進位)

  • 轉換為十六進位 (Hex): 經換算可得 3B 9A C9 FF

  • 封裝為 Int64 格式 (8 Bytes): 由於功能碼 31 固定要求 8 個 Byte,前面需補零:

    完整 64-bit 資料: 00 00 00 00 3B 9A C9 FF

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

  • Slave Address: 01 (本流量計地址)

  • Function Code: 31 (寫入指令)

  • 起始暫存器位址: 02 83 (寫入C04 Dosing Target(64) 記憶體地址)

  • 寫入資料: 00 00 00 00 3B 9A C9 FF (寫入資料C04 Dosing Target(64) )

  • CRC: 0B 7A (依 CRC 算法計算出的糾錯碼)

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

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

Last updated