1. 程式人生 > >Modbus功能碼/異常功能碼/錯誤碼

Modbus功能碼/異常功能碼/錯誤碼

Modbus協議主要構成是地址碼/標識碼,功能碼,暫存器地址,資料報文等內容。由於modbus協議是請求/應答通訊協議,其其中功能碼主要用於表述該資料報文執行的功能,當伺服器對客戶機進行響應時,它使用功能碼域來指示正常響應(無差錯)或者異常響應(即出現某種差錯),其中的modbus協議的功能碼眾多,在此我們一一列出與大家分享。

功能碼錶

  資料型別 功能描述 功能碼 功能碼(十六進位制) 異常功能碼
位元訪問 物理離散量輸入 讀輸入離散量 02 0x02 0x82
內部位元或者物理線圈 讀線圈 01 0x01 0x81
寫單個線圈 05 0x05 0x85
寫多個線圈 15 0x0F 0x8F
 
16位元訪問 輸入儲存器 讀輸入暫存器 04 0x04 0x84
內部儲存器或物理輸出儲存器(保持暫存器) 讀多個暫存器 03 0x03 0x83
寫單個暫存器 06 0x06 0x86
寫多個暫存器 16 0x10 0x90
讀/寫多個暫存器 23 0x17 0x97
遮蔽寫暫存器 22 0x16 0x96
 
檔案記錄訪問 讀檔案記錄 20 0x14  
寫檔案記錄 21 0x15  

 

其中物理離散量輸入和輸入暫存器只能有I/O系統提供的資料型別,即只能是由I/O系統改變離散量輸入和輸入暫存器的數值,而上位機程式不能改變的資料型別,在資料讀寫上表現為只讀,而內部位元或者物理線圈和內部暫存器或物理輸出暫存器(保持暫存器)則是上位機應用程式可以改變的資料型別,在資料讀寫上表現為可讀可寫。

錯誤程式碼表

程式碼 名稱 含義
01 非法功能 對於伺服器(或從站)來說,詢問中接收到的功能碼是不可允許的操作,可能是因為功能碼僅適用於新裝置而被選單元中不可實現同時,還指出伺服器(或從站)在錯誤狀態中處理這種請求,例如:它是未配置的,且要求返回暫存器值。
02 非法資料地址 對於伺服器(或從站)來說,詢問中接收的資料地址是不可允許的地址,特別是參考號和傳輸長度的組合是無效的。對於帶有100個暫存器的控制器來說,偏移量96和長度4的請求會成功,而偏移量96和長度5的請求將產生異常碼02。
03 非法資料值 對於伺服器(或從站)來說,詢問中包括的值是不可允許的值。該值指示了組合請求剩餘結構中的故障。例如:隱含長度是不正確的。modbus協議不知道任何特殊暫存器的任何特殊值的重要意義,暫存器中被提交儲存的資料項有一個應用程式期望之外的值。
04 從站裝置故障 當伺服器(或從站)正在設法執行請求的操作時,產生不可重新獲得的差錯。
05 確認 與程式設計命令一起使用,伺服器(或從站)已經接受請求,並且正在處理這個請求,但是需要長持續時間進行這些操作,返回這個響應防止在客戶機(或主站)中發生超時錯誤,客戶機(或主機)可以繼續傳送輪詢程式完成報文來確認是否完成處理。
07 從屬裝置忙 與程式設計命令一起使用,伺服器(或從站)正在處理長持續時間的程式命令,當伺服器(或從站)空閒時,客戶機(或主站)應該稍後重新傳輸報文。
08 儲存奇偶性差錯 與功能碼20和21以及參考型別6一起使用,指示擴充套件檔案區不能通過一致性校驗。伺服器(或從站)裝置讀取記錄檔案,但在儲存器中發現一個奇偶校驗錯誤。客戶機(或主機)可重新發送請求,但可以在伺服器(或從站)裝置上要求服務。
0A 不可用閘道器路徑 與閘道器一起使用,指示閘道器不能為處理請求分配輸入埠值輸出埠的內部通訊路徑,通常意味著閘道器是錯誤配置的或過載的。
0B 閘道器目標裝置響應失敗 與閘道器一起使用,指示沒有從目標裝置中獲得響應,通常意味著裝置未在網路中。

我們以Modbus RTU協議為例,地址碼為0x01,寫操作0x10,暫存器地址為0x018E,CRC校驗。如暫存器可讀寫的話,返回正常,如暫存器只讀,返回異常。

下發指令:01 10 01 8E 00 01 02 00 00 69 BE(向暫存器0x018E寫入一個數值為0的資料)

正確迴應指令:01 10 01 8E 00 01 60 1E(向暫存器地址0x018E寫操作一個暫存器)

錯誤迴應指令:01 90 01 8D C0(寫操作非法功能,可能是向輸入暫存器寫資料)