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?????
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.
Danke, wie lässt sich so ein Protokoll in C# beschreiben?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.