潘文卿,潘玉鑫,何曉飛
(濰柴動力股份有限公司,山東 濰坊 261061)
CAN總線是當(dāng)前汽車高速網(wǎng)絡(luò)系統(tǒng)的主要應(yīng)用標(biāo)準(zhǔn),CAN2.0技術(shù)規(guī)范中2.0A定義了CAN報文標(biāo)準(zhǔn)幀格式,2.0B定義了標(biāo)準(zhǔn)幀和擴展幀兩種格式。在整車通信中,控制器由于各廠家硬件選型和設(shè)計的不同,整車通信環(huán)境的復(fù)雜性越來越高,會出現(xiàn)諸多通信異常的現(xiàn)象,除了通用CAN通信監(jiān)控設(shè)備,例如CANoe可以排查一些較普遍和常見的問題,還可以采用示波器波形診斷技術(shù)進(jìn)行一些特殊問題的排查。
圖1為CAN2.0B幀結(jié)構(gòu)圖,數(shù)據(jù)幀由7個不同位場組成,即幀起始、仲裁場、控制場、數(shù)據(jù)場、CRC場、應(yīng)答場、幀結(jié)束。
圖1 CAN2.0B幀結(jié)構(gòu)圖
1)顯性電平和隱性電平:顯性電平邏輯為0,隱性電平邏輯為1。顯性具有優(yōu)先的特性,只要有一個控制單元輸出顯性電平,總線上即為顯性電平;隱性具有包容的特性,只有所有的控制單元都輸出隱性電平,總線上才為隱性。
2)幀起始(SOF):標(biāo)識幀開始,僅由一個顯性位構(gòu)成,只有在總線處于空閑狀態(tài)時才允許開始發(fā)送。
3)仲裁場:標(biāo)準(zhǔn)幀中仲裁場由11位ID標(biāo)識符和RTR位組成;在擴展幀格式中,仲裁場由29位ID標(biāo)識符和SRR位、IDE位、RTR位組成。其中SRR位為替代遠(yuǎn)程請求位,擴展幀中必須始終為隱性位;IDE位為標(biāo)識符擴展位,在標(biāo)準(zhǔn)幀中為顯性電平,屬于控制場,在擴展幀中為隱性電平,屬于仲裁場;RTR位為替代遠(yuǎn)程請求位,在數(shù)據(jù)幀中為顯性電平,在遠(yuǎn)程幀中必須為隱性電平。
4)控制場:在標(biāo)準(zhǔn)幀格式中,包括DLC、IDE、保留位r0;在 擴 展 幀格 式 中,包 括DLC和 兩 個 保 留 位r1、r0。DLC數(shù)據(jù)的字節(jié)數(shù)為0~8個字節(jié)。保留位r1、r0必須以顯性電平傳送,然而在接收側(cè)可以接收顯性、隱性及任意組合的電平。
5)數(shù)據(jù)場:由0~8個字節(jié)組成,傳輸數(shù)據(jù)。
6)CRC場:包括CRC序列和CRC界定符DEL。CRC序列計算范圍是SOF、仲裁場、控制場、數(shù)據(jù)場。CRC界定符CRC DEL是一個常態(tài)隱性位。
7)應(yīng)答場:包括應(yīng)答間隙ACK和應(yīng)答界定符ACK DEL,發(fā)送節(jié)點發(fā)送數(shù)據(jù)時會將這兩位同時設(shè)置為隱性,接收節(jié)點計算CRC序列的值準(zhǔn)確無誤后,會在應(yīng)答間隙期間向發(fā)送方發(fā)送一個顯性位以示應(yīng)答。
8)幀結(jié)束:由7個隱性位組成。
基于客戶一臺實際運行的公交車,出現(xiàn)其中一個控制器發(fā)送報文,發(fā)動機控制器不能解析的問題。對標(biāo)一臺可以正常通信的整車,發(fā)現(xiàn)發(fā)動機控制器及程序是一致的,只有這個控制器的廠家是不一致的,初步斷定是此控制器的問題。通過CAN設(shè)備可以正常接收報文,在整車上,對標(biāo)一輛可以正常通信的公交車,通過CANoe監(jiān)控總線報文,兩輛車的報文數(shù)據(jù)均正常。通過CANoe采集故障車和正常車的報文數(shù)據(jù),回到試驗室通過數(shù)據(jù)回放的形式將數(shù)據(jù)注入到發(fā)動機控制器中進(jìn)行多方位驗證,發(fā)動機控制器均能正常接收報文,下文是實際解決的方法。
分別采集故障車和正常車的一段報文數(shù)據(jù),回到試驗室,利用CANoe的數(shù)據(jù)回放功能將其他控制器發(fā)送的數(shù)據(jù)屏蔽掉,只將故障報文發(fā)送到總線上,如圖2所示。
圖2 利用CANoe回放數(shù)據(jù)并篩選報文
通過監(jiān)控工具看到總線報文以及發(fā)動機控制器能夠收到此報文并且能夠解析總線上的數(shù)據(jù),如圖3所示,總線上的電壓值與監(jiān)控到的發(fā)動機控制器收到的數(shù)據(jù)一致,都是170V。
圖3 解析數(shù)據(jù)一致
為了進(jìn)一步分析發(fā)動機控制器接收到總線上的報文的各個狀態(tài)值的情況,采用調(diào)試器監(jiān)控發(fā)動機控制器接收報文的寄存器狀態(tài),如圖4所示:ID為0x1801A79B,收到的8個 字 節(jié) 的 信 息Byte0-7依 次 是:0x4B,0x01,0xAA,0x00,0x08,0x00,0x26,0x00,各關(guān)鍵標(biāo)志位SRR為1,IDE為EXT,RTR為0,LENGTH為8,這些數(shù)據(jù)均正常,未發(fā)現(xiàn)異常點。通過分析,數(shù)據(jù)通過CANoe進(jìn)行回放的形式將數(shù)據(jù)重新發(fā)送到總線上可能規(guī)避了一些問題?;胤诺臅r候可以認(rèn)為是CANoe這個控制器在發(fā)送一個已知的報文數(shù)據(jù),而非真正的問題控制器在發(fā)送報文數(shù)據(jù),所以此方法不能真正找到問題的原因。
圖4 接收報文寄存器狀態(tài)
帶著示波器與CANoe同步在問題車上進(jìn)行報文抓取,為了盡量避免其他控制器眾多報文的干擾,將能拔掉的控制器都從總線上拔掉,僅留下問題控制器和發(fā)動機控制器,通過CANoe的報文序列形式和示波器同步抓取進(jìn)行分析。圖5為總線上抓取到的問題控制器發(fā)送出來的問題報文,地址為0x1801A79B,對著CAN2.0B的幀結(jié)構(gòu)進(jìn)行波形解析??偩€通信波特率為250kb/s,所以傳輸1bit的時間為4μs。根據(jù)CAN總線未填充通信原則,當(dāng)發(fā)送器在發(fā)送位流中檢測到5個極性相同的連續(xù)位時,它在實際發(fā)送時,自動插入一個補碼位。結(jié)合CAN2.0B的幀結(jié)構(gòu)對圖5進(jìn)行CAN波形解析,解析結(jié)果如圖6所示。
圖5 問題報文波形圖
圖6 問題報文波形解析圖
根據(jù)CAN2.0B幀結(jié)構(gòu)對照波形圖進(jìn)行CAN波形的位解析,每一個報文都是從一個顯性位開始,即SOF幀起始位,此幀的開始位,然后繼續(xù)往后以4μs一個bit進(jìn)行解析。優(yōu)先級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為遠(yuǎn)程幀位0顯性位表示數(shù)據(jù)幀,IDE為1隱性位表示擴展幀,SRR為0是一個顯性位,SRR在擴展幀中是替代遠(yuǎn)程請求位,按照CAN2.0B的要求應(yīng)該是隱性位,即為1,所以通過CAN波形診斷分析定位問題控制器在發(fā)送報文時在將SRR位處理錯了。SRR位不出現(xiàn)在總線的報文地址、數(shù)據(jù)長度、數(shù)據(jù)內(nèi)容中,通過CAN總線數(shù)據(jù)分析儀是無法判斷的,只能通過CAN波形的診斷才能分析出來。這樣也為后續(xù)整車通信故障診斷積累了寶貴的經(jīng)驗,同時為自主控制器的開發(fā)提供了技術(shù)支撐。
通過這個實際案例,可以總結(jié)在排查整車通信故障的時候,通用的整車數(shù)據(jù)分析工具可以排查總線容易可見的故障,例如總線負(fù)載率過高、總線存在應(yīng)答錯誤幀、傳輸數(shù)據(jù)異常等,針對一些不易可見的故障,需要采用CAN波形診斷技術(shù)深層次地分析控制器發(fā)送報文時各個場中每個關(guān)鍵位的正確性。