python中用cantools和can工具包解析blf文件的方法
一、工具包安裝
pip install cantools python-can
二、解析blf文件
一般情況下,解析blf需要dbc文件,當然其實不用dbc也可以,只不過解析比較麻煩,推薦還是配合dbc解析,這個也是我們最常用的辦法。所以要用dbc,需要先加載dbc文件,這里需要cantools,代碼:
import cantools import can dbc_file = r"C:\Users\master01\Downloads\blf_conf\FS04通用_TBOX(1).dbc" dbc = cantools.db.load_file(dbc_file)
加載完dbc文件,就可以解析blf文件了,代碼
f = r"C:\Users\master01\Downloads\blfdata\問題blf\1.17-9-10.blf" log_data = can.BLFReader(f) for msg in log_data: print(msg)
打印結(jié)果是這樣的
Timestamp: 1673917200.026000 ID: 0301 S Rx DL: 8 1d b0 41 54 07 02 00 00 Channel: 0
Timestamp: 1673917200.026000 ID: 070b S Rx DL: 8 00 c8 0c b6 24 b8 24 b8 Channel: 0
Timestamp: 1673917200.028000 ID: 0322 S Rx DL: 8 00 00 00 00 00 00 03 00 Channel: 0
Timestamp: 1673917200.126000 ID: 030d S Rx DL: 8 00 14 00 00 00 00 00 00 Channel: 0
Timestamp: 1673917200.126000 ID: 0320 S Rx DL: 8 06 b1 00 00 00 00 07 00 Channel: 0
Timestamp: 1673917200.127000 ID: 0708 S Rx DL: 8 00 48 00 48 00 08 00 32 Channel: 0
Timestamp: 1673917200.129000 ID: 0712 S Rx DL: 8 00 06 81 0d 21 05 00 00 Channel: 0
Timestamp: 1673917200.271000 ID: 1821a7c1 X Rx DL: 8 02 2f 00 00 00 00 00 00 Channel: 0
Timestamp: 1673917200.321000 ID: 0110 S Rx DL: 8 05 36 16 67 00 09 20 6b Channel: 0
Timestamp: 1673917200.322000 ID: 0111 S Rx DL: 8 16 5d 00 00 d4 00 20 bf Channel: 0
Timestamp: 1673917200.322000 ID: 0112 S Rx DL: 8 49 32 00 10 00 16 6d 4c Channel: 0
Timestamp: 1673917200.326000 ID: 0300 S Rx DL: 8 00 3a c2 f8 00 00 00 00 Channel: 0
Timestamp: 1673917200.326000 ID: 0710 S Rx DL: 8 00 00 00 00 00 00 00 00 Channel: 0
Timestamp: 1673917200.427000 ID: 0709 S Rx DL: 8 0e 02 0e b0 4a 0c ff fe Channel: 0
Timestamp: 1673917200.427000 ID: 070a S Rx DL: 8 11 51 1f fd 46 de 1c 83 Channel: 0
Timestamp: 1673917200.428000 ID: 0711 S Rx DL: 8 02 df 00 09 02 d5 00 d4 Channel: 0
Timestamp: 1673917200.438000 ID: 0308 S Rx DL: 8 03 22 0a 3c 0a 00 00 2a Channel: 0
Timestamp: 1673917200.550000 ID: 03a1 S Rx DL: 8 00 00 06 b1 00 00 15 00 Channel: 0
Timestamp: 1673917200.550000 ID: 03a2 S Rx DL: 8 00 00 00 00 00 00 05 00 Channel: 0
Timestamp: 1673917200.633000 ID: 0270 S Rx DL: 8 00 67 67 00 00 00 00 a2 Channel: 0
Timestamp: 1673917200.638000 ID: 0307 S Rx DL: 8 41 14 03 c0 36 00 00 03 Channel: 0
Timestamp: 1673917200.638000 ID: 0309 S Rx DL: 8 1c 1c 1c 1c 1c 1c c3 50 Channel: 0
Timestamp: 1673917200.655000 ID: 03a0 S Rx DL: 8 06 b1 00 00 00 00 15 00 Channel: 0
Timestamp: 1673917200.657000 ID: 030a S Rx DL: 8 00 00 00 00 00 00 00 00 Channel: 0
可以發(fā)現(xiàn),時間戳解析出來了,其它的數(shù)據(jù)都是16進制,沒法直接看,當然我們?nèi)绻煜lf格式,可以自己把數(shù)據(jù)還原出來,但是既然已經(jīng)用第三方庫,我們當然就不用自己解析了,而且仔細觀察一下即可發(fā)現(xiàn),之前的加載dbc并沒有用上,所以這時一個重要的函數(shù)登場了,那就是dbc.decode_message(id,data),具體代碼如下
decoded = {} for msg in logdata: try: dec = dbc.decode_message(msg.arbitration_id, msg.data) if dec: for key, data in dec.items(): if key not in decoded: decoded[key] = [] decoded[key].append([msg.timestamp, data]) except: pass
因為我這里是最后把數(shù)據(jù)解析出來轉(zhuǎn)成mf4了,所以構(gòu)建了一個decoded字典,每個key里記一個信號,熟悉mf4的應(yīng)該知道,mf4里每個信號主要包含兩部分,一個是時間戳,一個是數(shù)據(jù),有了這兩個,我們就可以創(chuàng)建mf4文件了,最后放上創(chuàng)建mf4的代碼
from asammdf import MDF,Signal sigs = [] for k,v in decoded.items(): timestamps = [i[0] for i in v] data = [i[1] for i in v] s = Signal(data,timestamps,name=k) sigs.append(s) mdf = MDF() mdf.append(sigs) mdf.save("xx.mf4",overwrite=True)
這樣就實現(xiàn)了blf文件的解析與轉(zhuǎn)換,當然,轉(zhuǎn)換的格式很自由,只要熟悉相應(yīng)的格式,比如csv,hdf5,xlsx,json,pickle都可以,因為我們已經(jīng)拿到原始數(shù)據(jù)了,保存成什么格式就很簡單了。
總結(jié)
到此這篇關(guān)于python中用cantools和can工具包解析blf文件的文章就介紹到這了,更多相關(guān)python解析blf文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 函數(shù)內(nèi)部修改外部變量的方法
今天小編就為大家分享一篇python 函數(shù)內(nèi)部修改外部變量的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12Django中使用pillow實現(xiàn)登錄驗證碼功能(帶刷新驗證碼功能)
這篇文章主要介紹了Django中使用pillow實現(xiàn)登錄驗證碼功能(帶刷新驗證碼功能),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04Pytorch轉(zhuǎn)onnx、torchscript方式
這篇文章主要介紹了Pytorch轉(zhuǎn)onnx、torchscript方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05python機器學(xué)習(xí)基礎(chǔ)決策樹與隨機森林概率論
這篇文章主要為大家介紹了python機器學(xué)習(xí)基礎(chǔ)決策樹與隨機森林概率論詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-11-11