シリアルポートを使用して、シンクライアントに接続されたスケールからデータを読み取っています。 99%のケースでは、データが正しく読み取られます。つまり、規模に関係なく、アプリケーションによってキャプチャされたデータです。 ただし、データが破棄されたように見えることがあります。たとえば、90.007ではなく、0.007と読み替えられます。私はReadLine関数を使用しています: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()
ESは残高によって返送されるエラーコードです。私はエラーコードを飲みたいです。私の前提は、ReadLineは行を読みます(意味がありますか?)、もしES \ n \ rが読み込まれていれば、それを飲み込むでしょう。なぜ次の行を正しく読むことができないのですか?私はこの記事をコメントし、これが役立つかどうかを見ていきます。 – sarsnake
わかりませんが、並行性の問題になる可能性があります。基礎となるスレッドは、シリアルポートデータをバッファに書き込んでいます。それが起こった場合は、DiscardInBufer()を呼び出す前に終了していません。始め、例えば90.007の – siddhadev