Код: Выделить всё
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
Я использую 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