如何在Python上运行CAN消息模拟

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

我目前正在学习如何在 python 中使用库,并且我有一个项目,这需要我使用 CAN 库https://python-can.readthedocs.io/en/master/index.html。我想模拟 CAN 消息来测试并创建一个可以将它们转换为可读消息的平台。我似乎不明白如何从库中获取模拟器。

python can-bus
3个回答
1
投票

我不熟悉

python-can
,但如果您只想导入模块,这里有一个导入库并发送一条简单消息的片段(接收它们是另一回事)。您可能想继续探索文档以了解捕获消息并使用它们执行操作的方法。

import time
import can

bus = can.interface.Bus(interface='virtual', bustype='socketcan', 
                        channel='vcan0', bitrate=500000)

def producer(bus, id):
    for i in range(10):
        msg = can.Message(arbitration_id=0xc0ffee, 
                          data=[id, i, 0, 1, 3, 1, 4, 1], is_extended_id=False)
        try:
            bus.send(msg)
            print("Message sent on {}".format(bus.channel_info))
            time.sleep(1)
        except can.CanError:
            print("Message NOT sent")

producer(bus, 1)

0
投票

一些随机的想法(我是这个领域的新手,如果其中一些已经以不同/更好的方式解决了,请原谅):

  1. Python 模拟库可以与捕获和重放技术一起使用来创建一个定制 CANbus 设备的系统,其行为需要适应测试目的吗?

  2. Wireshark 交互器怎么样? 如果 CANbus 转储可以表示为 pcap 文件,那么它就可以被解释。 常见的 CANbus 设备解码可以添加到交互器中。


0
投票

我建议考虑创建一个虚拟 CANbus 段,例如 Linux socketcan 上的 vcan0。 然后,您可以创建在虚拟化 CANbus 上发送和接收消息的虚拟设备。

还有一些方法可以桥接虚拟 CAN 接口与物理段,但这超出了本答案的范围。 请PM我了解详情

我创建了一个功能齐全的 CanBUS WireShark 交互器,它可以从一个或多个 DBC 文件读取数据,并将 CANbus 数据实时解释为人类可读的形式。 我还使用相同的核心技术实现了从 DBC 文件创建 Python 存根。 我正在将存根生成器集成到 cantools 库中,并在包维护者的监督下进行。 奖励:以“美丽汤”的风格,我正在检测并尝试纠正 DBC 文件之间的不一致性,在某些情况下合并消息(如果文件相距不太远),并反馈到 cantools 内部数据库格式。 仅尽力而为。

https://github.com/cantools/cantools/discussions/669

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