CAN-Bus Daten übersichtlich darestellen

Hallo Freunde der gepflegten Unterhaltung,

ich experimentiere derzeit mit CAN-Bus und habe ein simples Programm zum Mitlesen zum Laufen bekommen und die Daten fliegen fröhlich hin und her.
Ich kann mir die Daten zwar über den Serial Monitor ansehen, aber übersichtlich ist anders.
Derzeit kopiere ich die Daten in Excel, um einen Überblick zu bekommen. Aber Änderungen live zu verfolgen ist aufgrund der Datenmenge doch schwierig, da ich die Komponenten hinter den IDs nicht kenne und nicht sehen kann welcher Sensor bspw. welche ID trägt.

Kann hier jemand eine Software Lösung empfehlen, mit der man die Daten sich schön übersichtlich anzeigen lassen kann (live).
Es gibt da einige Lösungen, die eine Liste der IDs darstellen und nur die Datensatzänderungen anzeigen. Allerdings finde ich da nichts gutes in Verbindung mit einem Arduino.

Kennt da jemand eine schöne Lösung? Möglichst Freeware.

Eingesetzt wird ein Nano mit MCP2515.

Gruß
Jan

Du kannst dir die Daten doch selbst sortiert im seriellen Monitor anzeigen lassen.
Du musst die Ausgaben nur entsprechend aufbauen.

Die Gleiche Idee hatte ich auch schon, nur ist die "line-by-line" dabei etwas hinderlich, da man das Ausgabefenster ja nicht "leeren" kann. Zumindest ist mir dafür keine Variante bekannt, außer man plottet jede Menge Zeilenumbrüche. Aber schön ist irgendwie anders.

Oder gibt es dazu eine elegantere Methode?

lengi:
....
Oder gibt es dazu eine elegantere Methode?

Bestimmt gibt es die, aber bei einem geheimen Sketch können wir nicht viel dazu beitragen.

Code, siehe unten. Jedes Signal wird in einer neuen Zeile geplottet und aufgrund der Vielzahl der Signale und IDs wird es einfach unübersichtlich. Man könnte nach speziellen IDs zwar filtern, aber das ist nicht, was ich will. Ich brauche eine Übersicht aller IDs, um bspw. zu sehen auf welche ID das drücken einer Taste Einfluss hat. Aufgrund der Schwankung von Sensoren macht es hier auch keinen Sinn IDs nur auszugeben, wenn dort im Datensatz Änderungen stattfinden, da die Anzahl der geplotteten IDs dann trotzdem immer noch beträchtlich wäre.

#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg;
MCP2515 mcp2515(10);


void setup() {
  Serial.begin(115200);
  SPI.begin();
  
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS);
  mcp2515.setNormalMode();
  
  Serial.println("------- CAN Read ----------");
  Serial.println("ID  DLC   DATA");
}

void loop() {
  
  if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {
      
    Serial.print(canMsg.can_id, HEX); // print ID
    Serial.print(" "); 
    Serial.print(canMsg.can_dlc, HEX); // print DLC
    Serial.print(" ");
    
    for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
        
      Serial.print(canMsg.data[i],HEX);
      Serial.print(" ");

    }

    Serial.println();      
  }

}

Da ich bisher noch keinen CAN-Bus ausgelesen habe und nicht verstehe, wie du deine Anzeige sehen möchtest, kann ich dir nur den Tipp geben, mit den Ausgaben "Serial.print() bzw. Serial.println()" etwas zu experimentieren.
Hierbei wird immer bei "println" ein Zeilensprung eingefügt.
Evtl. musst du für ein besseres Ergebnis die "for-Schleife" auflösen.

Hi

Auch mir ist nicht wirklich klar, was Du eigentlich willst.
Das Terminal ist nicht dafür gedacht, eine Art Menü oder Übersicht zu ersetzen - dafür gibt es Programme, Die den Datenstrom mitlesen und den Kram formatiert zur Anzeige bringen.
Ein LCD wird Dir aber wohl auch nicht helfen, da dort spätestens nach 4 Zeilen Schicht im Schacht ist - ein Grafik-LCD vll.?

Oder Du suchst Dir eine Programmiersprache aus und erstellst das Gegenstück auf PC/Laptop/Handy.

Nur mit Arduino würde ich versuchen, die Einzel-Aufgaben per Auswahl (Menü ect.) aufzuteilen.

  • Anzeige der vorkommenden IDs
  • Filtern auf ID oder NICHT-ID - jeder gefundene Sensor bzw. Teilnehmer kann einzeln an/abgewählt werden
  • Mitschneiden von x Nachrichten zum Durchscrollen

Irgendwas in der Art, da e9infach der Anzeigeplatz beim Arduino nicht gegeben sein wird und Deine CAN-Nachrichten wohl nicht in der Nähe Deines PC mitgelesen werden (spontan käme mir nur Auto in den Sinn).

MfG

postmaster-ino:
Hi

Auch mir ist nicht wirklich klar, was Du eigentlich willst.
Das Terminal ist nicht dafür gedacht, eine Art Menü oder Übersicht zu ersetzen - dafür gibt es Programme, Die den Datenstrom mitlesen und den Kram formatiert zur Anzeige bringen.
Ein LCD wird Dir aber wohl auch nicht helfen, da dort spätestens nach 4 Zeilen Schicht im Schacht ist - ein Grafik-LCD vll.?

Oder Du suchst Dir eine Programmiersprache aus und erstellst das Gegenstück auf PC/Laptop/Handy.

Nur mit Arduino würde ich versuchen, die Einzel-Aufgaben per Auswahl (Menü ect.) aufzuteilen.

  • Anzeige der vorkommenden IDs
  • Filtern auf ID oder NICHT-ID - jeder gefundene Sensor bzw. Teilnehmer kann einzeln an/abgewählt werden
  • Mitschneiden von x Nachrichten zum Durchscrollen

Irgendwas in der Art, da e9infach der Anzeigeplatz beim Arduino nicht gegeben sein wird und Deine CAN-Nachrichten wohl nicht in der Nähe Deines PC mitgelesen werden (spontan käme mir nur Auto in den Sinn).

MfG

Genau sowas suche ich doch, siehe erster Post. Die Idee das übersichtlicher im Serial-Monitor darzustellen kam ja nicht von mir, da ich dort auch keine Möglichkeit sehe.
Es gibt Programme (Windows), wo man den COM Port, Baud Rate etc. pp angeben kann um die Daten einlesen und übersichtlich darzustellen zu können, aber ich habe nichts dazu gefunden, was mir richtig zusagt. Die meisten Systeme arbeiten mit speziellen CAN-BUS zu USB Controllern, aber nichts auf Basis vom Arduino.
Jeder, der mal mit einem größeren CAN-Bus System gearbeitet hat, wird wissen was ich meine. Über der Serial Monitor wird man regelrecht mit Daten bombadiert, so dass sich dort kein richtiges Schema erkennen lässt. Da kann man Im Arduino Code noch so viel rumbauen, das wird man nie ordentlich darstellen können.

Ich kann eben schlecht sehen welchen Einfluss etwas hat, wenn ich

a) nicht weißt auf welche ID ich achten muss
und
b) wenn ich parallel von 20 anderen IDs mit Daten zugemüllt werde.

Im Serial Monitor besteht eine Zeile aktuell aus ID, Datensatzlänge und 8 Werten und das mehrfach pro Sekunde.

Mein Ziel ist es nur rauszufinden welche ID zu welcher Komponente gehört. Für die Eigentliche Auswertung der Daten brauche ich die Darstellung nicht mehr. Nur muss ich eben wissen welche Daten welcher ID ich mir greifen muss :slight_smile:

Ich habe mir jetzt mit einer Filter Funktion beholfen und schaue mir ID für ID separat an. Für meine Zwecke muss das jetzt reichen.

lengi:
....
Jeder, der mal mit einem größeren CAN-Bus System gearbeitet hat, wird wissen was ich meine. Über der Serial Monitor wird man regelrecht mit Daten bombadiert, so dass sich dort kein richtiges Schema erkennen lässt. Da kann man Im Arduino Code noch so viel rumbauen, das wird man nie ordentlich darstellen können.
....

Wie kommst du denn da drauf ?
Wenn du es nicht kannst, heißt es nicht, dass es nicht funktioniert.
Das ist nur eine Frage der Auswertung, die du entsprechend programmieren musst.

Der serielle Monitor zeigt nur dass an, was du ihm sendest. Und wie du es sendest, ist deine Arbeit.

Hi

Wenn Du einen Sensor triggerst, müssten von Diesem vermehrt Daten kommen - sofern Der nicht eh immer schwätzt!
Also entweder musst Du herausfinden, bei welcher ID sich die Daten ändern, wenn Du 'fummelst', oder welche ID vermehrt vorkommt - ebenfalls beim Fummeln.

Das sollte mit einem Arduino durchaus hinzubekommen sein - wie viele IDs spuken bei Dir rum?
Man müsste sich ja merken, welche ID die letzte Sekunde wie oft vorgekommen ist (wenn die ID nur kommt, wenn der Sensor Änderungen meldet).
Dafür musst Du Dir aber JEDES Vorkommen des Sensor merken - Das kostet Speicher.

Wenn Du Das prozentual machst, also 100 Pakete mitschneiden und die enthaltenen IDs der Anzahl der Vorkommen nach ausgeben, würde zumindest der Speicherverbrauch immer identisch bleiben - bei mehr als 20...30 IDs dürfte hier aber sehr oft eine 1-malige ID vorkommen, was den Kram nicht sonderlich lesbar machen wird.

Wen oder Was liest Du aus, was ist Dir bisher bekannt/konntest Du recherchieren?

MfG

Wäre es nicht besser, so wie bei einem Netzwerktrace die Daten zuerst zu capturen und anschliessend mit einer Importroutine z.B. mit Processing darzustellen.

Gruss Thomas