2

私は問題のトラブルシューティングを試みてきましたが、次の問題を解決することについてはまったく考えていません。

コンピューターにデータをアップロードできるデバイスをリッスンできるソフトウェアアプリケーションがあります。このデータがキャプチャされると、テキストファイルに書き込まれ、後で使用できるように保存されます。

void DataRecieved(object sender, EventArgs e)
{
   while ((bufferedData = comport.ReadLine()) != null)
   {
       uploadedData += bufferedData + Environment.NewLine;
   }

   comport.Close();

   System.IO.StreamWriter writeUploadedPro = new System.IO.StreamWriter(uploadFilePath);
   writeUploadedPro.Write(uploadedData);
   writeUploadedPro.Close();

   isUploadComplete = true;
}

接続を確立、受信、および検証できます。プログラムしたものは、アップロードされたデータのテキストファイルを実際に生成しますが、データに含まれているものは完全ではありません。

例:

%
N0?77??.5???3
G0? X3.??? Z4.5??6 
Z5.?? 
?3.5?76 
G01 Z5.?? 
Z4.9471 
X?.?3 Z4.???9 
Z?.???6 
?3.?? Z?.??? 
Z4.???? 
X3.7??4 
G?? X3.???? ?4.5??6 
M30
?

たくさんの「?」があります 文字または数字のいずれかである必要があります。comportの設定(ボー、データ、停止、パリティ、ハンドシェイク、およびCOM名が正しく指定されている)を再確認しました。また、ReadBufferSize、RecievedBytesThreshold、Encoding、およびNewLineの設定も試しました。私はこれらのプロパティにまったく精通しておらず、MSDNもそれらを説明するのに役立つとは思いませんでした。

アップロードで不完全なデータ行が表示される理由について、アイデアや提案があれば、よろしくお願いします。ご協力いただきありがとうございます。

4

2 に答える 2

1

問題は次のところにあると思います。

while ((bufferedData = comport.ReadLine()) != null)

ステートメントを次のように変更してみてください。

    while(comport.BytesToRead>0)
{
uploadedData += comport.ReadExisting() + Environment.NewLine;
}

それが役に立ったかどうか教えてください。

于 2012-09-25T21:00:03.413 に答える
1

問題はエンコーディングにあります。EncodingプロパティをUTF8に変更してみてください。デフォルトはASCIIです。ASCIIエンコーディングでは、ASCIIは0x7F(10進数で127)までしか拡張されないため、0x7Fより大きい文字は?デフォルトでに変換されます。

これで問題は解決するかもしれませんが、データをバイト配列に読み込んでから、これらのエンコーディングクラスのいずれかを使用して適切な文字列に変換することをお勧めします。これが機能する理由は、受信したバイトを文字列に変換しなくなったためです。文字列変換を行わないRead(byte []、int、int)オーバーロードを使用しています。その純粋なバイト。

于 2012-09-25T21:04:36.643 に答える