Интеграция Python с анализатором банок

Здравствуйте, я использую Python с аппаратным анализатором может vn1610

import time
import can
count=0
a=0
for i in range(1,1000):  # zero to max range ( 0 - 2048 )
  a=a+1
  print(a)       #code stops running at a=64[enter image description here][1]
  bus = can.interface.Bus(bustype='vector', app_name=None, channel=0,bitrate=500000)
  msg = can.Message(arbitration_id=i, data=[0x02,0x11,0x02,0x00 ,0x00 ,0x00, 0x00, 0x00],dlc=3, extended_id=False)
  bus.send(msg)
  print ("Request msg:",msg)
  response=bus.recv(0.02) 
  print ("Response msg:",response)

Я получаю can.interfaces.vector.exceptions.VectorError: Ошибка xlGetChannelIndex (XL_ERR_HW_NOT_PRESENT) как ошибка. Как я могу решить эту ошибку??

3 ответа

Решение

Он останавливается, потому что вы создаете новый интерфейс каждый раз.

Вероятно, CANalyzer поддерживает максимум 64 интерфейса [необходима цитата], и поэтому он останавливается после a = 64.

Вам не нужно создавать интерфейс каждый раз. Переехать

bus = can.interface.Bus(bustype='vector', app_name=None, channel=0,bitrate=500000)

снаружи for цикл и ваш код должен работать. Как вам не нужно создавать интерфейс снова и снова.

Что ж, это по-королевски обошлось мне в 6 часов, поверьте библиотеке, они сказали...

Я только недавно заново открыл для себя эту проблему, потому что кто-то решил датьapp_nameзначение по умолчанию «CANalyzer» в конструкторе VectorBus в canLib.py, это приводит к тому, что он проходит только через каналы, которые были настроены для этого app_name «CANalyzer», используяset_application_config()конечно, поскольку ни один из них не был настроен, возникают ошибки, как если бы интерфейс не был подключен.

Что касается моего исправления:

      bus = can.interface.Bus(interface='vector', channel='0', receive_own_messages=True, bitrate=500000, app_name=None)

Создайте шину один раз в коде, вы также можете создать сигнальную шину для различных каналов, например:

          can.interface.Bus(interface='vector', channel='0,1,2,3',receive_own_messages=True,bitrate=500000)
Другие вопросы по тегам