COMポート経由で送信されたデータを読み取り、ライブグラフとテキストボックス(デバッグ用)に値を表示するソフトウェアを開発しています。最初は大丈夫ですが、突然1つの数字の1つが2つに分かれています。このように: - 64から65 - 66から67 - 6から8から69 - - 70C#シリアル読み取りエラー
それは言うべき68これは、グラフはすべて間違ってます!
この原因は何ですか?次のように
私のコードは次のとおりです。事前に
private void DisplayText(object sender, EventArgs e)
{
textBox1.AppendText(RxString);
textBox1.AppendText(" - ");
}
private void comPort_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
{
RxString = comPort.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
newRead = Convert.ToDouble(RxString);
AddDataToGraph(zedGraph, howfar, newRead);
howfar++;
}
感謝。
+1。ただし、次のスペースが受信されたときにのみ各数値が解析されるので注意してください。たとえば、送信者が "1 2 3 4"のような文字列を送信すると、このコードは "1 2 3"をデコードして待機しますスペースの場合はグラフに「4」を追加しません。これはあなたにとって問題ではないかもしれませんが、心に留めておく価値があります。 –
タイミングが合理的にデータを分離するために使用できる場合があります。特に、データ項目間の時間が、発生する可能性のある最も長い潜在的な「ヒカップ」に比べて本当に大きい場合は特にそうです。たとえば、デバイスが毎秒データのチャンクを送信し、チャンク内のデータが決して100ms以上離れていることが保証されているとします。いくつかのコードは、データがないことを観察し、時間をチェックし、少なくとも250ms後に経過したことを観察し、データがまだ存在しないことを観察する。このようなシナリオでは、コードは、ポーズが新しいチャンクの一部であると仮定してデータを引き継ぐことができます。 – supercat
多くの場合、時間ベースのデコードと他の解析を組み合わせると便利です。たとえば、各可変長データレコードの前に特定の文字があるが、末尾に文字がないとします。入力番号は、プレフィックス文字または確認された長さのデータがないことによって終了することができます。受信コードを実行しているマシンがレベル2のガベージコレクションなどの問題を引き起こす場合は、いくつかのレコードが連続して表示され、それらの間に何かの時間を見ることはできませんが、レコードを分けることができます。 – supercat