讀寫型記憶體-四個Register寫入指令(31)
Function Code 功能碼 31
讀寫型記憶體 四個 Register 寫入指令,功能碼 31 ,4 個暫存器 (64 bit),可寫入 Int64 等 64 位元的數值範圍。 當您設定 D11 累計目標 (Total Target 64) 或 C04 批量控制 (Dosing Target 64) 大數值參數時,建議使用功能碼 31。
一般的 32 位元浮點數 (功能碼 30) 有效位數僅約 7 位,也就是當設定值超過千萬位,使用浮點數寫入會產生精準度失真與捨入誤差,此時建議使用功能碼 31 透過 64-bit 長整數 (Int64) 格式進行傳輸,以確保數據在記憶體中完整對應,不產生任何四捨五入的誤差。
讀寫型記憶體-四個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