鄭州市信息技術學校電子信息技術部 孫嫻
河南工程學院電氣信息工程系 王剛
基于CAN總線的通信模塊組網設計
鄭州市信息技術學校電子信息技術部 孫嫻
河南工程學院電氣信息工程系 王剛
控制器局域網CAN(ControllerAreaNetwork)是一種標準化的現(xiàn)場總線,其結構支持分布式數(shù)據通信和實時控制的串行通信網絡。目前,CAN協(xié)議已被制定為ISO國際標準(ISO11898),它分為物理層、數(shù)據鏈路層和應用層,其中物理層和數(shù)據鏈路層協(xié)議已集成在產品的芯片中,可以依靠硬件實現(xiàn)自動傳送數(shù)據,減少了軟件程序編寫的工作量。因此,CAN總線尤其適用于工業(yè)控制自動化領域,特別是在對低層監(jiān)測和控制要求可靠性高、實時性強的惡劣條件下的工業(yè)控制現(xiàn)場的應用。
基于CAN總線構建的通信網絡,是嚴格遵守開放系統(tǒng)互聯(lián)的規(guī)范實現(xiàn)層次結構設計的。作為工業(yè)現(xiàn)場測控底層網絡,其間的數(shù)據傳輸量相對較少,對信息傳輸?shù)膶崟r性要求較高,網絡互聯(lián)結構也較簡單,因此,CAN總線網絡在低層僅僅采納了OSI通信模型的最低2層,即物理層和數(shù)據鏈路層,而在高層只采用了應用層。CAN總線的數(shù)據鏈路層又可分為邏輯鏈路控制(LLC)子層和媒體訪問控制(MAC)子層。物理層定義信號怎樣傳輸,并完成網絡設備通信間的電氣連接,實現(xiàn)驅動通信總線和傳輸數(shù)據流特性。MAC子層是實現(xiàn)CAN協(xié)議的核心層,它的功能主要是制定通信數(shù)據的傳送規(guī)則,即控制幀結構、執(zhí)行仲裁、錯誤檢測、出錯標定和故障界定。LLC子層的功能主要是進行報文濾波、總線超載通知和總線恢復管理。物理層和數(shù)據鏈路層的功能可由CAN接口控制器來完成,而應用層的功能由微處理器或者工控機完成的。CAN網絡通信模型如圖1所示。
圖1 CAN網絡通信模型
1.CAN網絡拓撲結構。CAN總線是串行式總線,因此由其架構的分布式工業(yè)測控網絡是按照串行總線式網絡實現(xiàn)的。CAN網絡的物理電氣線路采用屏蔽雙絞線。CAN總線是由插在工控機上PCI插槽中的CAN卡驅動的,工業(yè)現(xiàn)場測控設備依靠CAN模塊掛接在網絡總線上。如果工控設備之間的距離比較遠,或者掛接在網絡上的通信節(jié)點比較多,需要在網絡中接入中繼器,以保證通信的質量??偩€式網絡拓撲結構需要在總線的終端接入總線終結器,以防止通信信號回波的反射干擾。這在物理上一般用1個與總線介質的特性阻抗相匹配的電阻來實現(xiàn)。在工程應用中,一般要注意通信節(jié)點分支長度、相鄰節(jié)點的距離(S)和無中繼時總線驅動的長度(L)等指標,依照CAN總線的國際標準建議,在通信速率為1Mbps時,S到L的距離應小于40m,當通信速率在5Kbps以下時,L的允許值可到10km。組網后的上位機要用VB或VC等開發(fā)工具編寫相應的應用層程序。CAN總線網絡架構如圖2所示。
2.CAN網絡的通信過程。CAN總線采用時分復用的原則,每個CAN通信節(jié)點在自己占用總線的時段內建立其與通信目標節(jié)點的物理鏈路來傳輸數(shù)據,直至數(shù)據發(fā)送完畢為止。由于CAN總線是多主機通信模式,在CAN總線上的所有通信節(jié)點都可以隨時地跟總線的其他節(jié)點發(fā)起通信,所以在多節(jié)點同時發(fā)出通信請求時,CAN總線有自己的通信仲裁機制,CAN網絡節(jié)點通信過程如圖3所示。
主動通信節(jié)點首先在偵聽到總線空閑時,發(fā)送自己占用總線的請求,經過總線仲裁后,如果不具備通信的資格,那么就進行通信等待,并繼續(xù)偵聽,當具有通信資格時,占有總線并傳輸數(shù)據。若具有占有總線的資格,則占有并驅動總線,并發(fā)送數(shù)據,其他的節(jié)點處于接收數(shù)據狀態(tài),經過報文濾波,相應的通信目標節(jié)點就會接收數(shù)據,其他的節(jié)點就放棄數(shù)據。在通信目標節(jié)點收到數(shù)據時進行判別,若數(shù)據錯誤,向主通信節(jié)點發(fā)送錯誤信息,進行數(shù)據錯誤處理。若數(shù)據正確,在數(shù)據傳輸完畢并釋放總線資源,主通信節(jié)點進入偵聽階段。
1.通信模塊硬件電路設計。CAN總線通信模塊由微處理器80C51、CAN通信控制器SJA1000、高速光電耦合器6N137、CAN總線收發(fā)器82C250以及監(jiān)控接口電路等部分組成。CAN總線通信模塊硬件電路如圖4所示。
由于SJA1000只需要8位數(shù)據/地址線,本文,筆者采用80C51作為CAN總線通信節(jié)點模塊的微處理器,負責CAN通信控制器SJA1000的初始化和通信數(shù)據的處理。80C51和SJA1000分別采用獨立的外部時鐘。SJA1000采用線選方式實現(xiàn)選通,當80C51的P26為“0”時選通該控制器實現(xiàn)對SJA1000的訪問。為了對其他通信模塊傳來的數(shù)據做出實時處理,通信模塊工作在中斷方式下,當通信控制器接收到總線上傳來的數(shù)據時,SJA1000的INT引腳就輸出1個電平跳變,SIA1000的INT引腳和80C51的中斷0引腳相連,80C51初始化時設置為下降沿中斷,從而引發(fā)微處理器80C51產生中斷,通過中斷服務子程序接收1幀信息并進行分析處理,以及進行CAN總線錯誤中斷類型的判斷和誤碼糾正。
2.通信模塊軟件設計。根據CAN總線的網絡需要,按照程序模塊化設計的思想,CAN通信模塊程序主要分為硬件資源的配置(Resoure_align.h)、CAN總線控制器、SJA1000初始化(SJA_Init)、CAN總線數(shù)據接收(Canbus_datarecv)、CAN總線數(shù)據發(fā)送(Canbus_datasedn)等例程。資源分配全部定義在Re?soure_align.h這個頭文件中,在其他例程中都不存在具體引腳和寄存器的操作,這樣方便程序的移植。另外,由于總線數(shù)據接收處于被動地位,為了實時處理的需要,使用了微控器的0號中斷。CAN總線數(shù)據接收(Canbus_datarecv)例程是在中斷處理子程序中完成的,而CAN總線數(shù)據發(fā)送例程是主動通信的。
綜上,CAN總線作為一種比較實用的工業(yè)現(xiàn)場控制總線,具有高速率、長距離、高可靠性等優(yōu)點,使得它成為目前工業(yè)控制領域最常用的現(xiàn)場總線。目前,CAN總線在汽車運行參數(shù)測控儀表組網監(jiān)控、機器人多運動部件組網監(jiān)控、集散過程監(jiān)控、醫(yī)療器械、機械制造、傳感器等諸多領域都取得了成功的應用。與RS-485串行通信網相比,它具有突出的可靠性、實時性和抗干擾性的特點,其組網方式也非常靈活,因而非常適合于構建復雜現(xiàn)場的實時測控網絡。但在工程運用時,應考慮工程現(xiàn)場的集體情況,進行一些抗干擾措施,如恰當?shù)慕拥?、屏蔽等,另外,應用層軟件的設計應根據具體工程監(jiān)控的需要選擇合適的開發(fā)環(huán)境進行編寫。