一般来说,我可能对 asammdf 有一些误解,但我不太确定如何解码 CAN 帧。
假设我有一个定义了相关消息的 dbc,我可以使用它mdf.extract_bus_logging()
来解析信号,但我不确定从那里做什么。
我正在发送一个原始有效负载 + 可以帧 ID,我认为我可以使用 cantools 解析原始数据(然后将该数据传递到 asammdf 信号),但感觉这里有某种程度的支持asamdf.
我在这里有一个示例,符合我想要做的事情(使用此处的 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")