Aufwand für CAN-Sniffer

#6556286
Lesenswert?

Hallo zusammen,
ich habe folgende Anforderung, aber leider mit CAN keinerlei 
Erfahrungen. Gegeben sind zwei CANs:
- CANOpen -Bus
- CAN mit J1939
Auf beiden soll gesniffert werden, um spezielle Datenpakete 
herauszufischen und diese auf einem anderen Weg weiterzuleiten. Senden 
ist nicht notwendig und soll hardwaretechnisch unterdrückt werden. Ich 
würde gerne einfach nur mitlesen und vorgegebene Bitmuster erkennen und 
abgreifen.
Vorhanden ist ein LPC1830-FreeRTOS-System mit 2 UARTs. An denen könnten 
2 Transceiver (z.B. MCP2551) angeschlossen werden.
Genügt dies, um die heraus zu lesenden Records zu erkennen oder muss 
jeweils das komplette Protokoll implementiert werden?
Ist es sinnvoll oder notwendig, zusätzlich je einen CAN Controller (z.B. 
MCP2515) dazwischen zu schalten?

Vielleicht kann mir jemand von den CAN-Fachleuten hier etwas 
Orientierung geben. Wie würdet ihr vorgehen?

Danke!
Gast #6556372
Lesenswert?

Michael B. schrieb:
> Vorhanden ist ein LPC1830-FreeRTOS-System mit 2 UARTs. An denen könnten
> 2 Transceiver (z.B. MCP2551) angeschlossen werden.
> Genügt dies, um die heraus zu lesenden Records zu erkennen oder muss
> jeweils das komplette Protokoll implementiert werden?
> Ist es sinnvoll oder notwendig, zusätzlich je einen CAN Controller (z.B.
> MCP2515) dazwischen zu schalten?

Meinst du ernsthaft du kannst einen MCP2551 an einen UART anschließen? 
Der LPC1830 hat 2 CAN-Controller, also auf keinen Fall sind da noch 
externe Controller nötig. Wie du das was du empfängst weiter 
transportieren willst, hast du auch noch nicht verraten. Vom Prinzip her 
besteht jede Nachricht ja nur aus einer Id und 0-8Byte Daten. Die 
spannende Frage ist halt ob du schon Ahnung vom konkreten Protokol hast 
oder nicht. Das reicht von einfach bis ziemlich komplitiert. Willst du 
ein Firmwareupdate über CAN belauschen und interpretieren ist das was 
anderes als wenn in einer Nachricht mit einer bestimmten ID simple 
Sensorwerte übertragen werden.
Wenn du hier mit 0 Ahnung einsteigst, würde ich wenigstens einen 
USB-CAN-Adapter mal kaufen um das Henne-EI-Problem zu umgehen.
#6556403
Lesenswert?

Michael B. schrieb:
> Vorhanden ist ein LPC1830-FreeRTOS-System mit 2 UARTs. An denen könnten
> 2 Transceiver (z.B. MCP2551) angeschlossen werden.

UART ist nicht CAN! Die Transceiver müssen schon an die CAN-Pins CANx-RD 
und CANx-TX angeschlossen werden.

> Genügt dies, um die heraus zu lesenden Records zu erkennen oder muss
> jeweils das komplette Protokoll implementiert werden?

Das reicht so aus. Allerdings muss da trotzdem noch einiges zum CAN 
programmiert werden.
#6556421
Lesenswert?

Danke, das hilft mir tatsächlich schon weiter. RX und TX habe ich 
tatsächlich so verstanden, dass man da mit UART ran gehen kann und die 
Bits geliefert bekommt, die auf dem CAN unterwegs sind. Wie gesagt, 
keine Ahnung, soll aber was dazu sagen...
Von den beiden CAN-Ports im LPC1830 ist nur einer nutzbar, beim zweiten 
sind die Ports bereits anders belegt. Weiterhin weiß ich auch nicht, ob 
mit der dafür angegeben CAN 2.0 Spezifikation auch CANOpen und J1939 zu 
machen ist.
Ja, es geht um Sensorwerte, angeblich reicht ID und data aus.
Zum Hintergrund: Bei einer Baumaschine werden bisher die Daten per 
USB-Stick gesammelt und von Hand in eine Zentrale gebracht. Andererseits 
gibt es ein GPRS/LTE-Funkmodul mit LPC1830 (bisher ohne CAN), das sich 
bidirektional mit der Zentrale verbinden könnte. Das sollte dann "auf 
Zuruf" mit dem Sniffern anfangen, die ausselektierten Frames übertragen 
und auf Kommando dann wieder aufhören können. Zu prüfen ist der Aufwand 
für die Anbindung.
Meine UART-Illusion war, dass ich dort über die SIO den Bitstream 
bekomme und diesen dann nach den gewünschten IDs absuche. Ohne das 
Protokoll als ganzes zu implementieren. Wahrscheinlich zu naiv, oder?
Gast #6556429
Lesenswert?

Kauf dir ein PEAK CAN und lerne erstmal den Protokollaufbau kennen.

Schritt zwei ist dann die Implementierung auf dem µC.

Den Peak CAN brauchst du auch zum debuggen, wenn es auf dem µC mal nicht 
so läuft ;).
Gast #6556448
Lesenswert?

Michael B. schrieb:
> Ja, es geht um Sensorwerte, angeblich reicht ID und data aus.

Wenn du die eine odere mehrerer IDs schon kennst ist es relativ trivial.

Nochmal (und zu letzten mal): Wie sollen denn die Daten wohin geschickt 
werden? UART, Ethernet, WLAN oder was weiss ich? Übers Internet?
Da wird dann wohl auch die Hauptaufgabe drin liegen. Das bischen CAN ist 
da nur Nebensache. Ohne weitere Infos keine Hilfe.
#6556481
Lesenswert?

Sorry "temp", das Weiterleiten ist überhaupt kein Problem. Der ganze 
Teil ist fertig, es handelt sich um ein Modul, das analoge und digitale 
Eingänge sowie zwei UARTs hat, diese überwacht, Zustandsänderungen 
speichert und per GPRS/LTE an ein Gateway schickt. Das funktioniert 
alles. Im Grunde geht es darum, sowas wie einen "CAN-Sensor" daran 
anzuschießen. Für die UART ist sowas bereits implementiert: wenn 
bestimmte Zeichenfolgen darauf erkannt werden, werden diese ausgewertet 
und abgeschickt. Ich kann das gerne weiter beschreiben, aber ich wollte 
hier niemanden mit Daten belästigen, die er in diesem Zusammenhang gar 
nicht haben will.
Gast #6556497
Lesenswert?

Dann nimm halt einen weiteren µC mit 2 CAN Interfaces und konzentrier 
Dich da nur auf den CAN Teil.
Ergebnisse von dort dann per UART an den bereits vorhandenen.

Selbst son kleiner BluePill bläst am UART mit fast 1MBaud, das sollte 
reichen.

Denk dran es galvanisch getrennt zu machen CAN Transeiver floaten da so 
vor sich hin.
Damals wurde das mit DCDC-Wandler und Optokopplern gemacht, heute finden 
man wohl schon integrietre Chips.

Ein PC-CAN Interface ist empfehlenswert, bieten einige Hersteller doch 
passende Viewer - oder man schreibt sich eben einen selbst was auch 
nicht wirklich problematisch ist. (Wenn man denn GUIs programmieren 
kann)


Und es ist löblich unnützes Zeug beim Beschreiben weg zu lassen, auch 
wenn hier manche ohne alle Hintergründe keinen Rat raus lassen 
wollen/können.
#6556519
Lesenswert?

! DANKE ! Leute, ich habe jetzt Licht im Dunkeln. Werde euren 
Vorschlägen genauer nachgehen und überlegen, welche Strategie die beste 
für die vorgegebene Situation ist. Ein PC-CAN Interface und das 
Beobachten der Signale erscheint mir unverzichtbar. Allerdings wird das 
mit dieser Baumaschine wohl irgendwelche Simulatoren benötigen.
Gast #6556520
Lesenswert?

Wenn Du einen µC gewählt hast beachte etwaige Erratas, beim LPC2119 gab 
es damals bei CAN derbe Einschränkungen bzgl. gebotenen Möglichkeiten 
und deren Fehlerfreiheit.
Ich mußte dann wohl eine Empfangsqueue selber bauen weil die Hardware 
nicht zuverlässig nutzbar war.

Unterm Strich lief CAN aber absolut unauffällig solang Bitrate zu 
Kabellänge paßte.
Gast #6556612
Lesenswert?

@TO

Dein Problem sind nicht die rohen CAN Daten sondern J1939 und CANOpen - 
das sind ziemliche Protokoll-Monster (und "open" sind die nicht 
wirklich) - insbesondere da du dazu noch die jeweiligen Dictionaries der 
zu überwachenden Geräte benötigst um Daten auszulesen.

Habe soetwas ähnliches mal vor ca. 10Jahren gemacht und ohne die nötigen 
Entwicklungstools (VECTOR CANoe) war es absolut unmöglich den Software 
Stack zu entwickeln.
Gast #6556618
Lesenswert?

Thomas F. schrieb:
> UART ist nicht CAN! Die Transceiver müssen schon an die CAN-Pins CANx-RD
> und CANx-TX angeschlossen werden.

Prinzipell hast Du recht. Bei Can braucht es auch als reiner Empfänger 
den TX  um das Ack zus setzen sonst gibt es einen Fehler.

Da er aber nur passiv lauschen will, könnte es auch sinnvoll sein den TX 
am Transceiver hart auf inaktiv zu klemmen. Das hat den Vorteil, das er 
mit seiner Software den Bus nicht stören kann. Ich würde es zumindest so 
machen.
#6556648
Lesenswert?

Bentschie schrieb:
> Da er aber nur passiv lauschen will, könnte es auch sinnvoll sein den TX
> am Transceiver hart auf inaktiv zu klemmen. Das hat den Vorteil, das er
> mit seiner Software den Bus nicht stören kann. Ich würde es zumindest so
> machen.

Dafür wurden Transceiver mit Silent Mode erfunden....
Außerdem kann jeder halbwegs anständige CAN Controller onehin im Silent 
Mode betrien werden.
(Firma: MHS-Elektronik GmbH & Co. KG) #6563521
Lesenswert?

Hallo Michael

- CANOpen -Bus
- CAN mit J1939
Bist Du dir bei den Protokollen wirklich sicher ?
CANOpen stammt aus der Industrie und J1939 aus dem
Nutzfahrzeuge Bereich, zwei vollkommen unterschiedliche
Anwendungsbereiche.

J1939 ist eigentlich sehr einfach aufgebaut, bei CANopen wirds da wenn
Du aus dem SDO Verzeichnis lesen musst schon etwas komplizierter.

Infos zu J1939:
https://rbei-etas.github.io/busmaster/
https://github.com/MHS-Elektronik/J1939Display
Die beiden Programme kannst Du mit einen Tiny-CAN betreiben.

für CANopen:
https://github.com/robincornelius/CanOpenMonitor
https://github.com/CANopenNode/CANopenNode
https://canfestival.org/

Selbst ein wenig auf Github suchen, da gibt es eigentlich einiges

Wenn Du bei CANopen keine EDS Files für deine Hardware bekommst wirst Du
da nicht glücklich werden.

Grüße
Klaus
#6563534
Lesenswert?

Hallo Klaus,
ja, das ist leider die Anforderung. Es handelt sich um große 
Baumaschinen, auf denen diese beiden BUS-Systeme parallel im Einsatz 
sind. Und beide sollen gesniffert werden. Zurzeit geht es noch um 
Machbarkeit und Aufwand. Das Telemetriegerät ist vorhanden, kann aber 
kein CAN - und ich auch nicht. Aber mit Hilfe der vielen Hinweise und 
Ratschläge hier habe ich jetzt schon eine erste Vorstellung, was da auf 
mich zukommen würde.

Danke, auch an alle anderen!
Michael
(Firma: keine) #6575187
Lesenswert?

TestX schrieb:
> @TO
>
> Dein Problem sind nicht die rohen CAN Daten sondern J1939 und CANOpen -
> das sind ziemliche Protokoll-Monster (und "open" sind die nicht
> wirklich) - insbesondere da du dazu noch die jeweiligen Dictionaries der
> zu überwachenden Geräte benötigst um Daten auszulesen.
>
> Habe soetwas ähnliches mal vor ca. 10Jahren gemacht und ohne die nötigen
> Entwicklungstools (VECTOR CANoe) war es absolut unmöglich den Software
> Stack zu entwickeln.

Das meinst Du nicht wirklich. Ich habe 20 Jahre lang Stacks für CANOpen,
DeviceNet und SAEJ1939 entwickelt und hatte nie mehr als einen 
Peakadapter.
Diese ganze Vectorgelumpe braucht man wirklich nicht

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren