读取 header 个 .blf CAN 文件

Read header of .blf CAN file

我有一个包含多个 can 总线消息的 .blf 文件,我可以像这样使用 python-can 读取它

import can
can_log = can.BLFReader("./test.blf")
for msg in can_log:
    print(msg)

根据 python-can 文档,标准 .blf 文件的 header 有 144 个字节,包含整个记录本身的开始和 ending-timestamp。

我想直接读取这个开始和结束时间戳,可以吗?

我知道我也可以使用 msg.timestamp 从第一条消息中读取时间戳,但它与我想要提取的开始时间戳略有不同。

从python的source code可以:

[...]
class BLFReader(object):
"""
Iterator of CAN messages from a Binary Logging File.

Only CAN messages and error frames are supported. Other object types are
silently ignored.
"""

def __init__(self, filename):
    self.fp = open(filename, "rb")
    data = self.fp.read(FILE_HEADER_STRUCT.size)
    header = FILE_HEADER_STRUCT.unpack(data)
    #print(header)
    assert header[0] == b"LOGG", "Unknown file format"
    self.file_size = header[10]
    self.uncompressed_size = header[11]
    self.object_count = header[12]
    self.start_timestamp = systemtime_to_timestamp(header[14:22])
    self.stop_timestamp = systemtime_to_timestamp(header[22:30])
[...]

您可以这样使用 start_timestamp 和 stop_timestamp :

can_log.start_timestamp