我想将 .blf 文件转换为 mdf 或 mf4 格式。 .blf 通过多个通道录制 将使用多个 .dbc 来解码信号
到目前为止,我在 SO 和 Google 上找到了处理 CAN 数据的不同模块(asammdf、python-can、mdfreader、canmatrix)以及部分代码示例,但我仍然不知道如何使其工作。
您可以使用“CANdas”库来使用多个 dbc 文件读取 blf。借助 CANdas,您可以将数据转换为 pandas 数据框,并使用 asammdf 将其添加到 mdf 文件中。这段代码对我有用:
import candas as cd
import asammdf
mdf = asammdf.MDF()
database_logpath = "your_blf_filename_here"
dbc = cd.load_dbc(".")
log_data = cd.from_file(dbc, database_logpath)
# The first three 'keys' are not actually signals so I removed them
channel_names = list(log_data.keys())[3:]
blf_dataframe = log_data.to_dataframe(channel_names)
blf_dataframe = blf_dataframe.set_index("time")
blf_dataframe.sort_index(inplace=True)
for channel_name in blf_dataframe:
try:
new_signal = asammdf.Signal(
samples=blf_dataframe[channel_name],
timestamps=blf_dataframe.index,
name=channel_name,
)
mdf.append(new_signal, common_timebase=True)
except:
pass # There are some weird signals that throw errors when converting to a signal. Skip those
mdf.save("new_mdf.mf4")
我不知道为什么,但这似乎为每个添加的信号创建了一个时间信号。所以我最终在我的最终文件中包含了其中一些。如果这些困扰您,您可以使用 asammdf 删除它们(或者首先找到创建它们的原因 :D )
更多信息: https://lionsracing.gitlab.io/candas/index.html https://asammdf.readthedocs.io/en/latest/index.html