使用candump+grep查看CAN报文

在Linux系统中观察看CAN报文,我们一般使用candump,但是有时候会发现总线上CAN报文太多,例如开启了好几个PDO,这就导致想看的报文被夹杂到报文的海洋里,然后再去找,非常麻烦。

candump也提供了只观察某个报文的功能,但是一次只能观察一个,如果想观察多个报文,那就要开启多个candump,而且candump的命令行不是太友好,经常要多次测试。

本人找到一个比较好的办法,就是使用Linux提供的grep命令来提取需要的CAN报文。


一 方法

假设总线叫vcan0,设备id是0x10,协议是CANopen,那么如果只想观察0x10的SDO发送报文,那么命令如下,

candump vcan0 | grep "610"

如果同时还想观察0x10的SDO应答报文,那么命令可以修改如下,

candump vcan0 | grep -E "610|590"

“-E”选项可以让“|”变成或的意思,这里是抓取信息中含610或含590的报文,同理,可以根据需要来提取多个报文


二 实践

这里开启三个终端:

  • 第一个用cansend来发送报文,
  • 第二个使用candump直接观察报文,
  • 第三个使用candump+grep来实践本文方法。

这里candump+grep的组合如下,

candump vcan0 | grep -E "610|590"

首先使用cansend发现2条报文,如下,

cansend vcan0 610#1122334455667788
cansend vcan0 611#1122334455667788
cansend vcan0 612#1122334455667788
cansend vcan0 590#1122334455667788

然后在第二个终端下观察到报文如下,
使用candump+grep查看CAN报文_第1张图片

而在第三个终端下观察到的报文如下,
image.png

可以看到和预期一样。

另外,由于grep使用正则表达式,那么只要简单学下就可以根据需要提取任何报文了,非常方便。


三 总结

本文讲述了如何使用grep来查看需要的CAN报文,如果再熟悉下正则表达式,那就是如虎添翼了。

最后,本人最近开启了微信公众号,欢迎大家关注
使用candump+grep查看CAN报文_第2张图片

你可能感兴趣的:(canopen,linux,嵌入式)