Я работал над проектом и столкнулся с проблемой команды порта, но прежде чем задать вопрос, мне нужно объяснить настройку, мою цель и мою проблему.
Настроить:
Итак, у меня Raspberry Pi 3 B+ подключен к CAN-интерфейсу CAN через USB. В Pi установлено программное обеспечение Raspian, и я использую рабочий стол для управления файлами, командную строку для выполнения программ и связи с интерфейсом CAN. Я также установил can-utils и python-can с помощью команд:
apt-get install can-utils
pip install python-can
На CANable установлено программное обеспечение Candlelight, которое позволяет мне использовать команды can-utils для связи с ним.
Цель:
Мне нужно иметь возможность воспроизводить (отправлять) сообщения CAN, хранящиеся в моих файлах .asc, с моего Pi через мой интерфейс CANable CAN, которые будут получены другим узлом CAN.
Проблема:
Таким образом, я смог настроить порт can0, подключив CANable с USB и затем используя эту команду:
ip link sudo set can0 up type может битрейт 1000000 restart-ms 100;
Я хотел проверить can0, поэтому я открыл две командной строки. Один для отправки CAN-сообщений, а другой для мониторинга полученных сообщений. Для мониторинга я использовал:
Candump -e любой, 0:0, # FFFFFFFF
и отправлять случайные сообщения на can0:
cangen can0
Вот результаты:
Также, если я открываю статус can0 с помощью « ip -det -stats link show can0 », это показывает, что он находится в режиме "Error Passive" и что 10 пакетов были отброшены в TX. Таким образом, похоже, что существует проблема с подтверждением, а также проблема с буферным пространством TX. Я предположил, что это сообщение должно быть подтверждено, и если это не так, то буфер заполняется, а затем соединение разрывается. Чтобы обойти это, я активировал функцию обратной петли:
sudo ifconfig can0 down;
sudo ip link set can0 up тип может битрейт 1000000 restart-ms 100 loopback on;
Когда я делаю это, ошибок нет, и я могу видеть сообщения, используя Candump, но проблема в том, что каждая строка сообщения отображается на can0, и я вижу две одинаковые строки, повторяемые в Candump. Кроме того, я не могу найти способ сброса can0 для очистки буфера, кроме отключения CANable или выключения Pi. Я старался:
sudo ip link set can0 type может перезапуститься;
Я получаю: «Ответы RTNETLINK: неверный аргумент»
Я не получаю этих проблем, если я создаю и использую виртуальный порт CAN (vcan0) вместо того, чтобы использовать реальный физический узел CAN, такой как CANable (can0).
Вопросы
Есть ли способ передать проблему подтверждения без использования функции обратной связи, чтобы я мог отправлять нужные сообщения без эха? (Как, может быть, использование виртуального узла CAN для подтверждения сообщений)
Если я подключу другую CANable к моей CANable, будут ли подтверждаться сообщения?
Почему я не могу сбросить, даже если у меня в команде «restart-ms 100»?
Почему я не могу сбросить буфер или информацию о пакетах с помощью команды restart?
Любая помощь будет оценена.