读取 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
我有一个包含多个 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