陳思濤 吳長水 羅素云
摘? 要:為了解決某發(fā)動機(jī)電子控制單元測試軟件的測試效率低下與測試數(shù)據(jù)管理的問題,本文設(shè)計了一種發(fā)動機(jī)電子控制單元測試軟件。軟件設(shè)計基于模塊化思想,利用Windows環(huán)境中的C#語言、Visual Studio 2015開發(fā)平臺和SQL Server 2005數(shù)據(jù)庫,實現(xiàn)了具有測試配置簡單、測試數(shù)據(jù)自動保存、導(dǎo)出等功能的測試軟件。軟件應(yīng)用表明,該軟件運行穩(wěn)定、易于操作、提高了發(fā)動機(jī)電子控制單元測試系統(tǒng)的效率,方便了用戶管理數(shù)據(jù)。
關(guān)鍵詞:發(fā)動機(jī)電子控制單元;測試;數(shù)據(jù)庫;軟件
中圖分類號:TP311.5? ? ?文獻(xiàn)標(biāo)識碼:A
Abstract: This paper proposes an electronic control unit (ECU) test software to improve test efficiency and test data management of a certain engine. Based on the idea of modularization, this software is designed by using C# language in Windows environment, Visual Studio 2015 development platform and the SQL Server 2005 database. The completed test software has functions of simple test configuration, automatic test data saving, export, etc. Application results show that the software runs stably and is easy to operate. It helps to improve the efficiency of the engine ECU test system, and facilitate users to manage data.
Keywords: engine ECU; test; database; software
1? ?引言(Introduction)
隨著技術(shù)的發(fā)展,電子產(chǎn)品的日益更替,為了驗證汽車電子控制單元(ECU)的控制策略邏輯的正確性,保證產(chǎn)品質(zhì)量,測試是必不可少的環(huán)節(jié)。ECU產(chǎn)品復(fù)雜度越高,測試越復(fù)雜,測試需求也就越多,為了確保測試中覆蓋所有的ECU工況測試點,人工測試已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足,并且人工可能會出現(xiàn)錯誤,費時費力。因此采用測試軟件對測試系統(tǒng)進(jìn)行測試成為人們關(guān)注的熱點。測試軟件能有效地將人力測試行為轉(zhuǎn)為為機(jī)器執(zhí)行測試,具有節(jié)省人工、縮短測試時間、提高測試效率等優(yōu)點[1-3]。比如,中國西南電子技術(shù)研究通過利用QT語言和python語言所設(shè)計的嵌入式軟件自動化測試及管理系統(tǒng),有效地提高了測試效率和質(zhì)量[4]。吉林大學(xué)所設(shè)計的汽車發(fā)動機(jī)電子控制單元的測試軟件,利用Visual C++6.0和Dreamwaver兩款編程軟件,結(jié)合SCPI指令,提高了發(fā)動機(jī)ECU測試效率,并可對動態(tài)數(shù)據(jù)進(jìn)行監(jiān)控[5]。此外,目前一些測試軟件的開發(fā)較多利用圖形化編程軟件LabView和測試管理軟件TestStand[6],通過在LabView中調(diào)用TsetStand編寫的測試序列,從而達(dá)到自動測試管理,提高測試效率。
本文通過對測試軟件的研究,結(jié)合當(dāng)前應(yīng)用的發(fā)動機(jī)電子控制單元測試系統(tǒng),設(shè)計一種測試軟件。該測試軟件通過前臺界面與后臺數(shù)據(jù)庫進(jìn)行信息交互,將數(shù)據(jù)化的東西轉(zhuǎn)變成圖形化按鈕,使得測試用例的配置簡單易懂,數(shù)據(jù)方便管理,從而提高發(fā)動機(jī)電子控制單元的測試效率。
2? ?設(shè)計要求(Design requirements)
發(fā)動機(jī)電子控制單元(ECU)涉及發(fā)動機(jī)運行狀態(tài),是汽車的核心,其運行狀態(tài)的復(fù)雜性決定了發(fā)動機(jī)ECU需要測量的工況點數(shù)據(jù)眾多,單一靠人工去測量費時費力。因此通過對前人測試軟件的研究,結(jié)合目標(biāo)ECU測試系統(tǒng),所設(shè)計的軟件需具備以下要求:
(1)測試用戶權(quán)限可管理,支持多用戶操作,且每個用戶的記錄可保存;
(2)應(yīng)有足夠的數(shù)據(jù)空間,可供發(fā)動機(jī)ECU眾多工況點的存儲;
(3)發(fā)動機(jī)ECU測試用例配置簡單,測試流程簡易;
(4)測試記錄數(shù)據(jù)可保存、查詢、導(dǎo)出,方便管理;
(5)測試軟件運行穩(wěn)定,易于維護(hù)和升級,界面簡潔美觀。
3? ?系統(tǒng)框架設(shè)計(System framework design)
發(fā)動機(jī)ECU測試系統(tǒng)軟件的設(shè)計主要由六部分組成,分別是用戶登錄管理、通訊連接模塊、測試標(biāo)準(zhǔn)模塊、測試數(shù)據(jù)配置模塊、測試執(zhí)行模塊、測試記錄模塊。軟件各模塊的編寫語言采用C#,它是一個面向組件的程序語言[7],易于學(xué)習(xí),易于移植,靈活性高,是微軟公司為.NET Framwork量身定做的程序語言。用戶的測試數(shù)據(jù)管理采用SQL Server 2005,有著加密功能,安全性更高,全局搜索性更強(qiáng),數(shù)據(jù)存儲量更大[8]。此外,軟件的開發(fā)需要特定的開發(fā)環(huán)境,采用與C#有著密不可分的Visual Studio 2015平臺進(jìn)行軟件開發(fā),Visual Studio功能強(qiáng)大,集成了很多.NET程序,能更好的將C#與.NET Framework進(jìn)行交互,界面設(shè)計直觀化、圖形化。圖1為測試軟件的系統(tǒng)架構(gòu)圖。
4? ?通訊接口設(shè)計(Communication interface design)
軟件與硬件數(shù)據(jù)信息的交互,往往需要一定的通訊方式,常見的TCP\IP通訊、藍(lán)牙通訊、CAN通訊等。對于本文所研究的發(fā)動機(jī)ECU,測試系統(tǒng)采用CAN通訊連接。CAN報文的數(shù)據(jù)傳輸是基于一定波特率進(jìn)行的,報文支持11位標(biāo)準(zhǔn)消息幀和29位擴(kuò)展消息幀[9]。由于絕大多數(shù)測試軟件運行在個人電腦上,而自動測試設(shè)備往往不具有與個人電腦硬件接口相匹配的CAN接口,無法直接進(jìn)行CAN報文信息傳輸。通過選用某型號USB-CAN設(shè)備,把CAN報文形式轉(zhuǎn)換為個人電腦可識別的報文信號,從而實現(xiàn)測試軟件與測試系統(tǒng)設(shè)備的通訊。USB-CAN設(shè)備往往提供API和DLL給用戶進(jìn)行二次開發(fā),通過對APP和DLL的調(diào)用和程序編寫,從而來設(shè)計符合用戶自身的CAN通訊接口程序。圖2為CAN通訊接口設(shè)計流程圖。
首先使用DWORD CanOpenDevice(DWORD DevType, DWORD DevIndex)函數(shù)打開設(shè)備,DevType表示設(shè)備類型,DevIndex表示設(shè)備號;若設(shè)備打開成功,使用DWORD__stdcall InitCan(DWORD DevType, DWORD DevIndex, DWORD CANIndex, P_INIT_CONFIG pInitConfig)函數(shù)去初始化CAN設(shè)備,CANIndex表示第幾路CAN,pInitConfig表示CAN報文設(shè)置的結(jié)構(gòu)體,定義報文傳輸形式。結(jié)構(gòu)體內(nèi)容如下:
{AccCode;AccMask;Reserved;Filter;Timing0;Timing1;Mode;}
AccCode表示驗收碼;AccMask表示屏蔽碼;Reserved表示保留位;Filter表示濾波方式;Timing0、Timing1 組合表示CAN波特率,如Timing0=0x03,Timing1=0x1C,表示波特率為125kbps;Mode表示CAN的模式,包括正常模式、只聽模式。
當(dāng)CAN配置初始化成功,進(jìn)而使用DWORD__stdcall StartCAN(DWORD DevType, DWORD DevIndex, DWORD CANIndex)函數(shù)啟動CAN設(shè)備;每進(jìn)行一次函數(shù)調(diào)用,對返回值ERR_CAN進(jìn)行判斷,查看操作是否成功,不成功則重新執(zhí)行。
當(dāng)CAN啟動成功,接下來準(zhǔn)備CAN信息幀定義,定義一個信息幀結(jié)構(gòu)體CAN_OBJ。結(jié)構(gòu)體內(nèi)容分別定義了幀ID、時間標(biāo)識、幀類型、是否為遠(yuǎn)程幀、是否為擴(kuò)展幀、數(shù)據(jù)長度、數(shù)據(jù)和額外提供的保留位。當(dāng)?shù)卿涇浖?,對需要的參?shù)進(jìn)行定義,啟動CAN即可,這就完成了CAN通訊模塊的設(shè)計。圖3為CAN通訊模塊界面。
5? ?數(shù)據(jù)功能接口設(shè)計(Data function interface design)
發(fā)動機(jī)ECU測試系統(tǒng)的重要一環(huán)是體現(xiàn)在數(shù)據(jù)操作的簡單化和數(shù)據(jù)自動管理方面,優(yōu)秀的測試軟件能夠幫助用戶節(jié)省大量時間去簡化測試配置、更改數(shù)據(jù)和管理數(shù)據(jù)等。數(shù)據(jù)功能接口的設(shè)計是提供用戶在軟件界面配置發(fā)動機(jī)ECU測試工況點的。在Visual Studio 2015平臺下,通過微軟(Microsoft)公司提供的數(shù)據(jù)庫訪問組件和對象的功能[10],可以實現(xiàn)前臺界面與后臺數(shù)據(jù)信息的交互,極大地提高了數(shù)據(jù)交互的能力,因此只要通過數(shù)據(jù)配置接口和編寫相關(guān)的數(shù)據(jù)處理代碼,就可完成數(shù)據(jù)功能接口的設(shè)計,從而提高發(fā)動機(jī)ECU測試系統(tǒng)的測試效率。
5.1? ?ECU電源管理模塊
對于任意自動測試系統(tǒng)來說,能用軟件自動完成的就不要用人工去操作。發(fā)動ECU測試設(shè)備往往需要電源供電,傳統(tǒng)的方式是使用人工直接去操作開關(guān)電源,這樣做既不安全也費時。本文針對發(fā)動機(jī)ECU測試設(shè)備,使用一種串口通訊的方法去控制設(shè)備的電源開關(guān)。將測試設(shè)備電源線連接至程控電源,再通過個人電腦使用USB轉(zhuǎn)RS232去連接程控電源。通過在測試軟件中發(fā)送串口指令,可以控制電源的通斷、電壓等,進(jìn)而實現(xiàn)自動電源管理。圖4為自動電源管理示意圖。
5.2? ?測試數(shù)據(jù)用例模塊
由于發(fā)動機(jī)ECU需要測試點數(shù)據(jù)眾多,簡易的測試用例配置能節(jié)約大量時間,提高測試效率。因此,該軟件通過設(shè)計測試標(biāo)準(zhǔn)、配置測試數(shù)據(jù)、配置分組管理這三步進(jìn)行測試用例設(shè)計。
第一步,測試標(biāo)準(zhǔn)的設(shè)計是發(fā)動機(jī)ECU測試結(jié)果的參照,每個測試數(shù)據(jù)都有一個結(jié)果范圍,發(fā)動機(jī)ECU最終的測試結(jié)果由測試標(biāo)準(zhǔn)決定。在后臺數(shù)據(jù)庫中測試人員導(dǎo)入所有的發(fā)動機(jī)ECU工況點數(shù)據(jù),每個工況點有唯一數(shù)據(jù)ID,每個數(shù)據(jù)ID對應(yīng)不同的測試數(shù)據(jù),是后臺數(shù)據(jù)庫唯一索引依據(jù)。當(dāng)測試人員建立發(fā)動機(jī)ECU測試標(biāo)準(zhǔn)時,首先通過建立標(biāo)準(zhǔn)測試ID,此ID由代碼自動生成,即為建立一個測試標(biāo)準(zhǔn)總表,這由軟件自動完成。在總表里面,通過下拉選項依次選擇相應(yīng)的發(fā)動機(jī)ECU工況點測試數(shù)據(jù),即可完成測試標(biāo)準(zhǔn)的建立。
第二步,測試配置的設(shè)計是建立在指定型號發(fā)動機(jī)ECU測試標(biāo)準(zhǔn)之上,只有在一定的測試標(biāo)準(zhǔn)上建立測試數(shù)據(jù)配置才是有意義的。用戶通過界面下拉選項選擇相應(yīng)測試標(biāo)準(zhǔn),并命名不同配置名稱,不同的配置名稱代表不同的發(fā)動機(jī)ECU工況點數(shù)據(jù),然后再通過測試需求選擇發(fā)動機(jī)ECU測試所需全部數(shù)據(jù)。測試數(shù)據(jù)是通過發(fā)動機(jī)ECU信號類別進(jìn)行分類,方便測試人員快速查找選擇數(shù)據(jù)。
第三步,配置分組管理設(shè)計是配置具體發(fā)動機(jī)ECU測試用例。用戶根據(jù)第二步配置的發(fā)動機(jī)ECU數(shù)據(jù),輸入測試分組名稱,再依照某型號發(fā)動機(jī)ECU測試需求及發(fā)動機(jī)ECU工作順序依次選擇數(shù)據(jù),完成測試用例建立。圖5為測試用例設(shè)計示意圖。
6? 執(zhí)行及測試記錄模塊(Execution and test recording module)
6.1? ?執(zhí)行模塊
軟件的執(zhí)行模塊和數(shù)據(jù)記錄往往是軟件功能強(qiáng)大的體現(xiàn)之一。測試過程需要對測試軟件下發(fā)的數(shù)據(jù)和上傳到測試軟件的數(shù)據(jù)進(jìn)行解析管理。首先當(dāng)下發(fā)數(shù)據(jù)時,執(zhí)行模塊調(diào)用底層函數(shù)庫中ULONG__stdcall Transmit(DWORD DevType, DWORD DevIndex, DWORD CANIndex,
P_CAN_OBJ pSend, ULONG Len)函數(shù),通過USB-CAN傳輸即可完成測試用例的自動下發(fā)。當(dāng)測試對象ECU及測試設(shè)備上傳數(shù)據(jù)時,測試軟件需要對數(shù)據(jù)進(jìn)行解析。在整個測試執(zhí)行過程中,當(dāng)一則CAN信息幀上傳到測試軟件時,CAN通訊模塊自動調(diào)用USB-CAN的驅(qū)動接收函數(shù)ULONG__stdcall Receive(DWORD DevType, DWORD DevIndex, DWORD CANIndex, PVCI_CAN_OBJ pReceive, ULONG Len, INT WaitTime=-1)將接收到的信息幀傳遞給軟件實時監(jiān)聽函數(shù)tmrRead_Tick(),進(jìn)而會自動調(diào)用CAN接收函數(shù)ReadMessages(),該函數(shù)通過讀取USB-CAN接收到的報文,將其拆解成各個字段并拼接成字符串,通過函數(shù)this.lbxRec.Items.Add(str)賦值給待處理緩存數(shù)組lbxRec,為下一次接收準(zhǔn)備;然后調(diào)用CAN報文分析函數(shù)fxMessage(),此函數(shù)負(fù)責(zé)解析報文數(shù)據(jù),然后提取出具體數(shù)據(jù)顯示到軟件執(zhí)行界面。同時,在該軟件測試執(zhí)行模塊中,還提供程控電源COM,測試用例導(dǎo)入、可視化電壓、耐久測試開關(guān)等,這些都為發(fā)動機(jī)ECU測試提供了便利。圖6為執(zhí)行界面。
6.2? ?測試記錄模塊
當(dāng)測試結(jié)束時,完整的測試記錄的分析、保存和導(dǎo)出功能,可以為測試人員對測試設(shè)備進(jìn)行數(shù)據(jù)統(tǒng)計和分析提供方便。測試記錄保存方式以時間測試序列進(jìn)行保存,每結(jié)束一次測試就保存一次,保存分為主表項保存和明顯表保存。當(dāng)查詢記錄時,可根據(jù)時間日期進(jìn)行查詢,方便快速尋找。查詢結(jié)果先顯示主表項,主表項為發(fā)動機(jī)ECU測試流水號,當(dāng)點擊某一主表項時,顯示對應(yīng)的測試明細(xì)表,明細(xì)表記錄了測試的配置。當(dāng)需要導(dǎo)出記錄時,軟件通過調(diào)用第三方插件Interop.Excel.dll可分別導(dǎo)出主表和明細(xì)表。同時,測試記錄添加了測試分析功能,可以對某時間段的測試對象合格率進(jìn)行統(tǒng)計。圖7為測試記錄分析界面。
7? ?軟件應(yīng)用(Software application)
為了測試軟件的運行情況,對某一型號的發(fā)動機(jī)ECU進(jìn)行測試。測試人員首先進(jìn)行硬件連接,包括測試對象連接、測試接口連接和通訊連接;然后開啟軟件,操作流程如下:用戶登錄→CAN通訊連接→測試標(biāo)準(zhǔn)配置→測試用例配
置→測試用例選擇→測試執(zhí)行→測試記錄查詢并分析結(jié)果。測試人員按此操作流程只需要關(guān)心測試數(shù)據(jù)的配置,設(shè)計好功能測試順序,確定對哪些功能進(jìn)行測試,而不需要考慮如何更改數(shù)據(jù),如何檢測功能。測試軟件還支持批量測試,節(jié)省了大量的人力。此外,測試完成后,數(shù)據(jù)可自動保存,方便測試人員查詢。應(yīng)用表明,該測試軟件有效地提高了測試效率,節(jié)省了發(fā)動機(jī)ECU的開發(fā)周期。表1列出了發(fā)動機(jī)ECU自動化測試前后對比。分析可知,整體測試效率提高了73.1%。
8? ?結(jié)論(Conclusion)
本文充分利用了Windows平臺的C#編程語言、SQL Server 2005數(shù)據(jù)庫及Visual Studio 2015開發(fā)環(huán)境各自的優(yōu)點,基于軟件設(shè)計模塊化的思想,從設(shè)計需求出發(fā),依次設(shè)計了通訊模塊、數(shù)據(jù)模塊、執(zhí)行模塊及測試記錄模塊,最后開發(fā)出了測試配置簡單,流程操作簡便,測試記錄自動管理的發(fā)動機(jī)ECU自動測試系統(tǒng)軟件。同時,經(jīng)過實驗證明,該軟件能極大地提高發(fā)動機(jī)ECU自動化測試系統(tǒng)的效率。軟件模塊化的設(shè)計方便后期維護(hù)與升級,但是該軟件存在的問題是個人電腦必須啟用SQL Server服務(wù),否則測試軟件將不能使用,這也是該方法設(shè)計軟件的缺陷。在以后對軟件進(jìn)行升級過程中,將考慮采取其他方法進(jìn)行數(shù)據(jù)交互。
參考文獻(xiàn)(References)
[1] 陳佐,張懷相,方景龍.嵌入式軟件自動化測試技術(shù)[J].計算機(jī)工程與設(shè)計,2018,39(10):3125-3131.
[2] 呂名雪.某嵌入式軟件自動化測試平臺的設(shè)計與實現(xiàn)[D].北京工業(yè)大學(xué),2016.
[3] 陶雪華.汽車電子控制器嵌入式自動化測試系統(tǒng)的開發(fā)設(shè)計[J].內(nèi)燃機(jī)與配件,2018(20):237-238.
[4] 陽長永,王月波,代林.嵌入式軟件自動化測試及管理系統(tǒng)研究[J].計算機(jī)測量與控制,2019,27(09):57-60;75.
[5] 吳昊,李一鳴,付成偉,等.汽車發(fā)動機(jī)電子控制單元的自動測試系統(tǒng)開發(fā)[J].汽車技術(shù),2014(05):35-39.
[6] 孫立行.基于PXI和虛擬儀器的高壓共軌ECU自動測試系統(tǒng)[D].浙江大學(xué),2018.
[7] 于國防,李劍,張玉杰.C#語言Windows程序設(shè)計[M].北京:清華大學(xué)出版社,2015:2-3.
[8] Devraj, G.P. Dixit, P.K. Katiyar, et al. Design and implementation of on-line data submission and retrieval system for coordinated research trials in food legumes[J]. Legume Research, 2016,39(3):442-447.
[9] 李秀娟,徐惠鋼,謝啟.基于虛擬儀器技術(shù)的發(fā)動機(jī)ECU自動測試系統(tǒng)[J].機(jī)床與液壓,2015,43(21):138-141.
[10] Visual Studio Document center[Z]. https://docs.microsoft.com.