建行官方網(wǎng)站優(yōu)化大師是什么軟件
在Linux系統(tǒng)中觀察看CAN報文,我們一般使用candump,但是有時候會發(fā)現(xiàn)總線上CAN報文太多,例如開啟了好幾個PDO,這就導(dǎo)致想看的報文被夾雜到報文的海洋里,然后再去找,非常麻煩。
candump也提供了只觀察某個報文的功能,但是一次只能觀察一個,如果想觀察多個報文,那就要開啟多個candump,而且candump的命令行不是太友好,經(jīng)常要多次測試。
本人找到一個比較好的辦法,就是使用Linux提供的grep命令來提取需要的CAN報文。
一 方法
假設(shè)總線叫vcan0,設(shè)備id是0x10,協(xié)議是CANopen,那么如果只想觀察0x10的SDO發(fā)送報文,那么命令如下,
candump vcan0 | grep "610"
如果同時還想觀察0x10的SDO應(yīng)答報文,那么命令可以修改如下,
candump vcan0 | grep -E "610|590"
“-E”選項可以讓“|”變成或的意思,這里是抓取信息中含610或含590的報文,同理,可以根據(jù)需要來提取多個報文
二 實踐
這里開啟三個終端:
- 第一個用cansend來發(fā)送報文,
- 第二個使用candump直接觀察報文,
- 第三個使用candump+grep來實踐本文方法。
這里candump+grep的組合如下,
candump vcan0 | grep -E "610|590"
首先使用cansend發(fā)現(xiàn)2條報文,如下,
cansend vcan0 610#1122334455667788
cansend vcan0 611#1122334455667788
cansend vcan0 612#1122334455667788
cansend vcan0 590#1122334455667788
然后在第二個終端下觀察到報文如下,
而在第三個終端下觀察到的報文如下,
可以看到和預(yù)期一樣。
另外,由于grep使用正則表達(dá)式,那么只要簡單學(xué)下就可以根據(jù)需要提取任何報文了,非常方便。
三 總結(jié)
本文講述了如何使用grep來查看需要的CAN報文,如果再熟悉下正則表達(dá)式,那就是如虎添翼了。
最后,本人最近開啟了微信公眾號,歡迎大家關(guān)注 😃