潘鋼、 魏鹿義、李天輝、藍(lán)凱、甘成
(1.上汽通用五菱汽車股份有限公司,柳州 545007;2.湖南湖大艾盛汽車技術(shù)開發(fā)有限公司柳州分公司,柳州 545007)
乘用車在上市之前的設(shè)計研發(fā)階段,需根據(jù)各零部件開發(fā)周期的不同,進(jìn)行多輪次及多種類的道路測試,以測試驗(yàn)證整車各個部件的結(jié)構(gòu)、性能和耐久等是否滿足整車要求。但各零部件尤其是各電子電器功能件,在路試車輛中均處于研發(fā)階段,其功能均未達(dá)到認(rèn)可狀態(tài),很有可能在路試過程中出現(xiàn)故障問題,直接影響到路試的進(jìn)度。因此在整車項(xiàng)目的開發(fā)中,掌握快速解決故障問題的方法十分必要。
某車型在進(jìn)行實(shí)車道路耐久測試工況時,發(fā)現(xiàn)組合儀表在總計里程達(dá)到7 648 km 時,直接跳變至7 596 km。測試員停車后將車輛下電,閉鎖等待車輛休眠后再重新解鎖喚醒,以及采取重新斷接蓄電池負(fù)極操作,組合儀表總計里程表都沒有恢復(fù)至原先的數(shù)值。由于以上原因,上述現(xiàn)象判定為故障。車輛暫停測試,需要工程師快速排查故障。
組合儀表總計里程顯示異常,首先需要弄清楚計算總計里程的所需信息來源于哪個傳感器,相關(guān)信號在整車上如何傳遞,組合儀表采集到信號后是如何處理顯示的。該故障車型組合儀表總計里程的顯示,是通過采集車速信號進(jìn)行里程累計積分計算。行車過程中車速信號流向如下:防抱死制動系統(tǒng)(ABS)控制單元采集輪速傳感器的頻率信號,經(jīng)過換算后得出車速信號,再通過CAN 總線傳輸至組合儀表(圖1)。
圖1 整車信號流向
在完成信息流分析后,工程師梳理組合儀表系統(tǒng)內(nèi)部的工作原理。汽車組合儀表系統(tǒng)一般由PCB 電路板、電源模塊、MCU芯片、CAN 收發(fā)器、蜂鳴器和LED 顯示屏等組成。其中電源模塊把主接插件輸入的12 V 蓄電池電壓降到5 V,再將5 V 電源提供給CAN 收發(fā)器、MCU 芯片、LCD 顯示屏、蜂鳴器和LED 指示燈或指示燈等模塊。車速CAN 信號由接插件的CAN_H 和CAN_L 端子輸入,CAN 收發(fā)器將接收到的信號通過CAN 收發(fā)器的協(xié)議層進(jìn)行幀識別、響應(yīng)等,然后將得到的CAN 幀放入消息緩存。系統(tǒng)軟件讀取CAN 消息,按照矩陣的定義識別消息中的信息量,然后通過識別的實(shí)際車速對時間進(jìn)行積分運(yùn)算[1],最終得出總計里程(圖2)。
圖2 汽車組合儀表系統(tǒng)框架圖
組合儀表中儲存總計里程數(shù)的存儲器一般為隨機(jī)存儲器(RAM),備份里程數(shù)的存儲器一般為帶電可擦可編程只讀存儲器(EEPROM)。RAM 集成在MCU 里面;EEPROM 有外置的,也有集成在MCU 里面的。
組合儀表上電后,立即從EEPROM 中讀取前次里程數(shù),并顯示在組合儀表上。在組合儀表上電超過3 s 且組合儀表顯示里程數(shù)有效(車速信號有效且CAN 信號正常)時,將每100 ms 進(jìn)行一次累加計算,總計里程ODO 每次增加0.1 km,并顯示在組合儀表上。與此同時,將最后一次有效報文指示的總計里程表值更新到組合儀表中的RAM 和EEPROM 中。
組合儀表下電后,且組合儀表正常(即里程信息錯誤狀態(tài)位置0)的條件下,停止計算總計里程ODO,并將組合儀表的總計里程數(shù)值更新到EEPROM 中[2]。汽車組合儀表總計里程儲存?zhèn)浞萘鞒倘鐖D3 所示.
圖3 汽車組合儀表總計里程儲存?zhèn)浞萘鞒虉D
EEPROM 芯片中使用240 Bytes 大小的空間來儲存里程數(shù)據(jù)(圖4),儲存里程數(shù)據(jù)需要用到8 Bytes。其中,總計里程ODO使用4 Bytes,小計里程Trip 使用2 Bytes,標(biāo)識用于識別當(dāng)前存儲位置內(nèi)的ODO 和Trip 數(shù)據(jù)是否有效使用2 Bytes(圖5)。其總計里程ODO、小計里程Trip 以及標(biāo)識數(shù)據(jù)結(jié)構(gòu)如圖5 所示,故240 Bytes 存儲單元內(nèi)可以儲存30 組里程數(shù)據(jù)。
圖4 用于儲存里程數(shù)據(jù)的空間(共240 Bytes)
圖5 ODO、Trip、標(biāo)識數(shù)據(jù)結(jié)構(gòu)
根據(jù)EEPROM 芯片的規(guī)格書,其擦除/寫入次數(shù)是有限的(100 萬次)。為了在有效的壽命周期內(nèi)最大限度地保證數(shù)據(jù)的有效性,總里程數(shù)據(jù)在EEPROM 內(nèi)部是順序循環(huán)儲存的,即從第1組存儲單元順序存放數(shù)據(jù),儲存完最后1 組單元(第30 組)后再循環(huán)到第1 組存儲單元存放數(shù)據(jù)。
車輛在行駛過程中每1 km 保存一次里程數(shù)據(jù)到EEPROM 中,為了保證有效數(shù)據(jù)的唯一性,在確認(rèn)儲存完新的里程數(shù)據(jù)后,必須把前一次儲存的數(shù)據(jù)擦除掉。例如當(dāng)前存儲位置是第3 組,確認(rèn)新的數(shù)據(jù)儲存完成后,必須把前一組存儲單元(第2 組)內(nèi)的數(shù)據(jù)擦除掉。當(dāng)存儲單元使用到第30 組時,下一次儲存的數(shù)據(jù)要存放到第1 組的位置,確認(rèn)完數(shù)據(jù)儲存完成后,需要把第30組的數(shù)據(jù)(前一組里程數(shù)據(jù))和標(biāo)識都擦除掉。
為了快速解決故障問題,工程師借用魚骨圖工具,將引起問題的各類因素,根據(jù)總計里程信號流向、系統(tǒng)原理,儲存?zhèn)浞菰砑皟Υ娌呗?,按照相互關(guān)聯(lián)性整理而成,搭建起層次分明、條例清晰的圖形[3]。在問題分析基本結(jié)構(gòu)搭建起來后,通過5W1H 的方法,在每個層級下繼續(xù)討論找出所有可能的原因與因素。
應(yīng)用魚骨圖進(jìn)行原因分析,將所有可能導(dǎo)致組合儀表總計里程跳變的故障原因分析羅列(圖6)。最終結(jié)合當(dāng)前車型開發(fā)狀態(tài),確定重點(diǎn)因素為組合儀表軟件這個層別,故障分析排查如下。
圖6 總計里程異常原因魚骨圖
(1)確認(rèn)ABS、組合儀表系統(tǒng)線束原理是否正確,檢查線束樣件與圖紙的一致性。使用萬用表對該系統(tǒng)每個回路的導(dǎo)通進(jìn)行測試,排查是否存在斷路、對搭鐵短路以及接觸不良等導(dǎo)致的儀表接電異常;排查該系統(tǒng)每個插接器是否存在損壞、異物進(jìn)入、形變和裝配不到位等情況;排查該系統(tǒng)每個端子是否存在腐蝕、退出、損壞、母端擴(kuò)孔和公端彎折等情況[4]。綜上檢查,未發(fā)現(xiàn)線束連接異常。
(2)排查ABS 控制單元故障,這個可以通過診斷設(shè)備讀取CAN 報文、診斷故障碼來判斷[5]。實(shí)車未讀取到ABS 與組合儀表總成當(dāng)前與車速信號相關(guān)的故障碼記錄。對故障車進(jìn)行實(shí)車動態(tài)測試,記錄總線報文,ABS 外發(fā)的車速信號可以正常發(fā)送,且表顯的車速與總線車速符合計算公式,可知ABS 的車速信號以及組合儀表的車速接收與顯示策略正常。
(3)手動發(fā)送清除儀表不相關(guān)的故障碼指令,再開始實(shí)車行車,發(fā)現(xiàn)組合儀表里程顯示恢復(fù)正常。由此可知與車速信號不相關(guān)故障碼的儲存,也會影響到該組合儀表里程的寫入。
通過排查分析組合儀表總成的軟件發(fā)現(xiàn),本次故障就發(fā)生在故障碼的存儲位置。原因可以定位到儀表在軟件編寫時,需要同時儲存里程和儲存故障碼時存在邏輯問題,導(dǎo)致里程數(shù)據(jù)沒能正常儲存。
檢查軟件的故障碼與總計里程的儲存邏輯。如圖7 所示,在儲存總計里程信息前,需要保證無新的故障碼儲存需求后,才開始執(zhí)行儲存總計里程信息。而實(shí)車清除故障碼后,總計里程還可以繼續(xù)儲存,證明問題發(fā)生原因?yàn)橐恢庇泄收洗a需要儲存的動作,且動作一直在進(jìn)行且無法結(jié)束。當(dāng)程序出現(xiàn)異常,在執(zhí)行判斷“是否需要儲存故障碼”時,一直為“是”,程序無法進(jìn)入總計里程儲存條件判斷。
圖7 總計里程儲存邏輯
使用存儲空間前,如需要擦除時,則必須先進(jìn)行擦除。查找軟件履歷,軟件代碼編寫的儲存故障碼邏輯為:在存儲位置上設(shè)置一個標(biāo)志位。如不需要擦除或者已擦除完成,則將標(biāo)志位置為0。如未擦除,則標(biāo)志位為1,在整車上出現(xiàn)故障碼儲存到EEPROM時,需先對存儲位進(jìn)行擦除或者判斷后進(jìn)行擦除工作。此時需要判斷標(biāo)志位狀態(tài),當(dāng)擦除完成后才能進(jìn)行儲存。
由此可知,故障車可能一直無法儲存故障碼,導(dǎo)致程序一直在“儲存失敗”與執(zhí)行“錯誤處理程序”的循環(huán)內(nèi)。排查故障碼的儲存代碼,發(fā)現(xiàn)判斷擦除狀態(tài)標(biāo)志位邏輯錯誤。正確邏輯應(yīng)為“檢測到標(biāo)志位為0,則執(zhí)行儲存”,實(shí)際軟件為“檢測到標(biāo)志位為1,則執(zhí)行儲存”。而此時由于擦除后,標(biāo)志位已經(jīng)為0,但需要儲存故障碼,所以不滿足儲存條件,導(dǎo)致故障碼無法儲存,進(jìn)而執(zhí)行錯誤處理程序,陷入錯誤循環(huán)。儲存程序一直被故障碼占用,導(dǎo)致程序不能進(jìn)入保存里程的狀態(tài)。
分析出原因后,工程師將判斷的值由1(需要擦除或擦除未完成)改為0(不需要擦除或擦除已完成)。至此,邏輯的執(zhí)行鏈路打通,即儲存故障碼時,檢測到已經(jīng)擦除,則執(zhí)行儲存。故障碼儲存成功后,程序執(zhí)行“是否需要儲存總計里程”條件判斷,判斷完成后,總計里程成功儲存。至此,總計里程被更新到EEPROM 存儲空間內(nèi)。
軟件更改后,實(shí)車測試并進(jìn)行休眠喚醒與蓄電池斷接動作,總計里程和故障碼信息可正常儲存。組合儀表總計里程跳變問題得以解決。
本文研究的組合儀表總計里程跳變問題為組合儀表軟件設(shè)計不足導(dǎo)致。本研究通過魚骨圖工具,將其應(yīng)用于實(shí)際故障分析。該方法有效、高效,從問題現(xiàn)象出發(fā),快速縮小問題排查范圍的同時,完善檢查了組合儀表軟件總計里程儲存策略,消除組合儀表總計里程跳變問題,保證了路試的正常進(jìn)行。通過研究,還能積累一些解決組合儀表總計里程跳變問題在軟件層面上的解決思路和軟件設(shè)計改進(jìn)方案。