Прочитать заголовок файла .blf CAN - PullRequest
1 голос
/ 24 мая 2019

У меня есть файл .blf, содержащий несколько сообщений can-шины, которые я могу прочитать с помощью python-can, например:

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

Согласно документации на python-can, заголовок стандартного файла .blfимеет 144 байта и содержит начальную и конечную временные метки всей записи.

Я хотел бы напрямую прочитать начальную и конечную временные метки, возможно ли это?

Я знаю, что могтакже прочитайте метку времени из первого сообщения, используя msg.timestamp, но она немного отличается от метки времени начала, которую я хотел бы извлечь.

1 Ответ

1 голос
/ 24 мая 2019

Из исходного кода Python может:

[...]
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
...