Почему я не могу получить данные из сообщения CAN с помощью разъема kvaser CAN-USB? - PullRequest
0 голосов
/ 07 января 2019

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

Вот мой код:

import can
import time

bus=can.interface.Bus(bustype='kvaser',channel=0, bitrate=250000)
print (bus)
time.sleep(1)
msg =can.Message(arbitration_id=0x032)
print(msg)
time.sleep(1)

while True:
    bus.send(msg)
    recvMsg = bus.recv(timeout=0.5)
    print (recvMsg)
    time.sleep(1)

И вот ответ, который я получаю:

Kvaser Leaf Light v2, S/N 54781 (#1)

Timestamp:        0.000000    ID: 00000032    X                DLC:  0

Timestamp: 1546613346.010231        ID: 0000    S E              DLC:  4    00 01 00 00                 Channel: 0

Согласно инструкции, я должен использовать следующее:

  • Битрейт: 250 кбит
  • 11-битный идентификатор: 0x031
  • Настройки по умолчанию только для передачи
  • 8-байтовая структура сообщения: Байт: 1, Описание: состояние заряда [%], Тип: без знака, Значение: 0-200 LSB = 0,5% SOC.

Я впервые использую этот протокол связи и прочитал описание python-can 3.0, но мне все еще не ясно, как решить проблему. Любая рекомендация?

1 Ответ

0 голосов
/ 09 апреля 2019

ID: 0000 указывает на фрейм с ошибкой!

В сценарии вы устанавливаете значение аргумента арбитража = 0x032, но в руководстве написано 11-битный идентификатор: 0x031

это опечатка?

Как выглядит ваша сеть? Сколько у вас узлов?

Вы отключили CAN-шину?

Есть ли причина, по которой вы не используете PyCANlib от Kvaser?

...