任大恒,嚴 曉,2,黃碧雄,王 影
1(上海工程技術(shù)大學(xué) 機械與汽車工程學(xué)院,上海 201620)
2(上海玫克生儲能科技有限公司,上海 201619)
電動汽車車用鋰電池發(fā)展十分迅速,全球電動汽車保有量在逐年增加,但隨之而來的電池安全問題也日益嚴重,主要還是電池一致性問題.純電動汽車的電池信息主要由電池管理系統(tǒng)(BMS)發(fā)出,因此采集BMS 發(fā)出的CAN 報文,準確的診斷預(yù)測出電池存在的安全隱患至關(guān)重要.因為CAN 協(xié)議格式并沒有固定標準格式,計算機無法識別CAN 協(xié)議,所以在CAN 報文解析需要將CAN 協(xié)議轉(zhuǎn)換為機器可讀的文件,在之前的研究中有采用XML 文件作為機器可讀文件,這種方法需要人工錄入?yún)f(xié)議內(nèi)容,按照對應(yīng)的格式將每一條信息轉(zhuǎn)換成XML 文件[1],這樣做會使工作量加大并且人工錄入容易出錯,導(dǎo)致結(jié)果不準確,目前CAN 網(wǎng)絡(luò)中各邏輯節(jié)點信息采用由德國維克多公司發(fā)布的DBC 文件,DBC 文件能夠被機器識別,擁有固定的格式,依據(jù)DBC 文件可以開發(fā)出用來監(jiān)視CAN 網(wǎng)絡(luò)中所有邏輯節(jié)點的運行狀態(tài),也可以是有針對性的ECU通信應(yīng)用軟件[2],因此被廣泛使用.但是DBC 文件目前主要依賴于專用軟件的建立和解析,而軟件的使用價格昂貴.本文基于樹莓派設(shè)計了一套便攜式可移動的BMS 的CAN 報文采集與解析系統(tǒng),只需要將DBC 文件導(dǎo)入到樹莓派內(nèi),設(shè)備便能根據(jù)DBC 文件進行報文解析.能夠?qū)崟r有效的檢測電池組一致性的好壞,有利于提高電池的利用率,方便維修檢查電池工作狀態(tài).
CAN 總線是一種串行通信協(xié)議,能有效地支持具有很高安全等級的分布實時控制.CAN 控制器局域網(wǎng)是1986年Bosch 公司提出的面向汽車的串行通信協(xié)議,目前是國際上標準的汽車網(wǎng)絡(luò)協(xié)議[3].當(dāng)CAN 總線上的節(jié)點發(fā)送數(shù)據(jù)時,以報文形式廣播給網(wǎng)絡(luò)中的所有節(jié)點,總線上的所有節(jié)點都不使用節(jié)點地址等系統(tǒng)配置信息,只根據(jù)每組報文開頭的11 位標識符(CAN 2.0A 規(guī)范)解釋數(shù)據(jù)的含義來決定是否接收[4].CAN總線可以分為3 個層次:物理層、傳輸層、對象層.物理層中定義實際信號的傳輸方法,用來定義不同節(jié)點之間根據(jù)電氣屬性如何進行位的實際傳輸.傳輸層負責(zé)把接收到的報文提供給對象層,以及接收來自對象層的報文.對象層中可以為遠程數(shù)據(jù)請求以及數(shù)據(jù)傳輸提供服務(wù),確定由實際要使用的傳輸層接收哪一個報文,并且為恢復(fù)管理和過載通知提供手段[5].
本文采用樹莓派3B+作為CAN 報文采集的載體,樹莓派是一款基于ARM 的微型電腦主板,以SD/MicroSD卡為內(nèi)存硬盤,支持WiFi 和藍牙連接,主板周圍有4 個USB 接口和一個以太網(wǎng)接口,外部有40 個GPIO接口,支持Linux 系統(tǒng),體積小價格低廉.針對CAN 報文的采集本文設(shè)計了樹莓派的外接擴展板,采用MCP2515作為CAN 的控制器,Microchip 的MCP2515 是一款CAN 協(xié)議控制器,完全支持CAN V2.0B 技術(shù)規(guī)范.該器件能發(fā)送和接收標準和擴展數(shù)據(jù)幀以及遠程幀.通過SPI 接口掛載在樹莓派上,樹莓派在使用該芯片時不需要手動編寫驅(qū)動,打開設(shè)備樹中的內(nèi)核驅(qū)動就能夠使用.同時選用DS1307 時鐘芯片為樹莓派斷電時提供準確時間,在采集報文時同時能記錄下報文采集的絕對時間.擴展板部分原理圖如圖1所示.
圖1 原理圖
CAN 報文采集使用C 語言編寫采集程序,采集速率更快數(shù)據(jù)更加準確,在采集的同時在每條報文后添加采集時間,便于后續(xù)對電池性能的評估.CAN 報文在采集時軟件上主要分為5 步:
(1)CAN 總線配置:主要用于設(shè)置CAN 總線的位速率以及使能CAN 設(shè)備;
(2)創(chuàng)建套接字:Socket CAN 采用的是原始套接字,常用于檢驗新的協(xié)議實現(xiàn)或訪問現(xiàn)有服務(wù)中配置的新設(shè)備;
(3)指定CAN 設(shè)備:綁定要用的CAN 設(shè)備;
(4)定義接收過濾規(guī)則:在數(shù)據(jù)接收時,可以根據(jù)預(yù)先設(shè)置的過濾規(guī)則,實現(xiàn)對報文的過濾;
(5)顯示報文:報文按照幀ID、數(shù)據(jù)長度、數(shù)據(jù)、時間的順序用空格分隔開,生成采集的報文文件.
采集的CAN 報文如圖2所示.
目前DBC 文件的廣泛使用,它是CAN 矩陣的另一種表示,各節(jié)點通過CAN 網(wǎng)絡(luò)傳輸信號協(xié)議規(guī)定ECU 怎么發(fā)送和接收信號:例如信號長度、類型、精度、偏移量、信號名等,這些參數(shù)通過編輯工具生成DBC 文件[6].
圖2 采集報文示例
根據(jù)Vector 發(fā)布的DBC 文件格式規(guī)范,本文設(shè)計了針對DBC 文件的解析系統(tǒng).以一路CAN 對應(yīng)的文件為例,DBC 文件的格式如下:
VERSION ""
NS_ :
BS_:
BU_:Vector__XXX
BO_ 408961267 Bms2VcuBasiInfo:8 Vector__XXX
SG_ SysVolt :7|16@0+ (0.1,0)[0|6553.5] "V"Vector__XXX
SG_ BatCurrent :23|16@0- (0.1,-1000)[-4276.8|2276.7] "A" Vector__XXX
SG_ BatSoc :32|8@1+ (1,0)[0|255] "%"Vector__XXX
SG_ BatSoh :40|8@1+ (1,0)[0|255] "%"Vector__XXX
SG_ BatState :52|4@1+ (1,0)[0|15] ""Vector__XXX
SG_ BatAlmLv :48|4@1+ (1,0)[0|15] ""Vector__XXX
SG_ BatLife :56|8@1+ (1,0)[0|255] ""Vector__XXX
DBC 頭部包含著VERSION 與NS( new symbol)的信息,BU 為網(wǎng)絡(luò)節(jié)點的定義,BS 為波特率設(shè)置,BO_為關(guān)鍵字表示報文,408 961 267 表示消息ID 的十進制形式,Bms2VcuBasiInfo 是消息名稱,“8”為報文的數(shù)據(jù)長度幀字節(jié)數(shù),Vector__XXX 為發(fā)出消息的網(wǎng)絡(luò)節(jié)點.SG_ SysVolt :7|16@0+ (0.1,0)[0|6553.5] "V" Vector__XXX 是一條消息下的一個信號,其中SG_表示消息的起始.SysVolt 表示信號名,7 代表起始位Bit,16 表示信號長度,0 或1 表示Motorola 格式或Intel 格式,±表示有無符號,括號內(nèi)表示精度值和偏移量,中括號內(nèi)表示最大和最小值,“V”為單位,Vector__XXX 為信號節(jié)點.
DBC 文件格式是固定不變的,且有固定的關(guān)鍵字表征不同的信息.因此本文采用Python 語言基于正則表達式對DBC 文件進行識別讀取.其中關(guān)鍵匹配信息”BU_:(.*)”是匹配網(wǎng)絡(luò)節(jié)點;“BO_ (.*?)(.*?):(.*?)(.*)”是匹配消息、幀ID、消息名、數(shù)據(jù)長度的模板;”SG_ (.*?):(.*?)|(.*?)@(.*?)((.*?),(.*?))[(.*?)|(.*?)]"(.*?)" (.*)”;匹配消息下的信號內(nèi)容.根據(jù)以上關(guān)鍵的匹配語句,讀取DBC 文件的關(guān)鍵信息來解析采集的CAN 報文.
CAN 報文是指發(fā)送單元向接收單元傳送數(shù)據(jù)幀.通常所說的CAN 報文是指在CAN 線上利用ECU 和CAN 卡接收到的十六進制報文.接收到的CAN 報文由很多部分組成,但解析時主要用到的是幀ID 和數(shù)據(jù)兩部分.幀ID 實際上是由29 位標識符轉(zhuǎn)換得到的,目前的通信協(xié)議中都直接給出了對應(yīng)的幀ID,不需要再做轉(zhuǎn)換.數(shù)據(jù)一般由8 個字節(jié)組成,每個字節(jié)由兩個字符組成,讀取時要根據(jù)字節(jié)的順序讀取(Motorola 格式或者Inter 格式).CAN 總線的數(shù)據(jù)傳輸規(guī)則是首先傳輸一個字節(jié)的高位,最后傳輸該字節(jié)的低位,所以當(dāng)信號不超過一個字節(jié)時兩種格式解析沒有區(qū)別,當(dāng)發(fā)送的信號超過一個字節(jié)或跨字節(jié)時,采用Inter 格式,該信號的高位將被放在高字節(jié)的高位,信號的低位將被放在低字節(jié)的低位.這樣,信號的起始位就是低字節(jié)的低位.當(dāng)采用Motorola 格式時,該信號的高位將被放在低字節(jié)的高位,信號的低位將被放在高字節(jié)的低位.這樣,信號的起始位就是高字節(jié)的低位.例如報文“1827F402 0C 48 0C 3F 00 50 02 B1”中“1827F402”是幀ID,“0C 48 0C 3F 00 50 02 B1”是數(shù)據(jù)段,根據(jù)DBC 文件,如按照Motorola 的格式,解析時按照16 進制就是0x0C48,而按照Inter 格式解析時就是0x480C,兩種解析格式在夸字節(jié)時有絕對的區(qū)別.
本文在解析時將報文數(shù)據(jù)段轉(zhuǎn)換為二進制字符串,即0-63 位總共64 個字符,將64 個字符串的序號與二進制的位號做一轉(zhuǎn)換,例如數(shù)據(jù)段“0C880C670C5D0 C60”轉(zhuǎn)換為二進制字符串后為0000110010001000 0000110001100111000011000101110100001100011000 00 解析時根據(jù)DBC 文件中的起始位和數(shù)據(jù)長度,將數(shù)據(jù)的起始位轉(zhuǎn)換成二進制字符串的起始位,如果是Motorola 格式則根據(jù)轉(zhuǎn)換后的字符串起始位指直接取數(shù)據(jù)長度對應(yīng)的字符長度便能得到需要的數(shù)據(jù).如果是Inter 格式只需要將二進制字符串前后順序顛倒即可.這樣使解析報文更加快捷.CAN 報文解析流程圖如圖3所示.
圖3 報文解析流程圖
開路電壓是電池組評判電池一致性的參數(shù)之一,根據(jù)各單體電壓的差值大小,可以判斷電池組的一致性優(yōu)劣,并且在必要時對電池組進行均衡操作.
實驗采用24 串磷酸鐵鋰電池組進行充放電實驗,在實驗開始之前能夠測到各單體電池的開路電壓情況,根據(jù)各單體電池開路電壓的大小,可以評估電池組一致性.如圖4中箱型圖所示,箱型圖能夠顯示一組數(shù)據(jù)分散情況,提供了識別異常值的一個標準,根據(jù)CAN報文中解析到的單體電池數(shù)據(jù)可以看到大部分電池均分布在3200 mV 上下,有兩個電池屬于異常值,需要做進一步處理.其他單體電池一致性相對較好.
圖4 開路電壓箱型圖
本文采用MCP2515 芯片設(shè)計了樹莓派擴展板,能夠?qū)崿F(xiàn)BMS 的CAN 報文采集,并用其采集到的CAN報文,按照格式生成報文文件.根據(jù)協(xié)議的DBC 文件,對采集得到的CAN 報文進行解析.解析系統(tǒng)將CAN 報文的數(shù)據(jù)段轉(zhuǎn)換成二進制字符,根據(jù)DBC 文件的編碼類型,按Motorola 格式和Inter 格式對數(shù)據(jù)進行翻譯,使得報文解析更加準確快速.同時,根據(jù)DBC 文件格式統(tǒng)一固定這一特點,寫出了DBC 文件關(guān)鍵信息的正則表達式匹配模板,能夠任意組合便于篩選報文內(nèi)容得到需要的信息,本文所設(shè)計的CAN 報文采集系統(tǒng)只需要把DBC 文件導(dǎo)入樹莓派中即可完成對報文的解析,操作簡單便利,同時也是便攜可移動式的CAN 報文采集解析系統(tǒng),并且在解析后能做簡單的計算分析,對電池的一致性從開路電壓等角度做出評估.由于本文是基于樹莓派設(shè)計的因此在之后的應(yīng)用中能夠進行二次開發(fā),對解析數(shù)據(jù)做更深層次的處理,從更多的方面對電池組的性能做出診斷和預(yù)測,具有重大應(yīng)用價值.
致謝
感謝企業(yè)導(dǎo)師鄭小鹿教授在本文工作中技術(shù)上的指導(dǎo),研究過程中的支持和幫助!