3

多くのページをチェックしましたが、まだ答えがありません。

私の問題は次のとおりです。RS232を介してコンピューターに接続されたデバイスがあります。デバイスは、次のように1秒間に2回送信しています。

"*X;0;bbb;cc;d;eee;f\r\n"

フィールドは固定幅の数値フィールドです。1分ごとに0フラグが1に上がり、「cc」が変わります。この番号が必要です。

C#アプリケーションでは、動作させることができません。データを取得するためにrecieveイベントを使用しようとしましたが、更新された結果の処理には10秒以上かかります。これは、フラグが立てられてから10秒後に結果が得られることを意味します。さらに時間がかかる場合もあります。

最初にRecieveEventを試してみました。行がいっぱいになるまでバッファをいっぱいにしようとしましたが、やはり同じ結果になりました。次に、300ミリ秒ごとに呼び出して行を読み取るタイマーを試してみました。それでも同じ問題。

だから私の質問は、シリアルポートから最新のデータを読み取って処理する方法ですか?

4

2 に答える 2

2

読み取るとき、シリアルポートはデータをバッファリングします。これにより、わずかな遅延が発生します(ただし、数十秒ではなくミリ秒で話しています)。ほとんどのシリアルデバイスドライバーでは、本当に重要な場合は、バッファリングも構成できます。

ReadLineを呼び出すと、データを返す前に改行を受信するまで待機するため、さらに遅延が発生する可能性があります。お使いのデバイスが適切な改行を送信していることを確認しますか?デバイスのドキュメントはひどいことが多いため、ターミナルエミュレータプログラムを使用して、デバイスが実際に送信しているものを正確に確認してください。

ポートから生データを読み取り、それを自分で解析します。部分的なパケットの受信にはもっと注意する必要があるかもしれませんが、画像からすべての仲介者を削除し、より寛容になる可能性があります(たとえば、データに改行が含まれているかどうかは気にしない)。読み取りを開始してから、受信したデータをデバッグコンソールに書き出すと、プログラムが受信している内容や頻度などがすぐにわかります。これにより、遅延がシリアルポートにあるのか、処理にあるのかがわかります。メッセージ

于 2012-07-04T17:37:34.840 に答える
0

serialPort1.readExisting();次に、データの解析を試してみてください。

幸運を!

于 2019-03-02T14:23:17.273 に答える