DeviceNet總線應(yīng)用層協(xié)議的實現(xiàn)
1 DeviceNet簡介
DeviceNet(設(shè)備網(wǎng))是20世紀90年代中期發(fā)展起來的一種基于CAN技術(shù)的開放型,低成本、高性能的通信網(wǎng)絡(luò),目前已成為底層現(xiàn)場總線標準之一。在DeviceNet現(xiàn)場總線體系中屬于設(shè)備級的總線協(xié)議,在協(xié)議的分層結(jié)構(gòu)中,它只包括ISO開放系統(tǒng)七層模型結(jié)構(gòu)中三層,即物理層、數(shù)據(jù)鏈路層和應(yīng)用層。
DeviceNet是基于CAN總線實現(xiàn)的現(xiàn)場總線協(xié)議,因此它的許多特性完全沿襲于CAN,是一種無沖突的載波偵聽總線協(xié)議。這樣的協(xié)議在載波偵聽方面與以太網(wǎng)是一樣的,它的特別之處是:當總線上的多個節(jié)點在偵聽到總線空閑時,同時向總線發(fā)送數(shù)據(jù)。
在CAN總線中,被傳送的每一幀數(shù)據(jù)的優(yōu)先級是由位于幀頭的標識來決定,因此它們首先發(fā)送的是各自的標識數(shù)據(jù)。此時,只要有一個節(jié)點發(fā)送了位數(shù)據(jù)“0”,那么總線上的所有節(jié)點監(jiān)聽到的總線狀態(tài)就是“0”;相反,只有當同時發(fā)送數(shù)據(jù)的節(jié)點所發(fā)送的位數(shù)據(jù)為“1”時,總線的狀態(tài)才為“1”。因此,當某個節(jié)點偵聽到網(wǎng)絡(luò)空閑,開始發(fā)送標識數(shù)據(jù)以后,如果此節(jié)點在發(fā)送標識數(shù)據(jù)段的過程中,偵聽到的總線狀態(tài)與它自身所發(fā)送的數(shù)據(jù)位不一致,則此節(jié)點會認為有其他節(jié)點也在發(fā)送數(shù)據(jù),總線處于競爭狀態(tài),而且其他節(jié)點的發(fā)送數(shù)據(jù)具有更高的優(yōu)先級,最終此節(jié)點停止發(fā)送數(shù)據(jù),節(jié)點返回至總線監(jiān)聽狀態(tài)。
在目前的CAN2.0版本中,標識數(shù)據(jù)可以是11位或29位,DeviceNet只支持11位的標識,能夠產(chǎn)生2032種不同的標識。在總線中,為了保證在并發(fā)情況下數(shù)據(jù)傳輸?shù)囊恢滦?,不同的?jié)點所發(fā)送數(shù)據(jù)的標識是不同的,這樣才不會發(fā)生同時有多個節(jié)點傳輸各自的整個數(shù)據(jù)幀而產(chǎn)生沖突的情況。
DeviceNet協(xié)議制定規(guī)范來確定每個DeviceNet節(jié)點數(shù)據(jù)幀標識的分配,其中對于應(yīng)用極為普遍的M/S網(wǎng)絡(luò),DeviceNet協(xié)議制定了一套預先定義好的CAN數(shù)據(jù)幀的標識分配方案。
2 DeviceNet應(yīng)用層協(xié)議
DeviceNet的應(yīng)用層協(xié)議是用面向?qū)ο蟮姆椒▉磉M行描述。它對協(xié)議本身所應(yīng)完成功能進行了抽象和定義,把協(xié)議功能劃分為多個模塊,每個模塊抽象出它所具有的屬性、完成的任務(wù)和與其他模塊的接口,然后把這個模塊對象化。DeviceNet應(yīng)用層協(xié)議的對象模型如圖1所示:整個協(xié)議的結(jié)構(gòu)是由對象為基本組成單元;對象之間通過數(shù)據(jù)交換相互聯(lián)系。圖中用對象之間的連線來表示這些聯(lián)系,下面對這些對象的功能作簡要介紹。非連接通訊對象是用于處理以本設(shè)備為目的地址的非連接數(shù)據(jù)包,它是這個設(shè)備與外部設(shè)備建立連接通訊的起始點。連接通訊對象的功能與非連接通訊對象的功能相對應(yīng),是完成對連接數(shù)據(jù)包的處理。路由對象對從上述2個通訊對象傳來的數(shù)據(jù)包,根據(jù)數(shù)據(jù)包所指示的目的對象地址或此數(shù)據(jù)包所完成的功能,把收到的數(shù)據(jù)分發(fā)到相應(yīng)的對象。數(shù)據(jù)匯集對象把本設(shè)備所需傳輸?shù)臄?shù)據(jù)集合在一起,組成本設(shè)備預先定義的數(shù)據(jù)格式以便傳輸;而對于收到的數(shù)據(jù),按照一定的格式,抽取相應(yīng)的數(shù)據(jù)發(fā)送給指定的對象。參數(shù)對象、設(shè)備身份對象和DeviceNet對象是對設(shè)備中的諸多參數(shù)的歸類、封裝,完成的功能比較簡單。應(yīng)用對象是針對具體設(shè)備完成復雜功能的對象,例如在DeviceNet的協(xié)議規(guī)范中,除了定義了基本的模擬量和數(shù)字量應(yīng)用對象外,對于軟啟動器有軟啟動應(yīng)用對象,對于位置控制器有位置控制器應(yīng)用對象等,而且像這樣定義的特定應(yīng)用設(shè)備的對象還會隨著DeviceNet設(shè)備的發(fā)展而不斷增多。
3 DeviceNet應(yīng)用層協(xié)議實現(xiàn)
在實際的DeviceNet產(chǎn)品應(yīng)用中,目前都是M/S結(jié)構(gòu)的協(xié)議實現(xiàn),而且應(yīng)用中最為普遍的是運用對CAN的標識進行預先定義分配的方式來實現(xiàn)DeviceNet網(wǎng)絡(luò)。以下介紹DeviceNet協(xié)議的實現(xiàn)。Redstation是DeviceNet的從設(shè)備,是一種智能開關(guān)設(shè)備,功能較為簡單,整個設(shè)備的應(yīng)用層對象由4個數(shù)字量輸入和2個數(shù)字量輸出組成,通過預定義CAN標識來完成數(shù)據(jù)幀的傳送。
3.1 硬件部分
此設(shè)備的硬件部分主要由MCS51單片機8031,CAN控制器SJA1000,8 kb動態(tài)存儲器6264,64kb EPROM27512,CAN總線驅(qū)動器82c51以及相應(yīng)的外圍電路組成,其原理圖如圖2所示。實際電路中還必須有相應(yīng)的鎖存器、電源保護電路、看門狗電路和設(shè)置節(jié)點地址及波特率的撥碼開關(guān)等電路單元。
3.2 應(yīng)用層協(xié)議部分
DeviceNet協(xié)議中,應(yīng)用層協(xié)議的實現(xiàn)是通過編制程序來完成。此設(shè)備是基于單片機系統(tǒng)的,在實現(xiàn)過程中采用單片機的C語言。
DeviceNet應(yīng)用層協(xié)議是通過面向?qū)ο蟮姆绞郊右悦枋龅模渲袑τ趨f(xié)議中的各個對象都詳細定義了它們的屬性、數(shù)據(jù)類型等基本信息;而且通過事件觸發(fā)方式來具體定義了各個對象的行為:因此在實現(xiàn)過程中,完全可以按照面向?qū)ο蟮木幊谭椒▉砭幹茀f(xié)議原代碼。
在面向?qū)ο缶幊讨?,除了定義對象的屬性及行為以外,還要構(gòu)造事件驅(qū)動的機制。這里指的事件驅(qū)動的機制包括事件的產(chǎn)生,事件隊列的實現(xiàn),事件處理優(yōu)先級的規(guī)定,以及事件的處理等。在一般的面向?qū)ο蟮母呒壘幊讨校饕峭瓿墒录奶幚?,其它的與事件相關(guān)的事情都是由操作系統(tǒng)來完成,對編程者來說是透明的,而在此相關(guān)事情則必須編程實現(xiàn)。面向?qū)ο蟮某绦驅(qū)崿F(xiàn)框架使各個對象之間的聯(lián)系體現(xiàn)的十分明確,對象之間的關(guān)聯(lián)都是與事件的觸發(fā)緊密相關(guān),整個程序結(jié)構(gòu)非常清晰。
協(xié)議實現(xiàn)的軟件主體結(jié)構(gòu),整個軟件的編制工作都是圍繞著“事件”而展開的。“事件”是由外部中斷或程序內(nèi)部產(chǎn)生,在實際程序中用事件變量來實現(xiàn)事件隊列,它是一個無符號的整型變量,每個特定位代表某個具體的事件。
在程序的開始是對DeviceNet協(xié)議中的對象的定義,C51編譯器不支持“類”,因此用“結(jié)構(gòu)”類型來定義對象。在完成對CAN控制器和單片機芯片的初始化工作以后,主程序進入事件處理的無限循環(huán)。為了能夠及時響應(yīng)高優(yōu)先級事件,在每完成一次事件的處理以后,都要執(zhí)“e=global_event”語句,刷新事件中間變量e。事件的優(yōu)先級在定義事件的時候就已經(jīng)確定了,低數(shù)據(jù)位事件具有高的優(yōu)先級,如第一個數(shù)據(jù)位表示IO輪訊請求事件,它就具有最高的優(yōu)先級,其他事件的優(yōu)先級隨著在global_event中所被代表的數(shù)據(jù)位的上升而降低。高優(yōu)先級的事件的響應(yīng)較低優(yōu)先級的事件為先,程序中“(eIO_POLL_REQUEST)!(e(IO_POLL_REQUEST-1))”語句是判定待執(zhí)行的事件是否是事件隊列中具有最高優(yōu)先級的事件。在進入事件處理程序部分以后,首先清除事件隊列中的此事件,以表明此事件已得到響應(yīng),然后再進行相應(yīng)的程序執(zhí)行。
4 結(jié)束語
DeviceNet的面向?qū)ο蟮膮f(xié)議描述能夠清晰地闡明協(xié)議各模塊之間的數(shù)據(jù)處理關(guān)系,此特點在實現(xiàn)中充分地體現(xiàn)出來;而且對象化的程序?qū)崿F(xiàn)使得程序代碼可以很方便的重復使用,在開發(fā)不同的設(shè)備時,原先的設(shè)備原代碼大部分可以得到再利用,這樣可以縮短產(chǎn)品開發(fā)的時間,同時也利于在實際應(yīng)用中的推廣。
激光器相關(guān)文章:激光器原理
評論