DBC解析请见:CAN BLF包解析和播包发送(一):CAN dbc解析https://blog.csdn.net/qq_42503781/article/details/128966946
BLF是vector的CANoe工具录制can报文形成的包的数据格式,一般会保存在BLF和ASC两种格式,BLF是其中一种。
好,废话不多说,直接进入BLF解析,无需看BLF的格式定义,直接根据包的输出即可直观了解。
BLF解析需要结合dbc和blf解析两者才可实现正常数据展示。
dbc解析请转至文章开始,点击链接跳转。
BLF解析也采用python,需要使用can的库,安装方法:
pip3 install can
使用时,直接import can即可。
直接上代码,可直接运行:
# -*- coding: utf-8 -*-
#####
"""
# author:vehicle_ma, 2023/2/10
"""
######
import can
import cantools
import time
db = cantools.db.load_file('test.dbc') #dbc对象
filename = "test.blf"
blf = can.BLFReader(filename) #blf对象
for msg in blf:
ID = msg.arbitration_id #message id
time_stamp = msg.timestamp #blf包中保存的报文时间戳
can_data = msg.data #blf包中保存的数据,直接打印是加密的数字字符码
dict_data = db.decode_message(msg.arbitration_id, msg.data) #对数据进行解码
length = msg.dlc #blf包中保存的报文长度,如8,64
print('origin message data ', msg.data)
print('message id: ', ID)
print('message data ', dict_data)
print('message length ', length)
break #为了好展示,所以就输出了包里面的第一行报文,全输出去掉即可
直接执行结果:
origin message data bytearray(b'\x00\x02\x00\x04\x00\x00\t|\x80\x08\x00\x80\x00\x00\x00\x00\x04\x00\x00\x02\x00\x80\x00\x00\x80\x08\x00\x00\x04\x00\x00\x00\x02\x00\x00\x08\x00\x80\x00\x00\x80\x00\x00\x04\x00\x00\x00\x00\x80\x08\x00\x80\x02\x00\x00\x00\x80\x08\x00\x00\x04\x00\x00\x00')
message id: 428
message data {'FRM_ObjID': 0, 'FRM_ObjObstcl': 0.0, 'FRM_ObjDirAccrnY': 0.0, 'FRM_ObjExistnc': 0.0, ********(这里不全部展示了)}
message length 64
这里面用到的接口有:
相对应的就有对can报文进行encode的接口: