Frage von shoas, 169

Woher kommt der Übertragungsfehler, den ich erhalte, wenn ich ASCII Zeichenpakete über UHF Funk von einem Funkmodem an das andere sende?

Ich möchte Daten von einem Satel Funkmodem an ein Anderes senden. Ich schliesse beide Funkmodems über COM an meinen Computer und sende über mein Tranceiver Funkmodem über Saterm Daten raus und empfange diese auf meinem Anderen Funkmodem. Die Daten kommen eigentlich korrekt an, auch wenn ich einzelne Zeichen sende kommen diese durchgehend fehlerfrei an. Wenn ich nun aber "Pakete" bilde, indem ich mindestens 10 Zeichen kopiere und zusammen sende bildet das Receiving Funkmodem einen Fehler ab. Dieser fehler ist häufig der gleiche und immer ziemlich am Anfang des "Pakets" (Siehe Grafik).

Daten: Sendeleistung 100mW, beide Funkmodems in einem Raum Baudrate, Spacing und Frequenzen sind bei beiden Funkmodems gleich konfiguriert.

Beide Funkmodems sind gleich konfiguriert. zwischen meinem receiving Funkmodem und meiner COM Schnittstelle hängt ein MAX3232, ein Pegelwandler von CMOS auf TTL.

Hat jemand eine Idee, was mein Fehler sein könnte?

Unter diesem Link eine Dokumentation des Problems und der wichtigen Schritte bei der Problemanalyse.

Vielleicht hat ja irgendjemand eine Ahnung was das Probelm sein könnte.

http://www.file-upload.net/download-11301451/Forumbeitrag-2.pdf.html

Vielen Dank und beste Grüße,Shoas

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von dalko, Community-Experte für Elektronik, 38

Hallo shoas,

Welches Datenprotokoll verwendest du?

Wenn du z.B. RS232 verwendest, also eine serielle Datenübertragung von Wörtern gebildet aus 5 bis 9 Datenbits zuzüglich Stopp-Bit(s), wobei ein Wort immer nur ein ASCII-Zeichen sein kann, müsste deine Datenübertragung funktionieren.

Mehrere ASCII-Zeichen zusammenzufassen und als Block zu übertragen, funktioniert nicht, denn die Fehlerkontrolle funktioniert immer nur auf ein Zeichen bezogen. Wenn du mehrere Zeichen als Block überträgst, kann die implementierte Redundanz mit Fehlerkorrektur nicht erkennen, auf welches Zeichen im Datenblock sich der Fehler bezieht.

Serielle Datenübertragung, egal ob über Leitung oder Funk bedeutet immer die Übertragung von einem Zeichen nach dem nächsten, eingebettet in eine definierte Anzahl von Start-, Stopp- und Paritybit(s).

Sender und Empfänger arbeiten nicht synchronisiert, also asynchron. Bei beiden Seiten ist zwar die Baud-Rate gleich eingestellt, aber nur das Startbit wird detektiert, anschließend läuft jede Seite mit der eigenen Geschwindigkeit, wobei nur wenige Prozent Abweichung verkraftet werden können. Bereits beim nächsten Startbit erfolgt die Korrektur, falls die Geschwindigkeiten auf beiden Seiten nicht 100%ig gleich war.
Wenn du jetzt einen längeren Datenblock überträgst, ist die Zeit zu lang bis zum nächsten Start-Bit und beide Seiten können in ihrem Takt so weit auseinanderdriften, dass eine saubere Detektion aller Zeichen im Datenblock nicht mehr gewährleistet ist.

Da ich aber nicht weiß, was du da genau machst, wäre es hilfreich, deine gewünschte Art der Datenübertragung genau zu beschreiben:

  • Welche Wort-Synchronisation verwendest du?
  • Welches Protokoll?
  • Wie korrigierst du Übertragungsfehler?
  • Wie funktioniert der Handshak?
  • Ist die Funkkommunikation bidirektional?
  • Wie sorgst du dafür, dass Anfang und Ende eines jeden Datenwortes pro ASCII-Zeichen innerhalb des Datenblocks von bis zu 10 Zeichen sauber erkannt werden können?

Ohne diese Info stochere ich leider etwas im Nebel herum.

Grüße, Dalko

Kommentar von shoas ,

Hallo Dalko,

Ich verwende RS-232. Handshaking: CTS Buf State. Error Correction: OFF. Ich sende auf der Frequenz 408.57500 MHZ. Auf einer Seite sitzt ein Transeiver auf der anderen ein Receiver, also nicht bidirektional, würde ich sagen. :)

Ich will RTK Korrekturdaten für GPS Empfänger über Funk weiterleiten. Ich hatte gedacht, diese Daten werden als Pakete über Funk gesendet, da mein GPS Empfänger mit einem Tranceiver (gleiche Frequenz, gleicher Sender, gleiche Config) in den RTK Zustand gelangt, also die Daten korrekt ankommen, mein Gerät mit den Daten des Funk Receivers den ich verwenden möchte allerdings nichts anfangen kann.
Einzelne Zeichen empfängt mein Receiver korrekt, das habe ich mit dem Loopbackaufbau wie anfangs beschrieben herausgefunden, es geht nur um Pakete. Aber vielleicht ist auch hierbei iwo der Denkfehler.

Kann ich mit einer nichtbidirektionalen Verbindung überhaupt Pakete senden, oder geht das nur mit 2 Tranceivern?

Danke für eure Antworten bis dahin!

Gruß Tobi

Kommentar von shoas ,

Unter diesem Link eine Dokumentation des Problems und der wichtigen Schritte bei der Problemanalyse.

Vielleicht hat ja irgendjemand eine Ahnung was das Probelm sein könnte.

http://www.file-upload.net/download-11301451/Forumbeitrag-2.pdf.html

Kommentar von dalko ,

Ich habe noch keine Erklärung gefunden und bin seit gestern dabei, nochmals Grundlagen aufzufrischen.

Außerdem habe ich bei http://www.mikrocontroller.net/ einen Thread gefunden, des sich mit einem ähnlichen Problem beschäftigt. Ich bin verschiedenen Hinweisen nachgegangen und versuche zu verstehen, ob sie bei deinem Problem eine Erklärung liefern können, bin aber noch nicht durch mit dem Stoff.

Ich melde mich später bzw. am Wochenende und eventuell zwischendurch, wenn ich noch eine Frage habe. Bis dann.

Kommentar von dalko ,

Schau dir mal diesen Thread an:

http://www.mikrocontroller.net/topic/221007

Das Thema lautet

Einfaches RS232 "Protokoll" entwerfen um Datenpakete zu senden

und es werden viele Möglichkeiten diskutiert, Daten per Funk zu übertragen und wie es richtig gemacht wird.

Überprüfe deine Vorgehensweise und vergleiche sie mit den beschriebenen Lösungsvorschlägen. Ich bin mir sicher, dass du Hinweise finden wirst, was auch immer du bisher nicht berücksichtigt hast.

Ich bin noch am Überlegen, dieses Problem beschäftigt mich so sehr, dass ich sogar heute Nacht von wild gewordenen Datenprotokollen geträumt habe, die sich gegenseitig Bits und Bytes weg-gefressen haben. Zum Schluss haben sie sich zusammengerauft und mich gemeinsam verfolgt, bis sie mich am Fuß erwischt haben.

Dann bin ich aufgewacht und habe festgestellt, dass mein Hund gerade genüsslich auf meinem großen Zeh herumkaute.

Grüße, Dalko

Kommentar von dalko ,

Hier ein Funkmodul zum Aufbau einer hochwertigen bidirektionalen Funkübertragungsstrecke. Ab Seite 4 wird das Datenprotokoll beschrieben:

http://www.funkmodul.com/funkmodule/transceiver_daten/RT868F5.pdf

Hier eine Studienarbeit, die an der Technischen Universität Clausthal verfasst wurde. Sehr interessant!

http://techwww.in.tu-clausthal.de/site/Projekte/Datenfunk/Studienarb_WeiShiXinli...

Wenn du auf beiden Seiten Transceiver verwenden könntest, also bidirektional kommunizierst, würde es viel einfacher sein, Fehler zu erkennen und zu korrigieren.

Damit du deine Daten nach der Übertragung auf Richtigkeit überprüfen kannst, bleibt dir nichts anderes übrig, sie entsprechend zu "verpacken". Eventuell reicht das nicht aus und du musst weiteren Aufwand betreiben (Vorwärtskorrektur, Sendewiederholung...)

Bei der sicheren Übermittlung von Text kommst du meiner Meinung nach nicht an einem Protokoll vorbei, das mit Quittierung arbeitet und verlorengegangene Fragmente wiederholen kann.

Zumindest ein mehrmals wiederholtes Senden der Daten und ein  Vergleich der empfangenen Pakete im Empfänger mit einer entsprechenden Auswertung wäre hilfreich und könnte Fehler vermeiden.

Wahrscheinlich musst du die Daten etwas ändern. Du kannst nicht Zeichen senden mit 4 oder 5 gleichen Bits in Folge, da ist es sehr wahrscheinlich, dass es zu Störungen kommen kann. Ich erinnere mich an den Manchester-Code, in dem jedes Bit Nutzdaten in 2 Bit (10 oder 01) Sendedaten umgewandelt werden, um häufige Bitwechsel zu erzeugen. Das würde die Fehleranfälligkeit mit Sicherheit reduzieren

https://de.wikipedia.org/wiki/Manchester-Code

Weiter bin ich noch nicht, vielleicht hat dir die bisherige Info schon helfen können?

Kommentar von shoas ,

Hey Dalko,

Vielen vielen Dank für deine Mühen !!!
Sehr entgegenkommend!

Ich werde mir die Seiten mal anschauen und meine Vorgehensweise überprüfen. :)
Dass ich von dem ganzen Spaß träume, könnte mir auch noch passieren, wenn ich damit nicht bald fertig werde, sollte ich im Rahmen meiner Bachelorarbeit endlich bald zum Laufen bringen ._.

Ich melde mich später, ob ich was gefunden habe.
Beste Grüße

Shoas

Kommentar von shoas ,

Also, mein Problem bei der ganzen Sache is, dass das mit einem Tranceiver - Receiver System funktionieren sollte, da ich nur Platz für einen Receiver in meinem Gerät habe. Da die Datenweiterleitung über Funk bei einem System mit zwei Tranceivern, wo aber einer nur als Receiver genutzt wird, in anderen Geräten hier schon funktioniert, müsste es in meinem Fall meiner Meinung nach auch funktionieren. :(
Beim Aufbau mit 2 Tranceivern - der funktioniert - ist keine Error Correction eingeschalten und es werden auch keine bestimmten Verpackungsverfahren genutzt.
Wenn ich mit meinem Tranceiver sende wie bisher und am Ende der Funkstrecke einen Receiver UND einen Tranceiver zum empfangen nutze, beide gleich Konfiguriert (Tranceiver keine Error Correction und gleiches Handshaking), dann kommt die Nachricht beim Tranceiver korrekt an, bei meinem Receiver aber nicht...

Die Hersteller Firma ist auch schon kontaktiert und grade an dem Problem dran, mal sehn ob die was rausbekommen..

Gruß
Shoas

Antwort
von techno90, 46

ich wünschte ich könnte dir helfen, aber klingt echt heavy.. Hast du mal getestet bis zu wievielen Zeichen das Senden funktioniert? Also ob kleinere Pakete eventuell noch durchkommen?

Expertenantwort
von realistir, Community-Experte für Elektronik, 16

Fehlermöglichkeiten gibt es bei solchen Sachen etliche.

Wie du wissen könntest sind in den ASCII Zeichen nicht nur Buchstaben und Zahlen, sondern auch Steuerzeichen. Somit kann eventuell dein Modem etwas ganz anderes aus einem Steuerzeichen machen als du meinst, bzw nicht bedacht hast.

Ferner ist doch eines ganz klar, wenn du nur ein Zeichen sendest, gibt es einen definierten Anfang und ein definiertes Ende.

Ich frage mal ein woher soll dein Empfänger wissen, wann die Sendung zu Ende ist, wenn es keinen definierten Anfang und kein definiertes Ende gibt.

Okay, du gehst davon aus, die Baudrate passt, das Datenformat passt, also ist egal wie lange und was gesendet wird. Würde das ganze über eine Drahtverbindung laufen, ginge das vielleicht noch so einfach, weil da kaum Störungen rein kämen.

Über Funk jedoch muss das Ganze anders ablaufen. Auf welcher Frequenz läuft denn das ab und welche Geräte funken auf der gleichen Frequenz oder in der Nähe? Bedenke, ein kurzer Störimplus bewirkt solche Übertragungsfehler, zumal der Empfänger den Takt der Baudrate nur aus den empfangenen Zeichen nachbilden kann! Wird die Übertragung gestört, ist das Ergebnis nicht mehr das was gesendet wurde.

Du müsstest definierte Pakete schicken. Erstmal nur 10 gleiche Zeichen damit sich der Empfänger syncronisieren kann, dann ein bzw zwei Zeichen das die Menge der übertragenen Bytes definiert. Dann die zu übertragende Nachricht, danach eine Prüfsumme, damit der Empfänger errechnen kann, ob seine mit gerechnete Prüfsumme der übertragenen entspricht. Wenn ja, kann die Übertragung als gelungen und Fehlerfrei interpretiert werden. Ansonsten müsste der Empänger zurück melden, Prüfsummenfehler, bitte Sendung erneut schicken.

Es müsste also nicht nur ein Sender und ein Empfänger geben, sondern zwei Transeiver, um es genauer, störsicherer zu machen.

Verwende vorläufig mal eine viel höhere Taktrate. Mehr als 9600 Baud, schau wie es sich damit verhält.

Antwort
von techno90, 31

Ich hab dich lieb <3

Keine passende Antwort gefunden?

Fragen Sie die Community