Python-can bus.recv пропускает некоторые сообщенияPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python-can bus.recv пропускает некоторые сообщения

Сообщение Anonymous »

Я использую python и python-can для отправки сообщений\получения и обработки сообщений из CAN-шины, которую я создаю следующим образом:

Код: Выделить всё

from can.interface import Bus

bus = Bus(interface="pcan", channel="EXT_CAN", bitrate=500000, receive_own_messages=True)
Объект шины затем передается классу, который подключается к этой шине и реализует отправку/обработку:

Код: Выделить всё

def connect(self, *args, **kwargs):
"""Connects to bus. Expects "bus" as keyword argument."""
self._bus = kwargs.get("bus")
Класс также реализует метод ожидания определенного сообщения:

Код: Выделить всё

def wait_for_message(self, can_id: int, timeout: int):
self.time_start_listen = time.time()
expected_message = None
while time.time() - self.time_start_listen < timeout:
msg = self._bus.recv(timeout=1.0)
if msg.arbitration_id == can_id:
expected_message = msg
break
assert expected_message
При тестировании этого метода я заметил, что иногда ожидаемое сообщение просто не воспринимается, и метод выдает AsserionError.
Я использую PCAN Viewer параллельно и вижу ожидаемое сообщение в трассировке, поэтому я уверен, что сообщение действительно отправляется.
Для справки: это циклическое сообщение , с временем цикла 1 с.
На шине есть несколько других циклических сообщений с временем цикла 20 мс.
Аргумент timeout в методе wait_for_message имеет большой размер достаточно, чтобы захватить хотя бы один кадр сообщения 1s. Это также проверяет временные метки сообщений, которые я получаю. Однако сообщение о времени цикла 1 с иногда пропускается.
Я также пробовал заменить

Код: Выделить всё

while time.time() - self.time_start_listen < timeout:
msg = self._bus.recv(timeout=1.0)
с:

Код: Выделить всё

for msg in self._bus:

но поведение такое же.
Кто-нибудь сталкивался с таким поведением? Что может быть причиной этого?
Любые подсказки приветствуются. ТИА!

Подробнее здесь: https://stackoverflow.com/questions/784 ... e-messages
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Экспортируйте определенные сообщения CAN из файла MF4 в файл ASC с помощью asammdf.
    Anonymous » » в форуме Python
    0 Ответы
    42 Просмотры
    Последнее сообщение Anonymous
  • Получение и отправка сообщения CAN J1939 в Linux на C
    Anonymous » » в форуме Linux
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Получали ли UDP Sockets Decalate данные в различные сообщения или ReCV читает как можно больше данных одновременно?
    Anonymous » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Проблема с настройкой прослушивателя Python-Can
    Anonymous » » в форуме Python
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Как отображать и анализировать данные CAN непосредственно на Python?
    Anonymous » » в форуме Python
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous

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