Forum: PC-Programmierung C# bestimmtes Byte aus Sting-Array auslesen(rs232)


von Alex (Gast)


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?????

von Peter II (Gast)


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.

von Alex (Gast)


Lesenswert?

Danke, wie lässt sich so ein Protokoll in C# beschreiben?

von bluppdidupp (Gast)


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

von Peter II (Gast)


Lesenswert?

Alex schrieb:
> Danke, wie lässt sich so ein Protokoll in C# beschreiben?

das Protokoll ist doch durch die Daten vorgegeben, diese musst du nur 
ein C# umsetzen.

Da du aber nicht schreibst wie die Daten aufgebaut sind, kann hier 
niemand weiter helfen.

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.