Forum: PC-Programmierung CAN to UDP senden


von Ben (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Ben (Gast)


Lesenswert?

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.

von HerrGott (Gast)


Lesenswert?

Daun mochs hoid und sempad ned herum.

von Mark B. (markbrandis)


Lesenswert?

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
von Gerd B. (bertr2d2) Benutzerseite


Lesenswert?


: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

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
Noch kein Account? Hier anmelden.