串行端口使用Readline()删除数据

时间:2009-03-10 17:12:15

标签: serial-port readline

我正在使用串行端口读取连接到瘦客户端的比例数据。在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()

2 个答案:

答案 0 :(得分:2)

不要调用DiscardInBuffer。当数据通过asynchronously移入时,操作系统缓冲区被填充UART。读取所有数据并相应地对其进行操作,因为您丢弃时无法知道缓冲区中的内容!

答案 1 :(得分:1)

什么时候“ES”来了?由于您调用DiscardInBuffer(),因此理论上可能不会正确读取“ES”之后的值。如果在那个时间缓冲区包含下一个读数的一部分,例如在90.007中的9,9被丢弃,你读到0.007。

尝试仅丢弃最后一个CR LF之前的所有内容。但是留下不完整的界限。