問題
シリアル通信でpcから送信処理のタイミングで下画像のようなエラーが出ることがあります。
100msec周期で送信処理をしており、100msec周期送信開始して1分ぐらいたつといきなりエラーが表れてしまいます。
逆にそれまでは正常に動作しています。
原因が全く分からない状態です。どなたか意見ありますでしょうか。宜しくお願い致します。
C#
1 /*INTERVAL_TIMEmsec毎に呼ばれる送信用タイマイベント*/ 2 private void Timer_event_handler(object sender, ElapsedEventArgs e) 3 { 4 UART_SendData(st_tx_buffer.buffer, total_size); 5 } 6 7 private void UART_SendData(byte[] bData, int nLength) 8 { 9 /*ポートオープン時にのみ送信するため*/ 10 if( serialPort1.IsOpen == true ) 11 { 12 serialPort1.Write(bData, 0, nLength); 13 /*別スレッドからコントロールボックスを操作する場合にinvokeを使う*/ 14 BeginInvoke(new Delegate_DataToTxtBox(SendDataToTextBox), 15 new Object[] { bData, nLength }); 16 } 17 else { /*nothing*/} 18 19 }
データ量と通信速度にもよりますが、PCからの100ミリ秒周期は早すぎかもしれませんね。UIスレッドをInvokeしていますし。シリアル回線は、USBシリアルですか。それともD-SUB9ピンのRS-232C(EIA-232-D)などでしょうか。また、相手側は何からの装置でしょうか。100ミリ秒周期をもっと間隔長くしたらどうなるでしょう。1~2秒周期とか。
例えばBeginInvokeせずに、ダミーのデータを100ミリ秒周期で送り続けてOKなら、滞留とかなんからのタイミング不一致が起きているのかと思います。なんとなくですが。
詳細の表示をして、InnerExceptionがないか、調べてください。
C#にはTimerが何種類もあるのですが、System.Timers.Timerでしょうか?
>dodox86
回答ありがとうございます!
なるほど、ちょっと試してみます。
>Q71
InnerException null
と表示していました。
>soi013
はい、System.Timer.Timerです。
"System.Timers.ElapsedEventHandler(Timer_event_handler";
回答2件
あなたの回答
tips
プレビュー