尹冀波,耿 爽,徐宏祥,李 賀
(中國電子科技集團公司第四十七研究所,沈陽 110032)
CAN,全稱為Controller Area Network,即控制器局域網,是國際上應用最廣泛的現場總線之一。由CAN總線構成的單一網絡中,理論上可以掛接無數個節點。實際應用中,節點數目受網絡硬件的電氣特性所限制。CAN可提供高達1Mbit/s的數據傳輸速率,這使實時控制變得非常容易。由于CAN總線具有很高的實時性能,因此,CAN已經在汽車工業、航空工業、工業控制、安全防護等領域中得到了廣泛應用。
經過測試,介紹一種基于PC機控制CAN網絡節點的方法,該方法在實際應用中取得了很好的效果。也可以配合其它電路一起使用,用于電路測試與其它整機配套使用。
CAN的高層協議是一種在現有的物理層和數據鏈路層等底層協議之上實現的協議,高層協議是在CAN規范的基礎上發展起來的應用層。在許多系統中,可以制定一個合適的應用層,相關組織已經研究并開放了應用層標準,以使系統的綜合應用變得十分容易。
本系統根據實際需求,采用CAN2.0B標準幀格式。CAN標準幀信息為11個字節,包括兩部分:信息和數據部分。前3個字節為信息部分。字節1為幀信息。第7位 FF表示幀格式,在標準幀中,FF=0;第6位RTR表示幀的類型,RTR=0表示為數據幀,RTR=1表示為遠程幀;DLC表示在數據幀時實際的數據長度。字節2、3為報文識別碼,11位有效。字節4-11為數據幀的實際數據,遠程幀時無效。
在2.0B版本中,CAN控制器的標志符長度可以是11位或29位。遵循CAN2.0B協議的CAN控制器可以發送和接收11位標識符的標準格式報文,或29位標識符的擴展格式報文。如果禁止CAN2.0B,則CAN控制器只能發送和接收11位標識符的標準格式報文,而忽略擴展格式的報文結構,但不會出現錯誤。
CAN2.0B標準幀格式的解析,如表1所示。

表1 CAN2.0B標準幀格式
測試軟件系統按功能可以分為驅動模塊、消息隊列模塊、CAN節點模塊、配置模塊、核心處理模塊、控制模塊六個模塊,如圖1所示。

圖1 測試軟件系統模塊設計圖
3.1.1 驅動模塊
驅動模塊主要負責在系統異常的情況下復位CAN卡,軟件卸載之前關閉CAN卡,通過適配器接收和發送數據,獲取CAN卡接收緩沖區里面已經接收到的CAN幀的數量。軟件運行之前啟動CAN卡,在系統啟動之后調整CAN卡參數,讀取CAN卡硬件信息,讀取CAN控制器信息,包括:模式寄存器、狀態寄存器、仲裁丟失寄存器、錯誤寄存器、錯誤警告限制寄存器、接收錯誤計數寄存器和發送錯誤計數寄存器。
3.1.2 消息隊列模塊
消息隊列模塊即緩沖器,起到防止消息浪涌的作用。在具體設計時,需要建立兩個消息隊列:發送隊列和接收隊列。需要特別說明的是,隊列里面的元素必須符合CAN消息的數據結構。此外,在接收和發送CAN消息的時候必須進行讀寫鎖的保護處理。
3.1.3 配置模塊
配置模塊起到修改CAN卡參數的作用。該模塊的主要功能有:①生成缺省XML配置文件;②讀寫XML配置文件;③驗證XML配置文件;④保存和獲取CAN卡的類型、CAN卡索引和CAN卡端口索引。
3.1.4 CAN 節點模塊
CAN節點模塊負責建立若干CAN節點表,反映各個CAN節點的生存狀態。根據上層模塊申請,添加和撤銷回調指針和節點標識。接到各個CAN節點發來的Reset復位信號,查找該節點所擁有的標識,然后根據路由表找到對應的回調指針,通知相應的上層軟件模塊。在軟件實際運行時,調用該模塊更改CAN節點需求值,獲取該節點對應的生存狀態。3.1.5 核心處理模塊
核心處理模塊是整個系統的關鍵模塊,它主要負責對流經的所有數據進行準確識別和分類。該模塊由五部分組成:工作處理、命令發送、消息接收、消息分發、生存監測。工作處理負責聲明該模塊當前狀態,建立路由表,獲取XML配置文件信息,調整CAN卡需求,初始化CAN卡,啟動命令發送、消息接收、消息分發和生存監測四項任務。命令發送負責獲取命令隊列的元素,將命令轉化為CAN幀,填充發送隊列,提交CAN幀到硬件接口。消息接收負責監測消息隊列的元素,判斷CAN幀的類型,轉換CAN幀到命令格式送到接收隊列。消息分發負責根據回調指針處理所有接收到的CAN消息,如果運行失敗則修改路由表,并發出警告提示。生存監測每隔一定時間,廣播一個特種CAN幀并且檢查路由表,如果對應的連接狀態為假,使用回調指針發出通信錯誤消息。
3.1.6 控制模塊
控制模塊負責確定源節點、選擇CAN節點,發出CAN公有及私有命令參數,記錄時間和CAN幀長度??刂颇K還負責解析收到的CAN消息,維護發送列表和接收列表,獲取CAN卡的PCB和MCU消息,提示各個CAN節點的生存狀態。
CAN總線系統測試流程如下:
(1)系統打開之后,首先監測各個功能模塊的狀態,檢查提示信息。
(2)如果配置文件出現異常情況,建立缺省配置文件。
(3)調整CAN卡參數,獲取CAN控制器的各種寄存器狀態和CAN卡的消息。
(4)觀察CAN節點的生存狀態,如果節點處于在線狀態,可以通過控制模塊下達命令。
(5)核心處理模塊接收到命令,進行格式轉換,命令由CAN卡發送到CAN總線。
(6)CAN節點獲取到屬于自身的命令,進行解析,根據命令內容執行相應任務。
(7)CAN節點實時監測任務的執行狀態,并且將執行結果發送到CAN總線上的控制機。
(8)接到CAN卡傳送來的CAN消息,核心處理模塊進行解析。除了特種CAN幀之外,所有的CAN幀都要發送到對應的上層模塊。
(9)控制模塊接到CAN消息之后進行解析,判定CAN消息的來源以及內容。
該設計已經在作者所用的項目里面得到應用,達到了滿足實際需求的目的,其中各種測試在硬件平臺上驗證時工作正常。
在下一步的改進中,在現有基礎上,考慮應用CAN2.0B擴展幀以增加所攜帶的數據載荷,提高系統的穩定性;進一步優化軟件算法,提高測試效率。
[1]CAN History[M].Micro System Corporation,2001.
[2]廣州周立功單片機發展有限公司.非智能單通道CAN接口卡產品數據手冊[M].廣州周立功單片機發展有限公司,2007.
[3]潘愛民.COM原理與應用[M].北京:清華大學出版社,2000.
[4]劉曉華.精通MFC[M].北京:電子工業出版社,2003.