2013-08-19 28 views
0

如果在寫入多個寄存器(0x10)請求被驗證之後但在所有寫入完成之前遇到錯誤,Modbus設備應該如何失敗? specification (6.12)在這一點上似乎含糊不清,網絡搜索尚未證明有效果。我看到三種可能性:什麼是Modbus(0x10)寫多個寄存器(如果有)的正確故障模式?

  1. 嘗試依次寫入每個寄存器。如果發生錯誤立即放棄/發送異常。
  2. 將請求視爲原子事務,其中應寫入所有數據或不寫入。
  3. 如果發現任何故障,則嘗試寫入所有發送異常的數據。

是否存在傳統的或正確的方式在這裏失敗,或者是設備執行失敗的具體方式,只需要將其記錄在手冊中?

回答

1

根據圖22:寫多個寄存器狀態圖specification異常代碼4應返回的第31頁上,但協議本身不指定應用層應該如何工作。

您的設備失敗的方式必須考慮約束和可能的副作用。例如,如果您接受一些控制命令(設定點值或僅設置分配給不同寄存器的多個輸出),最好不要直接從寄存器分配這些值,而是在將值重新寫入內部程序變量之前首先進行一些驗證用於驅動IO或影響任何控制動作。這種方法符合您列表中的選項2。

你可以實現任何行爲最有效的提供它記錄。如果您的從站處於一個能夠實現部分應用程序層的主站的控制下,那麼您可能還會考慮支持來自從站的診斷或錯誤信息請求,但這種功能在異常0x4至功能代碼0x10中未指定。