Запись лога сообщений CAN шины в Linux | candump

candump позволяет сохранить сообщения с CAN шины в лог-файл. Для простого вывода сообщений на экран достаточно ввести: candump can0. Запись данных в файл позволит в дальнейшем запустить полученный дамп на виртуальном адаптере или перенаправить трафик в реальный адаптер, что бывает очень удобно при отладке.

Для проверки как это работает, можно открыть два терминала и запустить на одном candump, на другом отправить команду используя cansend. И не обязательно иметь реальный адаптер для проверки, можно создать виртуальный, как это сделать в Linux, смотрите в посте

/pages/virtual-can-bus-adapter

Результат команды candump can0

cansend can0 123#1122334455667788

После, чего можем прочитать сообщение на терминале, где запущен candump

can0  121   [8]  11 22 33 44 55 66 77 88

Для записи в файл нужно набрать в терминале команду candump с флагом -l, . По умолчанию устанавливается флаг '-s 2' - что означает запись в файл в тихом режиме (без вывода на экран )

$ candump -l can0

после этой команды отобразится сообщение с именем файла

$ candump can0 -l
Disabled standard output while logging.
Enabling Logfile 'candump-2024-06-13_032140.log'

Результат команды candump can0 -l -s 0, параллельно отправленное сообщение с помощью cansend - перехвачено.

$ candump can0 -l -s 0
Warning: Console output active while logging!
Enabling Logfile 'candump-2024-06-13_033016.log'
  can0  125   [8]  11 22 33 44 55 66 77 88

Для того чтобы остановить процесс записи в файл введите CTRL + C

Как воспроизвести лог через интерфейс

Запуск логов CAN шины через CANPLAYER

Лог candump

Отправим 4е раза сообщения (записав результат candump -l can0), где can0 это мой виртуальный адаптер.

$ cansend can0 123#1122334455667788
$ cansend can0 123#8877665544332211
$ cansend can0 123#2233445566778899
$ cansend can0 123#9988776655443322

теперь можно открыть файл и проверить результат записи

(1718676095.468979) can0 123#1122334455667788
(1718676128.660504) can0 123#8877665544332211
(1718676149.727129) can0 123#2233445566778899
(1718676170.788182) can0 123#9988776655443322

Теперь выведем из Unix timestamp интервалы в секундах и миллисекундах.

(00.000) can0 123#1122334455667788
(33.192) can0 123#8877665544332211
(21.067) can0 123#2233445566778899
(21.061) can0 123#9988776655443322

Запустим полученный лог и запишем новый дамп..

(1718680389.090359) can0 123#1122334455667788
(1718680422.281090) can0 123#8877665544332211
(1718680443.348105) can0 123#2233445566778899
(1718680464.408864) can0 123#9988776655443322

Проверим интервалы

(00.000) can0 123#1122334455667788
(33.192) can0 123#8877665544332211
(21.067) can0 123#2233445566778899
(21.061) can0 123#9988776655443322

Интервалы совпадают, т.е. canplayer воспроизводит дамп с задержками из файла.

Изменим файл

(1718680000.000000) can0 123#1122334455667788
(1718680000.000000) can0 123#8877665544332211
(1718680000.000000) can0 123#2233445566778899
(1718680000.000000) can0 123#9988776655443322

и запишем новый лог, результат ожидаемый - задержки минимальны

(1718681400.045063) can0 123#1122334455667788
(1718681400.045081) can0 123#8877665544332211
(1718681400.045085) can0 123#2233445566778899
(1718681400.045088) can0 123#9988776655443322

Между первым и последним сообщением на моем ноутбуке 25 мкс.

Записть лога нескольких интерфейсов

candump -l any

Используйте имя интерфейса «любой» для получения данных со всех интерфейсов CAN.

Оставьте комментарий

Обратите внимание, что мы не будем показывать ваш адрес электронной почты другим пользователям и не будем использовать его для отправки нежелательных электронных писем.