徐永新,劉建飛,華 典,朱 娟
(濰柴動(dòng)力股份有限公司,山東 濰坊 261061)
科技的進(jìn)步與發(fā)展使得人們的生活與工作更加電子化、自動(dòng)化與智能化,汽車電子技術(shù)也在不斷地創(chuàng)新與發(fā)展。隨著控制器功能的不斷擴(kuò)張,各個(gè)廠家對(duì)自身產(chǎn)品的控制和信息讀取提出了更多的要求,為了規(guī)范各個(gè)制造商的產(chǎn)品的質(zhì)量和規(guī)范性,國際規(guī)定了統(tǒng)一的協(xié)議來滿足制造商的需求。
基于控制器局域網(wǎng) (Controller Area Network, CAN)總線的統(tǒng)一診斷服務(wù)(Unified Diagnostic Services, UDS)協(xié)議診斷被廣泛應(yīng)用到國內(nèi)外的控制器開發(fā)中,來滿足自身的開發(fā)需求和客戶的下線與使用需求。電子控制單元(Electronic Control Unit, ECU)的UDS協(xié)議及功能的正確性必須得到充分的保證,便于產(chǎn)品的推廣及應(yīng)用。
目前測試方法更多的偏向使用報(bào)文收發(fā)工具進(jìn)行手動(dòng)測試或使用專用診斷工具測試;專用工具無法提前開發(fā),常常會(huì)出現(xiàn)因工具未及時(shí)交付導(dǎo)致控制器本身沒有全面測試而出現(xiàn)質(zhì)量問題,導(dǎo)致ECU軟件開發(fā)成本的增加。UDS診斷系統(tǒng)自動(dòng)化測試可以高效完成基于報(bào)文交互的全面測試,從而降低缺陷率,減少軟件開發(fā)成本。
ECU的UDS診斷測試主要分為診斷協(xié)議測試和診斷功能測試。
UDS協(xié)議是基于開放系統(tǒng)互聯(lián)(Open Systems Interconnection, OSI)參考模型設(shè)計(jì),采用分層結(jié)構(gòu),主要包括物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、會(huì)話層和應(yīng)用層。ISO14229協(xié)議定義了通用診斷服務(wù),這些診斷服務(wù)允許診斷儀控制車輛內(nèi)部ECU內(nèi)的診斷功能,但是ISO14229協(xié)議僅定義了應(yīng)用層的服務(wù),而ISO15765協(xié)議是基于CAN總線實(shí)現(xiàn)了UDS協(xié)議,二者與OSI的映射關(guān)系如表1所示。
表1 UDS協(xié)議與OSI的映射關(guān)系
本文主要闡述的UDS診斷協(xié)議為應(yīng)用層的ISO14229協(xié)議。
UDS協(xié)議診斷功能單元主要有診斷和通信管理功能單元、數(shù)據(jù)傳輸功能單元、傳輸儲(chǔ)存的數(shù)據(jù)功能單元、輸入輸出控制功能單元、遠(yuǎn)程激活例程功能單元、上傳下載功能單元,本文主要闡述表2中UDS相關(guān)服務(wù)。
表2 UDS服務(wù)列表
UDS診斷系統(tǒng)中有三種會(huì)話模式,分別是正常會(huì)話模式、擴(kuò)展模式及編程模式。其中正常會(huì)話模式,是ECU根據(jù)輸入接口信號(hào)的變化進(jìn)行邏輯計(jì)算從而控制車輛行駛;擴(kuò)展模式主要用于外部維修及執(zhí)行器測試;而編程模式則是進(jìn)行ECU內(nèi)部數(shù)據(jù)刷寫。當(dāng)存在外部請(qǐng)求時(shí),會(huì)根據(jù)0x10服務(wù)進(jìn)行會(huì)話模式的切換。
然而為保證ECU數(shù)據(jù)的安全性及軟件的正常運(yùn)行,擴(kuò)展模式及編程模式下的外部請(qǐng)求操作需要經(jīng)過0x27服務(wù)的密鑰安全校驗(yàn),順利通過安全校驗(yàn)則解鎖ECU,進(jìn)行維修測試或數(shù)據(jù)刷寫等操作,否則外部請(qǐng)求無效,ECU會(huì)回復(fù)響應(yīng)以提示安全校驗(yàn)失敗。具體流程如圖1所示。
圖1 安全訪問流程圖
診斷協(xié)議主要測試國際標(biāo)準(zhǔn)化組織(International Organization for Standardization, ISO)標(biāo)準(zhǔn)協(xié)議中規(guī)定的內(nèi)容,借助CANoe等診斷工具即可完成;而診斷功能主要測試ECU的輸入輸出功能是否滿足軟件開發(fā)需求,比如外部設(shè)備請(qǐng)求ECU輸出啟動(dòng)繼電器吸合的控制信號(hào),則需要觀察啟動(dòng)繼電器負(fù)載是否有輸出。本文著重介紹UDS診斷功能的自動(dòng)化測試。
測試UDS診斷功能需要搭建一個(gè)閉環(huán)系統(tǒng),從硬件輸入信號(hào)的變化到ECU的響應(yīng)輸出最終到執(zhí)行器的實(shí)際動(dòng)作檢測,才是一條完整的測試流程并能保證測試的有效性及功能的正確性。通常的閉環(huán)測試系統(tǒng)如圖2所示,主要包括被測ECU、硬件在環(huán)測試設(shè)備(Hareware In the Loop, HIL)臺(tái)架(含有虛擬或真實(shí)負(fù)載)、診斷工具(Vector Hardware)、標(biāo)定工具(Integrated Calibration and Acquisition Systems, INCA)、上位機(jī)。
圖2 測試閉環(huán)系統(tǒng)
依據(jù)上述的測試平臺(tái),需要工程師對(duì)ECU中的每一條數(shù)據(jù)流、每一個(gè)執(zhí)行器的診斷進(jìn)行測試,數(shù)量之多,耗時(shí)耗力,且UDS的診斷測試操作相似,非常適合自動(dòng)化測試及測試用例的移植。本文依據(jù)自動(dòng)化測試軟件ECU-TEST進(jìn)行測試用例的開發(fā)。
ECU-TEST工具可以與HIL設(shè)備、INCA、Vector-Hardware進(jìn)行鏈接,并通過應(yīng)用程序編程接口(Application Programming Interface, API)函數(shù)對(duì)HIL設(shè)備上位機(jī)軟件、INCA、Vector-Hardware進(jìn)行讀寫操作,而且ECU-TEST軟件支持二次開發(fā),可以通過開發(fā)Python腳本實(shí)現(xiàn)特殊的測試需求,保證測試用例的順利進(jìn)行。
根據(jù)圖2所示的測試環(huán)境,通過ECU-TEST自動(dòng)化測試軟件將Vector、INCA及HIL上位機(jī)軟件連接起來,形式閉環(huán)測試系統(tǒng),并在ECU-TEST中編制測試用例及相應(yīng)的腳本實(shí)現(xiàn)UDS診斷系統(tǒng)的自動(dòng)化測試。
數(shù)據(jù)流測試是根據(jù)ISO14229協(xié)議中的0x22服務(wù)獲取ECU中相關(guān)變量的數(shù)值,該服務(wù)不需要經(jīng)過ECU的安全訪問。
數(shù)據(jù)識(shí)別符(Data Identifier, DID)數(shù)據(jù)流信息匯總?cè)绫?所示,在測試過程中根據(jù)DID碼獲取ECU的響應(yīng),并將返回值根據(jù)其基礎(chǔ)數(shù)據(jù)類型、因子及偏移進(jìn)行換算與INCA(XCP:1協(xié)議)監(jiān)測值進(jìn)行對(duì)比,判斷DID碼返回值是否正確。
表3 DID數(shù)據(jù)流信息
DID數(shù)據(jù)流的自動(dòng)化測試采用ECU-TEST的Parameter Generator功能實(shí)現(xiàn),可以在20 min內(nèi)完成300條DID數(shù)據(jù)流的自動(dòng)化測試,其測試流程如圖3所示。該測試方法簡單、高效且便于移植。
圖3 DID數(shù)據(jù)流測試流程
UDS的執(zhí)行器測試與服務(wù)診斷測試,使用ISO14229協(xié)議的0x2F服務(wù)及0x31服務(wù),需要經(jīng)過ECU的安全訪問才可以進(jìn)行后續(xù)操作,如圖1所示。
為確保ECU軟件及整車的行駛安全性,不同的控制器、相同的控制器不同的功能都會(huì)有各自的安全校驗(yàn)算法。因此,診斷功能的自動(dòng)化測試難點(diǎn)及關(guān)鍵點(diǎn)就是如何與ECU完成安全校驗(yàn)。
ECU安全校驗(yàn)算法文件是ECU的門戶,在ECU的生命周期中密級(jí)是最高的,所以無法獲取該文件中的具體算法,因而可以使用腳本調(diào)用該算法文件間接實(shí)現(xiàn)全面的自動(dòng)化測試。通過ECU-TEST調(diào)用Vector的API函數(shù)模擬圖1的安全訪問過程,在獲取到Seed時(shí)調(diào)用Python腳本計(jì)算出Key,然后再通過Vector的API函數(shù)發(fā)送給ECU,從而實(shí)現(xiàn)與ECU的安全校驗(yàn)。安全訪問的自動(dòng)化測試用例流程如圖4所示,圖5為某ECU安全訪問自動(dòng)化測試順利通過安全訪問的測試報(bào)告。
圖4 安全訪問測試流程
圖5 安全訪問報(bào)告
將安全訪問的自動(dòng)化測試用例封裝成模塊庫,可以被ECU各執(zhí)行器的測試任意調(diào)用。診斷功能的自動(dòng)化測試流程如圖6所示,其中“安全訪問”是對(duì)安全訪問自動(dòng)測試用例模塊庫的調(diào)用。
圖6 執(zhí)行器自動(dòng)化測試
某發(fā)動(dòng)機(jī)ECU執(zhí)行器測試的自動(dòng)化測試用例如圖7所示,測試報(bào)告如圖8所示。
圖7 某發(fā)動(dòng)機(jī)ECU執(zhí)行器診斷自動(dòng)測試用例
圖8 測試報(bào)告
通過對(duì)某發(fā)動(dòng)機(jī)ECU執(zhí)行器診斷功能的測試,充分證明該自動(dòng)測試方法可以順利通過ECU的安全訪問并完成對(duì)ECU數(shù)據(jù)流讀取、執(zhí)行器測試和服務(wù)診斷功能的驗(yàn)證,大大縮減了ECU軟件開發(fā)過程中的重復(fù)性測試的工作量,保證了軟件測試的高效性和一致性,有效保障了軟件的開發(fā)進(jìn)度及UDS診斷系統(tǒng)質(zhì)量。