程安宇,趙 恬,申 帥
(重慶郵電大學(xué)自動(dòng)化學(xué)院,重慶 400065)
隨著汽車電子技術(shù)的發(fā)展,越來(lái)越多的汽車電子控制單元(electronic control unit,ECU)被應(yīng)用于汽車控制。傳統(tǒng)的診斷方法在診斷的準(zhǔn)確性、使用方便性等方面都難以適應(yīng)現(xiàn)代汽車技術(shù)的發(fā)展[1],為解決這一問(wèn)題,汽車廠商在車輛ECU軟件系統(tǒng)中增設(shè)診斷協(xié)議部分。診斷功能的實(shí)現(xiàn)是ECU開(kāi)發(fā)過(guò)程中的重要部分[2]。
CAN總線是目前汽車ECU實(shí)現(xiàn)通信的主要網(wǎng)絡(luò)。因此,基于CAN總線的ECU診斷功能的實(shí)現(xiàn)已成為診斷技術(shù)的必然趨勢(shì)。一致性測(cè)試是診斷協(xié)議測(cè)試的一個(gè)重要方面,是協(xié)議開(kāi)發(fā)人員首要關(guān)心的問(wèn)題,它測(cè)試診斷協(xié)議的實(shí)現(xiàn)是否符合協(xié)議規(guī)范。文獻(xiàn)[2]和文獻(xiàn)[3]在診斷協(xié)議的一致性測(cè)試方面測(cè)試用例較少,測(cè)試不全面,不能驗(yàn)證診斷功能是否符合協(xié)議。
本文根據(jù)某汽車廠商ECU的診斷需求規(guī)范,基于CAN總線診斷協(xié)議ISO 15765,設(shè)計(jì)了測(cè)試方案和測(cè)試用例,測(cè)試用例涵蓋需求規(guī)范中的所有診斷數(shù)據(jù),并通過(guò)CANoe總線分析軟件中CAPL編程模塊完成。
CAN總線診斷系統(tǒng)如圖1所示,客戶端向服務(wù)器ECU發(fā)送某服務(wù)的請(qǐng)求報(bào)文,服務(wù)器收到請(qǐng)求報(bào)文,對(duì)請(qǐng)求報(bào)文的格式和內(nèi)容進(jìn)行判斷后,發(fā)送響應(yīng)(肯定或否定響應(yīng))報(bào)文或沒(méi)有響應(yīng)。診斷系統(tǒng)通過(guò)這種方式完成通信和數(shù)據(jù)的交換。
圖1 CAN總線診斷系統(tǒng)組成Fig 1 Composition of CAN bus diagnostic system
根據(jù)開(kāi)放系統(tǒng)互連(open system interconnection,OSI)七層參考模型,CAN總線診斷通信系統(tǒng)分為4層,如圖2所示。應(yīng)用層遵循 ISO 14229—1UDS(unified diagnostic services)或ISO 15765—3中診斷服務(wù)的定義。網(wǎng)絡(luò)層遵循ISO 15765—2實(shí)現(xiàn)數(shù)據(jù)的傳輸?shù)取?shù)據(jù)鏈路層和物理層遵循ISO 11898—1[4]。
圖2 OSI模型中UDS在CAN總線的實(shí)現(xiàn)Fig 2 Implementation of UDS on CAN bus in OSI model
CAN總線診斷協(xié)議ISO 15765中,網(wǎng)絡(luò)層為應(yīng)用層提供服務(wù)接口,應(yīng)用層通過(guò)訪問(wèn)這些服務(wù)接口實(shí)現(xiàn)與網(wǎng)絡(luò)層的信息交互[5]。
在診斷系統(tǒng)的開(kāi)發(fā)過(guò)程中,診斷協(xié)議棧軟件完成了診斷協(xié)議的一致性測(cè)試后,才能將具有診斷功能的ECU應(yīng)用于整車上。診斷協(xié)議棧的測(cè)試流程如圖3所示,首先,分析協(xié)議得到測(cè)試數(shù)據(jù);然后,將此數(shù)據(jù)用于被測(cè)的診斷協(xié)議棧軟件,得到測(cè)試輸出;最后,將測(cè)試輸出與分析協(xié)議得到的預(yù)期結(jié)果相比較,分析測(cè)試結(jié)果的正確與否。如果結(jié)果正確,則測(cè)試通過(guò);如果結(jié)果錯(cuò)誤,則修改被測(cè)軟件存在的問(wèn)題,再次測(cè)試。
圖3 測(cè)試流程Fig 3 Flow chart of test process
診斷結(jié)構(gòu)有3種形式:1)客戶端和服務(wù)器在同一網(wǎng)絡(luò)中直接連接;2)客戶端通過(guò)網(wǎng)關(guān)和服務(wù)器連接;3)客戶端和服務(wù)器在2個(gè)網(wǎng)絡(luò)中,客戶端與主網(wǎng)絡(luò)連接,主網(wǎng)絡(luò)通過(guò)網(wǎng)關(guān)與子網(wǎng)絡(luò)連接。
本文的診斷結(jié)構(gòu)采用第一種形式,客戶端和服務(wù)器ECU在同一網(wǎng)絡(luò)。如圖4所示,服務(wù)器ECU為核心芯片為STM8的車身控制模塊(body control module,BCM),此外還在其上運(yùn)行診斷協(xié)議棧,其中包括:應(yīng)用層、網(wǎng)絡(luò)層和底層軟件。客戶端為PC機(jī),在其上運(yùn)行德國(guó)Vector公司的CANoe軟件,通過(guò)CAPL編程實(shí)現(xiàn)測(cè)試用例來(lái)發(fā)送診斷服務(wù)請(qǐng)求,測(cè)試用例分為網(wǎng)絡(luò)層測(cè)試和應(yīng)用層測(cè)試。
圖4 診斷系統(tǒng)結(jié)構(gòu)Fig 4 Structure of diagnostic system
CAN總線上的數(shù)據(jù)在Trace窗口顯示,以便分析診斷系統(tǒng)通信是否成功和ECU的診斷協(xié)議棧軟件是否符合協(xié)議規(guī)定。
從軟件測(cè)試用例設(shè)計(jì)方法的角度,分為白盒測(cè)試和黑盒測(cè)試[6]。本文采用黑盒測(cè)試,針對(duì)軟件的功能需求與實(shí)現(xiàn)進(jìn)行測(cè)試。不需考慮程序編碼結(jié)構(gòu),測(cè)試者只需了解程序輸入和輸出間的關(guān)系,或是程序的功能。本文依靠程序功能的需求規(guī)范和診斷協(xié)議確定測(cè)試數(shù)據(jù),判定測(cè)試結(jié)果的正確性。
測(cè)試用例設(shè)計(jì)時(shí),需要分析需求規(guī)范,然后確定系統(tǒng)正常的輸入輸出,以驗(yàn)證系統(tǒng)的功能是否正常。由于篇幅限制,這里只列出幾項(xiàng)診斷數(shù)據(jù),如表1所示,ECU診斷數(shù)據(jù)的定義,支持的SID(service identifier)、各SID對(duì)應(yīng)的子功能、如表2所示支持的DID(data identifier)、如表3所示網(wǎng)絡(luò)層時(shí)間參數(shù)值等內(nèi)容。
表1 ECU支持的SID定義Tab 1 Definition of SID supported by ECU
表2 ECU支持的DID定義Tab 2 Definition of DID supported by ECU
表3 網(wǎng)絡(luò)層計(jì)時(shí)器描述Tab 3 Timer description of network layer
測(cè)試用例中不僅有正確的輸入,還應(yīng)有錯(cuò)誤的輸入,來(lái)驗(yàn)證系統(tǒng)對(duì)錯(cuò)誤情況的處理能力。因此,設(shè)計(jì)的測(cè)試用例分為正常用例和異常用例。本文測(cè)試用例的設(shè)計(jì)根據(jù)診斷協(xié)議ISO 15765和汽車廠商規(guī)定的診斷數(shù)據(jù)。
1)正常用例
正常用例,即客戶端按照正確的報(bào)文格式和預(yù)定的步驟發(fā)送請(qǐng)求報(bào)文,以驗(yàn)證網(wǎng)絡(luò)層和應(yīng)用層是否符合協(xié)議和需求規(guī)范。測(cè)試要求如下:
a.正常通信下,測(cè)試網(wǎng)絡(luò)層的數(shù)據(jù)打包,解包和流控制機(jī)制,如(客戶端)發(fā)送單幀、(服務(wù)器)響應(yīng)單幀、發(fā)送多幀、響應(yīng)多幀[7];
b.測(cè)試網(wǎng)絡(luò)層是否能正確識(shí)別數(shù)據(jù)解包的錯(cuò)誤情況;
c.測(cè)試應(yīng)用層服務(wù)在合法請(qǐng)求下,響應(yīng)報(bào)文格式是否正確,響應(yīng)時(shí)間是否符合需求規(guī)定;
d.測(cè)試執(zhí)行應(yīng)用層服務(wù)合法的執(zhí)行順序的情況下,是否實(shí)現(xiàn)了其功能。
2)異常用例
異常用例,即客戶端按照非法的服務(wù)執(zhí)行順序發(fā)送請(qǐng)求報(bào)文,或發(fā)送錯(cuò)誤的報(bào)文格式的請(qǐng)求報(bào)文,以驗(yàn)證網(wǎng)絡(luò)層和應(yīng)用層是否符合協(xié)議規(guī)定。測(cè)試要求如下:
a.客戶端發(fā)送錯(cuò)誤的N—PDU,測(cè)試網(wǎng)絡(luò)層對(duì)錯(cuò)誤情況的處理能力;
b.客戶端超時(shí)發(fā)送診斷請(qǐng)求報(bào)文,測(cè)試網(wǎng)絡(luò)層對(duì)超時(shí)的處理情況;
c.客戶端發(fā)送無(wú)效數(shù)據(jù)幀(除了定義的4種幀類型之外的)或在正常通信時(shí)發(fā)送其它報(bào)文幀打斷正在進(jìn)行的通信過(guò)程,測(cè)試網(wǎng)絡(luò)層的處理能力;
d.測(cè)試應(yīng)用層服務(wù)在非法請(qǐng)求報(bào)文下或非法的服務(wù)執(zhí)行順序時(shí),能否做出正確的否定響應(yīng)。
根據(jù)分析需求規(guī)范的結(jié)果設(shè)計(jì)由DID寫(xiě)入數(shù)據(jù)執(zhí)行的流程如圖5所示,此流程涉及多個(gè)服務(wù)的執(zhí)行,以及單幀、多幀數(shù)據(jù)的傳輸。以此為例說(shuō)明設(shè)計(jì)測(cè)試項(xiàng)。
首先,ECU的會(huì)話模式只有進(jìn)入非默認(rèn)模式時(shí),才能進(jìn)行安全訪問(wèn)請(qǐng)求。安全訪問(wèn)請(qǐng)求服務(wù)成功執(zhí)行后ECU解鎖,如果ECU未成功解鎖,則由否定報(bào)文判斷失敗的原因,修改請(qǐng)求報(bào)文后再次執(zhí)行安全訪問(wèn)請(qǐng)求。ECU解鎖成功后由DID讀出ECU中存儲(chǔ)的數(shù)據(jù),然后執(zhí)行由DID寫(xiě)入數(shù)據(jù)的服務(wù)。為了驗(yàn)證數(shù)據(jù)是否成功寫(xiě)入,將由相同的DID讀出和寫(xiě)入的數(shù)據(jù)相比較,如果讀出和寫(xiě)入的數(shù)據(jù)相同,證明寫(xiě)入成功;反之,則不成功。
圖5 由DID寫(xiě)入數(shù)據(jù)服務(wù)執(zhí)行的流程圖Fig 5 Flow chart excuted by WriteData service
在此流程中,由于數(shù)據(jù)的讀出、寫(xiě)入涉及了多幀傳輸,所以,在此過(guò)程中還應(yīng)測(cè)試ECU的網(wǎng)絡(luò)層計(jì)時(shí)器是否遵循需求規(guī)范,如表3所示。
測(cè)試執(zhí)行分為網(wǎng)絡(luò)層、應(yīng)用層測(cè)試,結(jié)果如表4與表5所示。
ECU尋址方式為物理尋址,請(qǐng)求和響應(yīng)ID分別為0x766,0x7A6。測(cè)試項(xiàng)為客戶端發(fā)送的請(qǐng)求報(bào)文,預(yù)期結(jié)果為分析協(xié)議和需求規(guī)范后得到的ECU應(yīng)做出的反應(yīng)。
測(cè)試的請(qǐng)求和響應(yīng)報(bào)文等有關(guān)信息在Trace窗口顯示,以供測(cè)試者通過(guò)報(bào)文內(nèi)容分析測(cè)試結(jié)果。
表4 網(wǎng)絡(luò)層測(cè)試結(jié)果Tab 4 Test resurt of network layer
表5 應(yīng)用層測(cè)試結(jié)果Tab 5 Test Test result of application layer
表6 BCM診斷功能測(cè)試結(jié)果Tab 6 Test results of BCM diagnostic function
測(cè)試項(xiàng)執(zhí)行后,通過(guò)分析Trace窗口的報(bào)文與預(yù)期結(jié)果相比較,發(fā)現(xiàn)測(cè)試結(jié)果符合預(yù)期結(jié)果。所測(cè)試診斷報(bào)文傳輸機(jī)制、診斷服務(wù)、執(zhí)行流程和錯(cuò)誤處理等內(nèi)容符合診斷協(xié)議規(guī)定。部分測(cè)試結(jié)果如表6所示。
本文通過(guò)研究分析CAN總線診斷系統(tǒng),針對(duì)一種BCM的診斷需求規(guī)范,依據(jù)CAN總線診斷協(xié)議ISO 15765設(shè)計(jì)了測(cè)試方案和用例,并通過(guò)CAPL編程執(zhí)行測(cè)試用例。經(jīng)過(guò)測(cè)試,此BCM診斷協(xié)議棧符合ISO 15765協(xié)議和需求規(guī)定,說(shuō)明此測(cè)試方法能有效地測(cè)試診斷功能和診斷協(xié)議的一致性。
[1] 胡思德.汽車車載網(wǎng)絡(luò)(VAN/CAN/LIN)技術(shù)詳解[M].北京:機(jī)械工業(yè)出版社,2006.
[2] 韓 鑫.電容式混合動(dòng)力汽車離線診斷系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)[D].鎮(zhèn)江:江蘇大學(xué),2011.
[3] 李 銳,王晶瑩,姚 燕,等.基于ISO 15765的車載CAN網(wǎng)絡(luò)診斷設(shè)計(jì)[J].計(jì)算機(jī)工程,2012(4):35-36.
[4] ISO/DIS 15765—2:Road vehicles-diagnostics on controller area networks(CAN)[S].
[5] ISO/DIS 15765—3:Road vehicles-diagnostics on controller area networks(CAN)[S].
[6] 鄭人杰.計(jì)算機(jī)軟件測(cè)試技術(shù)[M].北京:清華大學(xué)出版社,1992.
[7] 常欣紅,于金泳,劉志遠(yuǎn).汽車故障診斷標(biāo)準(zhǔn) ISO 15765的網(wǎng)絡(luò)層分析與實(shí)現(xiàn)[J].汽車技術(shù),2006(9):40-43.
[8] 程安宇,趙國(guó)慶,馮輝宗,等.基于CAN總線的電子控制單元功能測(cè)試方法[J].計(jì)算機(jī)應(yīng)用,2012(1):139 -141.