Название: [Решено] Использование плагина VirtualCAN Отправлено: sergek от Март 27, 2023, 20:31 Коллеги,
осваиваю шину CAN и, пока едет железка конвертера CAN-Ethernet, пробую работать с виртуальной шиной и плагином Qt virtualcan. Сделал тестовую программу (надергал кусочков из гуевого примера), программа запускается в командной строке в двух режимах - чтения (запуск ./virtcan без параметров) и передачи фреймов данных в виртуальную шину can0 (запуск с любыми параметрами, например ./virtcan 1). Если в разных терминальных сессиях запустить программу на запись в одной сессии и на чтение в другой, то все работает отлично - один экземпляр пишет, другой принимает. Но проблема в том, что моя программа наотрез отказывается работать с утилитами командной строки из пакета can-utils (https://sgframework.readthedocs.io/en/latest/cantutorial.html). Т.е. если передавать в виртуальную шину данные из программы, а пытаться принимать утилитой candump, или, наоборот, передавать утилитой cangen или cansend и пытаться принимать программой, то это взаимодействие не работает. Можете подсказать, по какой причине? При этом линуксовые утилиты, как и мой пример, прекрасно передают данные между собой. Во вложении имеется мой тестовый пример, в архиве есть скрипт vcan.sh для создания виртуального устройства can0. Работаю я с Qt 5.13.0, Linux Home 4.19.57-v7+ armv7l (малина 3b+). Если кому-либо захочется повторить, то в linux нужно установить утилиты: Код: $ sudo apt install can-utils Код: $ chmod +x ~/vcan.sh Код: $ ./virtcan Код: $ cangen -v can0 Или наоборот: Код: $ ./virtcan 1 Код: $ candump can0 Название: Re: Использование плагина VirtualCAN Отправлено: sergek от Март 29, 2023, 11:12 Чтобы все работало, как я хотел, нужно использовать плагин для Linux сокета (вместо плагина "virtualcan" для виртуального подключения):
Код Почему так - устройство виртуальное (vcan), а работает с плагином для реального железа, объяснить не берусь. Хотя, с другой стороны, почему нет? Название: Re: [Решено] Использование плагина VirtualCAN Отправлено: sergek от Май 06, 2023, 13:41 Кстати, коллеги, может, кому-нибудь пригодится.
Железку, через которую я хотел подключиться к шине зовут USR-CANET200. Если кто-нибудь захочет с ней работать, имейте в виду, что она передает в сеть TCP/IP не фрейм CAN, свой пакет со структурой: длина (1 байт), ID (4 байта), данные (8 байт). Длина этого фрейма - 13 байт (вместо 16 стандартных). |