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
Как воспроизвести лог через интерфейс
Лог 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.