使用Python中的asammdf对CAN帧进行解码



我可能对asammdf有一些误解,但我真的不知道如何解码CAN帧。

假设我有一个定义了相关消息的dbc,我知道我可以使用mdf.extract_bus_logging()来解析信号,但我真的不知道该怎么做。

我正在发送一个原始有效负载+can帧ID,我认为我可以使用cantools来解析原始数据(然后将数据传递到asammdf信号中(,但感觉在asammdf中有一定程度的支持。

我在这里有一个关于我想做什么的示例(使用这里的cantools示例中的motohawk.dbc文件https://cantools.readthedocs.io/en/latest/)

from asammdf import MDF
import cantools
filename = "~/mdf_dbc_play/tmp.dbc"
db = cantools.database.load_file(filename)
msg_bytes = [0,0,0xff,0x01,0x02,0x03,0x04,0x05]
# Temporary bogus timestamp
timestamps = [0.1]
# Use cantools to decode the raw bytes
msg = db.get_message_by_name("EEC1")
unpacked_signals = msg.decode(msg_bytes)
# Using version 3.10 just in case we have some versioning issues with old tooling.
with asammdf.MDF(version='3.10') as mdf:
# I assume there's some way of getting the actual value we care about from an unpacked message.
samples = unpacked_signals.get_values()
sig = asammdf.Signal(name="EEC1", samples=samples, timestamps=timestamps)
mdf.append(sig)
mdf.save("~/mdf_dbc_play/output.mdf")

要将CAN通信记录到MF4文件,您可以从python-can尝试此代码

https://github.com/hardbyte/python-can/blob/mf4-io/can/io/mf4.py

相关内容

  • 没有找到相关文章

最新更新