Hallo und guten Tag alle zusammen :), habe folgende Problemstellung und hoffe einer von euch kann mir dabei helfen. Folgende Problemstellung: Mein Aufbau sieh folgendermaßen aus. Ich habe eimal eine CAN-Bus-Quelle. Von dieser beziehe ich die Daten über ein Raspberry Pi. CAN-Interface initialisiert und kann nun auch CAN-Nachrichten via CAN-Utils auslesen. So weit so gut.... Habe nun einen anderen PC an den ich die Daten senden möchte. Im Prinzip 1:1 via UDP von meinem Raspberry an den PC weiterleiten/abgreifen. Die Botschaften sollen anschließen in Variablen abgelegt werden. Meine Idee war. Auf dem Raspberry eine UDP-Socket Kommunikation zu öffnen. Diese dauerhaft geöffnet zu lassen. Dann in diesem loop ein SocketCan zu öffnen und diese Daten weiter zu senden. Jedoch alles ohne Erfolg. Muss dazu sagen, dass ich mich mit C das erste mal beschäftige. Vielleicht hat ja sonst noch jemand einen Vorschlag oder evtl. schon ein Projekt gesehen in dem das umgesetzt wurde. Würde mich über Rückmeldung sehr freuen. Liebe Grüße Ben
Ben schrieb: > Auf dem Raspberry eine UDP-Socket Kommunikation zu öffnen. UDP ist keine Verbindung, und bei UDP hast Du keine Garantie, daß ein darüber gesendetes Paket auch tatsächlich beim Empfänger eintrifft. Du kannst einen UDP-Socket, der im listen-Mode betrieben wird, recht gut mit einem Briefschlitz vergleichen. Wenn Du eine Verbindung haben willst, nimm tcp. Da werden fehlerhafte Pakete wiederholt, und da bekommt die Gegenstelle mit, wenn der Empfänger bzw. Sender die Verbindung abbricht.
Danke für deine Antwort :). Ok dann habe ich mir z.B. einen TCP-Socket- Server und einen Client gebastelt. Da senden von Strings klappt wunderbar. Nun möchte ich aber all meine empfangenen CAN-Daten darüber senden und auf der andern Seite empfangen.
Ben schrieb: > Danke für deine Antwort :). > > Ok dann habe ich mir z.B. einen TCP-Socket- Server und einen Client > gebastelt. Da senden von Strings klappt wunderbar. Nun möchte ich aber > all meine empfangenen CAN-Daten darüber senden und auf der andern Seite > empfangen. Und woran hängt es nun genau? 1.) Das Gerät empfängt Daten über CAN 2.) Die Daten stehen in einem Empfangspuffer 3.) Du kopierst diese Daten in einen Sendepuffer für die andere Schnittstelle, evtl. unter Berücksichtigung anderer Begegenheiten (z.B. Größe des zu sendenden Telegramms, vielleicht Checksummen, vielleicht Lebenszeichen oder ID in das Telegramm einbauen, etc.) 4.) Dann sendest Du die Daten über Ethernet Für 1. und 4. wirst Du eh vorhandene Funktionen aus einer Bibliothek nehmen, geh ich mal von aus. Und 2. + 3. sollten jetzt nicht so das Problem sein. Also, woran hängt's?
:
Bearbeitet durch User
Wie wärs hiermit: http://lnxpps.de/openwrt/wr841/can2eth.c bzw: https://github.com/GBert/railroad/blob/master/can2udp/src/can2eth.c
:
Bearbeitet durch User
Rufus Τ. F. schrieb: > Ben schrieb: >> Auf dem Raspberry eine UDP-Socket Kommunikation zu öffnen. > > UDP ist keine Verbindung, und bei UDP hast Du keine Garantie, daß ein > darüber gesendetes Paket auch tatsächlich beim Empfänger eintrifft. > > Du kannst einen UDP-Socket, der im listen-Mode betrieben wird, recht gut > mit einem Briefschlitz vergleichen. > > Wenn Du eine Verbindung haben willst, nimm tcp. Da werden fehlerhafte > Pakete wiederholt, und da bekommt die Gegenstelle mit, wenn der > Empfänger bzw. Sender die Verbindung abbricht. Wobei UDP ja eher vergleichbar ist mit dem, was auch über CAN läuft. Das ist ja auch verbindungslos, und es werden einfach Pakete geschickt. Bei TCP kann es auch passieren, dass neuere Daten vorhanden sind, aber vom Sender zurückgehalten werden, bis die alten (ggf. gar nicht mehr interessanten) Daten übertragen wurden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.