CAN BLF包解析和播包发送(二):CAN BLF包解析

DBC解析请见:CAN BLF包解析和播包发送(一):CAN dbc解析https://blog.csdn.net/qq_42503781/article/details/128966946

CAN BLF包解析

BLF是什么

BLF是vector的CANoe工具录制can报文形成的包的数据格式,一般会保存在BLF和ASC两种格式,BLF是其中一种。

好,废话不多说,直接进入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

这里面用到的接口有:

  • blf = can.BLFReader(filename), 获取一个blf文件对象
  • d = db.decode_message(msg.arbitration_id, msg.data), db为dbc对象,根据输入的id和data,对data进行decode,形成可直观展示的结果;

相对应的就有对can报文进行encode的接口:

  • msg.data = db.encode_message(msg.arbitration_id, d), 输入为message id和直观展示的直观展示的字典结果,如上述中decode之后的结果。输出就是上述示例中的origin message data

你可能感兴趣的:(python,开发语言)