現(xiàn)場(chǎng)總線的開關(guān)量I/O模塊的設(shè)計(jì):MODBUS 現(xiàn)場(chǎng)總線技術(shù)
2.4 MODBUS應(yīng)用層協(xié)議
2.4.1 MODBUS功能碼
MODBUS功能碼是MODBUS請(qǐng)求/應(yīng)答PDU(Protocol Description Unit)的元素。PDU中用一個(gè)字節(jié)編碼MODBUS功能碼域,有效的碼字范圍是十進(jìn)制1~255,其中128~255為異常相應(yīng)保留。MODBUS定義了三類功能碼:
(1)公共功能碼:由Modbus.org確認(rèn)的,被確切定義并保證唯一的功能碼。此類功能碼在MBIETFRFC中歸檔,可進(jìn)行一致性測(cè)試。
(2)用戶定義的功能碼:十進(jìn)制區(qū)間65~72和100~110為用戶可自定義的功能碼。在此區(qū)間內(nèi),用戶無需Modbus組織的任何批準(zhǔn)就可以選擇和實(shí)現(xiàn)一個(gè)功能碼,但不能保證被選功能碼的使用是唯一的。用戶可啟動(dòng)RFC將改變引入公共分類中,并且指配一個(gè)新的功能碼。
(3 )保留功能碼:某些公司在傳統(tǒng)產(chǎn)品上使用的功能碼,不作為公共使用。已定義的Modbus公共功能碼按其功能可分為數(shù)據(jù)訪問類和異常響應(yīng)及診斷類兩部分。數(shù)據(jù)訪問類功能碼實(shí)現(xiàn)對(duì)輸入離散量、線圈的位訪問,對(duì)寄存器、FIFO隊(duì)列的16位訪問以及對(duì)文件記錄的讀寫。診斷類功能碼提供了讀異常狀態(tài)、設(shè)備標(biāo)識(shí)等功能。表2.5給出了Modbus公共功能碼的定義。
2.4.2 MODBUS異常響應(yīng)
當(dāng)客戶機(jī)設(shè)備向服務(wù)器設(shè)備發(fā)送請(qǐng)求時(shí),主站的詢問可能導(dǎo)致下列四種事件:
(1)服務(wù)器設(shè)備接收到無通信錯(cuò)誤的請(qǐng)求,并且可以正常地處理詢問,那么服務(wù)器設(shè)備將返回一個(gè)正常的響應(yīng)。
(2)由于通訊錯(cuò)誤,服務(wù)器沒有接收到請(qǐng)求,那么不能返回響應(yīng)??蛻魴C(jī)程序?qū)⒁曋疄槌瑫r(shí)。
(3)服務(wù)器接收到請(qǐng)求,但是檢測(cè)到一個(gè)通信錯(cuò)誤(奇偶檢驗(yàn)、LRC、CRC等),那么不能返回響應(yīng)??蛻魴C(jī)程序?qū)⒁曋疄槌瑫r(shí)。
(4)服務(wù)器接收到無通信錯(cuò)誤的請(qǐng)求,但不能處理這個(gè)請(qǐng)求(例如,請(qǐng)求讀一個(gè)不存在的寄存器),服務(wù)器將返回一個(gè)異常響應(yīng),通知客戶機(jī)錯(cuò)誤的實(shí)際情況。
異常響應(yīng)報(bào)文時(shí)通過功能碼域和數(shù)據(jù)域區(qū)別于正常響應(yīng)。對(duì)于功能碼域,正常響應(yīng)的服務(wù)器復(fù)制原始請(qǐng)求的功能碼,即所有功能碼的MSB都為0;異常響應(yīng)的服務(wù)器設(shè)置功能碼的MSB為1,即使得異常響應(yīng)中的功能碼值比正常響應(yīng)中的功能碼值高80H.對(duì)于數(shù)據(jù)域,正常響應(yīng)的服務(wù)器將返回請(qǐng)求中要求的信息;異常響應(yīng)的服務(wù)器返回異常碼。客戶機(jī)通過響應(yīng)報(bào)文中功能碼的MSB識(shí)別異常響應(yīng),并能夠檢測(cè)數(shù)據(jù)域中的異常碼。表2 .6給出了Modbus異常碼及其含義。
評(píng)論