Hallo ich habe gerade ein neues Projekt in Angriff genommen und komme nicht so recht voran, vieleicht mache ich ja nur triviale Fehler. Das Ziel des Projektes ist es eine Kommunikation zwischen einen Windows-PC(Win10) und einem CAN-Bus System aufzubauen. Als Software für den PC soll Python dienen und für die Schnittstelle nach außen verwende ich den PCAN-USB Adapter von Peak. https://www.peak-system.com/PCAN-USB.199.0.html Für das Python-Programm fange ich auch nicht von Null an. https://python-can.readthedocs.io/en/master/ Ich habe auch eine Kommunikation aufbauen können und konnte mit meinem Bus-Teilnehmer erfolgreich sprechen. Nur leider bin ich nur in der Lage Single-Frames zu empfangen. Für eine längere Kommunikation benötige ich Flow-Control-Frames und diese versteh ich wie es scheint nicht ganz. Ich zeig euch mal kurz ein paar Code-Ausschnitte: msg = can.Message(arbitration_id=0x001, data=[0x08, 0x03, 0x22, 0x11, 0x22, 0xAA, 0xAA, 0xAA], is_extended_id=False) bus.send(msg) Daraufhin antwortet mir mein Teilnehmer auch und zeigt mir mit seinem Frame das er noch mehr senden will(Firstframe). Damit er weiter Senden darf, schicke ich Ihn nun einen so wie ich dachte Flow-Control-Frame: msg = can.Message(arbitration_id=0x001, data=[0x30, 0x00 , 0x00], is_extended_id=False) bus.send(msg) Danach ist jedoch Feierabend, er sendet mir nicht den Rest, also die Folgeframes, sondern einfach nur noch seinen Heartbeat. Wenn mir einer Helfen könnte wäre ich diesesm sehr verbunden, auch Verweise auf große Quellen würden mir schon helfen. Danke!
Hallo, habe das Problem gelöst. Es war ein ziemlich trivialer Fehler beim Senden des Flow-Control-Frames. Für die Interessierten unter euch hier die Auflösung: Ein Flow Control Frame hat eine Länge von 3 Byte Pflicht als Signal, jedoch darf man nicht den Kommunikationsknoten vergessen, d.h.: msg = can.Message(arbitration_id=target_arbitration, data=[target_node, 0x30 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], is_extended_id=False) bus.send(msg) Falls es noch jemand genau erklärt haben will hier meine Beschreibung des Frames: byte1= node, byte2= 0x30 | flow status, byte3= Blocksize, byte4= separation time minimum Ich lasse den Status sowie Blocksize und Seperation auf 0, damit mein Sender einfach alles raushaut.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.