我正在使用串行端口读取连接到瘦客户端的比例数据。在99%的情况下,数据被正确读取 - 即规模上的任何内容都是应用程序捕获的内容。 但是,有时候,数据似乎被删除了。例如,代替90.007,它将被读作0.007。我正在使用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()
答案 0 :(得分:2)
不要调用DiscardInBuffer。当数据通过asynchronously移入时,操作系统缓冲区被填充UART。读取所有数据并相应地对其进行操作,因为您丢弃时无法知道缓冲区中的内容!
答案 1 :(得分:1)
什么时候“ES”来了?由于您调用DiscardInBuffer(),因此理论上可能不会正确读取“ES”之后的值。如果在那个时间缓冲区包含下一个读数的一部分,例如在90.007中的9,9被丢弃,你读到0.007。
尝试仅丢弃最后一个CR LF之前的所有内容。但是留下不完整的界限。