電子秤MODBUS功能碼、數(shù)據(jù)類型與不正常相應
電子秤MODBUS功能碼、數(shù)據(jù)類型與不正常相應(來源:上海本熙測控設備科技有限公司)
附錄A:MODBUS全部功能碼
ModBus網(wǎng)絡是一個工業(yè)通信系統(tǒng),由帶智能終端的可編程序控制器和計算機通過公用線路或局部線路連接而成。其系統(tǒng)結(jié)構(gòu)既包括硬件、亦包括軟件。它可應用于各種數(shù)據(jù)采集和過程監(jiān)控。下表3--1是ModBus的功能碼定義。
表3--1 ModBus功能碼
功能碼  | 名稱  | 作用  | 
01  | 讀取線圈狀態(tài)  | 取得一組邏輯線圈的當前狀態(tài)(ON/OFF)  | 
02  | 讀取輸入狀態(tài)  | 取得一組開關(guān)輸入的當前狀態(tài)(ON/OFF)  | 
03  | 讀取保持寄存器  | 在一個或多個保持寄存器中取得當前的二進制值  | 
04  | 讀取輸入寄存器  | 在一個或多個輸入寄存器中取得當前的二進制值  | 
05  | 強置單線圈  | 強置一個邏輯線圈的通斷狀態(tài)  | 
06  | 預置單寄存器  | 把具體二進值裝入一個保持寄存器  | 
07  | 讀取異常狀態(tài)  | 取得8個內(nèi)部線圈的通斷狀態(tài),這8個線圈的地址由控制器決定,用戶邏輯可以將這些線圈定義,以說明從機狀態(tài),短報文適宜于迅速讀取狀態(tài)  | 
08  | 回送診斷校驗  | 把診斷校驗報文送從機,以對通信處理進行評鑒  | 
09  | 編程(只用于484)  | 使主機模擬編程器作用,修改PC從機邏輯  | 
10  | 控詢(只用于484)  | 可使主機與一臺正在執(zhí)行長程序任務從機通信,探詢該從機是否已完成其操作任務,僅在含有功能碼9的報文發(fā)送后,本功能碼才發(fā)送  | 
11  | 讀取事件計數(shù)  | 可使主機發(fā)出單詢問,并隨即判定操作是否成功,尤其是該命令或其他應答產(chǎn)生通信錯誤時  | 
12  | 讀取通信事件記錄  | 可是主機檢索每臺從機的ModBus事務處理通信事件記錄。如果某項事務處理完成,記錄會給出有關(guān)錯誤  | 
13  | 編程(184/384 484 584)  | 可使主機模擬編程器功能修改PC從機邏輯  | 
14  | 探詢(184/384 484 584)  | 可使主機與正在執(zhí)行任務的從機通信,定期控詢該從機是否已完成其程序操作,僅在含有功能13的報文發(fā)送后,本功能碼才得發(fā)送  | 
15  | 強置多線圈  | 強置一串連續(xù)邏輯線圈的通斷  | 
16  | 預置多寄存器  | 把具體的二進制值裝入一串連續(xù)的保持寄存器  | 
17  | 報告從機標識  | 可使主機判斷編址從機的類型及該從機運行指示燈的狀態(tài)  | 
18  | (884和MICRO 84)  | 可使主機模擬編程功能,修改PC狀態(tài)邏輯  | 
19  | 重置通信鏈路  | 發(fā)生非可修改錯誤后,是從機復位于已知狀態(tài),可重置順序字節(jié)  | 
20  | 讀取通用參數(shù)(584L)  | 顯示擴展存儲器文件中的數(shù)據(jù)信息  | 
21  | 寫入通用參數(shù)(584L)  | 把通用參數(shù)寫入擴展存儲文件,或修改之  | 
22~64  | 保留作擴展功能備用  | 
  | 
65~72  | 保留以備用戶功能所用  | 留作用戶功能的擴展編碼  | 
73~119  | 違規(guī)功能  | 
  | 
120~127  | 保留  | 留作內(nèi)部作用  | 
128~255  | 保留  | 用于異常應答  | 
ModBus網(wǎng)絡只是一個主機,所有通信都由他發(fā)出。網(wǎng)絡可支持247個之多的遠程從屬控制器,但實際所支持的從機數(shù)要由所用通信設備決定。采用這個系統(tǒng),各PC可以和中心主機交換信息而不影響各PC執(zhí)行本身的控制任務。表3--2是ModBus各功能碼對應的數(shù)據(jù)類型。
表3--2 ModBus功能碼與數(shù)據(jù)類型對應表
代碼  | 功能  | 數(shù)據(jù)類型  | 
01  | 讀  | 位  | 
02  | 讀  | 位  | 
03  | 讀  | 整型、字符型、狀態(tài)字、浮點型  | 
04  | 讀  | 整型、狀態(tài)字、浮點型  | 
05  | 寫  | 位  | 
06  | 寫  | 整型、字符型、狀態(tài)字、浮點型  | 
08  | N/A  | 重復“回路反饋”信息  | 
15  | 寫  | 位  | 
16  | 寫  | 整型、字符型、狀態(tài)字、浮點型  | 
17  | 讀  | 字符型  | 
附錄B:不正常響應
不正常響應:
除廣播外,主機向從機設備發(fā)送查詢并希望有一個正常響應,主機查詢中有可能產(chǎn)生4種事件:
¨ 從機接收查詢,通訊錯誤正常處理信息,則返回一個正常響應事件。
¨ 由于通訊出錯,從機不能接收查詢數(shù)據(jù),因而不返回響應。此時,主機依靠處理程序給出查詢超時事件。
¨ 若從機接收查詢,發(fā)現(xiàn)有 (LRC或CRC) 通訊錯誤,并返回響應,此時,依靠主機處理程序給出查詢超時事件。
¨ 從機接收查詢,無通訊錯誤,但(如讀不存在的線圈和寄存器)時,向主機報告錯誤的性質(zhì)。
不正常響應信息有2個與正常響應不相同的區(qū)域:
功能代碼區(qū):正常響應時,從機的響應功能代碼區(qū),帶原查詢的功能代碼。所有功能代碼的MSB為0(其值低于80H)。不正常響應時,從機把功能代碼的MSB置為1,使功能代碼值大于80H,高于正常響應的值。這樣,主機應用程序能識別不正常響應事件,能檢查不正常代碼的數(shù)據(jù)區(qū)。
數(shù)據(jù)區(qū):正常響應中,數(shù)據(jù)區(qū)含有(按查詢要求給出的) 數(shù)據(jù)或統(tǒng)計值,在不正常響應中,數(shù)據(jù)區(qū)為一個不正常代碼,它說明從機產(chǎn)生不正常響應的條件和原因。
例:主機發(fā)出查詢,從機不正常響應。(為十六進制數(shù)據(jù))。
查詢:
Addr  | Fun  | DO start reg hi  | DO start reg lo  | DO #of regs hi  | DO #of regs lo  | CRC16 Hi  | CRC16 Lo  | 
0AH  | 01H  | 04H  | A1H  | 00H  | 01H  | XXH  | XXH  | 
響應(不正常或例外):
Addr  | Fun  | Exception Code  | CRC16 Hi  | CRC16 Lo  | 
0AH  | 81H  | 02H  | XXH  | XXH  | 
圖 3 – 1 . 不正常信息幀格式
上例中,從機設備地址10(0AH),讀線圈狀態(tài)的功能代碼(01),主機請求線圈狀態(tài)的地址為1245(04A1H)。注意:只讀一個線圈,地址為(0001).
若從機中不存在此線圈地址時,即以不正常代碼(02),向主機返回一個不正常響應。說明為不合法地址。
表3--3 ModBus的不正常代碼:
代碼  | 名稱  | 含義  | 
01  | 不合規(guī) 功能代碼  | 從機接收的是一種不能執(zhí)行功能代碼。發(fā)出查詢命令后,該代碼指示無程序功能。  | 
02  | 不合法數(shù)據(jù)地址  | 接收的數(shù)據(jù)地址,是從機不允許的地址。  | 
03  | 不合法數(shù)據(jù)  | 查詢數(shù)據(jù)區(qū)的值是從機不允許的值。  | 
04  | 從機設備故障  | 從機執(zhí)行主機請求的動作時出現(xiàn)不可恢復的錯誤。  | 
05  | 確認  | 從機已接收請求處理數(shù)據(jù),但需要較長的處理時間,為避免主機出現(xiàn)超時錯誤而發(fā)送該確認響應。主機以此再發(fā)送一個“查詢程序完成”未決定從機是否已完成處理。  | 
06  | 從機設備忙碌  | 從機正忙于處理一個長時程序命令,請求主機在從機空閑時發(fā)送信息。  | 
07  | 否定  | 從機不能執(zhí)行查詢要求的程序功能時,該代碼使用十進制13或14代碼,向主機返回一個“不成功的編程請求”信息。主機應請求診斷從機的錯誤信息。  | 
08  | 內(nèi)存奇偶校驗錯誤  | 從機讀擴展內(nèi)存中的數(shù)據(jù)時,發(fā)現(xiàn)有奇偶校驗錯誤,主機按從機的要求重新發(fā)送數(shù)據(jù)請求。  | 
///////////////////////////////////////////////////////////////
功能碼  | 描述  | 是否支持廣播  | 起始地址  | 備注  | 
01  | 讀線圈狀態(tài)DO  | 不支持  | 0000H  | 讀離散量輸出口(0X類型)狀態(tài)  | 
02  | 讀輸入位狀態(tài)DI  | 不支持  | 0000H  | 讀離散量輸入信號(0X類型)狀態(tài)  | 
03  | 讀保持寄存器  | 不支持  | 0000H  | 讀保持寄存器數(shù)據(jù)  | 
04  | 讀輸入寄存器  | 不支持  | 0000H  | 讀輸入寄存器(3X類型)數(shù)據(jù)  | 
05  | 強制單個線圈DO  | 支持  | 0000H  | 強制單個線圈(0X類型)狀態(tài)  | 
06  | 預置單個保持寄存器  | 支持  | 0000H  | 置保持寄存器(4X類型)中  | 
07  | 讀不正常狀態(tài)  | 不支持  | 
  | 
  | 
08  | 診斷(見第3章)  | 不支持  | 0000H  | 
  | 
09  | 程序 484  | 不  | 0000H  | 沒查到  | 
10  | 查詢 484  | 不  | 0000H  | 沒查到  | 
11  | 通訊事件控制  | 不支持  | 
  | 
  | 
12  | 通訊事件記錄  | 不支持  | 
  | 
  | 
13  | 程序控制器  | 不  | 0000H  | 沒查到  | 
14  | 查詢控制器  | 不  | 0000H  | 沒查到  | 
15  | 強制多個線圈DO  | 支持  | 0000H  | 強制各線圈 (0X 類型)狀態(tài)  | 
16  | 預置多個保持寄存器  | 支持  | 0000H  | 置保持寄存器(4X類型)中  | 
17  | 報告從機 ID  | 不支持  | 
  | 
  | 
18  | 程序 884/M84  | 不  | 0000H  | 沒查到  | 
19  | 通訊鏈路復位  | 不  | 0000H  | 沒查到  | 
20  | 讀通用參考值  | 不支持  | 0000H  | 擴展寄存器(6X類型)  | 
21  | 寫通用參考值  | 不支持  | 0000H  | 擴展寄存器(6X類型)  | 
22  | 掩碼寫入4X類型寄存器  | 不支持  | 0000H  | 保持寄存器(4X類型)  | 
23  | 讀/寫4X類型寄存器  | 不支持  | 0000H  | 保持寄存器(4X類型)  | 
24  | 讀FIFO查詢數(shù)據(jù)  | 不支持  | 0000H  | 保持寄存器(4X類型)  | 
 您好, 歡迎來到化工儀器網(wǎng)
					
