serial UDP server

Gast #4477453
Lesenswert?
• ▲
▼
Kennt jemand von euch ein Open-Source Programm, das Daten von der 
seriellen Schnittstelle aufnimmt und über UDP versendet?
Es sollte Platform unabhängig sein, so dass man es unter Linux, Windows 
und Mac benutzen kann.

Als Beispiel könnte ein kommerzielles Programm für TCP dienen:
http://www.serial-server.net/serial-over-ip/

Hier habe ich einen UDP-Serial-Server gefunden, aber das scheint mir nur 
für den RPi zu sein:
https://github.com/AL333Z/arduino-udp-msgservice/blob/master/src/msglib/BroadcastSerialCommChannel.java
Persönliche Seite #4477467
Lesenswert?
• ▲
▼
ch schrieb:
> Es sollte Platform unabhängig sein, so dass man es unter Linux, Windows
> und Mac benutzen kann.

Das ist gerade bei der Ansteuerung serieller Schnittstellen gar nicht so 
einfach, da haben die drei nämlich sehr weit auseinanderliegende 
Vorstellungen davon, wie das geht.

Wenn Du Eigenentwicklungen nicht abhold bist, könntest Du dem hier die 
plattformübergreifende Ansteuerung der seriellen Schnittstelle 
entnehmen:

https://iftools.com/opensource/wxterm.de.php


Möglicherweise findet sich auch hier was:

https://iftools.com/opensource/ctb.de.php
Gast #4479903
Lesenswert?
• ▲
▼
Evtl. mit:
http://www.hw-group.com/products/hw_vsp/hw_vsp2_de.html
für Windows. Damit und mit "Herkules" vom gleichen Hersteller mache ich 
alles.

Aber für so eine Einfache Sache tut's auch ein kleiner Mikrocontroller 
(auch Arduino), dann bist Du

ch schrieb:
> Platform unabhängig

Willst Du einen ganzen Rechner nur dafür nutzen, oder laufen da noch 
andere Sachen drauf, und die Serielle ist virtual, oder die Datenpakete 
werden local weiterverwendet (127.0.0.1)? Sehr seltsam...

Gruss Chregu
#4480086
Lesenswert?
• ▲
▼
Naja. Wenn man auf einem PC einen Serial-zu-UDP Konverter hat, kann man 
auf dem seriellen Device einen Webserver laufen lassen, der sich vom 
Browser des PCs bedienen laesst. Das Device muss sein Protokoll nur in 
eine Webseite einpacken, was etwas Text Overhead ist. Und ueber die 
serielle Schnittstelle damit.

Geht gut. Sehr praktisch, sehr Platformunabhaengig.
#4480727
Lesenswert?
• ▲
▼
Läubi .. schrieb:
> Bei UDP hat man einfach das Problem, das die Serielle Schnittstelle
> nicht Paketorientiert ist. Also musst du entweder mit Timouts oder mit
> einem Protokoll arbeiten, weswegen es wohl sehr wenige Lösungen dafür
> geben wird wo man nicht wenigstens einen Teil selbst betragen muss.

naja, wenn man sich auf zeilen mit \n oder \r als trennzeichen einigt, 
passt das doch ganz gut in ein paket.
Ein solches Programm so zu schreiben, dass es parameterisierbar ist, ob 
es Blockweise oder Zeilenweise (mit frei konfigurierbaren 
Trennzeichen/Trennsequenz) arbeitet, sollte ein leichtes sein und halte 
ich für nicht so abwegig/speziell, dass es nicht für viele brauchbar 
wäre.
#4480741
Lesenswert?
• ▲
▼
Ich halte UDP auch für weniger geeignet. Nicht nur aufgrund der 
Problematik bezüglich der Datagrammeigenschaft, sondern auch wegen den 
fehlenden Mechanismen zur Einhaltung der Reihenfolge. Klar kann man 
diese Problematik auf der Anwendungsebene bearbeiten, aber dann würde 
ich schon fast zu TCP tendieren...
Persönliche Seite #4480805
Lesenswert?
• ▲
▼
Vlad T. schrieb:
> sollte ein leichtes sein

Mit diesen Worten fangen die Probleme an ;-)

Der Teufel steckt halt doch im Detail. Dann geht ein Paket verloren und 
nu? Reihenfolge wurde ja schon angesprochen.

Die Umsetzung auf TCP ist da sehr viel natürlicher da beides Streams von 
Bytes sind, mit Hardware-Handshake hat man sogar ein recht zuverlässiges 
Flow-Control.
Gast #4480829
Lesenswert?
• ▲
▼
Warum macht ihr es so kompliziert? Ein Datagramm pro Zeichen und gut 
ist. Was die Nichteinhaltung der Reihenfolge angeht ist es immer wieder 
erstaunlich mit wie wenig Erfahrung Leute die tollsten Sachen behaupten.

Ich habe für ein Projekt die Datenverteilung von mehreren hundert GB 
über UDP Broadcasts im LAN getestet, Fazit aus diesen Tests war das es 
in keinem (!) Fall zu einer Nichteinhaltung der Paketreihenfolge kam. 
Auch die generelle Paketfehlerrate (Nicht übermitteltes 
Paket/fehlerhaftes Paket) lag deutlich unter einem ppm.
Danach wurde Testweise mal eine Unicast UDP-Übertragung mit gleicher 
Datenmenge übers Internet getestet (knapp 20 HOPs), ebenfalls mit sehr 
geringer Paketfehlerrate (gegenüber dem LAN allerdings doch deutlich 
erhöht) und wieder ohne einem einzigen Fehler in der Reihenfolge...
Gast #4481205
Lesenswert?
• ▲
▼
>Autor: Frank Esselbach (Firma: Q3) (qualidat)
>Mit ein par Zeilen Java sollte das zu machen sein ...

Jetzt sollte es eigentlich funktionieren sagte der Entwickler .... 
danach dauerte es noch 2 Wochen ...

So ist das mit der Entwicklung: eigentlich sollte es gehen, tut es 
aber nicht.

Hier ein schönes Beispiel für ein einfaches, kleines Java-Programm, 
welches die Zeichen auf ein Textfenster ausgibt.

Beitrag "Re: Java serielle Schnittstelle mit JSSC"

Eigentlich sollte es funktionieren. Tut es auch, wenn da nicht die 
Hälfte der Zeichen fehlen würde ...
Gast #4481221
Lesenswert?
• ▲
▼
Tim Taylor schrieb:
> Ich habe für ein Projekt die Datenverteilung von mehreren hundert GB
> über UDP Broadcasts im LAN getestet, Fazit aus diesen Tests war das es
> in keinem (!) Fall zu einer Nichteinhaltung der Paketreihenfolge kam.
> Auch die generelle Paketfehlerrate (Nicht übermitteltes
> Paket/fehlerhaftes Paket) lag deutlich unter einem ppm.
> Danach wurde Testweise mal eine Unicast UDP-Übertragung mit gleicher
> Datenmenge übers Internet getestet (knapp 20 HOPs), ebenfalls mit sehr
> geringer Paketfehlerrate (gegenüber dem LAN allerdings doch deutlich
> erhöht) und wieder ohne einem einzigen Fehler in der Reihenfolge...

du kannst dich aber nunmal nicht drauf verlassen.... ich hoffe nur das 
du keine wichtigen anwendungen baust.
Gast #4481222
Lesenswert?
• ▲
▼
pp schrieb:
> Tim Taylor schrieb:
>> Ich habe für ein Projekt die Datenverteilung von mehreren hundert GB
>> über UDP Broadcasts im LAN getestet, Fazit aus diesen Tests war das es
>> in keinem (!) Fall zu einer Nichteinhaltung der Paketreihenfolge kam.
>> Auch die generelle Paketfehlerrate (Nicht übermitteltes
>> Paket/fehlerhaftes Paket) lag deutlich unter einem ppm.
>> Danach wurde Testweise mal eine Unicast UDP-Übertragung mit gleicher
>> Datenmenge übers Internet getestet (knapp 20 HOPs), ebenfalls mit sehr
>> geringer Paketfehlerrate (gegenüber dem LAN allerdings doch deutlich
>> erhöht) und wieder ohne einem einzigen Fehler in der Reihenfolge...
>
> du kannst dich aber nunmal nicht drauf verlassen.... ich hoffe nur das
> du keine wichtigen anwendungen baust.

P.S.: Warum macht man dann keinen Multicast?
Gast #4481330
Lesenswert?
• ▲
▼
>Außerdem wird da auch wieder versucht
>irgendwie Eventbasiert die Serielle Schnitstelle auszulesen

Vielleicht weißt Du es ja: Wie kann man das Programm so umschreiben, 
dass das Textfenster ohne Events ohne Zeichenverlust aktualisiert wird?
Persönliche Seite #4481410
Lesenswert?
• ▲
▼
Für diesen Anwendungsfall würde man wohl Swingworker und das publish 
Verfahren nutzen.
Für eine konkrete Umsetzung müsste man aber erst mal ein paar 
Randbedingungen festlegen, z.B. ob wirklich byteweise irgendwo was 
hingeschrieben werden soll, oder ob ein bestimmter Zeichensatz genutzt 
werden soll und was dann z.B. bei Steuerzeichen passieren soll.
Das geht dann aber etwas am Thema dieses Threads vorbei, wenn es dich 
interessiert solltest du dafür einen eigene Thread eröffnen mit einem 
konkretem Problem und kompilierbarem Beispielcode.
Gast #4485396
Lesenswert?
• ▲
▼
pp schrieb:
> du kannst dich aber nunmal nicht drauf verlassen.... ich hoffe nur das
> du keine wichtigen anwendungen baust.

Eine entsprechende Sicherung wurde im späteren Einsatzzweck noch drüber 
gelegt, es ging bei den Tests erstmal nur um eine 
Abschätzungsmöglichkeit ob weiteres Verfolgen der Idee eines Broadcast 
FTP lohnt.

pp schrieb:
> P.S.: Warum macht man dann keinen Multicast?

Bot für den geplanten Anwendungszweck keine Vorteile und wurde nicht von 
allen Geräten zufriedenstellend umgesetzt.

Jim M. schrieb:
> Dann mach das Ganze mal über WLAN. Da hast Du doppelte Pakete und
> falsche Reihenfolge ohne Ende. BTDT.

Ja, was daran liegt das bei WLAN auch UDP gesichert übertragen wird und 
bei Verlust eben wiederholt. Natürlich blöd wenn in der Zwischenzeit 
schon nachfolgende Pakete durchgekommen sind.

Le X. schrieb:
> Nur aus Interesse:
> d.h. bei UDP wär es dann Sache der Applikation, das zu handlen?

Ja, hier gibts dann aber immer die Abwägung ob nicht doch TCP die 
bessere Idee wäre. Meiner Meinung nach lohnt sich der UDP Ansatz nur, 
wenn man eine Broadcast/Multicast Funktionalität braucht, sehr geringe 
Ressourcen zur Verfügung stehen oder keinen vollständigen IP-Stack zur 
Verfügung hat.

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