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