EDIT:ハードウェアに問題がありました。重複したデバイスやケーブルを入手して問題を解決したようです。Bogus TimeoutException .NETCF SerialPortを読む
こんにちは、私は大量のデータ(〜1MB)を.NETCFのシリアルポートから読み取ろうとしています。
私はGPSデータのダンプを読んでいるが、私はランダムにm_serial.Readへの呼び出し(..)シリアルポート上でのストリーミングデータは間違いあり
あるにTimeoutExceptionを受け付けております - ダンプ数分かかります。タイムアウトが発生したら、シリアルケーブルを別のコンピュータに接続して、データを安定してストリーミングすることができます。
私はSerialPort.Read、SerialPort.ReadLine、SerialPort.ReadExistingのようないくつかの異なる方法を実装しようとしました。それらはすべて短時間(ランダムな量)読み込み、TimeoutExceptionで失敗します。
お手数をおかけしますようお願い申し上げます。私は、データが利用できる確かに存在するとき、私は38400ボーでストリーミング、タイムアウトを取得していますどのよう損失で、基本的だ
//m_serial is a SerialPort object, ReadTimeout set to 9000
string eoftest = "\r\n$PSRF206";
byte[] bEOFTest = ASCIIEncoding.ASCII.GetBytes(eoftest);
int bufferSize = 1024 * 16;
byte[] buffer = new byte[bufferSize];
int testingIndex = 0;
while (testingIndex < bEOFTest.Length)
{
int count = m_serial.Read(buffer, 0, bufferSize);
if (count > 0)
{
for (int i = 0; i < count; i++)
{
if (buffer[i] == bEOFTest[testingIndex])
{
testingIndex++;
if (testingIndex >= bEOFTest.Length)
break;
}
else
testingIndex = 0;
}
writer.Write(buffer, 0, count);
}
}
UPDATE:
私は、コードが上で正常に動作することを発見しましたMotorola Symbolデバイスですが、私が持っているインターメックデバイスではありません。私はすべてのハードウェアを交換してその可能性を排除しましたが、それでも機能しません。
両方のデバイスは、あなたが常にOpenNETCF serial port libraryを使用してみてください可能性が示唆したようのWindows Mobile 5.0
.....私は今利用できるいくつかの他のデバイスを持って、それがうまく働いている....あなたはGPS中間を使用することはできません何らかの理由でハードウェアの問題だったように見えますあなたはこの低レベルのものを行う必要はありませんので、ドライバ? http://msdn.microsoft.com/en-us/library/ms850332.aspx – Lee
私が知る限り、そのAPIは現在の値を取得するためのものです。私たちのデバイスは仕事のために切断され、その後このコードが実行されてデータダンプを取得します。私はそのリンクにその機能がないと思っていますが、何か不足しているかもしれません。 – Clyde
いいえ、それは現在の値を取得するためのものです。私はダンプをどのくらい知っていたのか分かりませんでした。 – Lee