引言
DeviceNet是一個開放的網絡標準。規范和協議都是開放的-供應商將設備連接到系統時,無需為硬件、軟件或授權付費;任何人都能以名義上的復制成本(目前為250美元+郵費)從開放式DeviceNet供應商協會(ODVA)獲得Device- Net規范。
本設計針對的DeveiceNet從設備特性如下:屬于DeviceNet group 2 only從設備;采用Predefine的通信連接;可通過硬件開關設置125kbps、250kbps、500kbps波特率;可通過硬件開關設置0~63 MAC ID。在軟件、硬件設計前應首先進行從設備(泵/閥)I/O需求分析(即 profile文擋設計)。
1 通信適配器硬件系統設計
1.1 功能簡介
DeviceNet是基于CAN 總線的一種總線協議標準。因此,DeviceNet從設備適配器硬件首先應實現CAN總線的基本功能,主要包括:報文收發、訪問控制及其它物理層的諸多功能。此外,為實現DeviceNet協議,硬件應具有足夠大的程序存儲空間,并具有足夠快的運行速度,以保證協議程序的順利執行。
1.2 硬件原理
DeviceNet節點硬件主要由以下幾部分組成:電源、單片機系統、看門狗及掉電保護電路、CAN控制器SJA1000、CAN收發器82C251、撥碼開關及狀態LED顯示、雙口RAM IDT7005、AnyBus接口??傮w設計框圖略(詳見《單片機與嵌入式系統應用》2002.8)。
以下是主要部分功能介紹。
(1)單片機
DeviceNet適配器選用Winbond公司的高性能8位單片機W78E58。W78E58功能、引腳與80C52完全兼容,并提供256B 的內部RAM以及32KB的Flash EEPROM,從而使系統不需擴展外部程序存儲器便可滿足 DeviceNet協議程序的容量要求。W78E58最高可在40MHz的主頻下運行,處理速度完全滿足DeviceNet節點通信的實時性要求。為減少芯片的數量及降低硬件成本,本系統只擴展1片8KB的雙口RAM,其前面7KB用于外部數據存儲,最后1KB用于提供與其它應用電路的通信接口。
(2)CAN控制器SJA1000
DeviceNet總線報文的收發以及媒體訪問控制等都是依據CAN總線協議的,而這些協議都要通過CAN控制器加以實現。DeviceNet 通信節點選用目前比較流行的Philips CAN控制器SJA1000。由于 DeviceNet總線協議采用11位的標識符,因此應使SJA1000工作在Basic CAN模式。
(3)CAN收發器82C251
CAN收發器(transceiver)82C251的主要作用是收發CAN總線上的信號:一方面將總線信號轉換為CAN控制器所需的信號;另一方面,將CAN控制器的輸出信號轉化為CAN總線信號。
(4)雙口RAM IDT7005
DeviceNet適配器通過1個具有中斷功能的雙口RAM IDT7005提供與其它應用電路的通信接口。IDT7005具有2套完全獨立的數據線、地址 線、讀寫控制線,允許2個CPU對雙口RAM的同一個單元在不同的時間進行讀寫;具有2套完全獨立的中斷邏輯,實現2個CPU間的握手控制信 號。IDT7005的最高2個字節1FFFEH和1FFFH和分別兼做2個端口的中斷邏輯單元。
(5)ANyBus接口
作為一種通用的現場總線通信節點,AnyBus提供了與其它應用電路之間進行數據交換的接口標準,并對接口的引腳進行了嚴格的定義。
2 DeviceNet總線通信協議
DeviceNet協議規范是描述DeviceNet設備之間實現連接和交換數據的一套協議。在DeviceNet規范中定義了Device Net通信協議,詳細介紹了連接、信息協議和與通信相關的對象。
(1)DeviceNet是基于連接的網絡
DeviceNet中的連接提供在多種應用之間交換信息的路徑。當建立1個連接時,與連接相關信息的傳送就會分配1個標識符,稱為連接標識符CID(Connection Identifier)。如果某個連接需要雙向數據交換,則應該分配2個不同的連接標識符。
DeviceNet通信協議是基于連接概念的協議。一旦建立了連接,就可以在網絡設備之間傳送I/O數據。此時,Device Net I/O報文的所有協議都包含在11位的CAN標識符中,其它部分都是數據。
11位的CAN標識符用來定義連接ID。DeviceNet將11位的CAN標識符分為4組,前3組的連接ID包括了6位的媒體訪問控制標識符(MAC ID)以 及信息標識符(Message ID)。信息組的定義圖略(詳見《單片機與嵌入式系統應用》2002. 8)。組4信息用于離線通信。
通過設計,DeviceNet系統中的節點能夠對自己的標識符進行管理。這些標識符交錯分布在整個范圍內。所有的節點都有一個完整的它們能獲得的報文優先權范圍,而與它們的MAC ID無關。重復MAC ID算法保證了 CAN標識符的唯一性,而不需要網絡集中工具或記錄。
(2)DeviceNet的報文傳送
DeviceNet使用更為有效的生產者/消費者模式,取代了傳統的源/目的的傳輸方式。該模式要求對報文打包,使它具有數據標識位域。標識符還提供解決多級優先權(仲裁中使用)的手段,以便更高效地傳送I/O數據,并供多個消費者使用。
DeviceNet定義了2種不同類型的報文,稱作 I/O報文和顯示報文。I/O報文適用于實時性要求較高和面向控制的數據。I/O報文數據幀中的 8位數據場不包含任何與協議有關的位,只有當I/O報文為大報文經過分割后形成的I/O報文片段時,數據位域中有一位由報文分割協議使用。
連接標識符提供了I/O報文的相關信息,在I/O報文利用連接標識符發送之前,報文的發送和接收設備都必須先進行設定。設定的內容包括源 和目的對象的屬性,以及數據生產者和消費者的地址。顯示報文適用于2個設備間多用途的點對點報文傳遞,是典型的請求-響應通信方式, 常用于節點的配置、問題診斷等。顯示報文通常使用優先極低的連接標識符,并且該報文的相關信息包含在顯示報文數據幀的數據位域中, 包括要執行的服務和相關對象的屬性及地址。
(3)預定義的主/從連接組
DeviceNet提供了一個功能很強的應用層協議,允許動態配置設備間的連接。但考慮到有些設備根本不需要也沒有資源去使用這一強大功能,DeviceNet指定了一套稱為預定義主/從連接組的連接標識符,用來簡化主/從結構中I/O和配置型數據的傳送。
許多傳感器和執行器要實現的功能在設計時就已經預先決定了(如感受壓力、啟動馬達等),因此這些設備將要生產和/或消費的數據的類型和數量在上電前就已經知道了。這些設備通常提供輸入數據或請求輸出數據和配置數據。預定義主/從連接組可以滿足設備的這些要求,它提供的連接對象的全部配置在設備上電時就完成了。在啟動數據流時,主機設備唯一必須執行的一個步驟就是要廣播對從機內該預定義連接組的所有權。
(4)DeviceNet對象模型與設備描述
a.對象模型。為管理和實現DeviceNet產品組件的屬性(數據)、服務(方法或步驟)和行為提供了一個模板。模型為每個屬性提供了由4個數字組成的尋址方案,分別是節點地址(MAC ID)、對象類標識符、實例編號和屬性編號。這4級地址與顯示報文連接相結合,將數據從 DeviceNet網絡上的一點傳送到另一點。表1列出4個地址組件的范圍:
表1 DeviceNet地址組建的范圍
地址 |
最低 |
最高 |
節點 |
0 |
63 |
類 |
1 |
65535 |
實例 |
0 |
65535 |
屬性 |
1 |
255 |
通用DeviceNet設備的對象模型圖略(詳見《單片機與嵌入式系統應用》2002.8);表2是DeviceNet產品中典型的對象類。
表2 DeviceNet產品中典型的對象類
對象類編號 |
對象類名稱 | 參考DeviceNet規范 |
1 |
Identity | 卷II,版本1.2,6-3 |
2 |
Message Router | 卷II,版本1.2,6-17 |
3 |
DeviceNet | 卷I,版本1.3,5-50 |
4 |
Assembly | 卷II,版本1.2,6-25 |
5 |
Connection | 卷II,版本1.3,5-6 |
6 |
Parameter | 卷II,版本1.2,6-95 |
b.設備描述 (Device Profiles)。DeviceNet規范不僅僅是一個物理連接協議規范。它通過定義標準的設備模型促進不同廠商設備之間的互操作性。屬于同一設備模型的所有設備都必須支持共同的標識和通信狀態數據。設備描述是針對各種設備而定義的。設備描述中包括設備各種特定的數據。符合設備類型描述的多個供貨商提供的簡單設備(例如:按鈕、馬達啟動器、光電池、氣動閥執行器)在邏輯上是可互換 的。
DeviceNet規范定義了一個電子數據文件(EDS)。EDS是一個簡單的文件格式,供貨商可以將產品的特殊信息提供給其他供貨商。這樣可以具有友好的用戶配置工具,能很容易地更新,無需經常修正配置軟件工具。
3.通信適配器軟件系統設計
下面主要介紹通信協議的設計。軟件的實現是以DeviceNet協議規范的2.0版本為指導的,不同的應用有不同的具體實現。本文只給出設計的原理和指導思想及原則。
3.1 DeviceNet通信設備的上電狀態流圖
每個設備上電以前都有一個例行的狀態流轉過程。該過程描述了設備能夠在DeviceNet上通信之前必須完成的以下工作(例如重復MAC ID檢測等),以及對設備通信產生影響的網絡事件。
DeviceNet設備上電后的狀態流圖略(詳見《單片機與嵌入式系統應用》2002.8),其中有4個狀態:發送重復MAC ID檢測報文狀態、等待重復MAC ID檢測報文狀態、在線狀態、通信出錯狀態。
3.2 CAN芯片的初始化
在建立CAN總線的通信之前要預先有一些初始化過程。一般,獨立式CAN芯片SJA1000在上電后或者上電后進行軟件功能重置時要初始化一下工作寄存器。當系統上電后,處理器首先運行自己的特殊初始化過程,然后再進入SJA1000的連接建立過程(SJA1000的17引腳獲得1個Reset低電平脈沖,并進入Reset模式)。在初始化SJA1000的寄存器之前,主微處理器應該檢測Reset的mode/request標志。如果SJA1000已經是Reset模式,因為所有的寄存器只能在Reset模式下進行寫操作,所有的寄存器都將獲得相應的配置信息。
在完成所有的初始化工作后,SJA1000就進入工作模式,并且使CAN控制器的中斷功能有效。用C51編寫的SJA1000初始化及一個模擬發送、接收過程的程序略。
3.3 報文收發程序和分段服務
這里所講的報文收發協議對不同的通信協議有不同的定義。另外,CAN的數據長度不能超過8個字節,如何支持大于8個字節的報文要涉及到分段服務。分段協議信息由1個字節組成,其中高2位表示分段的類型,低6位作為分段的計數器,用來標識每個數據包。其計算方式是:fragmentCount=(fragmentcount+1)mod64。表3是具體的分段類型。
表3 分段協議信息
分段類型值 |
含 義 |
0 |
分段后的第1個報文,分段計數的值為0或者3FF |
1 |
分段后的中間報文,表示后面還有其它的報文 |
2 |
分段后的最后一個報文 |
3 |
分段報文的應答 |
因此在程序的設計中,應當加入對分段服務協議的支持。
發送報文的處理與接收的過程是一個逆向過程。需要注意的是編寫程序的時候要嚴格按照 DeviceNet協議規范的定義,否則將產生不可預測的錯誤,為將來的協議一致性測試和低層調試都帶來許多麻煩。
3.4 DeviceNet通信適配器主程序的設計
軟件由頭文件、初始化程序、功能子程序和主程序組成。
軟件的組成結構提供了硬件和軟件升級的方便。軟件中將對與主處理器、CAN 控制器等硬件接口的部分進行比較獨立的設計,而主程序和功能子程序主要集中在協議的完成。這對將來的硬件改型和可能的協議修改都提供了較大的方便。
軟件用C51語言編寫,通過8051硬件仿真器進行調試。
軟件結構圖略(詳見《單片機與嵌入式系統應用》2002.8)。
在實現所有的功能模塊以后,最重要的是如何構造一個有機的主程序模塊,將這些零散的模塊組織起來,進行系統的初始化工作。另外,還要設計一個優化的循環體并周期性地執行以對DeviceNet網絡上的報文產生動作。
結束語
本通信適配器已成功用于工程項目中,由于采用現場總線技術,取得了顯著的經濟效益。