Forum: PC-Programmierung CAN Monitor Tool Raspbian


von Mark C. (johndillinger)


Lesenswert?

Hallo liebe Forenfreunde,

ich war zwar schon öfter auf diesem Board unterwegs, aber bis dato nur 
zum lesen. Jetzt mal in eigener Sache.

Ich bin daran einen CAN Monitor mittels eines Raspberry Pi 2 und einem 
CAN Board mit MCP2515 Chip zu realisieren. Das ist wahrscheinlich auch 
garnicht weiter wichtig.

Auf dem Pi läuft das Betriebsystem Raspbian.

Ich möchte mich an einen Bus hängen und auf einem Display bestimmte CAN 
Botschaften anzeigen lassen. Diese soll man zb vorher am PC an dem Raspi 
kommuniziert haben. Der Raspi selber soll keine Einstellmöglichkeiten 
bieten.

Demnach bräuchte ich jetzt ein Tool das mich dabei unterstützt und das 
ich selbst noch ein wenig anpassen kann. Es sollen ja alle Buttons 
verschwinden, sodass nurnoch die bestimmten Botschaften live angezeigt 
werden. (Ich schätze mal komplett selber schreiben dürfte doch schon 
deutlich aufwendiger sein?)

Dabei bin ich zb auf diesen Thread gestoßen: 
Beitrag "Open Source CAN-Bus Analyse Tool".
Den TinyCan View habe ich auch schon gefunden.

Die größte schwierigkeit liegt wohl dabei, das ich die empfangenen 
Rohwerte mittels eines DBC Files interpretieren muss und das dann auf 
dem Display anzeigen lassen möchte. Also nicht die Rohwerte.

Busmaster fällt schonmal raus, da nur für Windows.

Habt ihr sonst noch einen Vorschlag, oder kann man sowas selber 
programmieren? Ich kann mit C und Java umgehen, aber auch nur im Studium 
nebenbei gehabt. Demnach bin ich kein Profi.

Viele Grüße

von Mark C. (johndillinger)


Lesenswert?

Keiner eine Idee?

Vielleicht wie man es selber programmiern könnte, das er nach den 
Rohwerten im DBC File sucht, vergleicht und dann die übersetzte 
Nachricht wieder ausgibt?

von Martin (Gast)


Lesenswert?

> Beitrag Open Source CAN-Bus Analyse Tool
sieht doch nicht schlecht aus.

Wer einige Mannmonate selber hineininvestieren kann und will, wird es 
sicher auch selber programmieren können......

von Vlad T. (vlad_tepesch)


Lesenswert?

Das habe ich benutzt, um schnell und einfach Funktionen zu generieren, 
die aus den Datagrammen vernünftige Daten rausholen:

http://sourceforge.net/projects/hsk/files/
Da unter scripts das  dbc2c.awk


Eventuell muss man sich die Templates noch ein wenig anpassen und die 
DBCs aufs nötigste strippen (das script ist ziemlich mäkelig).

Alternativ gibts noch "cantools"
Den kann man zur Laufzeit ein dbc vorwerfen und er generiert callbacks 
für jedes Signal einer Botschaft.
Allerdings hatte ich probleme cantools unter windows zu übersetzen.


Sind halt 2 unterschiedliche Ansätze. wenn du deine Can-Matrix kennst, 
diese Fix ist und du weißt, welche Signale du brauchst, gehts nicht 
effizienter als mit dem ersten.
Willst du etwas komplett generisches, zur Laufzeit konfigurierbares, ist 
das 2. sicherlich geeigneter.

: Bearbeitet durch User
von Mark C. (johndillinger)


Lesenswert?

Danke habe mir beides mal ein wenig angeschaut und ausprobiert. Aber ich 
blicke noch nicht so ganz durch...

Zum Beispiel das Skript:
Wie kann es ich ausführen und wie empfange ich mithilfe des Skriptes CAN 
Nachrichten?

Tool:
was meinst du ich kann zur Laufzeit ein DBC vorwerfen?

Gruß

von Vlad T. (vlad_tepesch)


Lesenswert?

Mark C. schrieb:
> Zum Beispiel das Skript:
> Wie kann es ich ausführen
mit awk
awk -f dbc2c < my.dbc > my.dbc.h

> und wie empfange ich mithilfe des Skriptes CAN
> Nachrichten?

gar nicht.

wie gesagt - das script generiert einen C-header der jede menge defines 
enthält, unter anderem zugriffsmacros für die einzelnen Signale.

Das script ist also teil des Entwicklungsprocesses. Du hast für einen 
bestimmten Anwendungsfall ein DBC-File und benötigst einzelne Signale, 
die du verarbeiten möchtest, also rufst du in deinem Schnittstellen-Code 
die entsprechenden Auspacks- und Umrechnungsmacros auf und gibst diese 
die richtigen Datagramme. Alles hardcoded quasi.

Wenn du genau weißt, welche Signale du verarbeiten möchtest, geht es 
kaum effizienter, diese in normale Datentypen umzurechnen.

Mark C. schrieb:
> Tool:
> was meinst du ich kann zur Laufzeit ein DBC vorwerfen?

Der Ansatz ist komplett generisch.

Du initialisierst die Bibliothek in deinem Programm und gibst ihr ein 
dbc-File. Dann gibst du der Lib eine beliebige Canbotschaft und wenn sie 
die in dem DBC-File findet, ruft sie einen Callback für jedes enthaltene 
Signal auf.
Das ist natürlich sehr generisch.
Aber wie gesagt, ich hab sie unter Win nicht gebaut bekommen.
Und CAN-Botschaften empfängt die für dich natürlich auch nicht.

Jede der beiden Varianten hat seine Vorteile und unterschiedlichen 
Anwendungszwecke.

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
Noch kein Account? Hier anmelden.