SerialPort Daten-Verlust - C#

Arbeite ich an einem SerialPort-app und ein sehr einfaches Teil ist, dass Sie mir Probleme. Ich möchte einfach Lesen, ein konstanter Strom von Daten aus dem port und schreiben Sie es auf, um eine binäre Datei, wie es kommt in. Das problem scheint zu sein, Geschwindigkeit: mein code hat geklappt, auf meine 9600 baud-test-Gerät, aber wenn auf die 115200bps live-Gerät habe ich scheinen zu sein, Daten zu verlieren. Was passiert ist, dass nach einem Variablen Zeitraum von Zeit, ich vermisse 1 byte, die Würfe aus, um den rest der Daten. Ich habe versucht, ein paar Dinge:

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    bwLogger.Write((byte)serialPort1.ReadByte());
}

oder

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    byte[] inc = new byte[serialPort1.BytesToRead];
    serialPort1.Read(inc, 0, inc.Length);

    bwLogger.Write(inc);
}

und ein paar Variationen. Ich kann nicht mit ReadLine() wie arbeite ich mit einem Konstanten Strom von Daten (richtig?). Ich habe versucht, das hantieren mit der buffer size (beide serialPort1.ReadBufferSize und die hardware FIFO-buffer). Ideal für usability-Zwecke würd ich Griff dies auf der software-Seite und nicht die Benutzer ändern, Windows-Treiber-Einstellungen.

Irgendwelche Ideen?

Dies ist der Grund, warum Kommunikationsprotokolle Regeln haben und Prüfsummen. Sie sollten Codierung gegen ein Protokoll, das gibt Ihnen die Flexibilität, um zu erkennen, wie ein Ereignis und wiederherstellen von es. Sie können mit timeouts löschen der Puffer und senden Sie Sie erneut als notwendig. WERDEN Sie Daten verlieren, von Zeit zu Zeit. Zeitraum. Ende der Geschichte. Sie brauchen, um jedes end-Gerät wiederherstellen, aus einer solchen situation ordnungsgemäß (also ohne "wirft" den rest der Daten).
Dies ist eine hervorragende Beratung. Aufgrund der einzigartigen Funktion der mein spezielles Gerät, ich habe die Fähigkeit, zu Linear interpolieren die Daten ausfüllen, fehlende oder anderweitig "schlecht" - Pakete. In den meisten Kommunikationssituationen, die den Umgang mit dieser Art von Veranstaltung sollten die meisten auf jeden Fall robuster ist von entwickelt gegen ein richtiges Protokoll, wie Sie bereits erwähnt. Gute Ratschläge für jemanden arbeiten, die in jeder form von Kommunikation.
Ich entschuldige mich. Nach re-Lektüre, dass ich verstehe, dass Sie bezogen auf harte Echtzeit-Anforderungen und fehlende Mittel fehlen eine Menge Daten, die nie wieder kommen. Finden Sie eine bevorstehende Antwort von mir bezüglich threading. Obwohl Sie bereits akzeptiert die Antwort, es könnte sein, lohnt ein Blick in.

InformationsquelleAutor Slim | 2009-10-20

Schreibe einen Kommentar