Hallo Leute,
Ziel: Ich möchte Daten von einem Mikrocontroller zu meiner Software in
C# geschrieben übertragen.
Problem:
Ich kann eine unterschiedlich lange Anzahl an Zeilen einlesen, aber dann
ab >200(Variiert manchmal auch erst bei 800) werden keine Daten mehr
eingelesen, obwohl noch welche gesendet werden. Kürzere Abschnitte (<150
Zeilen) werden jedoch vollständig empfangen.
Wenn ich per HyperTerminal zugreife habe ich keine Probleme die Daten zu
empfangen, egal mit welcher Länge.
Hintergrund
Code:
1 | void OnDataReceived(object sender, SerialDataReceivedEventArgs args)
|
2 | {
|
3 | if (this.IsOpen)
|
4 | {
|
5 | try
|
6 | {
|
7 | string data = this.realPort.ReadLine();
|
8 | if (this.DataReceived != null)
|
9 | {
|
10 | this.DataReceived(data);
|
11 | }
|
12 | }
|
13 | catch (Exception e)
|
14 | {}
|
15 | }
|
Hier ist die Funktion die ausgelöst wird:
1 | // Wird ausgelöst wenn Daten über den Com-Port empfangen werden
|
2 | private void OnDataReceived(string data)
|
3 | {
|
4 | queueDatensaetze.Enqueue(data);
|
5 | }
|
Ich vermute dass der Fehler entweder an den Einstellung oder an dem
Event-Konzept liegt.
Einstellungen:
1 | realPort.Parity = Parity.None;
|
2 | realPort.StopBits = StopBits.One;
|
3 | realPort.DataBits = 8;
|
4 | realPort.Handshake = Handshake.RequestToSend;
|
5 | realPort.NewLine = "\r";
|
6 | realPort.Encoding = Encoding.GetEncoding(28591);
|
7 | realPort.ReadBufferSize = 16536;
|
8 | realPort.WriteBufferSize = 4096;
|
9 | realPort.DataReceived += OnDataReceived;
|
10 | realPort.ReadTimeout = 6000;
|
11 | this.occuredTimeouts = 0;
|
Ich habe das ganze mit einem SerialPort Monitor beobachtet dort werden
die Daten empfangen, OnDataReceived wird zwar aufgerufen jedoch keine
Daten gelesen was zu einer Timeout Exception führt.
Kann jemand eine Fehlerquelle ausmachen oder hat eine vernünftige
Quelle/Referenz für mich?
Danke im Vorraus
David