郭佳,金鑫,鄧煜
(陜西重型汽車有限公司,陜西 西安 710200)
當(dāng)前汽車控制器的開發(fā)大都采用V流程開發(fā)模式。V流程大致可以用圖1表示,分為系統(tǒng)需求分析、架構(gòu)設(shè)計、模型設(shè)計、模型測試(MIL)、代碼生成、代碼測試(SIL)、處理器在環(huán)測試(PIL)、硬件在環(huán)測試(HIL)[1]。左邊是開發(fā)流程,右邊是對應(yīng)的是測試流程,每個階段的開發(fā)和測試流程都互相對應(yīng)[2]。
圖1 V流程開發(fā)
與V流程相對應(yīng)的是汽車控制器的開發(fā)方法——基于模型設(shè)計(MBD),MBD已經(jīng)成為當(dāng)前汽車控制器開發(fā)的主流方法[3]。基于模型設(shè)計采用建模軟件完成控制策略建模,模型完成后自動生成代碼,然后控制策略代碼與底層驅(qū)動代碼集成,最后下載到目標(biāo)控制器中。為了保證開發(fā)質(zhì)量,整個開發(fā)方法中推薦有相應(yīng)的測試環(huán)節(jié):模型完成后需要進(jìn)行模型測試(MIL),模型自動生成代碼后需要對代碼進(jìn)行測試(SIL),代碼經(jīng)過編譯器編譯生成可執(zhí)行文件下載到控制器中,需要處理器在環(huán)測試(PIL),還需要對整個控制器進(jìn)行硬件在環(huán)測試(HIL)。整個過程環(huán)環(huán)相扣,需要一步一步按照MIL、SIL、PIL和HIL執(zhí)行,只有這樣才能開發(fā)出符合預(yù)期的可靠的一款控制器。否則在實車的復(fù)雜工況下可能會出現(xiàn)一些故障無法定位的問題。
另外,在《GB∕T 34590.6-2017 道路車輛 功能安全 第6部分:產(chǎn)品開發(fā):軟件層面》的9.4.6章節(jié)中指出:對于軟件單元測試的測試環(huán)境,應(yīng)盡可能地接近目標(biāo)環(huán)境。如果軟件單元測試不是在目標(biāo)環(huán)境下執(zhí)行,應(yīng)分析目標(biāo)代碼與源代碼的差異,以便在后續(xù)測試階段的目標(biāo)環(huán)境中,定義額外的測試。因此針對基于模型設(shè)計的方法中,需要進(jìn)行模型環(huán)境下的測試,即MIL;模型轉(zhuǎn)換成代碼后,需要進(jìn)行代碼環(huán)境下的測試,即SIL;代碼編譯后下載到處理器中,需要進(jìn)行處理器環(huán)境測試,即PIL;最后是模擬整個實車環(huán)境的硬件在環(huán)測試,即HIL測試。”
圖2 背靠背測試
PIL測試(Processor-in-the-Loop-Testing)是發(fā)生在SIL測試之后,在HIL測試之前。類似SIL測試,PIL測試是為了驗證軟件代碼在仿真的非實時控制系統(tǒng)中的正確性。在此情況下,程序是在實際的嵌入式處理器或者指令集仿真器上執(zhí)行的[4]。因此,可以通過PIL測試來驗證嵌入式對象代碼在處理器中的功能行為。通過PIL測試,不僅可以評估不同的硬件、編譯器組合情況下處理數(shù)據(jù)的方式有所區(qū)別,還可以測試模型環(huán)境無法測試出的一些行為(如硬件優(yōu)化代碼的使用)。同時也可以讀寫程序中變量,獲取輸入控制流。PIL測試原理圖如下圖3所示。
圖3 PIL測試原理
PIL測試是基于模型設(shè)計控制器中的一個重要環(huán)節(jié),是確??刂破骶哂休^高可靠性的一種重要手段,本文就是研究了一種自動化執(zhí)行PIL測試的方法:借助德國PikeTec公司提供的嵌入式系統(tǒng)測試工具TPT軟件和PLS公司的調(diào)試軟件UDE(Universal Debug Engine)集成來提供PIL自動化測試技術(shù)。
PIL測試原理如圖4所示,首先搭建控制算法模型,將模型生成代碼,生成代碼后下載到嵌入式處理器里,然后通過調(diào)試器與嵌入式處理器相連,再通過調(diào)試軟件調(diào)試目標(biāo)嵌入式處理器中的代碼。調(diào)試軟件一般都包含設(shè)置斷點,讀取變量值以及給變量賦值等調(diào)試功能,這是一種手動PIL測試,本文是在此基礎(chǔ)上,加入自動化測試軟件,通過自動化測試軟件自動調(diào)用調(diào)試軟件進(jìn)行自動化PIL測試。
圖4 自動化PIL測試原理圖
本文中的控制模型是在當(dāng)前主流模型設(shè)計軟件MATL-AB/Simulink/Staflow環(huán)境下搭建的,搭建完模型首先需要對模型進(jìn)行仿真,仿真通過只是一個基本的要求,說明模型沒有語法類的錯誤,并不保證模型算法的輸出結(jié)果與期望一致。為了驗證模型算法的輸出結(jié)果與期望值的一致性,就需要對模型進(jìn)行測試,也就是前面提到的模型在環(huán)測試(MIL),MATLAB/Simulink自帶一些工具箱就可以完成對模型的測試,還有一些第三方軟件可以進(jìn)行模型測試。模型通過測試后,就基本充分驗證了模型的正確性,用正確的模型再進(jìn)行代碼生成。
MATLAB/Simulink自帶有生成嵌入式控制器代碼的工具——Embedded Code。Embedded Code工具是一種目標(biāo)語言編譯器,即將模型編譯成目標(biāo)代碼——嵌入式代碼。正如前文提到的,這種編譯器在編譯過程中也有可能引入一些因為編譯本身原因的錯誤,導(dǎo)致生成代碼可靠性不確定,因為我們需要對生成的代碼進(jìn)行代碼測試,也就是我們常說的代碼在環(huán)測試(SIL),經(jīng)過SIL之后,基本認(rèn)為生成的代碼安全可靠,就可以下載到嵌入式控制器中了。
本文中嵌入式硬件采用搭載英飛凌公司TC297處理器的開發(fā)板,該開發(fā)板支持?jǐn)?shù)據(jù)的下載、在線調(diào)試,同時有基本的輸入開關(guān)用來給控制器輸入信號,有輸出指示燈用來觀測輸出結(jié)果。
本文用到的在線調(diào)試工具是PLS開發(fā)的在線調(diào)試工具UDE。UDE支持主流的16/32位單片機(jī)產(chǎn)品,如英飛凌32位Aurix系列、飛思卡爾PowerArchitecture系列??梢詫崿F(xiàn)PIL自動化測試的測試軟件有多種,需要通盤考慮所使用的嵌入式控制器和在線調(diào)試工具來選擇相應(yīng)的PIL測試軟件。本文以TPT軟件為例,TPT軟件是由全球知名的基于模型的嵌入式系統(tǒng)測試工具軟件供應(yīng)商PikeTec開發(fā), TPT全方位支持MIL測試,SIL測試和PIL測試。TPT支持所有的測試過程包括測試建模、測試執(zhí)行、測試評估以及測試報告的生成。
在MATLAB的Simulink/stateflow環(huán)境下搭建一個簡單的燈控算法模型如下圖5,算法大致為打開不同的開關(guān),然后調(diào)用燈光控制函數(shù),執(zhí)行不同的亮度。為了敘述方便,設(shè)計算法為:當(dāng)開關(guān)(light_switch)為1擋時,輸出燈光強(qiáng)度(headlight)為1,開關(guān)為2時輸出燈光強(qiáng)度為2,開關(guān)為0時關(guān)閉燈具。左邊是開關(guān)選擇,右邊是燈光亮度算法。
圖5 亮度控制算法模型
按照前文敘述的,在模型完成之后,代碼生成之前,我們需要進(jìn)行MIL測試,本文通過Simulink自帶的Test Harness工具完成了MIL測試。同時為了提高代碼的可讀性,在生成代碼前進(jìn)行代碼生成配置時將生成代碼的輸入輸出接口變量名進(jìn)行自定義,生成的核心算法代碼如下:
在編譯器中編譯需要測試的軟件代碼,生成elf文件(或者其他類型可執(zhí)行文件),然后在UDE中導(dǎo)入elf文件,根據(jù)測試需要設(shè)置幾個斷點,可以進(jìn)行調(diào)試工作,如圖6所示:
圖6 在源文件中設(shè)置斷點
打開Execution->Platform Configuration進(jìn)行平臺配置,新建FUSION Platform,在右側(cè)添加節(jié)點,選擇PLS UDE Node,完成在FUSION平臺中新建PLS UDE節(jié)點,并完成相應(yīng)的設(shè)置,包括制定UDE的工作空間文件加載,elf文件加載,和軟件源代碼路徑加載等。同時需要在TPT完成斷點的設(shè)置,設(shè)置與UDE中一致的斷點,設(shè)置斷點時需要制定源文件,斷點的行數(shù),斷點的執(zhí)行順序,以及可以對變量進(jìn)行讀寫設(shè)置。本示例中設(shè)置與源文件中對應(yīng)的兩個變量,headlight和light_switch, headlight為輸出值,只需要讀取即可,因此設(shè)置為read,light_switch為條件判斷變量,需要寫入,因此設(shè)置為write。如圖7和圖8所示,圖7是在建立FUSION平臺中新建PLS UDE節(jié)點,圖8是完成調(diào)用UDE環(huán)境的設(shè)置。
圖7 FUSION平臺中新建PLS UDE節(jié)點
圖8 TPT進(jìn)行PIL測試工程設(shè)置
在設(shè)計測試用例時,UDE無法直接識別TPT測試用例中的變量,需要通過Mapping映射來對應(yīng)兩者的關(guān)系,可以打開聲明編譯器View->Declaration Editor,通過Import添加被測代碼變量接口,之后在Mappings中注明變量改動之處。Mapping變量之后就打通了TPT與UDE的調(diào)用接口了。然后就可以在TPT中對變量進(jìn)行測試用例設(shè)計,設(shè)計變量為讀或者寫,也可以對讀取來的變量和特定值進(jìn)行比較,測試變量是否滿足需求。本示例中,為了方便,在TPT中設(shè)計的兩個變量headlight和light_switch和UDE調(diào)試工程中的變量名一樣,完成兩者的關(guān)聯(lián)后,在TPT中設(shè)計測試用例如下,在Channel中選擇變量light_switch等于1時,Compare比較headlight是否為1,然后wait等待1s。測試用例設(shè)計如下圖9。設(shè)計完測試用例后,還可以設(shè)計不同的測試順序,形成測試集。
圖9 設(shè)計測試用例
測試用例設(shè)計完了之后,可以設(shè)置測試用例的執(zhí)行順序,可以選擇執(zhí)行某個特定的測試集,也可以全選,按照設(shè)定的順序執(zhí)行,點擊運(yùn)行后,可以在圖10中看到當(dāng)前執(zhí)行到那個測試階段。測試執(zhí)行時可以看到UDE界面被TPT調(diào)用在自動的調(diào)試代碼,并按照之前設(shè)計斷點,不停地在斷點處賦值、讀值、作比較,自動完成測試。為了方便,在UDE中打開watch窗口,可以看到UDE環(huán)境中headlight和light_switch兩個變量當(dāng)前被自動執(zhí)行時的變化,如圖11。同時在TPT執(zhí)行界面可以看到TPT中聲明的變量,定義的斷點,參數(shù)初始化,調(diào)試過程中讀寫變量的值等信息,這些調(diào)試的過程與之前在Configure PLS UDE中配置相對應(yīng)。
圖10 設(shè)計測試順序
圖11 UDE環(huán)境被TPT軟件自動調(diào)用并自動測試代碼
完成測試后,會自動生成測試報告,測試報告會首先有個測試概述,可以看到執(zhí)行了哪些測試集,測試的通過率,下面是詳細(xì)的測試結(jié)果。從上面的概述中可以隨意跳轉(zhuǎn)到你關(guān)注的測試點,關(guān)注詳細(xì)的測試結(jié)果,供分析參考,圖12為本示例設(shè)計的一個測試用例的測試報告,從報告中可以看出測試全綠,全部通過,通過前面設(shè)計的代碼也可以看出當(dāng)light_switch為1時,headlight就是為1,我們設(shè)計的測試用例也是給light_switch賦值1時比較headlight的值是否為1,為1時即測試通過。
圖12 測試報告
PIL測試作為控制器正向開發(fā)的一個環(huán)節(jié)或者疑難問題分析的一種重要手段,其作用越來越重要。而常規(guī)的手動調(diào),難以實現(xiàn)自動化,測試效率低,難以滿足工程化的測試要求。本文通過分析當(dāng)前汽車控制器開發(fā)流程,分析PIL測試是控制器開發(fā)中的重要一環(huán)節(jié),并分析了PIL測試原理,介紹了PIL測試的工具鏈,最后通過一個例子介紹了用TPT軟件進(jìn)行PIL自動化測試過程,通過整個過程,可以看出借助TPT軟件,可以方便地實現(xiàn)PIL自動化測試,整個測試過程也是一種圖形化的建模過程。這種測試建模的方式大大降低了測試用例的編寫難度,同時測試過程是一種自動化的執(zhí)行,可以清楚地看到TPT調(diào)用編譯軟件UDE進(jìn)行測試,最后形成測試報告。這種基于TPT軟件的PIL自動化測試的優(yōu)點概括起來就是:測試用例圖形化設(shè)計,自動化執(zhí)行,自動輸出測試報告。另外,TPT軟件還擅長實現(xiàn)基于模型設(shè)計的MIL測試和SIL測試,同時還可以實現(xiàn)MIL測試和SIL測試的背靠背測試對比,可以進(jìn)行MIL測試和PIL測試的背靠背測試對比,整個測試過可以有效保證控制器的開發(fā)質(zhì)量。