模拟can通信

实验一 模拟can通信

1、虚拟CAN接口创建

实车上算法一般通过ros进行通信,车辆和控制器之间则通过can通信实现。 can信号的发送和接收一般是需要载体的,我们一般都有can0和can1设备可以使用,在电脑上创建这个设备:

加载vcan内核模块:

# 加载vcan内核模块
sudo modprobe vcan

# 创建名为vcan0的虚拟接口
sudo ip link add dev vcan0 type vcan

# 启用接口
sudo ip link set up vcan0

img

验证can状态

ip link show vcan0

img

2、模拟信号通信

安装can-utils工具包

sudo apt install can-utils 

监听can报文

candump -td vcan0  # -td:显示时间戳和详细数据

发送单条报文

发送数据,没有多余控制。

cansend vcan0 111#2233

参数说明

can_id#pay_load形式。其中can_id必须3 or 8位,例如填写 11#2233是不正确的。

img

cangen

作用: 通过指定can口发送指定的数据

cangen vcan0 -I 456 -L 8 -D i -g 0.5 -n 10

参数说明:

  • g : 发送帧的间隔,单位为毫秒。
  • I : CAN ID 生成的模式,此处42A表示采用固定的CANID 42A。如果不指定则为随机模式。
  • L: 数据长度产生模式,此处固定长度为1,即每帧携带一个数据
  • D: payload 的产生模式,此处为i,即从0开始依次递增发送数据,仅仅递增第一个数据。
  • x: 即禁止本地自环测试。比如我们在同一个单板上有两个can口,我们将其互联,进行互发数据,如果不使用此参数,则通过can1向can1则可以正常发送数据,即使外部没有连接。
  • n: 发送多少个帧,此处发送10个帧

img

设置canid随机

img

cansniffer

cansniffer -c vcan0

启用颜色标记

img

红色代表发生变化的字节

Canplayer

canplayer -I candump-2025-07-25_005121.log -l i

-I 指定输入文件

-l <num> 重复回放文件 <num> 次(i = 无限循环,默认 1

-v 实时打印发送的 CAN 帧

-t 立即发送所有帧(默认按日志时间间隔发送)

img

posted @ 2025-10-23 21:21  dr4w  阅读(5)  评论(0)    收藏  举报