郭佳,金鑫,鄧煜
(陜西重型汽車有限公司,陜西 西安 710200)
當前汽車控制器的開發大都采用V流程開發模式。V流程大致可以用圖1表示,分為系統需求分析、架構設計、模型設計、模型測試(MIL)、代碼生成、代碼測試(SIL)、處理器在環測試(PIL)、硬件在環測試(HIL)[1]。左邊是開發流程,右邊是對應的是測試流程,每個階段的開發和測試流程都互相對應[2]。

圖1 V流程開發
與V流程相對應的是汽車控制器的開發方法——基于模型設計(MBD),MBD已經成為當前汽車控制器開發的主流方法[3]。基于模型設計采用建模軟件完成控制策略建模,模型完成后自動生成代碼,然后控制策略代碼與底層驅動代碼集成,最后下載到目標控制器中。為了保證開發質量,整個開發方法中推薦有相應的測試環節:模型完成后需要進行模型測試(MIL),模型自動生成代碼后需要對代碼進行測試(SIL),代碼經過編譯器編譯生成可執行文件下載到控制器中,需要處理器在環測試(PIL),還需要對整個控制器進行硬件在環測試(HIL)。整個過程環環相扣,需要一步一步按照MIL、SIL、PIL和HIL執行,只有這樣才能開發出符合預期的可靠的一款控制器。否則在實車的復雜工況下可能會出現一些故障無法定位的問題。
另外,在《GB∕T 34590.6-2017 道路車輛 功能安全 第6部分:產品開發:軟件層面》的9.4.6章節中指出:對于軟件單元測試的測試環境,應盡可能地接近目標環境。如果軟件單元測試不是在目標環境下執行,應分析目標代碼與源代碼的差異,以便在后續測試階段的目標環境中,定義額外的測試。因此針對基于模型設計的方法中,需要進行模型環境下的測試,即MIL;模型轉換成代碼后,需要進行代碼環境下的測試,即SIL;代碼編譯后下載到處理器中,需要進行處理器環境測試,即PIL;最后是模擬整個實車環境的硬件在環測試,即HIL測試。”

圖2 背靠背測試
PIL測試(Processor-in-the-Loop-Testing)是發生在SIL測試之后,在HIL測試之前。類似SIL測試,PIL測試是為了驗證軟件代碼在仿真的非實時控制系統中的正確性。在此情況下,程序是在實際的嵌入式處理器或者指令集仿真器上執行的[4]。因此,可以通過PIL測試來驗證嵌入式對象代碼在處理器中的功能行為。通過PIL測試,不僅可以評估不同的硬件、編譯器組合情況下處理數據的方式有所區別,還可以測試模型環境無法測試出的一些行為(如硬件優化代碼的使用)。同時也可以讀寫程序中變量,獲取輸入控制流。PIL測試原理圖如下圖3所示。

圖3 PIL測試原理
PIL測試是基于模型設計控制器中的一個重要環節,是確保控制器具有較高可靠性的一種重要手段,本文就是研究了一種自動化執行PIL測試的方法:借助德國PikeTec公司提供的嵌入式系統測試工具TPT軟件和PLS公司的調試軟件UDE(Universal Debug Engine)集成來提供PIL自動化測試技術。
PIL測試原理如圖4所示,首先搭建控制算法模型,將模型生成代碼,生成代碼后下載到嵌入式處理器里,然后通過調試器與嵌入式處理器相連,再通過調試軟件調試目標嵌入式處理器中的代碼。調試軟件一般都包含設置斷點,讀取變量值以及給變量賦值等調試功能,這是一種手動PIL測試,本文是在此基礎上,加入自動化測試軟件,通過自動化測試軟件自動調用調試軟件進行自動化PIL測試。

圖4 自動化PIL測試原理圖
本文中的控制模型是在當前主流模型設計軟件MATL-AB/Simulink/Staflow環境下搭建的,搭建完模型首先需要對模型進行仿真,仿真通過只是一個基本的要求,說明模型沒有語法類的錯誤,并不保證模型算法的輸出結果與期望一致。為了驗證模型算法的輸出結果與期望值的一致性,就需要對模型進行測試,也就是前面提到的模型在環測試(MIL),MATLAB/Simulink自帶一些工具箱就可以完成對模型的測試,還有一些第三方軟件可以進行模型測試。模型通過測試后,就基本充分驗證了模型的正確性,用正確的模型再進行代碼生成。
MATLAB/Simulink自帶有生成嵌入式控制器代碼的工具——Embedded Code。Embedded Code工具是一種目標語言編譯器,即將模型編譯成目標代碼——嵌入式代碼。正如前文提到的,這種編譯器在編譯過程中也有可能引入一些因為編譯本身原因的錯誤,導致生成代碼可靠性不確定,因為我們需要對生成的代碼進行代碼測試,也就是我們常說的代碼在環測試(SIL),經過SIL之后,基本認為生成的代碼安全可靠,就可以下載到嵌入式控制器中了。
本文中嵌入式硬件采用搭載英飛凌公司TC297處理器的開發板,該開發板支持數據的下載、在線調試,同時有基本的輸入開關用來給控制器輸入信號,有輸出指示燈用來觀測輸出結果。
本文用到的在線調試工具是PLS開發的在線調試工具UDE。UDE支持主流的16/32位單片機產品,如英飛凌32位Aurix系列、飛思卡爾PowerArchitecture系列。可以實現PIL自動化測試的測試軟件有多種,需要通盤考慮所使用的嵌入式控制器和在線調試工具來選擇相應的PIL測試軟件。本文以TPT軟件為例,TPT軟件是由全球知名的基于模型的嵌入式系統測試工具軟件供應商PikeTec開發, TPT全方位支持MIL測試,SIL測試和PIL測試。TPT支持所有的測試過程包括測試建模、測試執行、測試評估以及測試報告的生成。
在MATLAB的Simulink/stateflow環境下搭建一個簡單的燈控算法模型如下圖5,算法大致為打開不同的開關,然后調用燈光控制函數,執行不同的亮度。為了敘述方便,設計算法為:當開關(light_switch)為1擋時,輸出燈光強度(headlight)為1,開關為2時輸出燈光強度為2,開關為0時關閉燈具。左邊是開關選擇,右邊是燈光亮度算法。

圖5 亮度控制算法模型
按照前文敘述的,在模型完成之后,代碼生成之前,我們需要進行MIL測試,本文通過Simulink自帶的Test Harness工具完成了MIL測試。同時為了提高代碼的可讀性,在生成代碼前進行代碼生成配置時將生成代碼的輸入輸出接口變量名進行自定義,生成的核心算法代碼如下:


在編譯器中編譯需要測試的軟件代碼,生成elf文件(或者其他類型可執行文件),然后在UDE中導入elf文件,根據測試需要設置幾個斷點,可以進行調試工作,如圖6所示:

圖6 在源文件中設置斷點
打開Execution->Platform Configuration進行平臺配置,新建FUSION Platform,在右側添加節點,選擇PLS UDE Node,完成在FUSION平臺中新建PLS UDE節點,并完成相應的設置,包括制定UDE的工作空間文件加載,elf文件加載,和軟件源代碼路徑加載等。同時需要在TPT完成斷點的設置,設置與UDE中一致的斷點,設置斷點時需要制定源文件,斷點的行數,斷點的執行順序,以及可以對變量進行讀寫設置。本示例中設置與源文件中對應的兩個變量,headlight和light_switch, headlight為輸出值,只需要讀取即可,因此設置為read,light_switch為條件判斷變量,需要寫入,因此設置為write。如圖7和圖8所示,圖7是在建立FUSION平臺中新建PLS UDE節點,圖8是完成調用UDE環境的設置。

圖7 FUSION平臺中新建PLS UDE節點

圖8 TPT進行PIL測試工程設置
在設計測試用例時,UDE無法直接識別TPT測試用例中的變量,需要通過Mapping映射來對應兩者的關系,可以打開聲明編譯器View->Declaration Editor,通過Import添加被測代碼變量接口,之后在Mappings中注明變量改動之處。Mapping變量之后就打通了TPT與UDE的調用接口了。然后就可以在TPT中對變量進行測試用例設計,設計變量為讀或者寫,也可以對讀取來的變量和特定值進行比較,測試變量是否滿足需求。本示例中,為了方便,在TPT中設計的兩個變量headlight和light_switch和UDE調試工程中的變量名一樣,完成兩者的關聯后,在TPT中設計測試用例如下,在Channel中選擇變量light_switch等于1時,Compare比較headlight是否為1,然后wait等待1s。測試用例設計如下圖9。設計完測試用例后,還可以設計不同的測試順序,形成測試集。

圖9 設計測試用例
測試用例設計完了之后,可以設置測試用例的執行順序,可以選擇執行某個特定的測試集,也可以全選,按照設定的順序執行,點擊運行后,可以在圖10中看到當前執行到那個測試階段。測試執行時可以看到UDE界面被TPT調用在自動的調試代碼,并按照之前設計斷點,不停地在斷點處賦值、讀值、作比較,自動完成測試。為了方便,在UDE中打開watch窗口,可以看到UDE環境中headlight和light_switch兩個變量當前被自動執行時的變化,如圖11。同時在TPT執行界面可以看到TPT中聲明的變量,定義的斷點,參數初始化,調試過程中讀寫變量的值等信息,這些調試的過程與之前在Configure PLS UDE中配置相對應。

圖10 設計測試順序

圖11 UDE環境被TPT軟件自動調用并自動測試代碼
完成測試后,會自動生成測試報告,測試報告會首先有個測試概述,可以看到執行了哪些測試集,測試的通過率,下面是詳細的測試結果。從上面的概述中可以隨意跳轉到你關注的測試點,關注詳細的測試結果,供分析參考,圖12為本示例設計的一個測試用例的測試報告,從報告中可以看出測試全綠,全部通過,通過前面設計的代碼也可以看出當light_switch為1時,headlight就是為1,我們設計的測試用例也是給light_switch賦值1時比較headlight的值是否為1,為1時即測試通過。

圖12 測試報告
PIL測試作為控制器正向開發的一個環節或者疑難問題分析的一種重要手段,其作用越來越重要。而常規的手動調,難以實現自動化,測試效率低,難以滿足工程化的測試要求。本文通過分析當前汽車控制器開發流程,分析PIL測試是控制器開發中的重要一環節,并分析了PIL測試原理,介紹了PIL測試的工具鏈,最后通過一個例子介紹了用TPT軟件進行PIL自動化測試過程,通過整個過程,可以看出借助TPT軟件,可以方便地實現PIL自動化測試,整個測試過程也是一種圖形化的建模過程。這種測試建模的方式大大降低了測試用例的編寫難度,同時測試過程是一種自動化的執行,可以清楚地看到TPT調用編譯軟件UDE進行測試,最后形成測試報告。這種基于TPT軟件的PIL自動化測試的優點概括起來就是:測試用例圖形化設計,自動化執行,自動輸出測試報告。另外,TPT軟件還擅長實現基于模型設計的MIL測試和SIL測試,同時還可以實現MIL測試和SIL測試的背靠背測試對比,可以進行MIL測試和PIL測試的背靠背測試對比,整個測試過可以有效保證控制器的開發質量。