Как декодировать сообщение из canbus (Iptronik) - PullRequest
0 голосов
/ 09 октября 2019

Я получаю из canbus следующее сообщение и данные о сигнале (с машины Iptronik sim stg). Я кодировал его с помощью python, я использую библиотеку python-can, и у меня есть ubuntu 18.04

Полученное сообщение / сигнал:

Timestamp: 1570622811.311113        ID: 0060    S                DLC:  8    e4 7f 55 55 55 55 04 00     Channel: can0
Timestamp: 1570622811.811173        ID: 0060    S                DLC:  8    e4 7f 55 55 55 55 0f 06     Channel: can0
Timestamp: 1570622812.311224        ID: 0060    S                DLC:  8    e4 7f 55 55 55 55 65 1a     Channel: can0
Timestamp: 1570622812.811266        ID: 0060    S                DLC:  8    e4 7f 55 55 55 55 47 0c     Channel: can0
Timestamp: 1570622813.311266        ID: 0060    S                DLC:  8    e4 7f 55 55 55 55 2c 58     Channel: can0
Timestamp: 1570622813.811316        ID: 0060    S                DLC:  8    e4 7f 55 55 55 55 20 36     Channel: can0

из файла dbc. У меня есть эта информация.

BO_ 96 DEVICE_51900450_0: 8 C_51900450
  SG_ Beschleunigung : 0|16@1+ (0.000152590218966964,-5) [-5|5] "V" IPETRONIK_CAN_1
  SG_ Pos : 48|16@1+ (0.000152590218966964,0) [0|10] "V" IPETRONIK_CAN_1

когда я преобразую в 4 первых и четыре последних разряда, я получаю это число, которое не соответствует файлу dbc.

(228, 127, 3, 0)
(228, 127, 3, 0)
(228, 127, 62, 3)
(228, 127, 162, 16)
(228, 127, 143, 28)
(228, 127, 252, 93)

Можете ли вы мне помочь или дать совет, как правильно преобразовать сигнал в соответствии с инструкциями dbc. Заранее спасибо :)

Ответы [ 2 ]

1 голос
/ 09 октября 2019

это может вам помочь ...

import cantools
import can
from pprint import pprint 

db = cantools.database.load_file('******_dbc.dbc') #path of .dbc file
print( db.messages)
can_bus = can.interface.Bus('can0', bustype='socketcan')
message = can_bus.recv()
for msg in can_bus:
     print ( db.decode_message(msg.arbitration_id, msg.data))
1 голос
/ 09 октября 2019

Вы можете использовать инструменты CAN BUS (https://cantools.readthedocs.io/en/latest/), чтобы загрузить файл .DBC и правильно декодировать ваши сообщения CAN:

pip install cantools

Вот пример кода:

>>> import cantools
>>> from pprint import pprint
>>> db = cantools.database.load_file('tests/files/dbc/motohawk.dbc')
>>> db.messages
[message('ExampleMessage', 0x1f0, False, 8, 'Example message used as template in MotoHawk models.')]
>>> example_message = db.get_message_by_name('ExampleMessage')
>>> pprint(example_message.signals)
[signal('Enable', 7, 1, 'big_endian', False, 1.0, 0, 0.0, 0.0, '-', False, None, {0: 'Disabled', 1: 'Enabled'}, None),
 signal('AverageRadius', 6, 6, 'big_endian', False, 0.1, 0, 0.0, 5.0, 'm', False, None, None, ''),
 signal('Temperature', 0, 12, 'big_endian', True, 0.01, 250, 229.53, 270.47, 'degK', False, None, None, None)]
...