Подключение от ноутбука Ubuntu к автомобильной CAN через OBD2 к Kvaser Leaflight 2, запуск can-utils / socketcan и модуля python-can.
В следующем коде разрывается соединение с CAN
bus = can.interface.Bus(bustype='socketcan',channel='can0')
for i,p in enumerate(payloads):
msg = can.Message(arbitration_id = pid, data = p, extended_id = False)
bus.send(msg)
time.sleep(0.005)
В частности, он вызывает набор ошибок битов материала.Предположительно это происходит из-за ошибок.
Тем не менее, следующий код работает нормально:
bus.send_periodic(msg , 0.005, 10) ## send `msg` every 0.005s for 10s
Моя проблема в том, что я хотел бы адаптировать каждое сообщение на основе наблюдений почти в реальном времени, поэтому .send_periodic()
не можетиспользовать, поскольку он отправляет одно и то же сообщение повторно.Тем не менее, когда я пытаюсь выполнить цикл, равный примерно 1012 *, примерно с той же скоростью, мое соединение останавливается.То есть, когда мы запускаем код, мы видим остановку candump
(которая пассивно отслеживает и выводит все сообщения CAN на экран), но не ошибку.
Интересно, что это происходит только для одного PID.То есть мы можем правильно выполнять обе версии кода на других идентификаторах PID, и они, похоже, работают без ошибок!
Есть идеи о том, что здесь происходит?Начинаю думать, что это «особенность» конкретного транспортного средства для защиты от этого PID.