藍(lán)啟亮,吳光耀,王 帥,陳 聰
基于Python的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理分析
藍(lán)啟亮,吳光耀,王 帥,陳 聰
(比亞迪汽車(chē)工業(yè)有限公司 產(chǎn)品規(guī)劃及汽車(chē)新技術(shù)研究院,廣東 深圳 518118)
為高效管理車(chē)輛系統(tǒng)控制器局域網(wǎng)(CAN)網(wǎng)絡(luò)數(shù)據(jù),基于對(duì)CAN網(wǎng)絡(luò)數(shù)據(jù)結(jié)構(gòu)的研究及車(chē)載嵌入式軟件開(kāi)發(fā)測(cè)試經(jīng)驗(yàn)的積累,提出一種基于Python的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理平臺(tái)的方法,實(shí)現(xiàn)多種格式CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件的導(dǎo)入、數(shù)據(jù)編輯、數(shù)據(jù)自動(dòng)校驗(yàn)、數(shù)據(jù)自動(dòng)對(duì)比和CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件輸出,解決了當(dāng)前主流CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理工具編輯效率低、人工校驗(yàn)和比對(duì)數(shù)據(jù)易出錯(cuò)的缺陷,有效提高CAN網(wǎng)絡(luò)開(kāi)發(fā)及CAN網(wǎng)絡(luò)各個(gè)節(jié)點(diǎn)控制器軟件開(kāi)發(fā)的效率。
CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù);數(shù)據(jù)抓取;Python
控制器局域網(wǎng)(Controller Area Network, CAN)網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件定義了CAN網(wǎng)絡(luò)中各個(gè)控制器節(jié)點(diǎn)報(bào)文信號(hào)信息,是CAN總線(xiàn)網(wǎng)絡(luò)通訊的密碼本[1-2]。在實(shí)際的車(chē)型研發(fā)項(xiàng)目中,CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)隨著車(chē)型項(xiàng)目的推進(jìn)逐步完善和迭代,各個(gè)控制器的數(shù)據(jù)收發(fā)模塊必須嚴(yán)格遵循正確定義的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)進(jìn)行開(kāi)發(fā),方可保證項(xiàng)目的安全推進(jìn)[3]。
當(dāng)前CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的管理一般以Excel表格管理*.xlsx格式文本的形式或者Vecotor公司開(kāi)發(fā)的CANdb++工具管理*.dbc格式文本的形式進(jìn)行CAN數(shù)據(jù)定義和編輯[4-5]。隨著汽車(chē)電動(dòng)化、智能化的發(fā)展,CAN總線(xiàn)數(shù)據(jù)越來(lái)越多,當(dāng)CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件進(jìn)行變更時(shí),各個(gè)控制器軟件開(kāi)發(fā)工程師需要使用Excel或者CANdb++工具手動(dòng)逐個(gè)篩選、檢查和比對(duì)CAN總線(xiàn)數(shù)據(jù)然后再對(duì)嵌入式軟件CAN通訊模塊中的C代碼進(jìn)行逐一修改,如此逐個(gè)手動(dòng)修改CAN報(bào)文信號(hào)重復(fù)低效的勞動(dòng)方式特別容易出錯(cuò)且出錯(cuò)后不便于定位查找問(wèn)題。
對(duì)于采用CAN通訊的汽車(chē)嵌入式軟件開(kāi)發(fā)過(guò)程而言,軟件運(yùn)行時(shí)環(huán)境(Run Time Environment, RTE)層CAN通訊數(shù)據(jù)交互定義方法固定,完全可以從嵌入式軟件RTE層抓取控制器中實(shí)際定義的CAN網(wǎng)絡(luò)數(shù)據(jù),與系統(tǒng)輸入的CAN網(wǎng)絡(luò)數(shù)據(jù)統(tǒng)一實(shí)現(xiàn)同平臺(tái)工具管理:通過(guò)正則匹配的方式可以從嵌入式運(yùn)行時(shí)環(huán)境RTE層C代碼或其他類(lèi)文本格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件中獲取CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)信息,利用統(tǒng)一的用戶(hù)圖形界面(Graphical User Interface, GUI)把不同版本的CAN網(wǎng)絡(luò)數(shù)據(jù)顯示在一個(gè)界面內(nèi),軟件開(kāi)發(fā)人員只需要通過(guò)操作控件即可實(shí)現(xiàn)不同版本CAN網(wǎng)絡(luò)數(shù)據(jù)的導(dǎo)入、編輯、校驗(yàn)和對(duì)比,操作便捷高效,開(kāi)發(fā)人員可以從低效重復(fù)的工作中解脫出來(lái),把更多精力放到應(yīng)用層策略開(kāi)發(fā)中。
CAN是由博世公司開(kāi)發(fā)的一個(gè)汽車(chē)計(jì)算機(jī)控制系統(tǒng)和嵌入式工業(yè)控制局域網(wǎng)的國(guó)際通用總線(xiàn)協(xié)議[6-7]。CAN總線(xiàn)是一種基于消息的廣播式的串行通信總線(xiàn)協(xié)議,屬于多主控的總線(xiàn)系統(tǒng)。為實(shí)現(xiàn)CAN報(bào)文的發(fā)送與接收,各個(gè)控制器在RTE層軟件需要實(shí)現(xiàn)CAN總線(xiàn)數(shù)據(jù)的打包、解包、發(fā)送和接收等功能[8]。
DBC(Data Base CAN)文件是Vecor公司開(kāi)發(fā)的用來(lái)描述單一CAN網(wǎng)絡(luò)配置信息的一種特定格式文件,通過(guò)CANdb++數(shù)據(jù)庫(kù)管理工具進(jìn)行編輯管理,內(nèi)容包含CAN總線(xiàn)上各個(gè)控制器節(jié)點(diǎn)信息、報(bào)文信息和信號(hào)信息,它可以被專(zhuān)業(yè)CAN測(cè)試工具識(shí)別,用來(lái)監(jiān)測(cè)與分析CAN網(wǎng)絡(luò)上的報(bào)文數(shù)據(jù),也可以用來(lái)模擬仿真某個(gè)CAN節(jié)點(diǎn),是總線(xiàn)開(kāi)發(fā)的重要輸出物,是軟件開(kāi)發(fā)和軟件測(cè)試的重要參考。其主要內(nèi)容包含但不限于如下:
1)節(jié)點(diǎn)(Node):定義在CAN總線(xiàn)上的所有接收方或發(fā)送方,節(jié)點(diǎn)名唯一;
2)報(bào)文(Message):報(bào)文是CAN網(wǎng)絡(luò)中交換與傳輸?shù)臄?shù)據(jù)單元,即接收方或發(fā)送方一次性要交流的數(shù)據(jù)塊。在DBC文件中,報(bào)文含有報(bào)文ID(MsgID)、數(shù)據(jù)長(zhǎng)度(Dlc)、發(fā)送周期(Cyctime)等信息;
3)信號(hào)(Signal):信號(hào)是報(bào)文數(shù)據(jù)段的基本單元,在DBC中主要參數(shù)包含信號(hào)名(Signal)、起始位(Startbit)、信號(hào)長(zhǎng)度(Length)、因子系數(shù)(Factor)、偏移量(Offset)等信息[9-10]。
DBC文件僅能表達(dá)單一的CAN總線(xiàn)數(shù)據(jù),且當(dāng)報(bào)文幀數(shù)據(jù)長(zhǎng)度超過(guò)8個(gè)字節(jié)時(shí)無(wú)法通過(guò)CANdb++進(jìn)行編輯[11-12]。在實(shí)際工程項(xiàng)目中,對(duì)于多路CAN網(wǎng)絡(luò)數(shù)據(jù)的管理和含有多幀總線(xiàn)數(shù)據(jù)的數(shù)據(jù)庫(kù)管理通常以自定義的Excel表格進(jìn)行數(shù)據(jù)管理,由于Excel的局限性,無(wú)法通過(guò)Excel自動(dòng)對(duì)比兩份不同的CAN總線(xiàn)數(shù)據(jù)的差異。
不論DBC文件格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件或者Excel文件格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件抑或是RTE層代碼中開(kāi)發(fā)的CAN網(wǎng)絡(luò)數(shù)據(jù),其實(shí)質(zhì)都是一個(gè)或多個(gè)儲(chǔ)存了CAN網(wǎng)絡(luò)通信規(guī)則的文本文件,其中的字符包含了關(guān)鍵的節(jié)點(diǎn)、報(bào)文和信號(hào)三大部分的信息,且這些信息都是按照固定的規(guī)則進(jìn)行組織。本文通過(guò)對(duì)不同格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件規(guī)則的分析,基于Python開(kāi)發(fā)了一個(gè)DbcManager網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理平臺(tái),快速識(shí)別并抓取不同格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件信息,通過(guò)SQLite數(shù)據(jù)庫(kù)和PyQt實(shí)現(xiàn)對(duì)CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件數(shù)據(jù)的增刪查改等數(shù)據(jù)管理;開(kāi)發(fā)數(shù)據(jù)校驗(yàn)算法實(shí)現(xiàn)CAN報(bào)文信號(hào)數(shù)據(jù)的基本校驗(yàn);開(kāi)發(fā)數(shù)據(jù)比對(duì)算法實(shí)現(xiàn)同格式版本不同CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)變更的比對(duì)和不同格式版本不同CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)變更的比對(duì),有效提高嵌入式軟件開(kāi)發(fā)效率,減少人工錯(cuò)誤的引入。
為了解決CANdb++或Excel管理CAN網(wǎng)絡(luò)數(shù)據(jù)編輯效率低、不能校驗(yàn)、無(wú)法對(duì)版本進(jìn)行比對(duì)等難題,本文基于Python開(kāi)發(fā)了一個(gè)運(yùn)行于Windows操作系統(tǒng)上的DbcManager網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理平臺(tái),集成CAN網(wǎng)絡(luò)數(shù)據(jù)讀取、編輯、校驗(yàn)、比對(duì)、輸出等五項(xiàng)主要功能,所有的功能集中顯示在一個(gè)GUI界面中,其功能架構(gòu)如圖1所示。

圖1 CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理平臺(tái)
1)CAN網(wǎng)絡(luò)數(shù)據(jù)讀取:支持從嵌入式軟件RTE層代碼中抓取CAN總線(xiàn)數(shù)據(jù)、讀取標(biāo)準(zhǔn)dbc格式CAN總線(xiàn)數(shù)據(jù)和導(dǎo)入Excel格式總線(xiàn)數(shù)據(jù)共三種方式。
2)CAN網(wǎng)絡(luò)數(shù)據(jù)編輯:對(duì)數(shù)據(jù)的整理和結(jié)構(gòu)化處理后顯示在GUI中,通過(guò)檢索算法和數(shù)據(jù)的樹(shù)結(jié)構(gòu)方法實(shí)現(xiàn)數(shù)據(jù)的便捷查詢(xún)和編輯。
3)CAN網(wǎng)絡(luò)數(shù)據(jù)校驗(yàn):對(duì)CAN網(wǎng)絡(luò)數(shù)據(jù)信息按照Channel/Msg/Signal數(shù)據(jù)的基本規(guī)則進(jìn)行數(shù)據(jù)檢查,輸出校驗(yàn)分析報(bào)告。
4)CAN網(wǎng)絡(luò)數(shù)據(jù)比對(duì):支持不同版本的CAN網(wǎng)絡(luò)數(shù)據(jù)的比對(duì),輸出比對(duì)分析報(bào)告。
5)CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件導(dǎo)出:CAN網(wǎng)絡(luò)數(shù)據(jù)讀取的反向操作。
CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理平臺(tái)的GUI界面由菜單欄、工具欄、數(shù)據(jù)欄和狀態(tài)欄組成,如圖2所示。
菜單欄:負(fù)責(zé)完成導(dǎo)入數(shù)據(jù)的功能,導(dǎo)入的格式包括*.xlsx格式的Excel網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件、*.dbc格式的DBC網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件和嵌入式軟件的路徑。
工具欄:負(fù)責(zé)完成對(duì)數(shù)據(jù)的編輯功能,可以插入數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)、篩選數(shù)據(jù)、保存數(shù)據(jù)以及檢查CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)等。
數(shù)據(jù)欄:數(shù)據(jù)欄中包含網(wǎng)絡(luò)(Channel)、報(bào)文(Msg)和信號(hào)(Sig)的具體信息。
狀態(tài)欄:顯示當(dāng)前GUI界面中導(dǎo)入的數(shù)據(jù)來(lái)源以及當(dāng)前數(shù)據(jù)欄中網(wǎng)絡(luò)(Channel)、報(bào)文(Msg)和信號(hào)(Sig)的數(shù)量。

圖2 GUI界面
為了滿(mǎn)足*.xlsx、*.dbc和嵌入式軟件RTE層代碼路徑三種不同格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)導(dǎo)入,基于正則匹配開(kāi)發(fā)不同的算法抓取不同格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件中的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)信息,再通過(guò)統(tǒng)一定義的*.json文件整理抓取到的數(shù)據(jù),最后將*.json數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中,由用戶(hù)操作GUI界面與數(shù)據(jù)庫(kù)進(jìn)行交互并將所需數(shù)據(jù)顯示在GUI界面上,如圖3所示。

圖3 導(dǎo)入數(shù)據(jù)的方式
抓取C文件格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)數(shù)據(jù)和抓取*.dbc格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)數(shù)據(jù)的方式原理基本一致,本質(zhì)上都是將文本文件讀取到內(nèi)存中,然后采用特定的正則匹配方法獲得所需數(shù)據(jù)。抓取*.xlsx格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)數(shù)據(jù)的方式也類(lèi)似,唯一的區(qū)別是加載的數(shù)據(jù)來(lái)源于表格,通過(guò)openpyxl庫(kù)可以定位到所需的sheet和cell完成數(shù)據(jù)的逐個(gè)讀取并整理到*.json數(shù)據(jù)結(jié)構(gòu)中。
統(tǒng)一的*.json數(shù)據(jù)結(jié)構(gòu)不僅需要映射完整的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)字段以適配不同格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)數(shù)據(jù),并且考慮到CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)數(shù)據(jù)之間有明顯的內(nèi)在層次和邏輯,通過(guò)多表外鍵級(jí)聯(lián)的形式實(shí)現(xiàn)CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)網(wǎng)絡(luò)、報(bào)文和信號(hào)的關(guān)聯(lián),將*.json文件分為Channel.json、Msg.json和Signal.json三個(gè)文件對(duì)CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行本地化的臨時(shí)存儲(chǔ),每個(gè)json文件由若干個(gè)數(shù)據(jù)字典組成,每個(gè)字典對(duì)應(yīng)的關(guān)鍵字如表1所示。
表1 *.json數(shù)據(jù)字段定義
序號(hào)Channel.json數(shù)據(jù)字段Msg.json數(shù)據(jù)字段Signal.json數(shù)據(jù)字段 1ChannelnameMsgnameSigname 2Cantypebl2_ChannelMsgID 3 MsgIDMulti_ID 4 Dec_MsgIDStartbit 5 DLCLength 6 Rx_or_TxByte_Order 7 CyctimeValuetype 8 Factor 9 Offset 10 Min 11 Max 12 Unit 13 Receiver 14 Startvalue 15 Comment 16 Valuetable 17 Start_Pos 18 End_Pos
SQLite數(shù)據(jù)庫(kù)是一個(gè)輕量級(jí)的開(kāi)源數(shù)據(jù)庫(kù)系統(tǒng),以其單一的磁盤(pán)文件形式、零配置的使用前提和簡(jiǎn)單易用的特性廣泛應(yīng)用在桌面應(yīng)用程序的數(shù)據(jù)管理項(xiàng)目中。在本文的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理平臺(tái)同樣采用SQLite數(shù)據(jù)庫(kù)對(duì)CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行管控,自主開(kāi)發(fā)了一系列的應(yīng)用程序編程接口(Application Programming Interface, API)函數(shù),便捷地實(shí)現(xiàn)*.json數(shù)據(jù)的批量導(dǎo)入以及與GUI界面控件的數(shù)據(jù)交互,實(shí)現(xiàn)數(shù)據(jù)的增刪查改,在GUI界面上顯示用戶(hù)需求的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)數(shù)據(jù)。
為了將*.json數(shù)據(jù)文件中的字典數(shù)據(jù)集高效地導(dǎo)入SQLite數(shù)據(jù)庫(kù),開(kāi)發(fā)了*.json矩陣數(shù)據(jù)批量插入到SQLite表中的算法,其運(yùn)作方式如圖4所示。首先確認(rèn)*.json數(shù)據(jù)文件是否存在,若存在則讀取*.json數(shù)據(jù)至內(nèi)存,然后以*.json文件名在SQLite中創(chuàng)建對(duì)應(yīng)文件名的數(shù)據(jù)表,以字典關(guān)鍵字為創(chuàng)建數(shù)據(jù)表的列標(biāo)題,若*.json中的字典數(shù)據(jù)完整有效,則向SQLite發(fā)送插入數(shù)據(jù)的SQL指令,完成數(shù)據(jù)插入工作。

圖4 數(shù)據(jù)庫(kù)的創(chuàng)建
與*.json數(shù)據(jù)文件對(duì)應(yīng),SQLite數(shù)據(jù)庫(kù)中使用三個(gè)數(shù)據(jù)表分別存儲(chǔ)Channel、Msg和Signal的各個(gè)屬性信息,如圖5所示。

圖5 CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)SQLite數(shù)據(jù)庫(kù)
為了避免CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)源文件自身存在的信息錯(cuò)誤或使用CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理平臺(tái)編輯CAN網(wǎng)絡(luò)數(shù)據(jù)時(shí)引入的信息錯(cuò)誤,開(kāi)發(fā)了校驗(yàn)算法對(duì)CAN網(wǎng)絡(luò)數(shù)據(jù)的一些屬性進(jìn)行必要的檢查,校驗(yàn)項(xiàng)目如表2所示。
表2 自動(dòng)校驗(yàn)內(nèi)容
序號(hào)內(nèi)容對(duì)象 1info_loss_checkChannel/Msg/Sig 2value_error_checkSig 3bit_repeat_checkMsg/Sig
info_loss_check:分別將Channel/Msg/Sig中不可或缺的CAN網(wǎng)絡(luò)數(shù)據(jù)信息進(jìn)行簡(jiǎn)單的非空校驗(yàn),當(dāng)信息缺失時(shí)記錄在報(bào)告中。
value_error_check:僅對(duì)info_loss_check校驗(yàn)數(shù)據(jù)完整的Sig數(shù)據(jù)對(duì)象進(jìn)行校驗(yàn):
1)依據(jù)Signame字段中涵蓋的信號(hào)起、止位與Startbit字段和Length字段進(jìn)行校驗(yàn),Signame字段描述的起/止位應(yīng)該與Startbit和Length描述的字節(jié)位一致;
2)依據(jù)Signame字段中涵蓋的信號(hào)起/止位和Startvalue字段、Min字段、Max字段、Valuetype字段、Offset字段、Factor字段進(jìn)行校驗(yàn),計(jì)算的物理最值應(yīng)該Min字段和Max字段范圍內(nèi),Startvalue也不能超過(guò)該范圍。
bit_repeat_check:對(duì)隸屬于每一個(gè)Msg的Sig對(duì)象進(jìn)行bit位重復(fù)定義校驗(yàn),每一個(gè)bit位只能被一個(gè)Sig信號(hào)定義。
校驗(yàn)不通過(guò)的數(shù)據(jù)在GUI中會(huì)標(biāo)注為紅色,在GUI中的狀態(tài)欄會(huì)顯示錯(cuò)誤數(shù)據(jù)的個(gè)數(shù)以及錯(cuò)誤數(shù)據(jù)所在的Tablewidget。通過(guò)工具欄的上一個(gè)錯(cuò)誤按鈕控件或下一個(gè)錯(cuò)誤按鈕控件,可以在數(shù)據(jù)欄中快速跳轉(zhuǎn)到錯(cuò)誤數(shù)據(jù)行,用戶(hù)需要對(duì)錯(cuò)誤信息進(jìn)行修改并保存數(shù)據(jù)后,才可以進(jìn)行CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件的生成。
CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件定義了整個(gè)車(chē)型CAN總線(xiàn)上交互的各個(gè)節(jié)點(diǎn)報(bào)文信號(hào)的信息,是車(chē)輛嵌入式軟件開(kāi)發(fā)與測(cè)試的密碼本。然而在實(shí)際車(chē)型項(xiàng)目的研發(fā)過(guò)程中,CAN網(wǎng)絡(luò)數(shù)據(jù)會(huì)隨著車(chē)型項(xiàng)目開(kāi)發(fā)進(jìn)展不斷地完善與變更,各個(gè)控制器嵌入式軟件CAN通訊模塊代碼也需要隨之做出對(duì)應(yīng)變更修改。對(duì)嵌入式軟件開(kāi)發(fā)人員而言,明確每次輸入的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件的變更內(nèi)容以及CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件與當(dāng)前嵌入式軟件CAN通訊模塊代碼中的CAN網(wǎng)絡(luò)數(shù)據(jù)的差異,是極其繁瑣而又十分重要的內(nèi)容。
DbcManager支持DBC格式導(dǎo)入、Excel格式導(dǎo)入和嵌入式軟件RTE層代碼中抓取共三種方式獲得CAN網(wǎng)絡(luò)數(shù)據(jù),導(dǎo)入DbcManager的CAN網(wǎng)絡(luò)數(shù)據(jù)經(jīng)過(guò)結(jié)構(gòu)化整理后以*.db3存儲(chǔ)在SQLite數(shù)據(jù)庫(kù)中。對(duì)兩個(gè)不同的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)比對(duì)流程如圖6所示。

圖6 CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)比對(duì)流程
選取兩個(gè)待比對(duì)的CAN網(wǎng)絡(luò)SQLite數(shù)據(jù)庫(kù)A.db3和CAN網(wǎng)絡(luò)SQLite數(shù)據(jù)庫(kù)B.db3,分別從中反向?qū)С鰆son格式數(shù)據(jù)文件Channel.json、Msg.json、Sig.json。
分別遍歷兩份Channel.json、Msg.json、Sig. json中的每一個(gè)數(shù)據(jù)對(duì)象獲得兩份CAN網(wǎng)絡(luò)數(shù)據(jù)的差異信息,差異信息內(nèi)容包含內(nèi)容增加item_ added、內(nèi)容刪除item_removed和內(nèi)容變更values_ changed,依據(jù)差異信息自動(dòng)生成比對(duì)報(bào)告。
CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件導(dǎo)出即導(dǎo)入CAN網(wǎng)絡(luò)數(shù)據(jù)的反向操作。在CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理平臺(tái)GUI的菜單欄可以選擇*.xlsx格式、*.dbc格式和*.db3格式進(jìn)行CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件的輸出。為了避免輸出的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件存在低級(jí)的數(shù)據(jù)錯(cuò)誤,在生成CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件之前會(huì)自動(dòng)調(diào)用校驗(yàn)程序?qū)?shù)據(jù)庫(kù)中的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行檢查校驗(yàn),若不存在錯(cuò)誤則生成指定格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件,否則提示“對(duì)錯(cuò)誤信息進(jìn)行修改后再執(zhí)行該操作”。
本文基于Python開(kāi)發(fā)的DbcManager是一個(gè)運(yùn)行于Windows環(huán)境的圖形用戶(hù)界面可執(zhí)行程序,可以便捷地加載不同格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件進(jìn)行編輯、校驗(yàn)和不同CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)之間的數(shù)據(jù)比對(duì)。下面以一個(gè)實(shí)際工程應(yīng)用進(jìn)行詳細(xì)說(shuō)明。
使用DbcManager導(dǎo)入某項(xiàng)目系統(tǒng)工程師提供的DBC文件進(jìn)行校驗(yàn),自動(dòng)生成校驗(yàn)報(bào)告;再使用DbcManager讀取某控制器嵌入式軟件代碼中的CAN網(wǎng)絡(luò)數(shù)據(jù)和該DBC文件CAN網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行比對(duì),自動(dòng)生成比對(duì)報(bào)告。
導(dǎo)入的DBC文件CAN網(wǎng)絡(luò)數(shù)據(jù)如表3所示,包含4個(gè)DBC文件,共126個(gè)報(bào)文信息和1 220個(gè)信號(hào)信息。DbcManager校驗(yàn)后生成的測(cè)試結(jié)果顯示共有43個(gè)信息存在數(shù)據(jù)值不正確,共3個(gè)報(bào)文信號(hào)存在Bit位重復(fù)定義,如圖7所示。
表 3 DbcManager校驗(yàn)功能基本信息確認(rèn)
測(cè)試人員測(cè)試項(xiàng)目數(shù)據(jù)來(lái)源基本信息 DbcManagerCAN網(wǎng)絡(luò)數(shù)據(jù)校驗(yàn)D:/總線(xiàn)網(wǎng)絡(luò)協(xié)議.dbcChannel:4Msg:126Signal:1 220

在DbcManager中選擇兩份CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)比對(duì),基本信息如表4所示。點(diǎn)擊開(kāi)始比對(duì)按鈕后,將分別遍歷兩份數(shù)據(jù)庫(kù)中Channel、Msg和Sig中各個(gè)字段的差異,自動(dòng)生成的部分測(cè)試報(bào)告如圖8所示。
表4 DbcManager比對(duì)功能基本信息確認(rèn)
測(cè)試人員測(cè)試項(xiàng)目數(shù)據(jù)來(lái)源A數(shù)據(jù)來(lái)源B DbcManagerCAN網(wǎng)絡(luò)數(shù)據(jù)比對(duì)D:/總線(xiàn)網(wǎng)絡(luò)協(xié)議.dbcD:/Project/BSW

圖8 DbcManager比對(duì)結(jié)果
本文研究了一種基于Python的DbcManager CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理平臺(tái),通過(guò)構(gòu)建不同算法適配不同格式的CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)信息導(dǎo)入,通過(guò)SQLite數(shù)據(jù)庫(kù)完成對(duì)CAN網(wǎng)絡(luò)數(shù)據(jù)信息的統(tǒng)一管理,開(kāi)發(fā)桌面用戶(hù)端集成數(shù)據(jù)抓取、數(shù)據(jù)編輯、數(shù)據(jù)校驗(yàn)以及CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)文件的生成等功能。實(shí)踐表明,DbcManager人機(jī)界面友好易于使用,多種方式篩選CAN網(wǎng)絡(luò)數(shù)據(jù)庫(kù)數(shù)據(jù),編輯數(shù)據(jù)方便快捷;自動(dòng)校驗(yàn)數(shù)據(jù),自動(dòng)比對(duì)數(shù)據(jù),減少人為操作,降低出錯(cuò)風(fēng)險(xiǎn),極大地提高了工作效率,對(duì)CAN網(wǎng)絡(luò)的開(kāi)發(fā)和CAN網(wǎng)絡(luò)各個(gè)節(jié)點(diǎn)控制器軟件的開(kāi)發(fā)有高效的輔助作用。
[1] 陳穎,鐘成,李興華,等.自適應(yīng)的車(chē)內(nèi)CAN總線(xiàn)安全機(jī)制[J].信息安全研究,2019,5(12):1076-1088.
[2] 胡志云.基于CAN總線(xiàn)在車(chē)輛中的應(yīng)用[J].山西電子技術(shù),2020(1):59-60,64.
[3] 馬建輝,胡代榮,郭坤.一種汽車(chē)CAN總線(xiàn)網(wǎng)關(guān)的報(bào)文接收和發(fā)送方法[J].現(xiàn)代電子技術(shù),2018,41(11):5- 7,12.
[4] 方遒,姜瑜濤,張曉先,等.汽車(chē)電子基礎(chǔ)軟件標(biāo)準(zhǔn)體系研究[J].信息技術(shù)與標(biāo)準(zhǔn)化,2011(8):30-33,38.
[5] 江永聰.基于DBC的汽車(chē)CAN報(bào)文遠(yuǎn)程采集與分析系統(tǒng)設(shè)計(jì)[J].電子技術(shù)與軟件工程,2014(14):203-204.
[6] 陳琪晟.基于DSP的CAN總線(xiàn)通信程序[J].鐵路通信信號(hào)工程技術(shù),2015,12(2):43-48.
[7] 王永輝.CANoe在整車(chē)系統(tǒng)開(kāi)發(fā)測(cè)試中的應(yīng)用[J].汽車(chē)實(shí)用技術(shù),2019,44(16):85-87.
[8] 惲海,曹瑩.2011年CAN總線(xiàn)車(chē)身控制系統(tǒng)需求與行業(yè)發(fā)展分析[J].汽車(chē)工業(yè)研究, 2012(6):33-37.
[9] 何曄.CAN總線(xiàn)報(bào)文丟失故障及其判定方法[J].科技視界,2015(33):126.
[10] 江永聰.基于DBC的汽車(chē)CAN報(bào)文遠(yuǎn)程采集與分析系統(tǒng)設(shè)計(jì)[J].電子技術(shù)與軟件工程,2014(14):203-204.
[11] International Organization for Standardization.Diag- nostics on Controller Area Networks (CAN) Part2: Network Layer Services:ISO 15765-2:2004[S].Genève: ISO,2004.
[12] Vector Informatik GmbH.User Manual Function Ver- son1.1[EB/OL].(2012-10-05)[2022-11-16].https://cdn. vector.com/cms/content/products/vtsystem/Docs/VT_System_Manual_VT7820_EN.pdf.
Analysis of CAN Network Database Management Based on Python
LAN Qiliang, WU Guangyao, WANG Shuai, CHEN Cong
( Product Planning and Automotive New Technology Research Institute, BYD Automobile Industry Company Limited, Shenzhen 518118, China )
In order to efficiently manage the controller area network(CAN) data of vehicle system, based on the research of CAN network data structure and the accumulation of experience in the development and testing of on-board embedded software, a method of CAN network database management platform based on Python is proposed to realize the import, data editing, data automatic verification, data automatic comparison and CAN network database file output of various formats. It solves the defects of low editing efficiency of the current mainstream CAN network database management tools and the error prone to manual verification and comparison of data, and effectively improves the efficiency of CAN network development and CAN network node controller software development.
CAN network database; Data capture;Python
U469.7
A
1671-7988(2023)17-42-07
10.16638/j.cnki.1671-7988.2023.017.008
藍(lán)啟亮(1993-),男,碩士,研究方向?yàn)榍度胧杰浖_(kāi)發(fā)與測(cè)試,E-mail:lamnas@126.com。