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