席剛剛
(同濟大學,上海 201800)
EPS(Electronic Power Steering,電子助力轉向)由機械轉向系統加上轉矩傳感器、車速傳感器、電子控制單元、減速器、電動機等組成。它在傳統機械轉向系統的基礎上,根據方向盤上的轉矩信號和汽車的行駛車速信號,利用電子控制裝置使電動機產生相應大小和方向的輔助動力,協助駕駛員進行轉向操作,作為整車安全件之一,要通過測試來確保軟件的性能。壓力測試是給軟件不斷加壓,強制其在極限情況下的運行,觀察它可以運行到何種程度,從而發現性能缺陷。通過搭建與實際環境相似的測試環境,通過測試程序在同一時間內或某一段時間內,向系統發送預期數量的交易請求、測試系統在不同壓力情況下的效率狀況,以及系統可以承受的壓力情況。然后做針對性的測試與分析,找到影響系統性能的瓶頸,評估系統在實際使用環境下的效率情況,評價系統性能以及判斷是否需要對應用系統進行優化處理或結構調整。本文結合實際案例,在響應多個診斷指令時EPS負反饋,響應代碼是72,截取部分診斷指令,對EPS 進行壓力測試,然后對測試結果處理,檢查是否存在軟件缺陷。
需要準備好12 V 電源,集成CANoe licence 的CAN 盒一個,EPS 樣件,EPS 所配套的電源線束和通信線束,終端電阻,測試電腦一臺,按照圖1 進行連接(網絡喚醒)。

圖1 測試連接
由上位機軟件自動發出診斷請求,等待EPS 給出響應后,判斷是否為正響應,是正響應繼續進行下個請求,直到所有的請求全部發完。診斷流程如圖2 所示。
測試案例基于CANoe環境,利用CAPL 語言進行編程,本次診斷壓力測試案例開發中,主測試Case 包含5 個事件,依次分別是進入擴展會話模式、向EPS 請求安全認證種子、向EPS 發送安全認證key、寫入參數1、寫入參數2、寫入參數3、寫入參數4。
/*cycle send*/
for(i=0;i<10;i++)
{
EnterExtendSession();
RequestSecuritySeed();
SendSecurityKey();
WriteParameter1();
WriteParameter2();
WriteParameter3();
WriteParameter4();
testWaitForTimeout(2000);
}
實際上整車廠造車時涉及到的診斷服務遠超過這些,本次只截取其中某個工位涉及到的診斷服務,對其進行連續循環測試,同時發送整車級報文。設定總線負載率達到60%以上(通過發送小周期報文實現),驗證EPS 在惡劣工況下能否響應診斷工具的請求,檢查軟件的表現性能(圖3)。
基于不同的ECU(Electronic Control Unit,電子控制單元),在循環寫入參數時,需要注意有些ECU 在連續寫入相同值時不響應請求,基于這樣的軟件邏輯,本次Case 中連續寫入值不同,采用交替值寫入,以寫入參數1 請求函數為例,對請求服務的第8個字節進行交替賦值。此處的變量i 在主測試已經定義,并在for 循環中進行自加加運算,結合請求函數,能夠實現連續兩次寫入的值不同。
i=i%2;
if(i==0)
{diagTX.byte(7)=0x2B;}
if(i==1)
{diagTX.byte(7)=0x2C;}
為了詳細觀察EPS 表現,在測試完成后需要對測試數據進行處理,測試目的是為了檢測軟件在極限工況下的表現0 根據需求,EPS 在收到請求后750 ms 內判斷是否寫入,寫入成功發送正響應,寫入不成功發送負響應,因此在出現負響應時檢查請求到響應之間的時間間隔,測試數據為總線數據(圖4)。借助spy3 工具,把CANoe 記錄的數據轉化成.CSV 文件,然后在Excel 里面打開(圖5),再利用公式if(P3=7F,(B3-B2)*1000,0)計算,然后用max 篩選出最大的時間,判斷其是否超過750 ms。

圖2 診斷流程

圖3 總線負載

圖4 總線數據

圖5 測試數據
壓力測試的目的是檢測軟件在極端工況下的表現情況,在供應商處檢查出問題,避免在整車廠出現問題,測試時必要條件是模擬整車環境,盡可能做到與產線的工況一致,但為了增加工況的惡劣性,可以適當增加總線負載率。另外,在每一個請求之間的時間間隔應盡可能小,這樣測試效果才會顯著,但是必須要等到上一個請求服務得到反饋之后才能請求第二幀,否則測試將失去意義。由于測試數據較大,因此處理時一定要采用快捷高效準確的方式。