SLSS CANAnalyser

  • Entwicklungsstand: in Entwicklung (letzte Aktualisierung: 05.06.2021 – Release Version 1.0.0.2)
  • Veröffentlichungen: Version 1.0.0.2 hier und auf GitHub zum Download (Testphase) veröffentlicht
  • GitHub Repository: https://github.com/SeppHansen/SLSS-CANAnalyser*

 

Vorgeschichte

Da ich in der Vergangenheit sowohl beruflich, als auch in meiner Freizeit immer wieder mit CAN-Bus Systemen und den darüber versendeten Botschaften in Kontakt gekommen bin, entstand irgendwann der Wunsch / Bedarf nach einer Software, mit dessen Hilfe ich mir das Handling und den Umgang mit den Bus-Daten erleichtern kann. Bis dato habe ich CAN-Botschaften entweder im Terminal, später mit einem Pythonprogramm auf einer  Raspberry Pi*, wie ich sie zum Beispiel als zentrales Gateway bei meinem SLSS CarNet* Projekt verwende, oder mittels der seriellen Ausgabe eines  Arduino* Micro-Controller Boards, angezeigt und mitgeloggt. Die Auswertung der Daten erfolgte dann immer im Nachgang anhand der gemachten Aufzeichnung, oder durch das physische Überprüfen der Reaktionen, welche durch das Senden von bestimmten Botschaften ausgelöst werden sollten. Dies ist auf Dauer natürlich nur wenig komfortabel.

Für die professionelle Bearbeitung von CAN-Bus Daten gibt es natürlich auch professionelle Tools, welche alle gewünschten Funktionen unterstützen und mit verschiedenen, teilweise sogar hardwareseitig implementierten Methoden, sicherstellen, dass jedes Datenpaket welches über den CAN-Bus übertragen wird auch erkannt und mitgeloggt wird. Diese Tools kommen meist in den Entwicklungsabteilungen für Kraftfahrzeuge, Nutzfahrzeuge, Schiffe und auch anderen Maschinen zur grundlegenden Auslegung und Entwicklung des CAN-Bus zum Einsatz und werden ständig weiterentwickelt, geupdatet und verbessert. Da dieser Vorgang für die entwickelnden Firmen recht zeit- und kostenintensiv ist, werden diese Programme leider meist als zeitlich begrenzte Lizenzversionen verkauft und benötigen nicht selten herstellerspezifische Hardware, welche ebenfalls nicht ganz billig ist. Diese tollen und sehr nützlichen Tools sind damit leider für den Hobbybereich oder den sporadischen Einsatz einfach zu teuer.

 

Zielsetzung: minimalistischer Hardwareeinsatz

Eine meiner grundlegenden Ideen hinter diesem Projekt ist es für die verwendete Hardware lediglich Komponenten zu verwenden, welche ich immer, fast schon wie so manches Grundnahrungsmittel, vorrätig zuhause herumliegen habe. Dabei handelt es sich zum einen um das bei „Bastlern“ beliebte Arduino Uno R3* Micro-Controller Board und zum anderen um die bei Amazon* oder Ebay* kostengünstig erhältlichen MCP2515 CAN Bus Shields*, welche einfach mittels JumperWires*  über den SPI Bus mit dem Arduino* verbunden werden können. Damit belaufen sich, selbst wenn man beide Komponenten erst noch anschaffen muss, die Kosten für die Hardware auf weniger als 20€.

 

Schematischer Anschlussplan des CAN-Controllerboards an den Arduino

Anschlussplan des MCP2515 CAN-Controllerboards an den Arduino Uno

 

UPDATE: Tausch des 8Mhz Schwingquarz am CAN-Bus Shield

Bei meinen Recherchen zum verwendeten MCP2515 CAN Bus Shield habe ich in mehreren Forenbeiträgen gelesen, dass das Board mit dem verbauten 8Mhz Schwingquarz die angegeben 1Mbit/s nicht verarbeiten kann. Da die Boards preislich aber unschlagbar sind und der Quarz einfach zugänglich ist, werde ich diesen durch einen 16Mhz Schwingquarz ersetzen und den Code des µC daran anpassen. Wer sich das Umlöten ersparen möchte, kann auch ein fertiges (aber teuereres) CAN Shield verwenden.

 

Screenshots vom Wechsel des Schwingquarz auf dem CAN-Board

 

Tipp: Der Quarz wurde mit bleifreiem Lötzinn (mittlerweile Standard) verlötet, was das Auslöten durch die höhere Schmelztemperatur ein wenig erschwert. Falls man keine Heißluftlötstation* oder Flussmittel zur Hand haben sollte, empfiehlt es sich, auf die Lötstellen vorher ein wenig bleihaltiges Lötzinn aufzulöten, um mit diesem das bleifreie Lötzinn zu verflüssigen. Das Entfernen des Lötzinns mit einer handelsüblichen Entlötpumpe* ist dann ohne jegliche Probleme möglich. Die Nacharbeit beim Reinigen der Pads / Durchführungen wird durch diesen Trick übrigens auch vereinfacht!  

 

Funktionsumfang der Software

Neben dem eigentlichen Mitloggen von CAN-Bus Botschaften orientiere ich mich beim Funktionsumfang der Software größtenteils an dem, was ich mir von einer solchen Software erhoffen würde. So sollen Funktionen für die Botschaftsanalyse (CAN-Bus Reverse Engineering) ebenso wie das Festlegen von Nachrichtenbezeichnungen und das Filtern einzelner CAN-IDs oder CAN-ID Gruppen ermöglicht werden. Hierbei möchte ich jedoch die Bedienbarkeit der Software so intuitiv und einfach wie möglich halten. Weitere geplante, oder auch bereits umgesetzte Funktionen habe ich in der nachstehenden Übersicht einmal zusammengefasst.

 

Funktionsbeschreibungaktueller Standgeplant für
Verbinden des / der CAN-Bus Controller aus der Software heraus.
– Verbindungsaufbau über serielle Schnittstelle
– Empfang der im µC-Code festgelegten Board-ID
– Auswahl der Busgeschwindigkeit in der Software
umgesetzt / voll funktionsfähigVersion 1.0.0.0
Automatische Suche nach angeschlossenen CAN-Bus Controllern.
– Auflisten der Board-ID hinter dem jeweiligen COM-Port
umgesetzt / voll funktionsfähigVersion 1.0.0.0
Empfangen von CAN-Bus Botschaften.
– Aufteilen und Auflisten der Daten in tabellarischer Form
– Sortieren der empfangenen Daten innerhalb der Tabelle
– Speichern der Empfangsreihenfolge in zusätzlicher Log-Tabelle
umgesetzt / voll funktionsfähigVersion 1.0.0.0
Umschalten zwischen dezimaler, hexadezimaler und binäre Datenanzeige.
– Getrennte Umschaltung für CAN-Identifier und Datenbytes
– Auffüllen der binären Datenanzeige auf 8bit – Datenframe
– Umschalten und Aktualisieren der Anzeige während der Aufzeichnung
umgesetzt / voll funktionsfähigVersion 1.0.0.0
Filtern nach ID, Daten und individuell einstellbaren Filteroptionen.
– ID Filter = 1 Zeile pro CAN-Identifier
– Daten Filter = 1 Zeile pro identischer CAN-Botschaft
– individueller Filter = Filtern nach CAN-Identifier / Identifier-Bereich
– auf ID Filter und Datenfilter anwendbar
– Zählen und Darstellen identischer Botschaften
umgesetzt / voll funktionsfähigVersion 1.0.0.0
Start, Pause, Aufnahme und Stopp Buttons eingefügt
– zum Unterbrechen der Datenerfassung während bestehender HW-
Verbindung.
umgesetzt / voll funktionsfähigVersion 1.0.0.0
Export der empfangenen CAN-Daten in MS-Excel Datei
– Anlage von einem Arbeitsblatt pro Datentabelle
– schneller Export der Daten zur Nachverarbeitung via Excel
umgesetzt / voll funktionsfähigVersion 1.0.0.0
Anlegen von Botschaftsbezeichnungen zur besseren Signalzuordnung.
– Neuanlage, Bearbeitung und Löschen direkt in der Software
– sofortige Anzeige der Bezeichnung im Aufzeichnungsfenster
– Anzeige der Bezeichnung im Log-Fenster
– Live-Anzeige der Erstellten Botschaften in eigenem Fenster
umgesetzt / voll funktionsfähigVersion 1.0.0.0
Speichern und Laden von Botschaftsbezeichnungen.
– gewünschtes Format = *.dbc
umgesetzt / voll funktionsfähigVersion 1.0.0.0
Live Signal Reverse Engineering.
– Auswahl einer ID zum Reverse Engineering
– Einzelbitauswahl und sofortige Anzeige des Ausgabewertes
– zum Ermitteln byteübergreifender Signalwerte > 8bit
– Übertragen der Einstellung in die Signalliste
umgesetzt / weitere Erweiterungen
in Planung
Version 1.0.0.1
Senden von CAN-Botschaften.
– Senden von vordefinierten CAN-Botschaften auf Knopfdruck
– Speichern der Botschaften zur späteren Wiederverwendung
– Übernahme empfangener CAN-Botschaften in den Sendebereich
per Kontextmenü
– Wiederholtes Senden von CAN-Botschaften mit einstellbarer
Verzögerungszeit zwischen den Sendevorgängen um eine Art
Rest-Bus-Simulation zu ermöglichen
umgesetzt / voll funktionsfähigVersion 1.0.0.1
Signalsimulation
– Senden von einstellbaren, berechneten Signalen (Random)
– Einstellen des Intervalls der Signalwiederholung
noch nicht umgesetztin Planung
Laden und Speichern aller Programmeinstellungen
– Projektfunktion = Laden und Speichern aller Daten wie
– Programm- und Verbindungseinstellungen
– CAN-Botschaften im Empfangsfenster (separat)
– CAN-Botschaften im Logfenster (separat)
– erstellter oder geladener *.dbc Beschreibung
– gesetzter oder erstellter Filter
umgesetzt / voll funktionsfähigVersion 1.0.0.0
ASCII Text Analyser
– Darstellen aller eingehenden CAN-Daten im ASCII Format
– Integration als weiteren Tabellen-Reiter
– Nutzen der Filtereinstellungen eingehender CAN-Daten
– Speichern und Exportieren der Daten
umgesetzt / voll funktionsfähigVersion 1.0.0.1
SLSS CANData Viewer
– Anzeigen von aufgezeichneten CAN-Daten
– Durchsuchen von CAN-Datensätzen nach Zeichenketten
– Bearbeiten von Datensätzen (Spalten und Zeilen)
– Anzeige der aktuellen Zelle im ASCII-Format
– Speichern von bearbeiteten Datensätzen
umgesetzt / voll funktionsfähigVersion 1.0.0.1
OBD Datenportal mit Live-Datenanzeigein Arbeit /teilweise funktionsfähigin Planung
Modulübergreifende Kommunikation
– Weiterleitung der CAN-Botschaften von einem Modul
zu einem zweiten oder mehreren Modulen (busübergreifend)
noch nicht umgesetztin Planung
Test, Optimierung, Debugging des Programmcodesständigständig
Übersicht über den geplanten Funktionsumfang des SLSS CANAnalysers

 

 

Übersicht Entwicklungsschritte

Um die Länge des Beitrages etwas zu kürzen, habe ich alle Entwicklungsschritte auf eine eigens dafür erstellte Seite https://www.langer-sebastian.de/slss-cananalyser-entwicklung/* ausgelagert. Hier kann man den Entstehungsprozess dieser Software von Anfang an nachvollziehen.

 

Installation des mitgelieferten Micro-Controller Programmcodes 

Um den SLSS CANAnalyser nutzen zu können, ist es zwingend erforderlich, den im Download-Archiv mitgelieferten Micro-Controller Code auf den Arduino zu flashen. Der Programm-Code befindet sich dabei im Ordner „SLSS_CanAnalyser_V1.0.0.2 µC-Code\SLSS_CanAnalyser\“ und kann durch das Laden der Datei „SLSS_CanAnalyser.ino“ in der Arduino-IDE geöffnet werden. (siehe Screenshot)

 

Dateien des Micro-Controller Codes zum SLSS CANAnalyser

 

Nach dem Laden der Datei hat man die Möglichkeit die Taktfrequenz des CAN-Boards durch das Setzen der richtigen Einstellung und Auskommentieren der nicht benötigten Einstellung auszuwählen. Die Voreinstellung habe ich hier auf die CAN-Boards mit 8 MHz gesetzt, da dies dem Auslieferzustand entspricht und nicht jeder auf 16 MHz umbauen möchte. Nutzt man ein CAN-Shield mit verbautem 16 MHz Schwingquarz, so muss man die Einstellung dementsprechend anpassen – 8 MHz mittels „//“ auskommentieren und die beiden Schrägstriche „//“ vor 16 MHz entfernen.

Außerdem hat unterhalb der Auswahl der richtigen Taktfrequenz noch die Möglichkeit die 3-stellige Geräte-ID zu setzen. Diese wird später in der Verbindungsansicht der Software angezeigt und dient bei der Nutzung von mehreren CAN-Boards der besseren Unterscheidung. Die Geräte-ID hat jedoch auf den eigentlichen Datenaustausch zwischen Controller und Software keinen Einfluss. Mehrfach vergebene Geräte-IDs haben somit keine negativen Auswirkungen auf den Empfang der Daten.  

  

//select frequency for the oszilator mounted on the can board
int MCP_MHz = MCP_8MHZ;
//int MCP_MHz = MCP_16MHZ;

//DeviceID --> change for multiple devices (shown as ID in software)
String devID = "001";

Auszug aus dem Programmcode zur Einstellung der Taktfrequenz und zum Setzen der Geräte ID

 

Link zur für den Micro-Controller benötigten CAN-Bibliothek

Die folgende CAN-Bibliothek dient zur Kommunikation des Arduino mit dem MCP2515 CAN-Controllerboard und muss zum erfolgreichen Kompilieren des Codes in der Arduino-IDE verfügbar sein. Dazu reicht es, wenn man die Bibliothek von der verlinkten GitHub-Seite herunterlädt, die Zip-Datei entpackt und anschließend das entpackte Verzeichnis in den „libraries“ Ordner, welcher standardmäßig unter „Dokumente/Arduino“ zu finden sein sollte, verschiebt. 

https://github.com/coryjfowler/MCP_CAN_lib*

 

Screenshot des  Arduino libraries-Ordners mit der abgelegten MCP_CAN_lib-master

 

 

Screenshots SLSS CANAnalyser Oberfläche + Versuchsaufbau   

Screenshots Entwicklung – SLSS CANAnalyser 

 

Download SLSS CANAnalyser

Für meine Freunde und alle Interessierten biete ich hier den SLSS CANAnalyser zum Download an. Da es mit den *.ZIP Dateien evtl. zu Problemen beim Download kommen kann (ZIP-Archive werden in einigen Web-Browsern als potentielle Bedrohung erkannt und der Download blockiert), stelle ich die Datei sowohl als *.ZIP, als auch als *.7z zur Verfügung. Für die letztere Datei benötigt man das kostenlose Kompressionsprogramm 7-Zip* was hier* heruntergeladen werden kann. (https://www.7-zip.de/).  

 

Download “SLSS CANAnalyser (Zip-Archiv)” SLSS-CANAnalyser-V_1.0.0.2.zip – 72-mal heruntergeladen – 15 MB

Download “SLSS CANAnalyser (7-Zip-Archiv)” SLSS-CANAnalyser-V_1.0.0.2.7z – 31-mal heruntergeladen – 10 MB

 

Haftungsausschluss:

Die hier veröffentlichte Software wurde auf mehreren Systemen fehlerfrei getestet. Dennoch kann für evtl. Beschädigungen, Instabilitäten oder sonstige Beeinträchtigungen, welche unmittelbar durch die Installation, Nutzung, oder in sonstiger Weise in Zusammenhang stehend mit der hier zum Download angebotenen Software auftreten keinerlei Haftung übernommen werden. Der Download, die Installation und Nutzung geschehen auf eigenes Risiko! Bei Problemen wenden sie sich bitte an info@langer-sebastian.de!

 

Zusatz zur Nutzung im Bereich der StVO / StVZO

Die angebotene Software ist ausschließlich für den Bereich des Prototyping gedacht und die Nutzung somit ausschließlich abseits des öffentlichen Verkehrsraum gestattet! Von einer Nutzung während der Fahrt wird ausdrücklich abgeraten. 

 

Videos vom SLSS CANAnalyser Projekt

Funktionsumfang – Senden und Empfangen von CAN-Botschaften zwischen zwei Micro-Controllern

 

 

Funktionsumfang – ASCII Text Analysemodul + Anzeige der Testnachricht auf CAN-ID 77

 

 

Funktionsumfang – Laden und Speichern von Projekt und Einzeldaten + erste Schritte CAN-Analyse (Reverse Engineering)

 

 

Funktionsumfang – Filtern von IDs, Aufzeichnen von Signalen, Export zu Excel… (31.01.2021)

 

 

Funktionsumfang – Laden und Speichern von DBC Dateien, Anzeige der Signal-Benennung im Datenempfangsbereich, Anzeige der DBC Rohdaten (06.02.2021)

 

 

6 Gedanken zu „SLSS CANAnalyser

  • Juni 1, 2021 um 12:31 pm
    Permalink

    Hallo Sebastian,
    zunächst wollte ich mich bei dir für dieses klasse Projekt bedanken!
    Ich finde es total klasse wenn du deine Entwicklung hier bereit stellst und uns an deinem Erfolg beteiligst.
    Ich selbst bin leider auch nur ein Nachbauer da ich mangels Zeit und fehlender Erfahrung bei der Entwicklung niemals so weit kommen würde wie du es hier bist.
    In diesem Sinn habe ich auch gleich mal eine Frage:
    Ich habe wie hier beschrieben das Quarz auf meinem CAN Shield auf 16MHz ausgetauscht und die Verbindung zum Arduino Uno wie grafisch dargestellt, hergestellt.
    Das Compilern lief ohne Probleme.
    Leider zeigt mit der Serielle Monitor nun di folgende Meldung an:

    14:26:31.848 -> CAN BUS Shield init fail
    14:26:31.848 -> Init CAN BUS Shield again
    14:26:32.171 -> Entering Configuration Mode Failure…

    Leider kann unabhängig davon auch der SSLS CANAnalyser keine Verbindung zu meinem Arduino an COM 3 herstellen

    Habe ich jetzt noch etwas übersehen?

    Vielen Dank für deine Unterstützung
    Tobias

    Antwort
    • Juni 1, 2021 um 2:21 pm
      Permalink

      Hallo Tobias,
      vielen Dank für die netten Worte. Es freut mich immer sehr, wenn meine Tools auch anderen Leuten gefallen.

      Zu deinem Problem:
      Die Ausgabe, welche du oben beschrieben hast, stammt wahrscheinlich aus einem anderen Programmcode, da mein Code eigentlich keine Ausgabe auf der seriellen Konsole erzeugen dürfte. Falls du einen anderen Code als den meinen auf den Arduino geflashed haben solltest, wird dieser von meiner Software nicht erkannt, da in diesem Fall das Board nicht auf die Anfrage der Software reagiert.

      In der von mir verlinkte CAN-Bibliothek kann / muss man die Frequenz innerhalb der „CAN.begin“-Methode wählen. Die beiden Parameter dafür wären „MCP_8MHZ“ für den 8MHz und „MCP_16MHZ“ für die 16MHz Variante, siehe Screenshot (http://langersebastian.no-ip.org:8000/web_images/MCP_CAN_lib_FrequencySet.png). Falls diese Methode von „deiner“ CAN-Bibliothek nicht unterstützt werden sollte, kann es sein, dass du eine alte Version der verlinkte Bibliothek benutzt. Die Aktualisierung mittels der Dateien im oben verlinkten GitHub-Bereich sollte dann Abhilfe schaffen.

      In meinem Micro-Controller Programmcode muss man ebenfalls die richtige Frequenz des CAN-Boards am Anfang der Datei „SLSS_CanAnalyser.ino“ auswählen. Dazu kommentiert man am besten die nicht genutzte Frequenz mittels // aus dem Programmcode aus und entfernt das // vor der genutzten Frequenz. Standardmäßig habe ich die Einstellung auf die Boards mit 8Mhz Schwingquarz gestellt, da diese ja so geliefert werden. In der Abbildung unter (http://langersebastian.no-ip.org:8000/web_images/2021_06_01_15_16_48_Window.png) kannst du dir die Einstellung, wie sie für die 16Mhz-Variante aussehen sollte, einmal anschauen.

      Unabhängig davon:
      Ich hatte mit einigen der CAN-Boards auch schon ähnliche Probleme. Dabei befand sich die Initialisierung des Boards im Setup-Teil des Programmcodes und anscheinend startete der Micro-Controller schneller als der Chip auf dem CAN-Board. Das Problem konnte ich lösen, indem ich vor die Initialisierung des CAN-Boards einen Delay von 1s in den Code einfügte. Danach startete das Board ordnungsgemäß. Hier mal ein Beispiel zum Delay (auch noch mit dem alten „CAN0.begin“-Aufruf ohne Angabe der Frequenz) http://langersebastian.no-ip.org:8000/web_images/CAN-INIT-delay.png

      Falls all das nicht helfen sollte, kannst du mir deinen Code gern mal per Mail zusenden oder einfach auf Pastebin.com bereitstellen. Vielleicht fällt mir ja etwas auf.

      Dann drücke ich die Daumen, dass die beschriebenen Dinge vielleicht helfen. Wenn nicht, wie schon gesagt einfach melden…
      Viele Grüße
      Sebastian

      Antwort
  • Juni 1, 2021 um 3:07 pm
    Permalink

    Hallo Sebastian,
    Das ist mir jetzt aber ein bisschen peinlich!
    Ich schau mir noch mal alles an. Vermutlich ist beim vielen ausprobieren etwas durcheinander gekommen.

    Danke schon mal vorab und mach weiter so!

    Tobias

    Antwort
    • Juni 1, 2021 um 3:58 pm
      Permalink

      Kein Problem, wenn’s nicht funktioniert dann melde dich einfach.
      Grüße
      Sebastian

      Antwort
  • Juni 20, 2021 um 7:44 pm
    Permalink

    Hallo Sebastian,
    ich bin gerade am testen Deines Programms.
    Es besteht leider folgendes Problem:
    Die Verbindung mit dem Board wird hergestellt und bleibt solange nichts von meinem BMS kommt.
    Sobald ich die Versorgungsspannung anlege werden die 4 ID’s mit Daten empfangen und 3 Sekunden später trennt sich die Verbindung das Board hängt sich auf.
    Nach Reset immer das gleiche.
    Hast Du da eine Lösung?
    Ist es Hardware oder Software seitig?

    Vielen Dank und Grüße
    Daniel

    Antwort
    • Juni 21, 2021 um 9:18 am
      Permalink

      Hallo Daniel,
      vielen Dank für dein Feedback. Ich vermute hier eher ein hardwareseitiges Problem, kann es aber ohne weitere Infos nicht genau sagen.
      Ist der Mikrocontroller nach dem Absturz noch als COM-Gerät im Gerätemanager gelistet, oder wird er komplett abgemeldet?
      Wenn du Zeit hast, dann sende mir bitte mal ein paar Screenshots vom Programmzustand nach dem Abmelden, und eine Liste deiner verwendeten Hardwarekomponenten (inkl. BMS) per Mail an info@langer-sebastian.de, dann könnte ich dir eine Debug-Version erstellen, welche dir mehr Statusinformationen hinsichtlich der Controllerverbindung zur Verfügung stellt.

      Viele Grüße
      Sebastian

      Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.