Сброс данных через последовательный порт с помощью Readline () - PullRequest
0 голосов
/ 10 марта 2009

Я использую последовательный порт для чтения данных вне шкалы, которая подключена к тонкому клиенту. В 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 ]

2 голосов
/ 10 марта 2009

Не вызывайте DiscardInBuffer. Буфер операционной системы заполняется асинхронно , когда данные перемещаются через UART . Прочитайте все данные и действуйте соответствующим образом, потому что у вас нет возможности узнать, что находится в буфере в тот момент, когда вы сбрасываете его!

1 голос
/ 10 марта 2009

Когда приходит «ES»? Теоретически возможно, что значение сразу после «ES» не читается правильно, так как вы вызываете DiscardInBuffer () Если в это время буфер содержит часть следующего чтения, например, 9 из 90,007, 9 сбрасывается, и вы читаете 0,007.

Попробуйте сбросить только все до последнего CR LF. Но оставьте незавершенные строки.

...