鄭州市信息技術學校電子信息技術部 孫嫻
河南工程學院電氣信息工程系 王剛
基于CAN總線的通信模塊組網設計
鄭州市信息技術學校電子信息技術部 孫嫻
河南工程學院電氣信息工程系 王剛

控制器局域網CAN(ControllerAreaNetwork)是一種標準化的現場總線,其結構支持分布式數據通信和實時控制的串行通信網絡。目前,CAN協議已被制定為ISO國際標準(ISO11898),它分為物理層、數據鏈路層和應用層,其中物理層和數據鏈路層協議已集成在產品的芯片中,可以依靠硬件實現自動傳送數據,減少了軟件程序編寫的工作量。因此,CAN總線尤其適用于工業控制自動化領域,特別是在對低層監測和控制要求可靠性高、實時性強的惡劣條件下的工業控制現場的應用。
基于CAN總線構建的通信網絡,是嚴格遵守開放系統互聯的規范實現層次結構設計的。作為工業現場測控底層網絡,其間的數據傳輸量相對較少,對信息傳輸的實時性要求較高,網絡互聯結構也較簡單,因此,CAN總線網絡在低層僅僅采納了OSI通信模型的最低2層,即物理層和數據鏈路層,而在高層只采用了應用層。CAN總線的數據鏈路層又可分為邏輯鏈路控制(LLC)子層和媒體訪問控制(MAC)子層。物理層定義信號怎樣傳輸,并完成網絡設備通信間的電氣連接,實現驅動通信總線和傳輸數據流特性。MAC子層是實現CAN協議的核心層,它的功能主要是制定通信數據的傳送規則,即控制幀結構、執行仲裁、錯誤檢測、出錯標定和故障界定。LLC子層的功能主要是進行報文濾波、總線超載通知和總線恢復管理。物理層和數據鏈路層的功能可由CAN接口控制器來完成,而應用層的功能由微處理器或者工控機完成的。CAN網絡通信模型如圖1所示。

圖1 CAN網絡通信模型
1.CAN網絡拓撲結構。CAN總線是串行式總線,因此由其架構的分布式工業測控網絡是按照串行總線式網絡實現的。CAN網絡的物理電氣線路采用屏蔽雙絞線。CAN總線是由插在工控機上PCI插槽中的CAN卡驅動的,工業現場測控設備依靠CAN模塊掛接在網絡總線上。如果工控設備之間的距離比較遠,或者掛接在網絡上的通信節點比較多,需要在網絡中接入中繼器,以保證通信的質量。總線式網絡拓撲結構需要在總線的終端接入總線終結器,以防止通信信號回波的反射干擾。這在物理上一般用1個與總線介質的特性阻抗相匹配的電阻來實現。在工程應用中,一般要注意通信節點分支長度、相鄰節點的距離(S)和無中繼時總線驅動的長度(L)等指標,依照CAN總線的國際標準建議,在通信速率為1Mbps時,S到L的距離應小于40m,當通信速率在5Kbps以下時,L的允許值可到10km。組網后的上位機要用VB或VC等開發工具編寫相應的應用層程序。CAN總線網絡架構如圖2所示。

2.CAN網絡的通信過程。CAN總線采用時分復用的原則,每個CAN通信節點在自己占用總線的時段內建立其與通信目標節點的物理鏈路來傳輸數據,直至數據發送完畢為止。由于CAN總線是多主機通信模式,在CAN總線上的所有通信節點都可以隨時地跟總線的其他節點發起通信,所以在多節點同時發出通信請求時,CAN總線有自己的通信仲裁機制,CAN網絡節點通信過程如圖3所示。

主動通信節點首先在偵聽到總線空閑時,發送自己占用總線的請求,經過總線仲裁后,如果不具備通信的資格,那么就進行通信等待,并繼續偵聽,當具有通信資格時,占有總線并傳輸數據。若具有占有總線的資格,則占有并驅動總線,并發送數據,其他的節點處于接收數據狀態,經過報文濾波,相應的通信目標節點就會接收數據,其他的節點就放棄數據。在通信目標節點收到數據時進行判別,若數據錯誤,向主通信節點發送錯誤信息,進行數據錯誤處理。若數據正確,在數據傳輸完畢并釋放總線資源,主通信節點進入偵聽階段。
1.通信模塊硬件電路設計。CAN總線通信模塊由微處理器80C51、CAN通信控制器SJA1000、高速光電耦合器6N137、CAN總線收發器82C250以及監控接口電路等部分組成。CAN總線通信模塊硬件電路如圖4所示。

由于SJA1000只需要8位數據/地址線,本文,筆者采用80C51作為CAN總線通信節點模塊的微處理器,負責CAN通信控制器SJA1000的初始化和通信數據的處理。80C51和SJA1000分別采用獨立的外部時鐘。SJA1000采用線選方式實現選通,當80C51的P26為“0”時選通該控制器實現對SJA1000的訪問。為了對其他通信模塊傳來的數據做出實時處理,通信模塊工作在中斷方式下,當通信控制器接收到總線上傳來的數據時,SJA1000的INT引腳就輸出1個電平跳變,SIA1000的INT引腳和80C51的中斷0引腳相連,80C51初始化時設置為下降沿中斷,從而引發微處理器80C51產生中斷,通過中斷服務子程序接收1幀信息并進行分析處理,以及進行CAN總線錯誤中斷類型的判斷和誤碼糾正。
2.通信模塊軟件設計。根據CAN總線的網絡需要,按照程序模塊化設計的思想,CAN通信模塊程序主要分為硬件資源的配置(Resoure_align.h)、CAN總線控制器、SJA1000初始化(SJA_Init)、CAN總線數據接收(Canbus_datarecv)、CAN總線數據發送(Canbus_datasedn)等例程。資源分配全部定義在Re?soure_align.h這個頭文件中,在其他例程中都不存在具體引腳和寄存器的操作,這樣方便程序的移植。另外,由于總線數據接收處于被動地位,為了實時處理的需要,使用了微控器的0號中斷。CAN總線數據接收(Canbus_datarecv)例程是在中斷處理子程序中完成的,而CAN總線數據發送例程是主動通信的。
綜上,CAN總線作為一種比較實用的工業現場控制總線,具有高速率、長距離、高可靠性等優點,使得它成為目前工業控制領域最常用的現場總線。目前,CAN總線在汽車運行參數測控儀表組網監控、機器人多運動部件組網監控、集散過程監控、醫療器械、機械制造、傳感器等諸多領域都取得了成功的應用。與RS-485串行通信網相比,它具有突出的可靠性、實時性和抗干擾性的特點,其組網方式也非常靈活,因而非常適合于構建復雜現場的實時測控網絡。但在工程運用時,應考慮工程現場的集體情況,進行一些抗干擾措施,如恰當的接地、屏蔽等,另外,應用層軟件的設計應根據具體工程監控的需要選擇合適的開發環境進行編寫。