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

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