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

您所在的位置:网站首页 blf文件解析 CAN BLF包解析和播包发送(二):CAN BLF包解析

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

#CAN BLF包解析和播包发送(二):CAN BLF包解析| 来源: 网络整理| 查看: 265

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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3