任大恒,嚴 曉,2,黃碧雄,王 影
1(上海工程技術大學 機械與汽車工程學院,上海 201620)
2(上海玫克生儲能科技有限公司,上海 201619)
電動汽車車用鋰電池發展十分迅速,全球電動汽車保有量在逐年增加,但隨之而來的電池安全問題也日益嚴重,主要還是電池一致性問題.純電動汽車的電池信息主要由電池管理系統(BMS)發出,因此采集BMS 發出的CAN 報文,準確的診斷預測出電池存在的安全隱患至關重要.因為CAN 協議格式并沒有固定標準格式,計算機無法識別CAN 協議,所以在CAN 報文解析需要將CAN 協議轉換為機器可讀的文件,在之前的研究中有采用XML 文件作為機器可讀文件,這種方法需要人工錄入協議內容,按照對應的格式將每一條信息轉換成XML 文件[1],這樣做會使工作量加大并且人工錄入容易出錯,導致結果不準確,目前CAN 網絡中各邏輯節點信息采用由德國維克多公司發布的DBC 文件,DBC 文件能夠被機器識別,擁有固定的格式,依據DBC 文件可以開發出用來監視CAN 網絡中所有邏輯節點的運行狀態,也可以是有針對性的ECU通信應用軟件[2],因此被廣泛使用.但是DBC 文件目前主要依賴于專用軟件的建立和解析,而軟件的使用價格昂貴.本文基于樹莓派設計了一套便攜式可移動的BMS 的CAN 報文采集與解析系統,只需要將DBC 文件導入到樹莓派內,設備便能根據DBC 文件進行報文解析.能夠實時有效的檢測電池組一致性的好壞,有利于提高電池的利用率,方便維修檢查電池工作狀態.
CAN 總線是一種串行通信協議,能有效地支持具有很高安全等級的分布實時控制.CAN 控制器局域網是1986年Bosch 公司提出的面向汽車的串行通信協議,目前是國際上標準的汽車網絡協議[3].當CAN 總線上的節點發送數據時,以報文形式廣播給網絡中的所有節點,總線上的所有節點都不使用節點地址等系統配置信息,只根據每組報文開頭的11 位標識符(CAN 2.0A 規范)解釋數據的含義來決定是否接收[4].CAN總線可以分為3 個層次:物理層、傳輸層、對象層.物理層中定義實際信號的傳輸方法,用來定義不同節點之間根據電氣屬性如何進行位的實際傳輸.傳輸層負責把接收到的報文提供給對象層,以及接收來自對象層的報文.對象層中可以為遠程數據請求以及數據傳輸提供服務,確定由實際要使用的傳輸層接收哪一個報文,并且為恢復管理和過載通知提供手段[5].
本文采用樹莓派3B+作為CAN 報文采集的載體,樹莓派是一款基于ARM 的微型電腦主板,以SD/MicroSD卡為內存硬盤,支持WiFi 和藍牙連接,主板周圍有4 個USB 接口和一個以太網接口,外部有40 個GPIO接口,支持Linux 系統,體積小價格低廉.針對CAN 報文的采集本文設計了樹莓派的外接擴展板,采用MCP2515作為CAN 的控制器,Microchip 的MCP2515 是一款CAN 協議控制器,完全支持CAN V2.0B 技術規范.該器件能發送和接收標準和擴展數據幀以及遠程幀.通過SPI 接口掛載在樹莓派上,樹莓派在使用該芯片時不需要手動編寫驅動,打開設備樹中的內核驅動就能夠使用.同時選用DS1307 時鐘芯片為樹莓派斷電時提供準確時間,在采集報文時同時能記錄下報文采集的絕對時間.擴展板部分原理圖如圖1所示.

圖1 原理圖
CAN 報文采集使用C 語言編寫采集程序,采集速率更快數據更加準確,在采集的同時在每條報文后添加采集時間,便于后續對電池性能的評估.CAN 報文在采集時軟件上主要分為5 步:
(1)CAN 總線配置:主要用于設置CAN 總線的位速率以及使能CAN 設備;
(2)創建套接字:Socket CAN 采用的是原始套接字,常用于檢驗新的協議實現或訪問現有服務中配置的新設備;
(3)指定CAN 設備:綁定要用的CAN 設備;
(4)定義接收過濾規則:在數據接收時,可以根據預先設置的過濾規則,實現對報文的過濾;
(5)顯示報文:報文按照幀ID、數據長度、數據、時間的順序用空格分隔開,生成采集的報文文件.
采集的CAN 報文如圖2所示.
目前DBC 文件的廣泛使用,它是CAN 矩陣的另一種表示,各節點通過CAN 網絡傳輸信號協議規定ECU 怎么發送和接收信號:例如信號長度、類型、精度、偏移量、信號名等,這些參數通過編輯工具生成DBC 文件[6].

圖2 采集報文示例
根據Vector 發布的DBC 文件格式規范,本文設計了針對DBC 文件的解析系統.以一路CAN 對應的文件為例,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 為網絡節點的定義,BS 為波特率設置,BO_為關鍵字表示報文,408 961 267 表示消息ID 的十進制形式,Bms2VcuBasiInfo 是消息名稱,“8”為報文的數據長度幀字節數,Vector__XXX 為發出消息的網絡節點.SG_ SysVolt :7|16@0+ (0.1,0)[0|6553.5] "V" Vector__XXX 是一條消息下的一個信號,其中SG_表示消息的起始.SysVolt 表示信號名,7 代表起始位Bit,16 表示信號長度,0 或1 表示Motorola 格式或Intel 格式,±表示有無符號,括號內表示精度值和偏移量,中括號內表示最大和最小值,“V”為單位,Vector__XXX 為信號節點.
DBC 文件格式是固定不變的,且有固定的關鍵字表征不同的信息.因此本文采用Python 語言基于正則表達式對DBC 文件進行識別讀取.其中關鍵匹配信息”BU_:(.*)”是匹配網絡節點;“BO_ (.*?)(.*?):(.*?)(.*)”是匹配消息、幀ID、消息名、數據長度的模板;”SG_ (.*?):(.*?)|(.*?)@(.*?)((.*?),(.*?))[(.*?)|(.*?)]"(.*?)" (.*)”;匹配消息下的信號內容.根據以上關鍵的匹配語句,讀取DBC 文件的關鍵信息來解析采集的CAN 報文.
CAN 報文是指發送單元向接收單元傳送數據幀.通常所說的CAN 報文是指在CAN 線上利用ECU 和CAN 卡接收到的十六進制報文.接收到的CAN 報文由很多部分組成,但解析時主要用到的是幀ID 和數據兩部分.幀ID 實際上是由29 位標識符轉換得到的,目前的通信協議中都直接給出了對應的幀ID,不需要再做轉換.數據一般由8 個字節組成,每個字節由兩個字符組成,讀取時要根據字節的順序讀取(Motorola 格式或者Inter 格式).CAN 總線的數據傳輸規則是首先傳輸一個字節的高位,最后傳輸該字節的低位,所以當信號不超過一個字節時兩種格式解析沒有區別,當發送的信號超過一個字節或跨字節時,采用Inter 格式,該信號的高位將被放在高字節的高位,信號的低位將被放在低字節的低位.這樣,信號的起始位就是低字節的低位.當采用Motorola 格式時,該信號的高位將被放在低字節的高位,信號的低位將被放在高字節的低位.這樣,信號的起始位就是高字節的低位.例如報文“1827F402 0C 48 0C 3F 00 50 02 B1”中“1827F402”是幀ID,“0C 48 0C 3F 00 50 02 B1”是數據段,根據DBC 文件,如按照Motorola 的格式,解析時按照16 進制就是0x0C48,而按照Inter 格式解析時就是0x480C,兩種解析格式在夸字節時有絕對的區別.
本文在解析時將報文數據段轉換為二進制字符串,即0-63 位總共64 個字符,將64 個字符串的序號與二進制的位號做一轉換,例如數據段“0C880C670C5D0 C60”轉換為二進制字符串后為0000110010001000 0000110001100111000011000101110100001100011000 00 解析時根據DBC 文件中的起始位和數據長度,將數據的起始位轉換成二進制字符串的起始位,如果是Motorola 格式則根據轉換后的字符串起始位指直接取數據長度對應的字符長度便能得到需要的數據.如果是Inter 格式只需要將二進制字符串前后順序顛倒即可.這樣使解析報文更加快捷.CAN 報文解析流程圖如圖3所示.

圖3 報文解析流程圖
開路電壓是電池組評判電池一致性的參數之一,根據各單體電壓的差值大小,可以判斷電池組的一致性優劣,并且在必要時對電池組進行均衡操作.
實驗采用24 串磷酸鐵鋰電池組進行充放電實驗,在實驗開始之前能夠測到各單體電池的開路電壓情況,根據各單體電池開路電壓的大小,可以評估電池組一致性.如圖4中箱型圖所示,箱型圖能夠顯示一組數據分散情況,提供了識別異常值的一個標準,根據CAN報文中解析到的單體電池數據可以看到大部分電池均分布在3200 mV 上下,有兩個電池屬于異常值,需要做進一步處理.其他單體電池一致性相對較好.

圖4 開路電壓箱型圖
本文采用MCP2515 芯片設計了樹莓派擴展板,能夠實現BMS 的CAN 報文采集,并用其采集到的CAN報文,按照格式生成報文文件.根據協議的DBC 文件,對采集得到的CAN 報文進行解析.解析系統將CAN 報文的數據段轉換成二進制字符,根據DBC 文件的編碼類型,按Motorola 格式和Inter 格式對數據進行翻譯,使得報文解析更加準確快速.同時,根據DBC 文件格式統一固定這一特點,寫出了DBC 文件關鍵信息的正則表達式匹配模板,能夠任意組合便于篩選報文內容得到需要的信息,本文所設計的CAN 報文采集系統只需要把DBC 文件導入樹莓派中即可完成對報文的解析,操作簡單便利,同時也是便攜可移動式的CAN 報文采集解析系統,并且在解析后能做簡單的計算分析,對電池的一致性從開路電壓等角度做出評估.由于本文是基于樹莓派設計的因此在之后的應用中能夠進行二次開發,對解析數據做更深層次的處理,從更多的方面對電池組的性能做出診斷和預測,具有重大應用價值.
致謝
感謝企業導師鄭小鹿教授在本文工作中技術上的指導,研究過程中的支持和幫助!