C# bestimmtes Byte aus Sting-Array auslesen(rs232)

Gast #2780080
Lesenswert?

Ich brauche Hilfe.Es gibt ein Problem mit Datenübertragung zwischen PC 
und Atmega8 per Serailport. Eins String “Text! “ mit Funktion:
private void serialPort1_DataReceived(object sender, 
System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            RxString = serialPort1.ReadExisting();
            this.Invoke(new EventHandler(DisplayText));
        }
empfangen
und erscheinen lassen im Textfeld mit Funktion:
private void DisplayText(object sender, EventArgs e)
        {
            textBox1.AppendText(RxString);//String empfangen
        }

funktioniert ohne Fehler.

Aber wenn ich ein bestimmtes Byte auslesen will, dann kommt es oft zum 
Fehler. Es wird falsches Byte ab und zu ausgelesen.
Ich verwende folgende Funktionen:
Empfangen:
private void serialPort1_DataReceived(object sender, 
System.IO.Ports.SerialDataReceivedEventArgs e)
        {
             serialPort1.Read(readbyte1,0,6)
           this.Invoke(new EventHandler(DisplayText));
        }
Erscheinen lassen:
private void DisplayText(object sender, EventArgs e)
        {
            richTextBox1.AppendText(readbyte1[1].ToString());

        }

Array radbyte1 wird mit char[] readbyte1 = new char[6]; deklariert.


Was ist falsch?????
Gast #2780090
Lesenswert?

Dir fehlt eien Synchronisierung.

Wenn du immer 6bytes liest und es einmal zu einen versatz kommt, dann 
liest du immer die falschen daten aus. Du brauchst einen Anfang und Ende 
der Daten (ein Protokoll) sonst wird das alles nichts.
Gast #2780701
Lesenswert?

Ich verwende immer sowas auf Sender-Seite:

Byte 0: Startbyte (0x02)
Byte 1: Anzahl Nutzdaten-Bytes
Byte 2 bis Byte x: Nutzdaten
Byte x+1: CRC8 über Nutzdaten

Auf Empfänger-Seite:
- Daten wegschmeißen bis ein Startbyte kommt
- Feld mit Nutzdaten-Länge lesen
- Nutzdaten und CRC lesen
- CRC prüfen
- bei CRC-Fehler: Startbyte am Anfang des Puffers wegschmeißen und von 
vorne beginnen

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