0

我正在使用串行端口从连接到瘦客户端的秤上读取数据。在 99% 的情况下,数据被正确读取 - 即,秤上的任何内容都是应用程序捕获的内容。但是,有时,看起来数据被丢弃了。例如,它将被读取为 0.007,而不是 90.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()
4

2 回答 2

2

不要调用 DiscardInBuffer。当数据通过UART移入时,操作系统缓冲区被异步填充。读取所有数据并采取相应措施,因为在丢弃缓冲区时您无法知道缓冲区中的内容!

于 2009-03-10T19:22:28.863 回答
1

“ES”什么时候来?理论上,“ES”之后的值可能无法正确读取,因为您调用了 DiscardInBuffer()。如果在那个时候缓冲区包含下一个读数的一部分,例如 90.007 中的 9,则 9 被丢弃并且您读取 0.007。

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

于 2009-03-10T17:36:03.083 回答