在Python中将.blf转换为mdf或mf4

问题描述 投票:0回答:1

我想将 .blf 文件转换为 mdf 或 mf4 格式。 .blf 通过多个通道录制 将使用多个 .dbc 来解码信号

到目前为止,我在 SO 和 Google 上找到了处理 CAN 数据的不同模块(asammdf、python-can、mdfreader、canmatrix)以及部分代码示例,但我仍然不知道如何使其工作。

python vector mdf python-can asammdf
1个回答
0
投票

您可以使用“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

© www.soinside.com 2019 - 2024. All rights reserved.