本發(fā)明涉及汽車電子測試領域,具體涉及一種用于汽車ECU程序自動刷寫的方法。
背景技術(shù):
汽車電子控制單元(ECU,Electronic Control Unit)程序是ECU的核心,在開發(fā)階段由于不同車型和運行模式的不同需求、ECU標定等原因經(jīng)常需要對ECU程序進行修改,這種修改的結(jié)果是生成多個不同的程序版本。這些不同的程序版本將被重新刷寫到ECU中去,以驗證實際效果。
在使用Vector公司的vFlash軟件進行ECU程序刷寫時,用戶通常是手動打開一個個刷寫文件,然后點擊按鈕進行程序刷寫。在進行ECU程序版本切換操作測試時,由于程序版本較多,所以需要進行大量的手動操作,不僅效率低,而且非常耗費人力,數(shù)據(jù)記錄也不方便。
本發(fā)明提出的自動刷寫方法根據(jù)用戶提供的待刷寫文件,生成包括所有ECU程序版本切換操作的測試序列,然后通過調(diào)用Vector vFlash提供的接口,按照測試序列進行ECU程序刷寫,并在刷寫前后通過刷寫文件的Custom Action功能進行ECU診斷測試,記錄刷寫和診斷結(jié)果,生成Excel格式的刷寫報告。并且,當ECU程序的刷寫出現(xiàn)錯誤時,調(diào)整測試序列,以保證所有版本切換的測試都被包括。利用此方法及執(zhí)行該方法的裝置能夠?qū)崿F(xiàn)自動測試,操作簡單,能夠大幅度減輕測試人員的工作強度。
技術(shù)實現(xiàn)要素:
為實現(xiàn)上述目的,本發(fā)明提供了一種基于Vector vFlash軟件接口的汽車ECU程序自動刷寫測試的方法和執(zhí)行所述方法的裝置。根據(jù)用戶提供的ECU程序刷寫文件,自動生成包括有ECU程序版本切換的測試序列,然后通過調(diào)用Vector vFlash提供的接口,按照測試序列進行ECU程序刷寫,記錄刷寫結(jié)果,可以生成Excel格式的刷寫報告。
該發(fā)明適用于具有Vector vFlash軟件和相關(guān)接口硬件的汽車ECU程序多個版本切換的自動刷寫測試。本發(fā)明提供如下方案:
一種汽車ECU軟件程序自動刷寫測試方法,其特征在于包括以下步驟:101.獲取文件數(shù)量并根據(jù)文件數(shù)量(N)創(chuàng)建一個初始測試序列,該測試序列包括所有的程序版本切換,測試序列的元素個數(shù)為N×(N-1)+1;102.從測試序列中獲取需要刷寫的文件序號;103.判斷序號是否合格,若序號不合格則測試循環(huán)結(jié)束;若序號合格則執(zhí)行步驟104;104.初始化刷寫接口,再加載步驟102中獲取的文件序號所對應的刷寫文件,初始化ECU診斷線程結(jié)束標志;105.啟動ECU診斷步驟;106.開始進行刷寫操作;107.等待刷寫操作結(jié)束;108.刷寫操作結(jié)束后,等待步驟105中的ECU診斷線程結(jié)束時產(chǎn)生的診斷結(jié)束標志;109.當出現(xiàn)診斷結(jié)束標志時,卸載刷寫文件并關(guān)閉刷寫接口;110.存儲刷寫操作結(jié)果;例如可以將刷寫操作相關(guān)數(shù)據(jù)、診斷數(shù)據(jù)和刷寫結(jié)果存儲到Excel文件中;111.判斷刷寫操作是否成功,如果刷寫操作失敗,進行修改測試流程的操作,然后執(zhí)行步驟112;如果刷寫操作成功,執(zhí)行步驟112;112.判斷一個測試循環(huán)是否結(jié)束,如果未結(jié)束,則返回步驟102,進行下一個刷寫操作。
步驟101中包括以下子步驟:1011.獲取刷寫文件個數(shù)N;1012.初始化測試序列,該測試序列為空,不包含任何元素;1013.初始化數(shù)字a為0;1014.判斷a是否小于N-1,如果小于則繼續(xù)下一步,否則跳至步驟1019;1015.初始化數(shù)字b,使其等于a+1;1016.判斷b是否小于N,如果小于,則執(zhí)行下一步,否則將a自身遞增加1,返回至步驟1014;1017.在測試序列尾部依次添加元素a、b;1018.數(shù)字b遞增加1,返回至步驟1016;1019.在測試序列尾部添加元素0。
步驟104中包括以下子步驟:1051.初始化診斷數(shù)據(jù);1052.檢測是否正在進行刷寫前準備操作;1053.如果一定時間內(nèi)未檢測到Vector vFlash軟件的刷寫前準備工作,則跳轉(zhuǎn)至第步驟1055;若檢測到,則執(zhí)行步驟1054;1054.向ECU發(fā)送診斷命令并獲取返回的診斷數(shù)據(jù);1055.等待程序刷寫結(jié)束;1056.檢測到程序刷寫結(jié)束后,開始檢測是否正在進行刷寫后執(zhí)行操作;1057.如果一定時間內(nèi)未檢測到刷寫后執(zhí)行工作,則跳轉(zhuǎn)至步驟1059;若檢測到,則執(zhí)行步驟1058;1058.向ECU發(fā)送診斷命令并獲取返回的診斷數(shù)據(jù);1059.置位診斷結(jié)束標志,退出。
其中步驟(11)中的進行修改測試流程的操作步驟包括:設當前程序文件序號為所述a,目標程序文件序號為所述b,判斷當前刷寫順序;1)如果當前刷寫順序為序列中最后一個,則不修改測試序列;2)如果執(zhí)行刷寫前的ECU程序是初始程序,此時所述a為-1,且b小于N-1,則令c等于b加1,將c插入到未執(zhí)行的測試序列之前,再將未執(zhí)行的測試序列所有元素加1對N取余,測試序列修改完畢;3)如果執(zhí)行刷寫前的ECU程序是初始程序,且從初始程序向所有程序進行刷寫均失敗,則插入測試序號-1到測試序列中,測試序列修改完畢;4)如果測試序列中最后一個元素為序號為所述b的所述目標程序,則查找當前目標程序b之后是否存在元素a,若存在,則將其之后的所有元素移動到未執(zhí)行的測試序列的最前面;5)如果任何其他程序到目標程序b的刷寫均已刷寫失敗,則刪除其后的任何從目標程序b出發(fā),經(jīng)過一個元素再返回目標程序b的元素段,并刪除連續(xù)重復以及連續(xù)的已完成刷寫的元素;6)如果以上條件均不滿足,則插入一個元素到未測試的序列元素之前,該元素到目標程序b的刷寫工作未執(zhí)行或已執(zhí)行成功,然后在其后再插入目標元素b。
本發(fā)明還提供一種用于執(zhí)行如上所述汽車ECU軟件程序自動刷寫測試方法的自動刷寫測試裝置,其中包括:測試序列生成模塊,所述測試序列生成模塊用于獲取用戶提供的刷寫文件數(shù)量,并創(chuàng)建測試序列;所述測試序列生成模塊還用于在刷寫失敗時修改測試序列;測試序號判斷模塊,所述測試序號判斷模塊用于從測試序列獲取需要刷寫的文件序號,并判斷所述文件序號是否合格;ECU診斷模塊,所述ECU診斷模塊用于進行ECU診斷測試,通過確定是否在執(zhí)行刷寫前的準備工作或是否正在進行刷寫后執(zhí)行操作來向ECU發(fā)送診斷命令并獲取診斷結(jié)果;刷寫模塊,所述刷寫模塊根據(jù)測試序號判斷結(jié)果初始化刷寫接口,并根據(jù)ECU診斷模塊提供的診斷結(jié)束標志關(guān)閉刷寫接口,所述刷寫模塊還用于刷寫操作。
附圖說明
圖1是根據(jù)本發(fā)明一個實施方式的用于汽車ECU程序自動刷寫測試的示意圖;
圖2是根據(jù)本發(fā)明一個實施方式的刷寫測試方法的流程圖;
圖3是根據(jù)本發(fā)明一個實施方式的初始測試序列生流程圖;
圖4是根據(jù)本發(fā)明一個實施方式的診斷流程圖。
其中附圖是對本發(fā)明的內(nèi)容進行示意性說明,并非采用附圖所示的內(nèi)容對本發(fā)明的內(nèi)容進行具體限定。
具體實施方式
下面結(jié)合附圖及實施方式對本發(fā)明進行詳細說明。
本發(fā)明提供了一種基于Vector vFlash軟件接口的汽車ECU程序自動刷寫測試的方法和執(zhí)行所述方法的裝置。本發(fā)明的實施方式根據(jù)用戶提供的ECU程序刷寫文件,自動生成包括所有ECU程序版本切換的測試序列,然后通過調(diào)用Vector vFlash提供的接口,按照測試序列進行ECU程序刷寫,記錄刷寫結(jié)果,生成Excel格式的刷寫報告。
該發(fā)明適用于具有Vector vFlash軟件和相關(guān)接口硬件的汽車ECU程序多個版本切換的自動刷寫測試。
圖1示出了根據(jù)本發(fā)明的一個實施方式的用于汽車ECU程序自動刷寫測試裝置10,該裝置10包括測試序列生成模塊21,用于獲取用戶提供的刷寫文件數(shù)量,并創(chuàng)建測試序列;測試序列生成模塊21還用于在刷寫失敗時修改測試序列;測試序號判斷模塊22,用于從測試序列獲取需要刷寫的文件序號,并判斷所述文件序號是否合格;ECU診斷模塊23,用于進行ECU診斷測試,通過確定是否在執(zhí)行刷寫前的準備工作或是否正在進行刷寫后執(zhí)行操作來向ECU發(fā)送診斷命令并獲取診斷結(jié)果;刷寫模塊24,根據(jù)測試序號判斷結(jié)果初始化刷寫接口,并根據(jù)ECU診斷模塊23提供的診斷結(jié)束標志關(guān)閉刷寫接口,所述刷寫模塊還用于刷寫操作。自動刷寫測試裝置10對ECU 11進行檢測和刷寫。具體的操作方法如下文所示。
圖2示出了本發(fā)明自動刷寫測試方法的流程圖,其中在自動刷寫測試裝置10中各個模塊執(zhí)行以下步驟:
101獲取文件數(shù)量并根據(jù)文件數(shù)量(N)創(chuàng)建一個初始測試序列,該測試序列包括所有的程序版本切換,測試序列的元素個數(shù)為N×(N-1)+1。
102從測試序列中獲取需要刷寫的文件序號。
103判斷序號是否合格,若序號不合格則測試循環(huán)結(jié)束;若序號合格則執(zhí)行步驟104;
104初始化vFlash的刷寫接口,再加載步驟102中獲取的文件序號所對應的刷寫文件,初始化ECU診斷線程結(jié)束標志;
105啟動ECU診斷步驟;
106開始進行刷寫操作;
107等待刷寫操作結(jié)束;
108刷寫操作結(jié)束后,等待步驟105中的ECU診斷線程結(jié)束時產(chǎn)生的診斷結(jié)束標志;
109當出現(xiàn)診斷結(jié)束標志時,卸載刷寫文件并關(guān)閉vFlash的刷寫接口;
110存儲刷寫操作結(jié)果。例如可以將刷寫操作相關(guān)數(shù)據(jù)、診斷數(shù)據(jù)和刷寫結(jié)果存儲到Excel文件中。
111判斷刷寫操作是否成功,如果刷寫操作失敗,進行修改測試流程的操作,然后執(zhí)行步驟112;如果刷寫操作成功,執(zhí)行步驟112。
112判斷一個測試循環(huán)是否結(jié)束,如果未結(jié)束,則返回步驟102,進行下一個刷寫操作。
圖3是上述刷寫測試方法中步驟101的生成元素初始測試序列的流程圖,這一步驟由測試序列生成模塊21執(zhí)行,并且包括以下子步驟:
1011獲取刷寫文件個數(shù)N;
1012初始化測試序列,該測試序列為空,不包含任何元素;
1013初始化數(shù)字a為0;
1014判斷a是否小于N-1,如果小于則繼續(xù)下一步,否則跳至步驟1019;
1015初始化數(shù)字b,使其等于a+1;
1016判斷b是否小于N,如果小于,則執(zhí)行下一步,否則將a自身遞增加1,返回至步驟1014;
1017在測試序列尾部依次添加元素a、b;
1018數(shù)字b遞增加1,返回至步驟1016;
1019在測試序列尾部添加元素0。
經(jīng)過上述步驟所生成的測試序列,其中的元素x代表第x+1個文件的序號。例如,當有3個待刷寫的文件時,將生成測試序列0 1 0 2 1 2 0,0代表3個文件中第1個待刷寫的文件,1代表3個文件中第2個待刷寫的文件,以此類推;按照生成的測試序列完成刷寫,即可實現(xiàn)對所有可能的程序版本切換刷寫,例子中完成的程序切換刷寫依次為0->1,1->0,0->2,2->1,1->2,2->0。
圖4是上述刷寫測試方法中步驟105中ECU診斷步驟的流程圖;這一步驟由ECU診斷模塊23執(zhí)行,在該診斷步驟中包括以下子步驟:
1051初始化診斷數(shù)據(jù)
1052檢測是否正在進行刷寫前準備操作;
1053如果一定時間內(nèi)未檢測到Vector vFlash軟件的刷寫前準備工作,則跳轉(zhuǎn)至第步驟1055;若檢測到,則執(zhí)行步驟1054;
1054向ECU發(fā)送診斷命令并獲取返回的診斷數(shù)據(jù);
1055等待程序刷寫結(jié)束;
1056檢測到程序刷寫結(jié)束后,開始檢測是否正在進行刷寫后執(zhí)行操作;
1057如果一定時間內(nèi)未檢測到刷寫后執(zhí)行工作,則跳轉(zhuǎn)至步驟1059;若檢測到,則執(zhí)行步驟1058;
1058向ECU發(fā)送診斷命令并獲取返回的診斷數(shù)據(jù);
1059置位診斷結(jié)束標志,退出。
更進一步地,本發(fā)明由測試序列生成模塊21執(zhí)行的刷寫測試方法的步驟111中修改測試流程的步驟如下:
設當前程序文件序號為a,目標程序文件序號為b。修改測試序列的原則如下(例子中“<”與“>”之間為已刷寫過的序列元素,刷寫結(jié)果可能成功,也可能失敗;“{”與“}”之間的為刷寫失敗的序列元素;“[”與“]”之間為已刷寫成功的序列元素;其余為尚未執(zhí)行的程序):
1)如果當前刷寫順序為序列中最后一個,不修改測試序列。
2)如果執(zhí)行刷寫前的ECU程序是初始程序(a=-1),且b小于N-1,則令c等于b加1,將c插入到未執(zhí)行的測試序列之前,再將未執(zhí)行的測試序列所有元素加1對N取余,測試序列修改完畢。(例如刷寫文件數(shù)量N=3,初始測試序列為0 1 0 2 1 2 0,第一次取序列中第一個元素即序號為0的刷寫文件進行刷寫,刷寫失敗,則測試序列變?yōu)閧0}1 2 1 0 2 0 1,下一次執(zhí)行將從序列中第二個元素1對應的刷寫文件開始刷寫。若再次刷寫失敗,則測試序列變?yōu)閧0 1}2 0 2 1 0 1 2,下一次執(zhí)行將從序列中第三個元素2對應的刷寫文件開始刷寫)。
3)如果執(zhí)行刷寫前的ECU程序是初始程序,且從初始程序向所有程序進行刷寫均失敗(例如N=3,此時的測試序列為{0 1 2}0 2 1 0 1 2),則插入測試序號-1到測試序列中({0 1 2}-1 0 2 1 0 1 2),測試序列修改完畢。
4)如果測試序列中最后一個元素為目標程序b,則查找當前目標程序b之后是否存在元素a,若存在,則將其之后的所有元素移動到未執(zhí)行的測試序列的最前面(例如測試序列為<…>[a]{…b}x…a y…b,修改后為<…>[a]{…b}y…b x…a)。
5)如果任何其他程序到目標程序b的刷寫均已刷寫失敗,則刪除其后的任何從目標程序b出發(fā),經(jīng)過一個元素再返回目標程序b的元素段,并刪除連續(xù)重復以及連續(xù)的已完成刷寫的元素(例如測試序列為<…>[a]{…b}…c b x b y b d…e b z b f…g,修改后序列為<…>[a]{…b}…c d…e f…g;如果c=d,修改后序列為<…>[a]{…b}…c…e f…g;如果c d…e f段已經(jīng)刷寫過,則修改后序列為<…>[a]{…b}…c f…g)。
6)如果以上條件均不滿足,則插入一個元素到未測試的序列元素之前,該元素到目標程序b的刷寫工作未執(zhí)行或已執(zhí)行成功(優(yōu)先選擇刷寫工作未執(zhí)行的元素),然后在其后再插入目標元素b(例如測試序列為<…>[a]{…b}x…y,修改后為<…>[a]{…b}c b x…y,其中a->c未執(zhí)行或已執(zhí)行完畢)。
本發(fā)明的上述實施例是對本發(fā)明的說明而不能用于限制本發(fā)明,與本發(fā)明有請求保護范圍相當?shù)暮x和范圍內(nèi)的任何改變,都應認為是包括在本發(fā)明請求保護的范圍內(nèi)。