Canmetry
打开工作台
返回博客

没有 CANoe,怎么打开 BLF 文件

BLF 是 Vector 的 CAN 日志格式。没有 CANoe 也能打开并解码:在浏览器里查看、转成 MAT 或 CSV、用 Python 读取,或先看原始报文,共四种方法。

.blf.dbcCANoe

.blf 文件是 Vector CANoe、CANalyzer 和 Vector 记录仪写出的日志。如果同事、供应商或台架发给你一个 BLF,而你没有 Vector 授权,仍然可以读它。本文介绍四种方法,从最快到最灵活,以及每种方法需要什么。

BLF 文件里有什么

BLF 文件保存什么

BLF 是 Binary Logging Format(二进制日志格式)的缩写,按时间顺序保存总线事件:经典 CAN 和 CAN FD 报文、每帧所在的通道、时间戳、仲裁 ID、数据长度和数据字节。文件是压缩的,不能用文本编辑器直接读。

它不保存什么

BLF 文件里没有 VehicleSpeed、BrakePressure 这样的信号名。信号名来自 DBC 文件,它描述了每条报文的字节如何拆成信号,以及系数、偏移和单位。没有 DBC,你只能看原始报文;有了 DBC,才能看物理值。想先看看一个 DBC 里定义了什么,可以用 DBC 查看器 打开。

打开 BLF 文件的四种方式

按你接下来要做的事选择路线:看数据、交给其他工具、自动化处理,或者只是确认录制了什么。

方法一:在浏览器里打开

只想看看数据时,这是最快的方式。BLF 查看器页面列出了它能读取的 BLF 对象类型。

  1. 打开工作台,选择“打开你自己的日志”,或者把 .blf 文件拖到页面上。
  2. 添加一个或多个 .dbc 文件,把每个 CAN 通道关联到描述它的 DBC。如果一个通道关联了多个 DBC,每一帧会用第一个定义了该 ID 的 DBC 解码。
  3. 点“保存并解析”。信号会出现在曲线视图,报文视图显示每一帧原始报文,DBC 视图显示定义。
Canmetry 工作台的曲线视图,显示从 BLF 文件解码出的信号
解析 BLF 日志和 DBC 之后的曲线视图。

整个过程都在浏览器标签页里完成,日志和 DBC 在本地解码,不会上传。Windows、macOS 和 Linux 都可以用,日志最大 150 MiB。

方法二:转换成 MAT 或 CSV

如果要在 MATLAB、Python 或电子表格里分析数据,直接转换比查看更合适。

BLF 转 MAT / CSV 转换器最多接受五个 BLF,用你的 DBC 解码,每个日志输出一个 .mat 或 .csv。.mat 里每个信号是一个结构体,包含 time、value、unit、message 和 channel;.csv 每个采样点一行。只导出你的 DBC 能解码出来的信号。

BLF 转 MAT / CSV 转换器的上传步骤,已加载一个 BLF 文件并显示其通道数
最多上传五个 BLF 文件,然后为每个通道映射 DBC。

方法三:用 Python 读取

喜欢写脚本的话,开源的 python-can 和 cantools 可以读取 BLF 并应用 DBC:

import can
import cantools

db = cantools.database.load_file("vehicle.dbc")

with can.BLFReader("drive.blf") as log:
    for msg in log:
        try:
            signals = db.decode_message(msg.arbitration_id, msg.data)
        except (KeyError, ValueError):
            continue  # ID 不在 DBC 里,或数据不匹配
        print(msg.timestamp, msg.channel, signals)

这是最灵活的方式,也最适合批量处理,但筛选、通道处理和绘图都要自己写。

方法四:先看原始报文

有时你手上还没有 DBC。在报文视图里打开日志,仍然能看到每一帧的时间戳、通道、ID、DLC 和数据字节。可以按 ID 或通道筛选,搜索某个数据模式,看哪些字节随时间变化。很多时候这已经足够确认某条报文是否存在、发送周期多长,或者某个值有没有变化。

报文视图,列出 BLF 文件中的原始 CAN 报文,含 ID、DLC 和数据字节
没有 DBC 时,报文视图也能显示每一帧原始报文。

一定需要 DBC 吗

什么时候可以不用

确认日志能打开、统计帧数、查找某个 ID,都不需要 DBC。

什么时候需要

只有把字节变成有名字的信号时才需要。要画出车速、扭矩或故障标志,就需要。

如何拿到正确的 DBC

请向负责网络的团队索取与日志录制时软件版本匹配的 DBC,因为不同版本之间 ID 和系数可能不同。

遇到问题时

没有信号出现

检查通道映射:DBC 必须关联到报文实际所在的通道。

数值不对

多半是 DBC 与日志不匹配,换用对应软件版本的 DBC。

只有部分报文被解码

不在 DBC 里的报文不会被解码,但仍然会作为原始报文显示。

文件很大

浏览器工具最大支持 150 MiB。更大的录制请先拆分,或使用 Python 方式。

文件完全打不开

确认它确实是 .blf 文件,而不是改了扩展名的 ASCII .asc 文本日志。

小结

读取 BLF 文件不需要 CANoe。想快速看一下,在浏览器里打开;要在 MATLAB 或 Excel 里分析,用 BLF 转 MAT / CSV 转换器;要自动化,用 Python。无论哪种方式,把字节变成信号的都是 DBC。如果正在选择长期使用的工具,可以接着看CANoe 替代方案的离线分析能力与边界。

.blf.mf4.asc

打开一份日志,看见信号。

在浏览器里打开 BLF、MF4 或 ASC 文件,不会上传任何内容。

打开工作台

继续阅读