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