UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

Bereich für alle Themen rund um Modellbahn-Software, sowie der nötigen Hardware (PCs, Bildschirme, etc.).
Antworten
Benutzeravatar

Threadersteller
Ixam97
InterRegio (IR)
Beiträge: 192
Registriert: Mo 13. Jan 2014, 16:55
Nenngröße: H0
Stromart: digital
Steuerung: MS1 + 2, Rocrail, Banana Pi
Gleise: K-Gleis

UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#1

Beitrag von Ixam97 » So 17. Jul 2016, 19:30

Hallo allesamt,

heute möchte ich euch gerne mal ein kleines Nebenprojekt vorstellen, dass ich diesen Nachmittag mal eben zusammen geschustert habe (in Vorbereitung auf meine "Einführung in das Programmieren"-Klausur :fool: ). Wie der Titel schon sagt handelt es sich um einen bequemen CAN-Monitor für Windows (ein dickes Sorry an die UNIX-Nutzer unter uns, aber damit kenne ich mich leider nicht so sehr aus :oops:), der die UDP-Pakete aus dem Netzwerk fischt und etwas aufbereitet darstellt. Aber seht selbst:

Bild

Natürlich wird dafür ein CAN zu UDP Interface benötigt. Das Programm hört einfach den entsprechenden Port ab und stellt das ganze dann für den Menschen leserlich dar. Zusätzlich werden die CAN-Frames in einer Log-Datei abgelegt, die Erklärungen dazu jedoch (noch) nicht.
Das ganze ist noch im Anfangsstadium (Arbeit von einem Nachmittag :D ) und nur einige wenige Befehle sind in so ausführlicher Erläuterung einprogrammiert wie auf dem Screenshot. Aber das kommt alles noch mit der Zeit.

Falls ihr den Monitor mal selber ausprobieren wollt, hier könnt ihr es euch herunterladen: CAN-UDP-Monitor. Um einen Trace in die Zwischenablage zu kopieren müsst ihr oben auf den Fensterrahmen einen Rechtsklick machen und [Bearbeiten] > [Markieren] auswählen. Dann könnt ihr mit der linken Maustaste den gewünschten Text markieren und mit einem Rechtsklick wird das Markierte in die Zwischenablage kopiert.

Falls ihr noch irgendwelche Ideen, Vorschläge oder Wünsche habt bin ich wie immer für alles offen ;)
Zuletzt geändert von Ixam97 am Fr 9. Mär 2018, 17:26, insgesamt 1-mal geändert.
Viele Grüße und Clausthaler Glück Auf,

Maxi.
____________________________________________________

GitHub

Bild


st-oldie
InterRegioExpress (IRE)
Beiträge: 303
Registriert: Di 22. Dez 2009, 15:50
Nenngröße: H0
Stromart: AC
Steuerung: Analog/Digital
Gleise: K-Gleis
Wohnort: Friedberg/Hessen
Alter: 55
Kontaktdaten:

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#2

Beitrag von st-oldie » So 17. Jul 2016, 21:10

Hi Maxi,
Ixam97 hat geschrieben:heute möchte ich euch gerne mal ein kleines Nebenprojekt vorstellen, dass ich diesen Nachmittag mal eben zusammen geschustert habe (in Vorbereitung auf meine "Einführung in das Programmieren"-Klausur :fool: ). Wie der Titel schon sagt handelt es sich um einen bequemen CAN-Monitor für Windows der die UDP-Pakete aus dem Netzwerk fischt und etwas aufbereitet darstellt.
Schön. Solche Traces für den CAN Bus und für die Kommunikation innerhalb meiner Software hab ich auch bei mir integriert. Das ist für Fehlersuche oder Verfolgen des Ablaus sehr praktisch.
Ixam97 hat geschrieben:ein dickes Sorry an die UNIX-Nutzer unter uns, aber damit kenne ich mich leider nicht so sehr aus
Das wäre kein Problem. Mit dem bei mir vorhandenen Code kann ich bei Bedarf recht schnell ein ähnliches Programm für Linux erstellen. Alle Teilprobleme sind ja in meinem Softwarepaket schon vorhanden. Als wenn Interesse besteht, bitte Bescheid geben. Dann bau ich auch einen Trace für Ethernet zusammen.
Ixam97 hat geschrieben:Natürlich wird dafür ein CAN zu UDP Interface benötigt. Ich verwende dafür einen BananaPi mit Gerds Software, aber das sollte auch genauso gut mit einer CS2 funktionieren.
Das ganze sollte auch mit meiner Software laufen. Es wird ja nur der Netzwerk Traffic getract.
Ixam97 hat geschrieben:Zu beachten beim Betrieb mit der CS2.exe: Ein gleichzeitiger Betrieb von beidem ist nur möglich, wenn unterschiedliche Ports verwendet werden. Ich habe das so gelöst, dass ich auf dem BananaPi einfach ms2wifi mit dem voreingestellten Port 7655 benutze und diesen dann für den Monitor verwende.
Hast du mal getestet (mit einer CS2, nicht mt Gerds Software), ob du bei einer TCP Verbindung alle Ethernet Frames der anderen Ethernet Clients bekommst? Dann würde es reichen, eine TCP Verbindung zu öffnen und es könnten CS2.exe und der Trace parallel laufen.

Tschüß
Michael


bertr2d2
InterCity (IC)
Beiträge: 857
Registriert: Di 9. Okt 2012, 15:11
Nenngröße: H0
Stromart: digital
Alter: 51

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#3

Beitrag von bertr2d2 » Mo 18. Jul 2016, 11:14

Hallo,
Ixam97 hat geschrieben:heute möchte ich euch gerne mal ein kleines Nebenprojekt vorstellen, dass ich diesen Nachmittag mal eben zusammen geschustert habe (in Vorbereitung auf meine "Einführung in das Programmieren"-Klausur :fool: ). Wie der Titel schon sagt handelt es sich um einen bequemen CAN-Monitor für Windows der die UDP-Pakete aus dem Netzwerk fischt und etwas aufbereitet darstellt.
Respekt, was Du wieder in der kurzen Zeit gezaubert hast :gfm:
st-oldie hat geschrieben:
Ixam97 hat geschrieben:Zu beachten beim Betrieb mit der CS2.exe: Ein gleichzeitiger Betrieb von beidem ist nur möglich, wenn unterschiedliche Ports verwendet werden. Ich habe das so gelöst, dass ich auf dem BananaPi einfach ms2wifi mit dem voreingestellten Port 7655 benutze und diesen dann für den Monitor verwende.
Hast du mal getestet (mit einer CS2, nicht mit Gerds Software), ob du bei einer TCP Verbindung alle Ethernet Frames der anderen Ethernet Clients bekommst? Dann würde es reichen, eine TCP Verbindung zu öffnen und es könnten CS2.exe und der Trace parallel laufen.
IMHO ist die Idee von Michael wirklich gut: Über TCP sollten nahezu alle Frames sichtbar sein.
Aber nicht nur die CS2 beherrscht TCP - can2lan hat seit ca. 1 1/2 Jahren folgende Kommunikations-Matrix (TCP Port ist 15731 - TCP-Port 15732 ist nicht eingezeichnet):
Bild

Die Kommunikationsstruktur sollte damit der realen CS2 entsprechen.
st-oldie hat geschrieben:
ein dickes Sorry an die UNIX-Nutzer unter uns, aber damit kenne ich mich leider nicht so sehr aus
Das wäre kein Problem. Mit dem bei mir vorhandenen Code kann ich bei Bedarf recht schnell ein ähnliches Programm für Linux erstellen. Alle Teilprobleme sind ja in meinem Softwarepaket schon vorhanden. Als wenn Interesse besteht, bitte Bescheid geben. Dann bau ich auch einen Trace für Ethernet zusammen.
Noch cooler als einen Me-Too Unix-Client fände ich einen Tshark/Wireshark Dissector. Damit könnte man alle Betriebssysteme abdecken und alles bequem über die GUI anschauen bzw. mit tshark auf der Console. BTW: Tshark/Wireshark beherrschen natürlich auch SocketCAN ;-)


Gruß

Gerd


st-oldie
InterRegioExpress (IRE)
Beiträge: 303
Registriert: Di 22. Dez 2009, 15:50
Nenngröße: H0
Stromart: AC
Steuerung: Analog/Digital
Gleise: K-Gleis
Wohnort: Friedberg/Hessen
Alter: 55
Kontaktdaten:

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#4

Beitrag von st-oldie » Mo 18. Jul 2016, 13:02

Hallo,
bertr2d2 hat geschrieben:
st-oldie hat geschrieben:Das wäre kein Problem. Mit dem bei mir vorhandenen Code kann ich bei Bedarf recht schnell ein ähnliches Programm für Linux erstellen...
Noch cooler als einen Me-Too Unix-Client fände ich einen Tshark/Wireshark Dissector. Damit könnte man alle Betriebssysteme abdecken und alles bequem über die GUI anschauen bzw. mit tshark auf der Console.
Ok, war auch nur ein Angebot, weil ich das sehr schnell realisieren könnte.

Aber die Idee mit dem Wireshark Dissector ist natürlich richtig cool. Da gerate ich tatsächlich in Versuchung, mir das mal anzuschauen.

Tschüß
Michael


bertr2d2
InterCity (IC)
Beiträge: 857
Registriert: Di 9. Okt 2012, 15:11
Nenngröße: H0
Stromart: digital
Alter: 51

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#5

Beitrag von bertr2d2 » Mo 18. Jul 2016, 15:00

Hallo Michael,
st-oldie hat geschrieben:
bertr2d2 hat geschrieben:
st-oldie hat geschrieben:Das wäre kein Problem. Mit dem bei mir vorhandenen Code kann ich bei Bedarf recht schnell ein ähnliches Programm für Linux erstellen...
Noch cooler als einen Me-Too Unix-Client fände ich einen Tshark/Wireshark Dissector. Damit könnte man alle Betriebssysteme abdecken und alles bequem über die GUI anschauen bzw. mit tshark auf der Console.
Ok, war auch nur ein Angebot, weil ich das sehr schnell realisieren könnte.
Ich will da nicht den Stecker ziehen, aber ...
Aber die Idee mit dem Wireshark Dissector ist natürlich richtig cool. Da gerate ich tatsächlich in Versuchung, mir das mal anzuschauen.
das halte ich für besser (da MultiOS Unterstützung) und mind. 10x mal cooler 8) Zumal das auch in die offizielle Wireshark-Version einfließen kann, wenn Du willst. Ich denke, Du hast ja schon alles mehr oder minder zusammen und die Umsetzung sollte für einen Profi wie Dich kein Problem darstellen ;-)

Ich sehe es schon bildlich vor mir: Wireshark 2.0.5 mit Märklin CAN Unterstützung :mrgreen:

Gruß

Gerd


st-oldie
InterRegioExpress (IRE)
Beiträge: 303
Registriert: Di 22. Dez 2009, 15:50
Nenngröße: H0
Stromart: AC
Steuerung: Analog/Digital
Gleise: K-Gleis
Wohnort: Friedberg/Hessen
Alter: 55
Kontaktdaten:

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#6

Beitrag von st-oldie » Mo 18. Jul 2016, 17:20

Hallo Gerd,
bertr2d2 hat geschrieben:das halte ich für besser (da MultiOS Unterstützung) und mind. 10x mal cooler 8) Zumal das auch in die offizielle Wireshark-Version einfließen kann, wenn Du willst. Ich denke, Du hast ja schon alles mehr oder minder zusammen und die Umsetzung sollte für einen Profi wie Dich kein Problem darstellen ;-)
Mehr oder weniger zusammen stimmt, deshalb kam ja mein Angebot, das bei Bedarf auf Linux umzusetzen. Eine Umsetzung auf ein Wireshark Plugin halte ich jetzt auch nicht für so schwer.

Ich hab jetzt noch nie ein Plugin für Wireshark geschrieben. Wenn ich das richtig sehe, kann man das in C machen. Aber dann muß man wieder für die verschiedenene OSe compilieren. Das wäre dann wohl die richtige Wahl, wenn es in die offizielle Wireshak Version einfließen soll. Man kann das wohl auch in Lua programmieren, was dann die bessere Wahl wäre, wenn man das Plugin selbst verteilt.

Ich schau mir das mal genauer an.

Tschüß
Michael


bertr2d2
InterCity (IC)
Beiträge: 857
Registriert: Di 9. Okt 2012, 15:11
Nenngröße: H0
Stromart: digital
Alter: 51

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#7

Beitrag von bertr2d2 » Di 19. Jul 2016, 10:22

Hallo Michael,
st-oldie hat geschrieben: Ich hab jetzt noch nie ein Plugin für Wireshark geschrieben. Wenn ich das richtig sehe, kann man das in C machen. Aber dann muß man wieder für die verschiedenene OSe compilieren. Das wäre dann wohl die richtige Wahl, wenn es in die offizielle Wireshak Version einfließen soll. Man kann das wohl auch in Lua programmieren, was dann die bessere Wahl wäre, wenn man das Plugin selbst verteilt.

Ich schau mir das mal genauer an.
ich geb es zu :oops: - ich konnte die Finger nicht davon lassen: Lua Skript. Das tirvial.lua ist ein Pfundstück aus dem Internet, das ich als Vorlage genommen habe.

Code: Alles auswählen

# 192.168.0.182  BPi + can2lan
# 192.168.0.143  CS2.exe

tshark -X lua_script:maerklin.lua -r ../maerklin.pcap | grep -i Maerklin
  0.000000 192.168.0.143 -> 255.255.255.255 UDP Maerklin CAN (Software Version, Ping 0x31)
  3.213104 192.168.0.143 -> 192.168.0.182 TCP Maerklin CAN (S88 Event   0x22)
  3.213174 192.168.0.182 -> 192.168.0.143 TCP Maerklin CAN (Software Version, Ping 0x30)
  3.214476 192.168.0.143 -> 192.168.0.182 TCP Maerklin CAN (Bootloader CAN   0x36)
  3.254266 192.168.0.182 -> 192.168.0.143 TCP Maerklin CAN (Bootloader CAN   0x37)
  3.254344 192.168.0.182 -> 192.168.0.143 TCP Maerklin CAN (System  0x01)
  3.254417 192.168.0.182 -> 192.168.0.143 TCP Maerklin CAN (Software Version, Ping 0x31)
  3.303704 192.168.0.143 -> 192.168.0.182 TCP Maerklin CAN (Software Version, Ping 0x31)
  3.304165 192.168.0.143 -> 192.168.0.182 TCP Maerklin CAN (Bootloader CAN   0x36)
  4.227273 192.168.0.143 -> 192.168.0.182 TCP Maerklin CAN (Status Config  0x3a)
  6.239444 192.168.0.143 -> 192.168.0.182 TCP Maerklin CAN (System  0x00)
  6.239844 192.168.0.182 -> 192.168.0.143 TCP Maerklin CAN (System  0x01)
  6.240026 192.168.0.143 -> 192.168.0.182 TCP Maerklin CAN (System  0x00)
  6.270112 192.168.0.182 -> 192.168.0.143 TCP Maerklin CAN (System  0x01)
  6.270169 192.168.0.182 -> 192.168.0.143 TCP Maerklin CAN (Loco Direction 0x0b)
  6.270243 192.168.0.182 -> 192.168.0.143 TCP Maerklin CAN (Loco Velocity  0x09)
  6.271958 192.168.0.143 -> 192.168.0.182 TCP Maerklin CAN (Loco Function  0x0c)
  6.280223 192.168.0.182 -> 192.168.0.143 TCP Maerklin CAN (Loco Function  0x0d)
  6.283304 192.168.0.143 -> 192.168.0.182 TCP Maerklin CAN (Start Automatic 0x61)
  6.321094 192.168.0.143 -> 192.168.0.182 TCP Maerklin CAN (Start Automatic 0x61)
  6.331268 192.168.0.182 -> 192.168.0.143 TCP Maerklin CAN (Software Version, Ping 0x31)
  6.815662 192.168.0.143 -> 192.168.0.182 TCP Maerklin CAN (Status Config  0x3a)
  8.827629 192.168.0.143 -> 192.168.0.182 TCP Maerklin CAN (Status Config  0x3a)
Das Lua-Skript ist längst noch nicht fertig und Bedarf noch reichlich Arbeit. Von Berufswegen wollte ich das aber immer schon mal machen. Aber IMHO ist Deine/Eure Expertise in Bezug auf die Dekodierung hier willkommen.

Vielleicht hilft das Lua-Skript auch einfach zum Start in die Eigenentwicklung ...

Gruß

Gerd

Benutzeravatar

Threadersteller
Ixam97
InterRegio (IR)
Beiträge: 192
Registriert: Mo 13. Jan 2014, 16:55
Nenngröße: H0
Stromart: digital
Steuerung: MS1 + 2, Rocrail, Banana Pi
Gleise: K-Gleis

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#8

Beitrag von Ixam97 » Di 19. Jul 2016, 11:54

Hallo Michael, hallo Gerd,

hm, war mir schon irgendwie klar, dass man hier mit euch rechnen kann :lol:

Das ganze über Wireshark zu lösen ist sicherlich auch ein guter Ansatz, bin gespannt, was da am Ende bei raus kommt.
Zur Dekodierung: Was ich für sehr wichtig halte ist zu sehen, ob das Paket jetzt eine Anfrage/ein Befehl ist, oder ob das die Antwort ist, also ob das Response-Bit gesetzt ist. Dadurch kann man auf einem Blick sehen, ob auf einen Frame geantwortet wird. Und worauf ich bei meinem Programm ein Augenmerk gelegt habe: Man sieht auch sofort, was da eigentlich transportiert wird. Also nicht nur "Lok Richtung", sondern auch um welche Lok es sich handelt und in welche Richtung sie fahren soll. Grade für die Leute hier, die sich nicht so intensiv mit der Doku von Tante M auseinandergesetzt haben, sind die bisherigen Möglichkeiten, Traces zu erstellen, wohl eher eine Reihe von unübersichtlichen Hex-Zahlen. Und ich denke auch für Leute wie uns ist sowas eine immense erleichterung :lol: . Z.B. habe ich erst durch mein Programm wirklich realisiert, dass beim Einschalten der Gleisspannung auch jedes mal erneut die Gleisprotokolle freigegeben werden.

Aber was mein Progrämmchen angeht, so werde ich vermutlich bei UDP bleiben. Und das hat auch einen ganz einfachen Grund: In erster Linie habe ich das als eine Art Debugger für meine CAN-UDP-Bridge vorgesehen. An die kann man zwar an beiden Enden auch einen seriellen Monitor dranhängen, allerdings sehe ich dadurch nicht, was tatsächlich transportiert wird und was verschluckt wird (was leider immer noch manchmal vorkommt ... ). Daher so zu sagen eine "Mautstation" auf der Mitte der Brücke :lol: . Dazu bringe ich das Programm noch dazu, auf zwei Ports gleichzeitig zuzuhören und anzuzeigen, ob das Paketvon der Zentrale oder von der MS2 selber kommt.
Zuletzt geändert von Ixam97 am Fr 9. Mär 2018, 19:02, insgesamt 1-mal geändert.
Viele Grüße und Clausthaler Glück Auf,

Maxi.
____________________________________________________

GitHub

Bild


st-oldie
InterRegioExpress (IRE)
Beiträge: 303
Registriert: Di 22. Dez 2009, 15:50
Nenngröße: H0
Stromart: AC
Steuerung: Analog/Digital
Gleise: K-Gleis
Wohnort: Friedberg/Hessen
Alter: 55
Kontaktdaten:

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#9

Beitrag von st-oldie » Di 19. Jul 2016, 22:24

Hallo Gerd,
bertr2d2 hat geschrieben:ich geb es zu :oops: - ich konnte die Finger nicht davon lassen: Lua Skript. Das tirvial.lua ist ein Pfundstück aus dem Internet, das ich als Vorlage genommen habe.
...
Das Lua-Skript ist längst noch nicht fertig und Bedarf noch reichlich Arbeit. Von Berufswegen wollte ich das aber immer schon mal machen. Aber IMHO ist Deine/Eure Expertise in Bezug auf die Dekodierung hier willkommen.

Vielleicht hilft das Lua-Skript auch einfach zum Start in die Eigenentwicklung ...
Hast du Langeweile? ;-)

Nö, etwas ernster. Ich hatte noch ein paar andere Dinge zu erledigen und bei mir bleibt eher der Abend für sowas übrig. Und ich bin deshalb erst dazu gekommen, nach ein paar Beispielen zu suchen. Ich bin dann doch immer etwsa überrascht, wieviel 'Zeit andere dann doch einsetzen können.

Eigentlich könnte man jetzt meine Decodierung aus dem client_logms2 mit der Trace Funktion meiner CAN lib mit deinem Rumpf verheiraten. Und schon hat man eine fast volständige Decodierung.

Tschüß
Michael


st-oldie
InterRegioExpress (IRE)
Beiträge: 303
Registriert: Di 22. Dez 2009, 15:50
Nenngröße: H0
Stromart: AC
Steuerung: Analog/Digital
Gleise: K-Gleis
Wohnort: Friedberg/Hessen
Alter: 55
Kontaktdaten:

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#10

Beitrag von st-oldie » Di 19. Jul 2016, 22:33

Hallo Maxi,
Ixam97 hat geschrieben:hm, war mir schon irgendwie klar, dass man hier mit euch rechnen kann :lol:
Du kannst uns auch direkt ansprechen, statt zu versuchen etwas in den Raum zu stellen und zu schauen, ob jemand reagiert. ;-)
Ixam97 hat geschrieben:Das ganze über Wireshark zu lösen ist sicherlich auch ein guter Ansatz, bin gespannt, was da am Ende bei raus kommt.
Letztendlich kann sowas rauskommen, was du für Win gemacht hast oder ich für den CAN Teil. Keine Ahnung ob Gerd schon weitermacht, oder ob ich meine Dekodierung hinzufügen kann. Das hängt wohl auch davon ab, wie schnell Gerd weitermachen möchte.
Ixam97 hat geschrieben:Zur Dekodierung: Was ich für sehr wichtig halte ist zu sehen, ob das Paket jetzt eine Anfrage/ein Befehl ist, oder ob das die Antwort ist, also ob das Response-Bit gesetzt ist. ...
Also eigentlich eine vollständige Dekodierung der Message ID. Genau das, was ich bei mir auch eingebaut hab. Auch deshalb, um das verfolgen zu können. Und diese Infos kann man gut als Baum unter der Decodierung in Wireshark abbilden.
Ixam97 hat geschrieben:Aber was mein Progrämmchen angeht, so werde ich vermutlich bei UDP bleiben. ...
Das war auch nur eine Überlegung von mir. Letztendlich ist es immer die Frage, wozu man das Programm braucht.

Tschüß
Michael


bertr2d2
InterCity (IC)
Beiträge: 857
Registriert: Di 9. Okt 2012, 15:11
Nenngröße: H0
Stromart: digital
Alter: 51

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#11

Beitrag von bertr2d2 » Di 19. Jul 2016, 23:22

Hallo Michael,
st-oldie hat geschrieben: Letztendlich kann sowas rauskommen, was du für Win gemacht hast oder ich für den CAN Teil. Keine Ahnung ob Gerd schon weitermacht, oder ob ich meine Dekodierung hinzufügen kann. Das hängt wohl auch davon ab, wie schnell Gerd weitermachen möchte.
vor einiger Zeit hätte ich das Know-How für einen Dissector gut gebrauchen können - beim Märklin Protokoll war es nur ein Test, wie man so etwas prinzipiell machen könnte. Ich werde jetzt etwas anderes basteln, z.B. die Kopierfunktion via Taste habe ich noch nicht fertig. Oder den CAN-Start-Stop Buzzer mit LED-Rückmeldung, mal sehen ;-)

Du kannst "übernehmen" wenn Du möchtest - ohne Gefahr zu laufen, doppelte Arbeit gemacht zu haben. Natürlich nur bei Interesse ...

Gruß

Gerd


neo_02
Regionalbahn (RB)
Beiträge: 36
Registriert: Fr 16. Mai 2014, 21:52
Nenngröße: H0
Stromart: digital
Steuerung: ESU ECoS 2
Gleise: K

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#12

Beitrag von neo_02 » Sa 27. Aug 2016, 12:09

Vielen Dank für die Software, ich finde sie sehr praktisch. Die Anzeige an der Lok ist sehr cool, wenn es das Ganze noch mit DCC und Signalen geben würde, wäre das nochmal eine Spur hilfreicher für mein Vorhaben :D
Du hast es in C# implementiert? Muss ich beim Komplilieren irgend etwas beachten?
Viele Grüße
Daniel

Benutzeravatar

Threadersteller
Ixam97
InterRegio (IR)
Beiträge: 192
Registriert: Mo 13. Jan 2014, 16:55
Nenngröße: H0
Stromart: digital
Steuerung: MS1 + 2, Rocrail, Banana Pi
Gleise: K-Gleis

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#13

Beitrag von Ixam97 » Mo 29. Aug 2016, 19:31

Hallo,
neo_02 hat geschrieben:Vielen Dank für die Software, ich finde sie sehr praktisch. Die Anzeige an der Lok ist sehr cool, wenn es das Ganze noch mit DCC und Signalen geben würde, wäre das nochmal eine Spur hilfreicher für mein Vorhaben :D
Du hast es in C# implementiert? Muss ich beim Komplilieren irgend etwas beachten?
Was ist denn dein Vorhaben wenn ich fragen darf? Das Programm erkennt automatisch, ob eine Lok oder ein Zubehörartikel per Motorola oder DCC angesteuert wird und stellt das dementsprechend auch dar. Ob es sich bei einem Zubehörartikel nun aber um eine Weiche, eine Leuchte oder ein Signal handelt, ist aus den übermittelten Daten natürlich nicht ersichtlich. Allerdings ist die derzeitig herunterladbare Version etwas veraltet. Sobald ich wieder Zuhause bin werde ich mal die aktuelle Version hochladen.
Geschrieben ist das ganze in C#, richtig. Ob das auch auf anderen Rechnern problemlos kompiliert werden kann, kann ich dir nicht sagen, das musst du einfach mal ausprobieren. Aber die fertige exe steht ja auch zur Verfügung.
Viele Grüße und Clausthaler Glück Auf,

Maxi.
____________________________________________________

GitHub

Bild


neo_02
Regionalbahn (RB)
Beiträge: 36
Registriert: Fr 16. Mai 2014, 21:52
Nenngröße: H0
Stromart: digital
Steuerung: ESU ECoS 2
Gleise: K

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#14

Beitrag von neo_02 » Mo 29. Aug 2016, 23:24

Richtig, die grundsätzliche Anzeige funktioniert auch problemos. Ich hätte mir eine Anzeige im Stil der Lokanzeige gewünscht. Also z.B. "DCC Adresse XY Ausgang Z auf XX schalten" gewünscht. Mir geht es darum, die Funktionsweise des DCC Protokolls beim Schalten eines (Licht-)Signals nachzuvollziehen, da ich mir für die Lichtsignale einen DCC Signaldekoder mittels Arudinos (bzw. ATmega328P) bauen möchte. Natürlich kann ich das auch online nachlesen und in skizzieren, wie das angesteuert wird, nur fand ich das bisher sehr kompliziert und das Programm ist da eine wunderbare Erleichterung.
Viele Grüße
Daniel

Benutzeravatar

Threadersteller
Ixam97
InterRegio (IR)
Beiträge: 192
Registriert: Mo 13. Jan 2014, 16:55
Nenngröße: H0
Stromart: digital
Steuerung: MS1 + 2, Rocrail, Banana Pi
Gleise: K-Gleis

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#15

Beitrag von Ixam97 » So 4. Sep 2016, 14:57

Hallo Daniel,
neo_02 hat geschrieben:Richtig, die grundsätzliche Anzeige funktioniert auch problemos. Ich hätte mir eine Anzeige im Stil der Lokanzeige gewünscht. Also z.B. "DCC Adresse XY Ausgang Z auf XX schalten" gewünscht. Mir geht es darum, die Funktionsweise des DCC Protokolls beim Schalten eines (Licht-)Signals nachzuvollziehen, da ich mir für die Lichtsignale einen DCC Signaldekoder mittels Arudinos (bzw. ATmega328P) bauen möchte. Natürlich kann ich das auch online nachlesen und in skizzieren, wie das angesteuert wird, nur fand ich das bisher sehr kompliziert und das Programm ist da eine wunderbare Erleichterung.
Das ist in der aktuellsten Version schon inbegriffen. Heute Abend komme ich wieder nach Hause, dann werde ich die mal hochladen.
Soll der Signaldecoder denn per DCC oder über den CAN-Bus angesteuert werden? Mein Programm schlüsselt ja nur die CAN-Frames auf, nicht aber das DCC-Protokoll an sich. Mit den gängigen Digitalprotokollen kennen ich mich selber nicht aus, lediglich mit dem Märklin-CAN-Bus.
Viele Grüße und Clausthaler Glück Auf,

Maxi.
____________________________________________________

GitHub

Bild

Benutzeravatar

Threadersteller
Ixam97
InterRegio (IR)
Beiträge: 192
Registriert: Mo 13. Jan 2014, 16:55
Nenngröße: H0
Stromart: digital
Steuerung: MS1 + 2, Rocrail, Banana Pi
Gleise: K-Gleis

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#16

Beitrag von Ixam97 » Mo 5. Sep 2016, 13:47

Unter dem Link in meinem ersten Beitrag ist jetzt die aktuelle Version zu finden.
Viele Grüße und Clausthaler Glück Auf,

Maxi.
____________________________________________________

GitHub

Bild


lachmichkaputt
Regionalbahn (RB)
Beiträge: 39
Registriert: So 10. Apr 2016, 10:55
Nenngröße: H0
Stromart: digital
Steuerung: MS2, Telefonwählscheibe
Gleise: Märklin M (Blech)

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#17

Beitrag von lachmichkaputt » Fr 20. Apr 2018, 16:49

So einen UPD-CAN-Monitor zum CAN-Bus von Märklin hat Rainer Serwe schon vor längerer Zeit programmiert und unter www.r-serwe.de mitsamt Quellcode veröffentlicht. Das ist vom Ansatz her ganz gut gemacht und detailliert aufgeschlüsselt. Man sieht wer Befehle schickt und wer antwortet (response-Bit). Man sieht die Prio, den Befehl selber, den Hash, die UID bzw Loc-ID, die Datenlänge und auch die Daten selbst sind bei den wichtigsten Befehlen dem Protokoll entsprechend entschlüsselt. Man kann sogar testweise mit dieser Software selber Fahren und Schalten und sieht die dazugehörigen CAN-Frames gelistet. Alles lässt sich zusätzlich in einer Datei abspeichern.

Meine Wenigkeit hat sich erlaubt, diesen Monitor zu erweitern und kleinere Bugs zu entfernen. Die Erweiterung umfasst nun neben der UPD Schnittstelle per Winsock zur CS2, umschaltbar auch eine serielle Schnittstelle (RS232-FTDI bzw. USB) für die CC-Schnitte von Thorsten Mumm zur Verbindung mit einer Gleisbox.

Darauf aufbauend ist meine eigene Software-Zentrale, beruhend auf der Märklin-Gleisbox entstanden. Fahren mit MM2/DCC/MFX und Schalten mit MM, so wie das bei Märklin eben vorgesehen ist. Solcherart wird auch die Anzeige einer nebenbei angeschlossenen MS2 aktualisiert (sollte einmal erwähnt werden). Dies nur so nebenbei. Nun meine Frage:

Hat schon Jemand den Datenverkehr zwischen mehreren MS2 untereinander mit einem (seinem) CAN-Monitor analysiert? Ich meine die gegenseitige Übernahme von Loklisten, Symbolen etc. ohne CS2?

Benutzeravatar

DiegoGarcia
InterCityExpress (ICE)
Beiträge: 2388
Registriert: So 15. Apr 2007, 12:13
Alter: 104

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#18

Beitrag von DiegoGarcia » Fr 20. Apr 2018, 18:25

Evtl. hilft das hier weiter: http://mbernstein.de/modellbahn/can/bem.htm
talks are cheap, and they don't mean much ...


st-oldie
InterRegioExpress (IRE)
Beiträge: 303
Registriert: Di 22. Dez 2009, 15:50
Nenngröße: H0
Stromart: AC
Steuerung: Analog/Digital
Gleise: K-Gleis
Wohnort: Friedberg/Hessen
Alter: 55
Kontaktdaten:

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#19

Beitrag von st-oldie » So 22. Apr 2018, 22:25

Hallo,
DiegoGarcia hat geschrieben:
Fr 20. Apr 2018, 18:25
Evtl. hilft das hier weiter: http://mbernstein.de/modellbahn/can/bem.htm
Auch mein Sourcecode könnte da helfen. Wenn die mfx Anmeldung von der MS2 gemacht wird, dann holt meine Software für BBB/BPi zuerst die Loknamen und dann die Infos zu jeder Lok ab. Ich vermute mal, daß das auch von den MS2 untereinander so gemacht wird. Der relevante Code ist im client_zentrale in states.c

Im Prinzip hast du wohl das, was ich erstellt hab, nochmals nachgebaut.

Tschüß
Michael


mra
Beiträge: 6
Registriert: Do 7. Jan 2016, 18:25
Nenngröße: H0
Stromart: AC
Steuerung: CS3 - MS2 - Rocrail - Java
Gleise: Märklin C-Gleis
Wohnort: Rosenheim

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#20

Beitrag von mra » Di 8. Mai 2018, 21:06

Hi Maxi,
Ixam97 hat geschrieben:
So 17. Jul 2016, 19:30
Wie der Titel schon sagt handelt es sich um einen bequemen CAN-Monitor für Windows (ein dickes Sorry an die UNIX-Nutzer unter uns, aber damit kenne ich mich leider nicht so sehr aus :oops:), der die UDP-Pakete aus dem Netzwerk fischt und etwas aufbereitet darstellt. Aber seht selbst:
Aaalso ... ich habs auf dem Mac (Unix!) zum Laufen bekommen ... ;-)
Unter Linux gehts sicher auch ... :D

Auch, wenn ich nicht so verstehe, warum Du in einem C#-Programm so mit Pointern und Referenzen rumwirbelst :baeh:

Falls ihr noch irgendwelche Ideen, Vorschläge oder Wünsche habt bin ich wie immer für alles offen ;)
Ja - nicht nur per localhost auf CAN, sondern gleich übers Netz, bspw. an die CS2/CS3, aber das könnte ich ja auch selbst (mal) machen ...

Gr.,
Martin
--
No RISC no fun.


bertr2d2
InterCity (IC)
Beiträge: 857
Registriert: Di 9. Okt 2012, 15:11
Nenngröße: H0
Stromart: digital
Alter: 51

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#21

Beitrag von bertr2d2 » Mi 9. Mai 2018, 08:55

Hallo Zusammen,

im meiner can2udp Sammlung steckt auch ein can-monitor
der neben dem CAN Interface auch PCAP Dateien lesen kann, d.h. Aufzeichnungen die per tcpdump oder Wireshark gemacht wurden.

Gruß

Gerd


vikr
InterRegioExpress (IRE)
Beiträge: 265
Registriert: So 23. Okt 2011, 19:05
Nenngröße: H0
Stromart: AC
Steuerung: PC
Gleise: MMärklin C
Alter: 65

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#22

Beitrag von vikr » Mi 9. Mai 2018, 09:43

Hallo Gerd,
bertr2d2 hat geschrieben:
Mi 9. Mai 2018, 08:55
im meiner can2udp Sammlung steckt auch ein can-monitor
der neben dem CAN Interface auch PCAP Dateien lesen kann, d.h. Aufzeichnungen die per tcpdump oder Wireshark gemacht wurden.
:D schön, dass Du wieder mitmischt :D

MfG

vik

Benutzeravatar

Rainer Müller
InterRegio (IR)
Beiträge: 151
Registriert: Do 29. Jun 2006, 10:30
Nenngröße: H0
Wohnort: Korntal
Kontaktdaten:

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#23

Beitrag von Rainer Müller » Mi 5. Sep 2018, 17:52

Hallo Mittester,
bertr2d2 hat geschrieben:
Mi 9. Mai 2018, 08:55
im meiner can2udp Sammlung steckt auch ein can-monitor
der neben dem CAN Interface auch PCAP Dateien lesen kann, d.h. Aufzeichnungen die per tcpdump oder Wireshark gemacht wurden.
von mir noch ein paar Bemerkungen zum Betrieb des genannten CAN-Monitors im "PCAP-Modus".

Da ich die Aufzeichnungen normalerweise mit Wireshark auf dem Desktop mache, wollte ich mir den Transfer zur CAN-Analyse auf den BananaPi sparen und habe deshalb mal den CAN-Monitor auf meinem Desktop-Ubuntu ausprobiert. Also can-monitor.c und can-monitor.h dorthin transferiert und compiliert:

Code: Alles auswählen

gcc -o can-monitor can-monitor.c -lpcap
Das im Originalmakefile angegebene crc-ccitt braucht man nicht, dagegen muss man wenn "nicht gefunden"-Fehler auftauchen, evtl. noch das Paket libpcap0.8-dev nachinstallieren. Nun ist eine problemlose CAN-Analyse von PCAP-Aufzeichnungen auf dem Desktop möglich - allerdings sollte man beim Wireshark kein Interface auwählen, das mit "Linux cooked capture" aufzeichnet, dieses Format versteht der CAN-Monitor (noch ?) nicht.

Deutlich sperriger wird die Aufgabe für den Windows-Desktop. Dort fehlen viele der benötigten Headerdateien oder sind anders; dass man nur den Teil für die PCAP-Analyse betreiben will und nicht das CAN-Capture macht es wieder etwas einfacher. Aber es gibt diverse Hürden:
- die der libpcap entsprechende wpcap.dll hat ein Generationenproblem, sie versteht nur das pcap-Format und nicht das WS-favorisierte pcapng-Format (ng = new generation).
- der MS-Compiler (aus VS17) interpretiert manche Datenstrukturen anders als der gcc, das erfordert Nacharbeiten in den Headerdateien.
- wann die Einfärbecodes interpretiert oder als Text ausgegeben werden scheint noch ein Geheimnis von Windows zu sein.
Jedoch ist die Hoffnung da, dass das noch irgendwann was wird.

Zur Steigerung der Nutzerfreundlichkeit habe ich unlängst bei Gerd noch einen Änderungswunsch eingeworfen, in jeder Zeile das letzte Octett der Sender-IP anzugeben, um im Nicht-Verbose-Modus den Quellrechner aufzuzeigen. Der Vorschlag war leider, wie ich jetzt bemerkt habe, unvollständig: nicht nur bei UDP und TCP wäre mE. das sinnvoll, sondern auch bei HTTP.
Durch mein schlechtes Aufzeichnungsspezifizieren beim Wireshark bin ich auf einen zusätzlichen Wunsch gestoßen: eine neue Option -s, die bewirkt, dass nur Pakete angezeigt werden, bei denen Sender und Empfänger im gleichen Subnetz sind. Damit könnte man den CAN-Monitor dazu bringen, nicht zu versuchen, ungewollte Nach-Hause-Rufe seltsamer SW zu decodieren.


Gruß
Rainer


bertr2d2
InterCity (IC)
Beiträge: 857
Registriert: Di 9. Okt 2012, 15:11
Nenngröße: H0
Stromart: digital
Alter: 51

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#24

Beitrag von bertr2d2 » Mi 5. Sep 2018, 19:18

Hallo Rainer,
Rainer Müller hat geschrieben:
Mi 5. Sep 2018, 17:52
Hallo Mittester,
bertr2d2 hat geschrieben:
Mi 9. Mai 2018, 08:55
im meiner can2udp Sammlung steckt auch ein can-monitor
der neben dem CAN Interface auch PCAP Dateien lesen kann, d.h. Aufzeichnungen die per tcpdump oder Wireshark gemacht wurden.
von mir noch ein paar Bemerkungen zum Betrieb des genannten CAN-Monitors im "PCAP-Modus".

Da ich die Aufzeichnungen normalerweise mit Wireshark auf dem Desktop mache, wollte ich mir den Transfer zur CAN-Analyse auf den BananaPi sparen und habe deshalb mal den CAN-Monitor auf meinem Desktop-Ubuntu ausprobiert. Also can-monitor.c und can-monitor.h dorthin transferiert und compiliert:

Code: Alles auswählen

gcc -o can-monitor can-monitor.c -lpcap
Das im Originalmakefile angegebene crc-ccitt braucht man nicht, dagegen muss man wenn "nicht gefunden"-Fehler auftauchen, evtl. noch das Paket libpcap0.8-dev nachinstallieren. Nun ist eine problemlose CAN-Analyse von PCAP-Aufzeichnungen auf dem Desktop möglich - allerdings sollte man beim Wireshark kein Interface auwählen, das mit "Linux cooked capture" aufzeichnet, dieses Format versteht der CAN-Monitor (noch ?) nicht.
das Makefile sollte eigentlich funktionieren. Hier die Vorgehensweise, die gehen sollte:

Code: Alles auswählen

sudo apt-get install build-essential git libpcap-dev
cd
git clone https://github.com/GBert/railroad.git
cd railroad/can2udp/src
# Alte gcc's verstehen nicht alle pedantischen Schalter
sed 's/-fstack-protector-strong //' -i Makefile 
sed 's/-Wdate-time//' -i Makefile
make
CRC-CCITT ist gedacht um die CRCs der übertragenen Files zu überprüfen. Habe ich aber (noch) nicht implementiert.

"Linux cooked capture" höre ich zum ersten mal. Schaue ich mir mal an.
Deutlich sperriger wird die Aufgabe für den Windows-Desktop. Dort fehlen viele der benötigten Headerdateien oder sind anders; dass man nur den Teil für die PCAP-Analyse betreiben will und nicht das CAN-Capture macht es wieder etwas einfacher. Aber es gibt diverse Hürden:
- die der libpcap entsprechende wpcap.dll hat ein Generationenproblem, sie versteht nur das pcap-Format und nicht das WS-favorisierte pcapng-Format (ng = new generation).
- der MS-Compiler (aus VS17) interpretiert manche Datenstrukturen anders als der gcc, das erfordert Nacharbeiten in den Headerdateien.
- wann die Einfärbecodes interpretiert oder als Text ausgegeben werden scheint noch ein Geheimnis von Windows zu sein.
Jedoch ist die Hoffnung da, dass das noch irgendwann was wird.
Der Königsweg wäre eigentlich die Integration in Wireshark. Ich habe mal ein wenig mit Lua gespielt:
https://github.com/GBert/railroad/tree/ ... p/src/dump
Zur Steigerung der Nutzerfreundlichkeit habe ich unlängst bei Gerd noch einen Änderungswunsch eingeworfen, in jeder Zeile das letzte Octett der Sender-IP anzugeben, um im Nicht-Verbose-Modus den Quellrechner aufzuzeigen. Der Vorschlag war leider, wie ich jetzt bemerkt habe, unvollständig: nicht nur bei UDP und TCP wäre mE. das sinnvoll, sondern auch bei HTTP.
Durch mein schlechtes Aufzeichnungsspezifizieren beim Wireshark bin ich auf einen zusätzlichen Wunsch gestoßen: eine neue Option -s, die bewirkt, dass nur Pakete angezeigt werden, bei denen Sender und Empfänger im gleichen Subnetz sind. Damit könnte man den CAN-Monitor dazu bringen, nicht zu versuchen, ungewollte Nach-Hause-Rufe seltsamer SW zu decodieren.
Deine Vorschläge nehme ich gerne mit auf. Gib mir noch etwas Zeit - bin gerade mit ein paar anderen Sachen beschäftigt. Commits nehme ich natürlich auch ;-)

Gruß

Gerd

Benutzeravatar

Rainer Müller
InterRegio (IR)
Beiträge: 151
Registriert: Do 29. Jun 2006, 10:30
Nenngröße: H0
Wohnort: Korntal
Kontaktdaten:

Re: UDP-CAN-Monitor - Bequem den CAN-Bus beobachten

#25

Beitrag von Rainer Müller » Fr 7. Sep 2018, 17:42

Hallo Gerd,
bertr2d2 hat geschrieben:
Mi 5. Sep 2018, 19:18
Hallo Rainer,
das Makefile sollte eigentlich funktionieren. Hier die Vorgehensweise, die gehen sollte:
...
klar tut das, aber ich wollte auf dem Desktoprechner nur den CAN-Monitor. Den Rest lasse ich lieber auf dem BaPi.
CRC-CCITT ist gedacht um die CRCs der übertragenen Files zu überprüfen. Habe ich aber (noch) nicht implementiert.
So was in der Richtung habe ich mir gedacht ...
"Linux cooked capture" höre ich zum ersten mal. Schaue ich mir mal an.
So gings mir auch. Ich habe einmal beim Wireshark falsch geklicht und hinterher fand der CAN-Monitor nichts Brauchbares in der pcap-Datei, obwohl die Aufzeichnung im WS gut aussah. Die Analyse zeigte dann, dass der EthernetType zwei Bytes weiter hinten stand. Das wäre vermutlich einfach zu berücksichtigen, wenn man wüsste wie man erkennt, dass mit LCC-Aufzeichnung gearbeitet wurde. Aber das Feature braucht man nicht wirklich: aufpassen beim Klicken reicht auch.
Rainer Müller hat geschrieben:
Mi 5. Sep 2018, 17:52
Deutlich sperriger wird die Aufgabe für den Windows-Desktop.
Der Königsweg wäre eigentlich die Integration in Wireshark. Ich habe mal ein wenig mit Lua gespielt:
https://github.com/GBert/railroad/tree/ ... p/src/dump
Das ist natürlich auch schön - aber eine Riesenarbeit: Du musst die Decodierung usw. alles doppelt in unterschiedliche Sprachen codieren, einmal in C für die CAN-Liveanlyse und einmal als Lua-Script. Jede neue Erkenntnis zweimal einarbeiten ...
Meine Idee war da bescheidener: möglichst EIN Quelltext, der (mit ein paar #ifdef ...) alle Plattformen abdeckt. Insgesamt also eine Abwägung zwischen Schönheit und Aufwand.
Deine Vorschläge nehme ich gerne mit auf. Gib mir noch etwas Zeit - bin gerade mit ein paar anderen Sachen beschäftigt. Commits nehme ich natürlich auch ;-)

Gruß

Gerd
Nur keine Eile. Ich kann meine Änderungsvorschläge ja demnächst in den Quelltext einbringen und dir zur Verfügung stellen. Aber du solltest dir die Änderungen dann ansehen, nicht dass ich zuviel übersehe.

Gruß
Rainer

Antworten

Zurück zu „Software und Hardware“