尹冀波,耿 爽,徐宏祥,李 賀
(中國電子科技集團(tuán)公司第四十七研究所,沈陽 110032)
CAN,全稱為Controller Area Network,即控制器局域網(wǎng),是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。由CAN總線構(gòu)成的單一網(wǎng)絡(luò)中,理論上可以掛接無數(shù)個(gè)節(jié)點(diǎn)。實(shí)際應(yīng)用中,節(jié)點(diǎn)數(shù)目受網(wǎng)絡(luò)硬件的電氣特性所限制。CAN可提供高達(dá)1Mbit/s的數(shù)據(jù)傳輸速率,這使實(shí)時(shí)控制變得非常容易。由于CAN總線具有很高的實(shí)時(shí)性能,因此,CAN已經(jīng)在汽車工業(yè)、航空工業(yè)、工業(yè)控制、安全防護(hù)等領(lǐng)域中得到了廣泛應(yīng)用。
經(jīng)過測試,介紹一種基于PC機(jī)控制CAN網(wǎng)絡(luò)節(jié)點(diǎn)的方法,該方法在實(shí)際應(yīng)用中取得了很好的效果。也可以配合其它電路一起使用,用于電路測試與其它整機(jī)配套使用。
CAN的高層協(xié)議是一種在現(xiàn)有的物理層和數(shù)據(jù)鏈路層等底層協(xié)議之上實(shí)現(xiàn)的協(xié)議,高層協(xié)議是在CAN規(guī)范的基礎(chǔ)上發(fā)展起來的應(yīng)用層。在許多系統(tǒng)中,可以制定一個(gè)合適的應(yīng)用層,相關(guān)組織已經(jīng)研究并開放了應(yīng)用層標(biāo)準(zhǔn),以使系統(tǒng)的綜合應(yīng)用變得十分容易。
本系統(tǒng)根據(jù)實(shí)際需求,采用CAN2.0B標(biāo)準(zhǔn)幀格式。CAN標(biāo)準(zhǔn)幀信息為11個(gè)字節(jié),包括兩部分:信息和數(shù)據(jù)部分。前3個(gè)字節(jié)為信息部分。字節(jié)1為幀信息。第7位 FF表示幀格式,在標(biāo)準(zhǔn)幀中,F(xiàn)F=0;第6位RTR表示幀的類型,RTR=0表示為數(shù)據(jù)幀,RTR=1表示為遠(yuǎn)程幀;DLC表示在數(shù)據(jù)幀時(shí)實(shí)際的數(shù)據(jù)長度。字節(jié)2、3為報(bào)文識別碼,11位有效。字節(jié)4-11為數(shù)據(jù)幀的實(shí)際數(shù)據(jù),遠(yuǎn)程幀時(shí)無效。
在2.0B版本中,CAN控制器的標(biāo)志符長度可以是11位或29位。遵循CAN2.0B協(xié)議的CAN控制器可以發(fā)送和接收11位標(biāo)識符的標(biāo)準(zhǔn)格式報(bào)文,或29位標(biāo)識符的擴(kuò)展格式報(bào)文。如果禁止CAN2.0B,則CAN控制器只能發(fā)送和接收11位標(biāo)識符的標(biāo)準(zhǔn)格式報(bào)文,而忽略擴(kuò)展格式的報(bào)文結(jié)構(gòu),但不會出現(xiàn)錯(cuò)誤。
CAN2.0B標(biāo)準(zhǔn)幀格式的解析,如表1所示。
表1 CAN2.0B標(biāo)準(zhǔn)幀格式
測試軟件系統(tǒng)按功能可以分為驅(qū)動(dòng)模塊、消息隊(duì)列模塊、CAN節(jié)點(diǎn)模塊、配置模塊、核心處理模塊、控制模塊六個(gè)模塊,如圖1所示。
圖1 測試軟件系統(tǒng)模塊設(shè)計(jì)圖
3.1.1 驅(qū)動(dòng)模塊
驅(qū)動(dòng)模塊主要負(fù)責(zé)在系統(tǒng)異常的情況下復(fù)位CAN卡,軟件卸載之前關(guān)閉CAN卡,通過適配器接收和發(fā)送數(shù)據(jù),獲取CAN卡接收緩沖區(qū)里面已經(jīng)接收到的CAN幀的數(shù)量。軟件運(yùn)行之前啟動(dòng)CAN卡,在系統(tǒng)啟動(dòng)之后調(diào)整CAN卡參數(shù),讀取CAN卡硬件信息,讀取CAN控制器信息,包括:模式寄存器、狀態(tài)寄存器、仲裁丟失寄存器、錯(cuò)誤寄存器、錯(cuò)誤警告限制寄存器、接收錯(cuò)誤計(jì)數(shù)寄存器和發(fā)送錯(cuò)誤計(jì)數(shù)寄存器。
3.1.2 消息隊(duì)列模塊
消息隊(duì)列模塊即緩沖器,起到防止消息浪涌的作用。在具體設(shè)計(jì)時(shí),需要建立兩個(gè)消息隊(duì)列:發(fā)送隊(duì)列和接收隊(duì)列。需要特別說明的是,隊(duì)列里面的元素必須符合CAN消息的數(shù)據(jù)結(jié)構(gòu)。此外,在接收和發(fā)送CAN消息的時(shí)候必須進(jìn)行讀寫鎖的保護(hù)處理。
3.1.3 配置模塊
配置模塊起到修改CAN卡參數(shù)的作用。該模塊的主要功能有:①生成缺省XML配置文件;②讀寫XML配置文件;③驗(yàn)證XML配置文件;④保存和獲取CAN卡的類型、CAN卡索引和CAN卡端口索引。
3.1.4 CAN 節(jié)點(diǎn)模塊
CAN節(jié)點(diǎn)模塊負(fù)責(zé)建立若干CAN節(jié)點(diǎn)表,反映各個(gè)CAN節(jié)點(diǎn)的生存狀態(tài)。根據(jù)上層模塊申請,添加和撤銷回調(diào)指針和節(jié)點(diǎn)標(biāo)識。接到各個(gè)CAN節(jié)點(diǎn)發(fā)來的Reset復(fù)位信號,查找該節(jié)點(diǎn)所擁有的標(biāo)識,然后根據(jù)路由表找到對應(yīng)的回調(diào)指針,通知相應(yīng)的上層軟件模塊。在軟件實(shí)際運(yùn)行時(shí),調(diào)用該模塊更改CAN節(jié)點(diǎn)需求值,獲取該節(jié)點(diǎn)對應(yīng)的生存狀態(tài)。3.1.5 核心處理模塊
核心處理模塊是整個(gè)系統(tǒng)的關(guān)鍵模塊,它主要負(fù)責(zé)對流經(jīng)的所有數(shù)據(jù)進(jìn)行準(zhǔn)確識別和分類。該模塊由五部分組成:工作處理、命令發(fā)送、消息接收、消息分發(fā)、生存監(jiān)測。工作處理負(fù)責(zé)聲明該模塊當(dāng)前狀態(tài),建立路由表,獲取XML配置文件信息,調(diào)整CAN卡需求,初始化CAN卡,啟動(dòng)命令發(fā)送、消息接收、消息分發(fā)和生存監(jiān)測四項(xiàng)任務(wù)。命令發(fā)送負(fù)責(zé)獲取命令隊(duì)列的元素,將命令轉(zhuǎn)化為CAN幀,填充發(fā)送隊(duì)列,提交CAN幀到硬件接口。消息接收負(fù)責(zé)監(jiān)測消息隊(duì)列的元素,判斷CAN幀的類型,轉(zhuǎn)換CAN幀到命令格式送到接收隊(duì)列。消息分發(fā)負(fù)責(zé)根據(jù)回調(diào)指針處理所有接收到的CAN消息,如果運(yùn)行失敗則修改路由表,并發(fā)出警告提示。生存監(jiān)測每隔一定時(shí)間,廣播一個(gè)特種CAN幀并且檢查路由表,如果對應(yīng)的連接狀態(tài)為假,使用回調(diào)指針發(fā)出通信錯(cuò)誤消息。
3.1.6 控制模塊
控制模塊負(fù)責(zé)確定源節(jié)點(diǎn)、選擇CAN節(jié)點(diǎn),發(fā)出CAN公有及私有命令參數(shù),記錄時(shí)間和CAN幀長度??刂颇K還負(fù)責(zé)解析收到的CAN消息,維護(hù)發(fā)送列表和接收列表,獲取CAN卡的PCB和MCU消息,提示各個(gè)CAN節(jié)點(diǎn)的生存狀態(tài)。
CAN總線系統(tǒng)測試流程如下:
(1)系統(tǒng)打開之后,首先監(jiān)測各個(gè)功能模塊的狀態(tài),檢查提示信息。
(2)如果配置文件出現(xiàn)異常情況,建立缺省配置文件。
(3)調(diào)整CAN卡參數(shù),獲取CAN控制器的各種寄存器狀態(tài)和CAN卡的消息。
(4)觀察CAN節(jié)點(diǎn)的生存狀態(tài),如果節(jié)點(diǎn)處于在線狀態(tài),可以通過控制模塊下達(dá)命令。
(5)核心處理模塊接收到命令,進(jìn)行格式轉(zhuǎn)換,命令由CAN卡發(fā)送到CAN總線。
(6)CAN節(jié)點(diǎn)獲取到屬于自身的命令,進(jìn)行解析,根據(jù)命令內(nèi)容執(zhí)行相應(yīng)任務(wù)。
(7)CAN節(jié)點(diǎn)實(shí)時(shí)監(jiān)測任務(wù)的執(zhí)行狀態(tài),并且將執(zhí)行結(jié)果發(fā)送到CAN總線上的控制機(jī)。
(8)接到CAN卡傳送來的CAN消息,核心處理模塊進(jìn)行解析。除了特種CAN幀之外,所有的CAN幀都要發(fā)送到對應(yīng)的上層模塊。
(9)控制模塊接到CAN消息之后進(jìn)行解析,判定CAN消息的來源以及內(nèi)容。
該設(shè)計(jì)已經(jīng)在作者所用的項(xiàng)目里面得到應(yīng)用,達(dá)到了滿足實(shí)際需求的目的,其中各種測試在硬件平臺上驗(yàn)證時(shí)工作正常。
在下一步的改進(jìn)中,在現(xiàn)有基礎(chǔ)上,考慮應(yīng)用CAN2.0B擴(kuò)展幀以增加所攜帶的數(shù)據(jù)載荷,提高系統(tǒng)的穩(wěn)定性;進(jìn)一步優(yōu)化軟件算法,提高測試效率。
[1]CAN History[M].Micro System Corporation,2001.
[2]廣州周立功單片機(jī)發(fā)展有限公司.非智能單通道CAN接口卡產(chǎn)品數(shù)據(jù)手冊[M].廣州周立功單片機(jī)發(fā)展有限公司,2007.
[3]潘愛民.COM原理與應(yīng)用[M].北京:清華大學(xué)出版社,2000.
[4]劉曉華.精通MFC[M].北京:電子工業(yè)出版社,2003.