Ich verwende den seriellen Port, um die Daten von der Waage zu lesen, die an den Thin Client angeschlossen ist. In 99% der Fälle werden die Daten korrekt gelesen - dh was auch immer auf der Skala ist, wird von der Anwendung erfasst. Manchmal sieht es jedoch so aus, als würden Daten gelöscht. Zum Beispiel wird anstelle von 90.007 als 0.007 gelesen. Ich verwende ReadLine-Funktion:Serieller Port zum Löschen von Daten mit Readline()
private void CaptureWeight()
{
globalCounter++;
string value = "";
_sp.DiscardInBuffer();
while (!this._processingDone)
{
try
{
value = this._sp.ReadLine();
if (value != "")
{
if (value == "ES")
{
_sp.DiscardInBuffer();
value = "";
}
else
{
this.Invoke(this.OnDataAcquiredEvent, new object[] { value });
}
}
}
catch (TimeoutException)
{
//catch it but do nothing
}
catch
{
//reset the port here?
MessageBox.Show("some other than timeout exception thrown while reading serial port");
}
}
} //end of CaptureWeight()
ES ist der Fehlercode, der von der Waage zurückgesendet wird. Ich möchte den Fehlercode schlucken. Meine Annahme ist, dass ReadLine eine Zeile liest (macht Sinn?), Wenn ES \ n \ r gelesen wird, werde ich es schlucken. Warum sollte es die nächste Zeile nicht richtig lesen? Ich werde dieses Stück kommentieren und sehen, ob das hilft. – sarsnake
Nicht sicher, aber könnte ein Nebenläufigkeitsproblem sein - der zugrunde liegende Thread schreibt die Daten des seriellen Ports in den Puffer, und wenn es passiert, dass es a nicht beendet hat, bevor Sie 'DiscardInBufer()' aufrufen, verlieren Sie einfach die Anfang, z die 9 in 90.007 – siddhadev