21

我想创建一个模拟 CAN 端口的程序,以用于另一个大型应用程序的测试目的。程序应通过此虚拟 CAN 发送先前记录的数据。任何人都有这样的经验吗?

我正在考虑建立虚拟 COM,并通过它发送包装在 CAN 帧中的数据。它可以工作吗?我如何在 linux 上建立虚拟 COM?找到了这个线程Virtual Serial Port for Linux 但遗憾的是我不明白如何将它实现到程序的源代码中(Linux 下的初学者 linux 用户和程序员)。

很想阅读您的经验和建议。

4

2 回答 2

49

您需要SocketCAN驱动程序,该驱动程序可在现代 Linux 发行版(如 Ubuntu 等)上使用。SocketCAN 提供了一个虚拟 CAN 端口驱动程序:

sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0

现在您可以通过设备发送和接收 CAN 帧vcan0。维基百科文章提供了有关如何使用 SocketCAN 的简单代码示例。

您还需要can-utils用于测试目的。

您可以在 eLinux.org 上找到有关 SocketCAN 及其用法的更多信息

于 2014-01-10T09:14:47.507 回答
0

教程

第 1 部分 - 创建一个模拟 CAN 的程序


  • 您可以使用以下 bash 程序在 Linux 中创建虚拟 CAN 端口 (vcan):

    setup_vcan.sh

    #!/bin/bash
    
    # Using can1 as an example
    CAN_PORT="can1"
    
    sudo modprobe vcan
    sudo ip link add dev $CAN_PORT type vcan
    sudo ip link set up $CAN_PORT
    
  • 使 bash 程序可执行:

    chmod +x setup_vcan.sh
    
  • 运行 bash 程序:

    ./setup_vcan.sh
    

第 2 部分 - CAN 消息的记录和回放


  • 将 CAN 消息记录到日志文件中(替换$CAN_PORT为您的 CAN 端口的名称):

    candump -L $CAN_PORT > myfile.log
    
  • 从日志文件回放 CAN 消息:

    canplayer -I myfile.log
    
  • 您可以通过检查以下输出来验证播放candump

    candump $CAN_PORT
    

参考

于 2022-01-14T18:12:05.290 回答