Hi, ich habe jetzt kein konkretes Projekt, aber die Frage interessiert dennoch: Angenommen ich habe einen Sensor dessen Werte laufend in einem µC gemessen und über die serielle Schnittstelle (RS-232) an einen Computer gesendet werden...Auf diesem Computer läuft eine Software, welche die empfangenen Werte für die weitere Berechnungen und Entscheidungen nutzt. Fehlerhaft empfangene Werte könnten z.B. einen Alarm auslösen. Empfielt es sich bei solchen Anwendungen generell irgendwelche Fehlerkorrekturen auf höheren Schichten zu implementieren, um Datenübertragungsfehler bei der seriellen Übertragung vorzubeugen? Bei RS-232 gibt es ja das Parity-Bit, aber ist das in der Praxis ausreichend, um Übertragunsfehler sicher zu erkennen? Ich habe mal in einem Artikel über Nachrichtentechnik gelesen, dass einzelne Fehlerkorrekturmechanismen auch nicht für alle Fehlerarten gleich gut geeignet sind und das je nach verwendeter Übertragunstechnik und Umfeld die tatsächliche Fehlerart stark variiert. Wie würde man so etwas also professionell und so einfach wie möglich lösen, wenn man alle 100 ms einen Messwert von einem µC über 10 Meter RS-232 an einen Computer senden möchte? Daten in Paketen versenden, die wiederum mit CRC auf ihre korrektheit überprüft werden? Oder ist die serielle Schnittselle von der Funktionsweise her so robust, dass so etwas nur selten berücksichtigt werden muss?
Denkbar ist alles von einfacher Paritätsüberwachung duch die Hardware über blockweise Übertragung mit CRC bis blockweise Übertragung mit Fehlerkorrektur (ECC). Außerdem gibt es verschiedenen serielle Übertragungsverfahren: RS232C arbeitet mit definierten Spannungen und ist daher empfindlich für Einstreuungen, andere Verfahren, z.B. RS422 arbeiten mit definierten Strömen und sind deutlich robuster. Was man nimmt, hängt von der Umgebung ab, in der sich die Übertragung abspielt und von den Sicherheitsanforderungen.
Also erstmal gernerell. Mit Sicherheitsmechanismen kann man Fehler nicht vorbeugen sondern nur erkennen und dann korrigieren. Der Ablauf für eine sicherer Übertragung ist wie folgt: 1.) Über welche Entfernungen und mit welcher Datenrate willst Du übertragen bzw. wie ist das Störumfeld an den Leitungen (entsprechende Schirmung) Es kann dann zum Beispiel sinnvoll sein, RS485 oder RS422 statt RS232 zu benutzen, das heißt Differnzialpegel bei der Übertragung. 2.) Egal welche Art von Daten du dann überträgst, das ändert nichts an der Fehleranfälligkeit. Zum Erkennen von Fehlern kannst Du mehrere Mechanismen verwenden, wie z.B. Paritybit, Checksumme etc. 3.) Fehlerkorrektur durch erneutes senden des Datenstrings und evtl. Timeout Funktion. Falls dieser Fehler also mehrmals hintereinander auftritt, heisst das, daß irgendwas mit dem physikalischem Übertragungsweg etwas nicht stimmt. Wie Du schreibst, alle 100ms auf 10m Distanz einen Messwert. Das heisst 10x /sek einen Messwert. Da kannst Du ja mit Deiner Datenübertragungsrate sehr weit runter gehen. Selbst mit 1200 baud überträgst Du ca. 100-120 Bytes pro Sekunde. Dirk
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.