本發(fā)明涉及CAN通信領(lǐng)域,特別是涉及一種CAN文件解析及重新保存方法。
背景技術(shù):
在電動(dòng)汽車開發(fā)過程中,有大量的信號(hào)會(huì)通過CAN網(wǎng)絡(luò)來實(shí)現(xiàn)ECU與ECU、ECU與傳感器之間的通訊,而為了實(shí)現(xiàn)通訊,在ECU軟件中就必須實(shí)現(xiàn)按照由工程師設(shè)計(jì)的一定的規(guī)則,此規(guī)則會(huì)保存在DBC通信協(xié)議文件中,DBC通信協(xié)議文件定義了一種標(biāo)準(zhǔn),此標(biāo)準(zhǔn)是用于描述CAN網(wǎng)絡(luò)中的數(shù)據(jù)保存結(jié)構(gòu)及報(bào)文相關(guān)的信號(hào)格式等。
電動(dòng)汽車上的電池管理系統(tǒng)需要用到CAN總線,上位機(jī)通過CAN總線監(jiān)控和記錄數(shù)據(jù),事后通過保存數(shù)據(jù)的回放,可以得到電池在運(yùn)行中的狀態(tài),排查運(yùn)行故障。
現(xiàn)有技術(shù)中實(shí)現(xiàn)CAN通信的常用做法是:1、通過購買CAN收發(fā)器,然后自主開發(fā)上位機(jī)解析接收到的CAN文件,然后對(duì)CAN文件進(jìn)行解析,將解析結(jié)果按數(shù)據(jù)類型的不同排列保存(電壓1、電壓2、……、總電壓)。但由于數(shù)據(jù)量龐大,做不到連續(xù)保存,只能間隔一段時(shí)間保存,若間隔保存,則容易造成數(shù)據(jù)細(xì)節(jié)部分丟失,而且如果通信協(xié)議變了,則需要重新開發(fā)上位機(jī),通用性并不強(qiáng)。2、購買專用的CAN收發(fā)器和配套軟件,如國外的CANOE。購買專用的CAN收發(fā)器和配套軟件不但價(jià)格昂貴,且不利于推廣。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是克服現(xiàn)有技術(shù)中的不足之處,提供一種CAN文件解析及重新保存方法。
本發(fā)明的目的是通過以下技術(shù)方案來實(shí)現(xiàn)的:
一種CAN文件解析及重新保存方法,包括以下步驟:
S01:導(dǎo)入并解析通信協(xié)議文件,獲取通信協(xié)議文件的數(shù)據(jù)內(nèi)容;
S02:導(dǎo)入并讀取待解析文件,獲取待解析文件的數(shù)據(jù)內(nèi)容;
S03:將待解析文件的ID與通信協(xié)議文件的ID進(jìn)行匹配,把兩文件中相等ID對(duì)應(yīng)的信號(hào)列為保存對(duì)象;
S04:根據(jù)待解析文件ID與通信文件ID的匹配結(jié)果,解析計(jì)算出待解析文件中的保存對(duì)象的物理值B并進(jìn)行數(shù)據(jù)更新保存。
在其中一個(gè)實(shí)施例中,所述步驟S04具體為:
步驟S041:逐一將待解析文件中與通信文件匹配的ID對(duì)應(yīng)的信號(hào)進(jìn)行解析,并依次將解析得到的物理量B更新到解析結(jié)果文件對(duì)應(yīng)位置中。
在其中一個(gè)實(shí)施例中,所述步驟S041包括:
S041-1:若當(dāng)前ID對(duì)應(yīng)的信號(hào)的數(shù)據(jù)采集時(shí)間與上一個(gè)進(jìn)行數(shù)據(jù)保存的ID對(duì)應(yīng)的信號(hào)的數(shù)據(jù)采集時(shí)間差大于預(yù)設(shè)時(shí)間差,則執(zhí)行步驟S041-2,否則執(zhí)行步驟S041-3;
S041-2:對(duì)當(dāng)前ID對(duì)應(yīng)的信號(hào)進(jìn)行解析并保存解析結(jié)果,跳轉(zhuǎn)到下一個(gè)ID對(duì)應(yīng)的信號(hào);
S041-3:放棄解析當(dāng)前ID對(duì)應(yīng)的信號(hào)并跳轉(zhuǎn)到下一個(gè)ID對(duì)應(yīng)的信號(hào)。
在其中一個(gè)實(shí)施例中,所述步驟S041-1具體為:
若當(dāng)前ID對(duì)應(yīng)的信號(hào)的數(shù)據(jù)采集時(shí)間與上一個(gè)進(jìn)行數(shù)據(jù)保存的ID對(duì)應(yīng)的信號(hào)的數(shù)據(jù)采集時(shí)間差大于預(yù)設(shè)時(shí)間差,則將當(dāng)前ID對(duì)應(yīng)的信號(hào)的保存標(biāo)志Flag置1,執(zhí)行步驟S041-2;否則,將當(dāng)前ID對(duì)應(yīng)的信號(hào)的保存標(biāo)志Flag置0,執(zhí)行步驟S041-3。
在其中一個(gè)實(shí)施例中,所述步驟S041-2具體為:
對(duì)當(dāng)前ID對(duì)應(yīng)的信號(hào)進(jìn)行解析;
判斷當(dāng)前ID對(duì)應(yīng)的保存標(biāo)志Flag是否為1,若是則將解析結(jié)果進(jìn)行保存并跳轉(zhuǎn)到下一個(gè)ID對(duì)應(yīng)的信號(hào),否則直接跳轉(zhuǎn)到下一個(gè)ID對(duì)應(yīng)的信號(hào)。
在其中一個(gè)實(shí)施例中,所述步驟S041-2中對(duì)當(dāng)前ID對(duì)應(yīng)的信號(hào)進(jìn)行解析的過程為:
根據(jù)信號(hào)的格式Mot1_Int0、起始位Scaling和長(zhǎng)度Length,解析出數(shù)字量A;
根據(jù)數(shù)字量A計(jì)算物理量B,B=A*Scaling+Offset。
在其中一個(gè)實(shí)施例中,所述通信協(xié)議文件為DBC文件或Excel文件。
在其中一個(gè)實(shí)施例中,所述步驟S03具體為:
將待解析文件的前N行的ID與通信協(xié)議文件的ID進(jìn)行匹配,把兩文件中相等ID對(duì)應(yīng)的信號(hào)作為保存對(duì)象,并將保存對(duì)象對(duì)應(yīng)的物理參數(shù)列在解析結(jié)果文件中。
在其中一個(gè)實(shí)施例中,所述步驟S03的前N行為通信協(xié)議文件總行數(shù)的百分之一、百分之二、百分之三。
本次技術(shù)方案相比于現(xiàn)有技術(shù)有以下有益效果:
1.通過將待解析文件數(shù)據(jù)的前N行ID數(shù)據(jù)與通信協(xié)議文件的ID數(shù)據(jù)進(jìn)行初步預(yù)判斷,將ID相等信號(hào)列為保存對(duì)象??梢韵葘?duì)待解析文件進(jìn)行預(yù)判斷處理,解析是否前N行數(shù)據(jù)是否有我們需要的數(shù)據(jù),若沒有則不對(duì)待解析文件進(jìn)行整體解析;解析后的信號(hào)保存到解析結(jié)果文件中,供后續(xù)分析。
2.保存數(shù)據(jù)的時(shí)間間隔可以調(diào)整設(shè)定,實(shí)現(xiàn)間隔保存。
3.本發(fā)明提供的CAN文件解析方法成本低,且通用性強(qiáng)。
附圖說明
圖1為本發(fā)明的CAN文件解析及重新保存方法的主要流程圖;
圖2為實(shí)施例一中CAN文件解析及重新保存方法的具體流程圖。
具體實(shí)施方式
為了便于理解本發(fā)明,下面將參照相關(guān)附圖對(duì)本發(fā)明進(jìn)行更全面的描述。附圖中給出了本發(fā)明的較佳實(shí)施方式。但是,本發(fā)明可以以許多不同的形式來實(shí)現(xiàn),并不限于本文所描述的實(shí)施方式。相反地,提供這些實(shí)施方式的目的是使對(duì)本發(fā)明的公開內(nèi)容理解的更加透徹全面。
需要說明的是,當(dāng)元件被稱為“固定于”另一個(gè)元件,它可以直接在另一個(gè)元件上或者也可以存在居中的元件。當(dāng)一個(gè)元件被認(rèn)為是“連接”另一個(gè)元件,它可以是直接連接到另一個(gè)元件或者可能同時(shí)存在居中元件。本文所使用的術(shù)語“垂直的”、“水平的”、“左”、“右”以及類似的表述只是為了說明的目的,并不表示是唯一的實(shí)施方式。
除非另有定義,本文所使用的所有的技術(shù)和科學(xué)術(shù)語與屬于本發(fā)明的技術(shù)領(lǐng)域的技術(shù)人員通常理解的含義相同。本文中在本發(fā)明的說明書中所使用的術(shù)語只是為了描述具體的實(shí)施方式的目的,不是旨在于限制本發(fā)明。本文所使用的術(shù)語“及/或”包括一個(gè)或多個(gè)相關(guān)的所列項(xiàng)目的任意的和所有的組合。
如圖1所示為CAN文件解析及重新保存方法的主要流程圖,包括以下步驟:
S01:導(dǎo)入并解析通信協(xié)議文件,獲取通信協(xié)議文件的數(shù)據(jù)內(nèi)容;
S02:導(dǎo)入并讀取待解析文件,獲取待解析文件的數(shù)據(jù)內(nèi)容;
S03:將待解析文件的ID與通信協(xié)議文件的ID進(jìn)行匹配,把兩文件中相等ID對(duì)應(yīng)的信號(hào)列為保存對(duì)象;
S04:根據(jù)待解析文件ID與通信文件ID的匹配結(jié)果,解析計(jì)算出待解析文件中的保存對(duì)象的物理值B并進(jìn)行數(shù)據(jù)更新保存。
進(jìn)一步地,所述步驟S04具體為:
步驟S041:逐一將待解析文件中與通信文件匹配的ID對(duì)應(yīng)的信號(hào)進(jìn)行解析,并依次將解析得到的物理量B更新到解析結(jié)果文件對(duì)應(yīng)位置中。
進(jìn)一步地,所述步驟S041包括:
S041-1:若當(dāng)前ID對(duì)應(yīng)的信號(hào)的數(shù)據(jù)采集時(shí)間與上一個(gè)進(jìn)行數(shù)據(jù)保存的ID對(duì)應(yīng)的信號(hào)的數(shù)據(jù)采集時(shí)間差大于預(yù)設(shè)時(shí)間差,則執(zhí)行步驟S041-2,否則執(zhí)行步驟S041-3;
S041-2:對(duì)當(dāng)前ID對(duì)應(yīng)的信號(hào)進(jìn)行解析并保存解析結(jié)果,跳轉(zhuǎn)到下一個(gè)ID對(duì)應(yīng)的信號(hào);
S041-3:放棄解析當(dāng)前ID對(duì)應(yīng)的信號(hào)并跳轉(zhuǎn)到下一個(gè)ID對(duì)應(yīng)的信號(hào)。
進(jìn)一步地,所述步驟S041-1具體為:
若當(dāng)前ID對(duì)應(yīng)的信號(hào)的數(shù)據(jù)采集時(shí)間與上一個(gè)進(jìn)行數(shù)據(jù)保存的ID對(duì)應(yīng)的信號(hào)的數(shù)據(jù)采集時(shí)間差大于預(yù)設(shè)時(shí)間差,則將當(dāng)前ID對(duì)應(yīng)的信號(hào)的保存標(biāo)志Flag置1,執(zhí)行步驟S041-2;否則,將當(dāng)前ID對(duì)應(yīng)的信號(hào)的保存標(biāo)志Flag置0,執(zhí)行步驟S041-3。
進(jìn)一步地,所述步驟S041-2具體為:
對(duì)當(dāng)前ID對(duì)應(yīng)的信號(hào)進(jìn)行解析;
判斷當(dāng)前ID對(duì)應(yīng)的保存標(biāo)志Flag是否為1,若是則將解析結(jié)果進(jìn)行保存并跳轉(zhuǎn)到下一個(gè)ID對(duì)應(yīng)的信號(hào),否則直接跳轉(zhuǎn)到下一個(gè)ID對(duì)應(yīng)的信號(hào)。
進(jìn)一步地,所述步驟S041-2中對(duì)當(dāng)前ID對(duì)應(yīng)的信號(hào)進(jìn)行解析的過程為:
根據(jù)信號(hào)的格式Mot1_Int0、起始位Scaling和長(zhǎng)度Length,解析出數(shù)字量A;
根據(jù)數(shù)字量A計(jì)算物理量B,B=A*Scaling+Offset。
進(jìn)一步地,所述通信協(xié)議文件為DBC文件或Excel文件。
進(jìn)一步地,所述步驟S03具體為:
將待解析文件的前N行的ID與通信協(xié)議文件的ID進(jìn)行匹配,把兩文件中相等ID對(duì)應(yīng)的信號(hào)作為保存對(duì)象,并將保存對(duì)象對(duì)應(yīng)的物理參數(shù)列在解析結(jié)果文件中。
進(jìn)一步地,所述步驟S03的前N行為通信協(xié)議文件總行數(shù)的百分之一、百分之二、百分之三。
實(shí)施例一:
下面結(jié)合一個(gè)具體例子詳細(xì)說明CAN文件解析及重新保存方法流程,請(qǐng)結(jié)合參照?qǐng)D2。
需要說明是的,若通信文件協(xié)議文件為DBC文件,里面包含數(shù)據(jù)有數(shù)據(jù)格式Mot_Int0、信號(hào)名SingName、分辨率Scaling、偏移量Offset、起始位Starbit、數(shù)據(jù)長(zhǎng)度Length、信號(hào)AppValue和ID值。
還需要說明的是,待解析文件包含數(shù)據(jù)有與通信文件協(xié)議文件對(duì)應(yīng)的ID值,時(shí)間標(biāo)識(shí)T、傳輸方向、幀格式、幀類型、數(shù)據(jù)長(zhǎng)度Length和數(shù)據(jù)等。
還需要說明的是,解析結(jié)果文件包含的數(shù)據(jù)有時(shí)間標(biāo)識(shí)T以及若干個(gè)匹配ID計(jì)算出來的物理值B數(shù)據(jù)信號(hào)
首先,讀取通信協(xié)議文件,判斷是否為DBC文件還是Excel文件,若為DBC文件則轉(zhuǎn)換成Excel文件再進(jìn)行數(shù)據(jù)內(nèi)容的讀取,在本實(shí)施例中,假定通信協(xié)議文件的總行數(shù)m1為1000行,初始化第一計(jì)數(shù)值an=1。
導(dǎo)入待解析文件,獲取到待解析文件的數(shù)據(jù)內(nèi)容,在本實(shí)施例中,假定待解析文件的總行數(shù)m2為900行,初始化第二計(jì)數(shù)值bn=1。
對(duì)待解析文件前N行的ID與通信協(xié)議文件的ID進(jìn)行匹配,把相等ID列為保存對(duì)象。需要說明的是,在本實(shí)施例中,假定待解析文件前100行的ID與通信協(xié)議文件的ID匹配成功,則會(huì)事先生成解析結(jié)果文件,解析結(jié)果文件包含101行的數(shù)據(jù)信息列,其中第一列為時(shí)間標(biāo)識(shí)T,余下的100列為匹配ID列為保存對(duì)象的數(shù)據(jù)信號(hào)列。
還需要說明的是,若待解析文件前100行的ID與通信協(xié)議文件的ID匹配不成功,則默認(rèn)待解析文件中沒有我們需要的信息,放棄對(duì)待解析文件進(jìn)行解析。
若T[bn]-T[bn-1]大于預(yù)設(shè)值K,則將ID[bn]保存標(biāo)志置1;否則,保存標(biāo)志置0。其中,T[bn]為當(dāng)前ID對(duì)應(yīng)的時(shí)間標(biāo)識(shí)T,T[bn-1]為上一個(gè)ID對(duì)應(yīng)的時(shí)間標(biāo)識(shí)T,兩者都為數(shù)組標(biāo)識(shí)方式,可參考數(shù)組的概念定義。
若ID[an]=ID[bn],則結(jié)合通信協(xié)議文件的ID[an]與待解析文件的ID[bn]的數(shù)據(jù)進(jìn)行解析計(jì)算物理值B。ID[an]和ID[bn]同為數(shù)組標(biāo)識(shí)方式,不再進(jìn)行解釋。
判斷保存標(biāo)志是否有效,在本實(shí)施例中,保存標(biāo)志1為有效位,保存標(biāo)志0為無效位。若保存標(biāo)志為1,則將解析出來的物理值B找到解析結(jié)果文件對(duì)應(yīng)位置的數(shù)據(jù)信號(hào)列保存。進(jìn)行下一步,判斷第一計(jì)數(shù)值an是否大于或者等于m1,若第一計(jì)數(shù)值an不大于m1,則第一計(jì)數(shù)值an自加1,跳轉(zhuǎn)到下一個(gè)ID信號(hào)進(jìn)行比對(duì);若第一計(jì)數(shù)值an大于或者等于m1,則進(jìn)行對(duì)第二計(jì)數(shù)值bn與m2的比對(duì)。
若保存標(biāo)志為0時(shí),則判斷第二計(jì)數(shù)值bn是否大于或者等于m2,若第二計(jì)數(shù)值bn不大于m2,則第二計(jì)數(shù)值bn自加1,跳轉(zhuǎn)到下一個(gè)ID信號(hào)進(jìn)行比對(duì),否則,解析完成。
需要說明的是,在圖2中涉及到兩個(gè)循環(huán)體,目的是為了掃遍所有的ID信號(hào),完成數(shù)據(jù)解析。待解析文件中的ID信號(hào)可能對(duì)應(yīng)通信協(xié)議文件的多個(gè)ID信號(hào),所以采用兩個(gè)循環(huán)體嵌套的形式掃遍所有的ID,實(shí)現(xiàn)對(duì)全部ID信號(hào)的解析。
本發(fā)明公開了一種CAN文件解析及重新保存方法,通過對(duì)導(dǎo)入通信協(xié)議文件和待解析文件的數(shù)據(jù)解析,對(duì)匹配ID且列為保存的對(duì)象的ID進(jìn)行解析計(jì)算物理值B進(jìn)行數(shù)據(jù)更新。將待解析文件數(shù)據(jù)的前N行ID數(shù)據(jù)與通信協(xié)議文件的ID數(shù)據(jù)進(jìn)行初步預(yù)判斷,將ID相等信號(hào)列為保存對(duì)象??梢韵葘?duì)待解析文件進(jìn)行預(yù)判斷處理,解析是否前N行數(shù)據(jù)是否有我們需要的數(shù)據(jù),若沒有則不對(duì)待解析文件進(jìn)行整體解析和保存??梢愿鶕?jù)需要把需要單獨(dú)解析的信號(hào)列出來,只解析需要分析的部分;解析后的信號(hào)另存為一個(gè)文件供分析。本發(fā)明提供的CAN文件解析方法成本低,且通用性強(qiáng)。
以上所述實(shí)施方式僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。