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