潘文卿,潘玉鑫,何曉飛
(濰柴動力股份有限公司,山東 濰坊 261061)
CAN總線是當前汽車高速網絡系統的主要應用標準,CAN2.0技術規范中2.0A定義了CAN報文標準幀格式,2.0B定義了標準幀和擴展幀兩種格式。在整車通信中,控制器由于各廠家硬件選型和設計的不同,整車通信環境的復雜性越來越高,會出現諸多通信異常的現象,除了通用CAN通信監控設備,例如CANoe可以排查一些較普遍和常見的問題,還可以采用示波器波形診斷技術進行一些特殊問題的排查。
圖1為CAN2.0B幀結構圖,數據幀由7個不同位場組成,即幀起始、仲裁場、控制場、數據場、CRC場、應答場、幀結束。

圖1 CAN2.0B幀結構圖
1)顯性電平和隱性電平:顯性電平邏輯為0,隱性電平邏輯為1。顯性具有優先的特性,只要有一個控制單元輸出顯性電平,總線上即為顯性電平;隱性具有包容的特性,只有所有的控制單元都輸出隱性電平,總線上才為隱性。
2)幀起始(SOF):標識幀開始,僅由一個顯性位構成,只有在總線處于空閑狀態時才允許開始發送。
3)仲裁場:標準幀中仲裁場由11位ID標識符和RTR位組成;在擴展幀格式中,仲裁場由29位ID標識符和SRR位、IDE位、RTR位組成。其中SRR位為替代遠程請求位,擴展幀中必須始終為隱性位;IDE位為標識符擴展位,在標準幀中為顯性電平,屬于控制場,在擴展幀中為隱性電平,屬于仲裁場;RTR位為替代遠程請求位,在數據幀中為顯性電平,在遠程幀中必須為隱性電平。
4)控制場:在標準幀格式中,包括DLC、IDE、保留位r0;在 擴 展 幀格 式 中,包 括DLC和 兩 個 保 留 位r1、r0。DLC數據的字節數為0~8個字節。保留位r1、r0必須以顯性電平傳送,然而在接收側可以接收顯性、隱性及任意組合的電平。
5)數據場:由0~8個字節組成,傳輸數據。
6)CRC場:包括CRC序列和CRC界定符DEL。CRC序列計算范圍是SOF、仲裁場、控制場、數據場。CRC界定符CRC DEL是一個常態隱性位。
7)應答場:包括應答間隙ACK和應答界定符ACK DEL,發送節點發送數據時會將這兩位同時設置為隱性,接收節點計算CRC序列的值準確無誤后,會在應答間隙期間向發送方發送一個顯性位以示應答。
8)幀結束:由7個隱性位組成。
基于客戶一臺實際運行的公交車,出現其中一個控制器發送報文,發動機控制器不能解析的問題。對標一臺可以正常通信的整車,發現發動機控制器及程序是一致的,只有這個控制器的廠家是不一致的,初步斷定是此控制器的問題。通過CAN設備可以正常接收報文,在整車上,對標一輛可以正常通信的公交車,通過CANoe監控總線報文,兩輛車的報文數據均正常。通過CANoe采集故障車和正常車的報文數據,回到試驗室通過數據回放的形式將數據注入到發動機控制器中進行多方位驗證,發動機控制器均能正常接收報文,下文是實際解決的方法。
分別采集故障車和正常車的一段報文數據,回到試驗室,利用CANoe的數據回放功能將其他控制器發送的數據屏蔽掉,只將故障報文發送到總線上,如圖2所示。

圖2 利用CANoe回放數據并篩選報文
通過監控工具看到總線報文以及發動機控制器能夠收到此報文并且能夠解析總線上的數據,如圖3所示,總線上的電壓值與監控到的發動機控制器收到的數據一致,都是170V。

圖3 解析數據一致
為了進一步分析發動機控制器接收到總線上的報文的各個狀態值的情況,采用調試器監控發動機控制器接收報文的寄存器狀態,如圖4所示:ID為0x1801A79B,收到的8個 字 節 的 信 息Byte0-7依 次 是:0x4B,0x01,0xAA,0x00,0x08,0x00,0x26,0x00,各關鍵標志位SRR為1,IDE為EXT,RTR為0,LENGTH為8,這些數據均正常,未發現異常點。通過分析,數據通過CANoe進行回放的形式將數據重新發送到總線上可能規避了一些問題。回放的時候可以認為是CANoe這個控制器在發送一個已知的報文數據,而非真正的問題控制器在發送報文數據,所以此方法不能真正找到問題的原因。

圖4 接收報文寄存器狀態
帶著示波器與CANoe同步在問題車上進行報文抓取,為了盡量避免其他控制器眾多報文的干擾,將能拔掉的控制器都從總線上拔掉,僅留下問題控制器和發動機控制器,通過CANoe的報文序列形式和示波器同步抓取進行分析。圖5為總線上抓取到的問題控制器發送出來的問題報文,地址為0x1801A79B,對著CAN2.0B的幀結構進行波形解析。總線通信波特率為250kb/s,所以傳輸1bit的時間為4μs。根據CAN總線未填充通信原則,當發送器在發送位流中檢測到5個極性相同的連續位時,它在實際發送時,自動插入一個補碼位。結合CAN2.0B的幀結構對圖5進行CAN波形解析,解析結果如圖6所示。

圖5 問題報文波形圖

圖6 問題報文波形解析圖
根據CAN2.0B幀結構對照波形圖進行CAN波形的位解析,每一個報文都是從一個顯性位開始,即SOF幀起始位,此幀的開始位,然后繼續往后以4μs一個bit進行解析。優先級P為(110)B,R為(0)B,DP為(0)B,PF為(0000 0001)B,SRR為(0)B,IDE為(1)B,PS為(1010 0111)B,SA為(1001 1011)B,DLC為(1000)B,RTR為(0)B,通 過 組 合 解 析ID為0x1801A179B,DLC為8,RTR為遠程幀位0顯性位表示數據幀,IDE為1隱性位表示擴展幀,SRR為0是一個顯性位,SRR在擴展幀中是替代遠程請求位,按照CAN2.0B的要求應該是隱性位,即為1,所以通過CAN波形診斷分析定位問題控制器在發送報文時在將SRR位處理錯了。SRR位不出現在總線的報文地址、數據長度、數據內容中,通過CAN總線數據分析儀是無法判斷的,只能通過CAN波形的診斷才能分析出來。這樣也為后續整車通信故障診斷積累了寶貴的經驗,同時為自主控制器的開發提供了技術支撐。
通過這個實際案例,可以總結在排查整車通信故障的時候,通用的整車數據分析工具可以排查總線容易可見的故障,例如總線負載率過高、總線存在應答錯誤幀、傳輸數據異常等,針對一些不易可見的故障,需要采用CAN波形診斷技術深層次地分析控制器發送報文時各個場中每個關鍵位的正確性。