Seite 1 von 1

CAN Nachricht nach Bytes abfragen

Verfasst: Dienstag 14. Juni 2022, 15:46
von johann1976
Hey Leute ,

Ich kommuniziere im Moment mit einer C basierten Hardware (MRS Modul) mit meinem Python Programm auf meinem Rechner.
Die CAN Nachrichten die von der C Hardware gesendet werden kann ich mit Hilfe der CAN Library einlesen.

Nun suche ich schon seit längerem eine Möglichkeit auf Daten die in einem bestimmten Byte hinterlegt sind zu Reagieren.

die CAN Nachricht besteht aus

CAN ID , ID type (11 oder 29Bit), DLC (Länge der Nachricht), byte0, byte1, byte2......byte7)

mein Ansatz war (Restlicher Code zum epmfangen funktioniert)

Code: Alles auswählen

if can_nachricht[0] == 1:
	print("Byte beschrieben mit 1")
Leider klappt dies nicht. Kennt jemand zufällig eine Lösung zum abfragen einzelner Bytes?

LG Johann1976

Re: CAN Nachricht nach Bytes abfragen

Verfasst: Dienstag 14. Juni 2022, 15:50
von __deets__
Na das ist schon richtig so, und fuer mich funnktioniert das auch einwandfrei:

Code: Alles auswählen

can_nachricht = bytes([0,1, 2, 3, 4])
if can_nachricht[1] == 1:
     print("Byte beschrieben mit 1")

Re: CAN Nachricht nach Bytes abfragen

Verfasst: Dienstag 14. Juni 2022, 17:27
von __blackjack__
@johann1976: Was heisst denn „klappt nicht“? Weclhen Wert hat denn ``can_nachricht[0]``? Gib den doch vorher zur Kontrolle mal aus. Den Typ vielleicht auch, nicht das Du da eine Zeichenkette hast wo die Ziffer "1" an Index 0 steht.

Re: CAN Nachricht nach Bytes abfragen

Verfasst: Mittwoch 15. Juni 2022, 10:24
von johann1976
Moin Moin aus Oldenburg,

Ich stell hier mal den Code und die Fehlermeldung rein. Dieser can.Message type ist wohl nicht indexierbar hmm

Code: Alles auswählen

import can



interface = 'socketcan'
channel = 'can0'
bitrate = 250000
bus = can.interface.Bus(bustype=interface, channel=channel, bitrate=bitrate)




while True:
  
  
    msg = bus.recv()
    print(msg)             # Klappt
    byte0 = msg[0]
    print(type(byte0))
    


Fehlermeldung:
Traceback (most recent call last):
....line 40
byte0 = msg[0]

TypeError: 'Message' object ist not subscriptable





wenn ich von msg[4] usw. abfrage erscheint das gleiche


LG Johann

Re: CAN Nachricht nach Bytes abfragen

Verfasst: Mittwoch 15. Juni 2022, 10:54
von __deets__
Das ist ja auch ein Message-Objekt, und kein bytes-Objekt. Und um rauszufinden, wie man damit arbeitet, kann man die Dokumentation bemuehen:

https://python-can.readthedocs.io/en/ma ... ssage.html

Und da steht dann ja auch drin, wie man an die Bytes kommt.

Re: CAN Nachricht nach Bytes abfragen

Verfasst: Mittwoch 15. Juni 2022, 12:06
von johann1976
Danke, dies werde ich nachher mal durchgehen.
Ich habe sowas gesucht , war sogar auf der Website aber ich habe nicht explizit diese Seite aufgemacht -.-

LG Johann

Re: CAN Nachricht nach Bytes abfragen

Verfasst: Mittwoch 15. Juni 2022, 14:03
von __deets__
Wenn du gleich von Anfang an den echten Code und die echte Fehlermeldung gepostet haettest, statt irgendwelche vagen Umschreibungen, haettest du dir und uns ne Menge Zeit erspart. Vielleicht fuer's naechste mal.