牛昱棟,劉永春,高發廷
(中國重型汽車集團汽車研究總院,山東 濟南 250002)
從車輛發明至今,汽車已經從純粹的機械結構發展到擁有數個甚至數十個控制單元,隨著車輛安全、舒適需求的增加,控制單元的數量越來越多,對網絡的負擔也越來越大。車輛根據不同的功能域進行了劃分,每個域擁有一個獨立的CAN總線網絡,但是由于車輛是一個完整的整體,每個域之間存在著一定數據的流通,信號穩定實時轉發,才能保證車輛整體功能的穩定可靠。
本文通過對CAN報文屬性的研究、操作系統的運行模式與信號網絡轉發的需求分析,設計一套適用于大部分情況的快速穩定的跨網絡轉發策略,并且具有相當的靈活性。
車輛上存在多個總線網絡間信號交互的時候,我們將轉發前即存在該信號的總線網絡稱為該信號的源網絡,將該信號轉發到總線網絡稱為該信號的目標網絡。在CAN總線網絡之間的數據流即為從源網絡轉發到目標網絡,轉發邏輯的實現我們稱之為網關功能區,圖1給出了總線數據從源網絡轉發到目標網絡上的具體流向,此過程主要由網關功能區,判斷該信號是否需要轉發并將其轉發到特別目標網絡,無關信號不會被轉發。

圖1 總線數據數據流向
網關功能區是CAN總線網絡信號轉發功能的實現區域,負責從源網絡接收數據,判斷數據是否需要轉發到目標網絡,若需要轉發,則將該數據發送至目標網絡。
網關功能區細分為4個子功能模塊,分別為CAN信號接收子模塊、CAN信號轉發需求判斷子模塊、CAN信號發送子模塊和CAN信號發送成功確認子模塊,圖2為各個子功能模塊間的數據流向。

圖2 網關功能區內數據流向
1)CAN信號接收子模塊負責信號的初步接收,并將信號中需要的信息保存至相應CAN網絡的接收buffer中,等待CAN信號轉發需求判斷子模塊對數據進行具體判斷處理。
2)CAN信號轉發需求判斷子模塊將接收buffer中的信號與提前準備好的轉發配置表對比,判斷該信號是否需要轉發,若需要轉發,則將該信號存放在對應通道的發送buffer中,等待CAN信號發送子模塊判斷信號合適進行發送。
3)CAN信號發送子模塊,判斷各個CAN通道的發送buffer的狀態與當前CAN網絡狀態,當buffer狀態不為空且CAN網絡狀態為空閑時,按先進先出依次發送CAN信號到相應的網絡上。
4)CAN信號發送成功確認子模塊,當需要轉發的CAN信號發送成功后,此模塊會被回調,判斷發送buffer中還存在CAN信號未發送則跳轉到CAN信號發送子模塊,若發送buffer為空則退出,等待新CAN信號的到來。
CAN信號接收子模塊位于中斷當中,主要任務是將CAN網絡接收到的數據從寄存器搬移到特定的RAM區域,并觸發CAN信號轉發需求判斷子模塊的事件。為了達到穩定安全的目的,在中斷中的工作盡量做得少,圖3為CAN信號接收子模塊的數據流向。

圖3 CAN信號接收子模塊數據流向
CAN信號轉發需求判斷子模塊被觸發之后,讀取RAM中存放的具體的數據并與轉發配置表中的信息對比,確認是否需要轉發,若需要轉發,則根據配置表中的信息,將需要轉發的數據存放至對應通道的發送buffer中。考慮到操作系統之間通過事件切換任務需要時間,在成功接收到信號后直接在同一個任務中調用CAN信號發送子模塊。圖4為CAN信號轉發需求判斷子模塊的數據流向。

圖4 CAN信號轉發需求判斷子模塊數據流向
CAN信號發送子模塊即將具體的數據從發送buffer中取出,通過寄存器操控硬件將數據發送到目標網絡上,圖5為CAN信號發送子模塊的數據流向。

圖5 CAN信號發送子模塊的數據流向
CAN信號發送成功確認子模塊負責管理一條報文發送后,確認發送成功并判斷是否繼續向目標網絡發送CAN信號。圖6為CAN信號發送成功確認子模塊的操作流程。

圖6 CAN信號發送成功確認子模塊的操作流程
本文闡述了一種CAN總線信號快速跨網絡轉發算法,該算法實現了CAN總線信號快速跨網絡轉發,并且在快速的基礎上兼顧了穩定,考慮了不同邏輯的相互分離與所應處于數據流的位置,形成閉環,不會造成數據沖突,邏輯實現復雜性小,可適用于任何跨網絡的ECU,轉發速度快,保證了數據的實時有效,可以為CAN信號轉發、處理提供重要的參考。