0

シリアル ポートを使用して、シン クライアントに接続されているスケールからデータを読み取っています。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()
4

2 に答える 2

2

DiscardInBuffer を呼び出さないでください。オペレーティング システムのバッファは、データがUARTを介してシフトインされるときに、非同期的に満たされます。すべてのデータを読み取り、それに応じて対処してください。破棄した時点でバッファに何があるかを知る方法がないからです。

于 2009-03-10T19:22:28.863 に答える
1

「ES」はいつ来るの?DiscardInBuffer()を呼び出すため、「ES」の直後の値が正しく読み取られない可能性があります。その間にバッファに次の読み取り値の一部が含まれている場合(たとえば、90.007の9)、9は破棄され、0.007を読み取ります。

最後のCRLFの前にすべてを破棄してみてください。ただし、不完全な行は残してください。

于 2009-03-10T17:36:03.083 に答える