Проблема с настройкой прослушивателя Python-CanPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с настройкой прослушивателя Python-Can

Сообщение Anonymous »


Я относительно новичок в Python и пытаюсь создать новую программу для взаимодействия с CANbus. Я просматривал документацию и некоторые примеры Python-Can с использованием интерфейса SocketCAN и столкнулся с некоторыми проблемами.

Я подтвердил, что оборудование работает корректно. У меня есть отдельное устройство для передачи тестового шаблона на CANbus, и при использовании прослушивателя по умолчанию «can.Printer()» ожидаемые сообщения, передаваемые на CANbus, правильно печатаются в терминале.

Моим следующим шагом было создание новой функции-прослушивателя, которая в конечном итоге будет обрабатывать полученные сообщения от CANbus (функция msg_rx_routine в моем коде). При использовании кода, который у меня есть сейчас, обычно печатается первое полученное сообщение CAN, но затем возникает ошибка обратного вызова объекта «не типа», который невозможно вызвать.

Мое оборудование: -rPi CM4 + плата расширения ввода/вывода -Коммутационная платаMCP2515

Тестовый код:

импорт может время импорта импортировать ОС #--------определение вспомогательных функций """ ФУНКЦИЯ: процедура получения сообщений @ARG can_bus: передано, может возразить ВОЗВРАТ: нет """ защита msg_rx_routine (can_bus): rx_msg = can_bus.recv() печать (rx_msg) #--------Инициализация CANBUS os.system("sudo /sbin/ip link set can0 up type может иметь битрейт 500000") #вызовите интерфейс can0 со скоростью 500 кбит/с time.sleep(0.05) #краткая пауза CAN1 = can.interface.Bus(channel='can0', bustype='socketcan') #instance CAN object #TODO: настроить CAN-соединение (маски и т. д.) #CAN1_listener = can.Printer() #назначаем прослушиватель «принтера» по умолчанию для печати на терминале CAN1_listener = msg_rx_routine(CAN1) #назначаем функцию обработчика сообщений в качестве прослушивателя CAN1_notifier = can.Notifier(CAN1, [CAN1_listener]) #назначаем прослушиватель уведомителю защита основной(): пока правда: передать цикл #just dummy для ожидания команды прерывания если __name__ == "__main__": основной() Результирующая ошибка: Вывод ошибок консоли

Мне кажется, что я явно что-то не понимаю в основной концепции функциональности «прослушиватель/уведомитель» этой работы, и это меня поставило в тупик. То, как я (пытаюсь) понять это сейчас, будет похоже на то, как будет работать запрос IRQ в C-коде для микроконтроллера. Учитывая прерывание (уведомитель), оно вызовет некоторую связанную функцию (прослушиватель).

Как уже говорилось ранее, я пытаюсь достичь следующего: -дождитесь сообщения -при получении сообщения вызовите функцию -функция что-то делает с сообщением

Я вижу, что здесь есть похожее обсуждение, где кто-то делает то же самое. Я (думаю), что они передают функции «parse_data» только тип данных «can», верно? Мне любопытно, не ошибаюсь ли я в этом, поскольку передаю в свою функцию объект типа «шина» «CAN1». Однако для меня не имеет смысла передавать в функцию только общий тип «can», когда было бы разумнее сказать, на КАКОЙ шине вы ищете сообщение. Я не уверен, то ли я что-то неправильно понимаю, то ли во многих примерах, которые я нашел, используются неуникальные имена переменных.

Наконец, я вижу прослушиватель по умолчанию «BufferedReader», который помещает полученное сообщение в очередь. Я еще не пробовал это использовать, но мне интересно, нужно ли мне именно так справиться с тем, чего я пытаюсь достичь? Потенциальная проблема, с которой у меня возникает проблема с этой концепцией, заключается в том, чтобы убедиться, что я знаю, когда в буфере что-то есть, и затем обработать эту информацию.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Python-can bus.recv пропускает некоторые сообщения
    Anonymous » » в форуме Python
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Как отображать и анализировать данные CAN непосредственно на Python?
    Anonymous » » в форуме Python
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Скрипт Python с многопоточностью и связью по шине CAN не прерывается
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Настройки CANoe для перехвата сообщений, отправленных по виртуальной шине Can с помощью Python
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Как импортировать библиотечную функцию «import can» в Python
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»