denshikobo’s blog

PICプログラミングやPCの操作で感じた日々の由無し事を綴ります

放置していた不具合に対処した

通信ポートは、現在の環境に合わせてWindowsなら”COM4”、Linux(Raspi)なら”/dev/ttyUSB0”を設定しています。これを利用者の環境に合わせて設定できるようにする計画なんですが・・・

 

何らかの事情でPICと通信できない場合、今までのプログラムは受信待ちループから抜けられませんでした。ユーザが利用する通信ポートを設定しようとしても、メニュー操作では設定出来なかったのです。(起動パラメータで指定するという方法はあります)

 

そこで、先ずは受信待ちの無限ループにエラー終了する機能を追加しました。

<以前のコード>
if( receive_ringbuff.rest() < len )return false;


<書き換えたコード>
if( receive_ringbuff.rest() < len )
{
   receive_loop_count++;
   if( receive_loop_count < 100 )return false;
   Main_Frame.main_control.target_pane_panel.show_message("Receive fail");
}

 100ms待っても必要なデータが受信できなければ、"Receive fail"というメッセージを表示して抜けるようにしました。(送信は通信不良でもプログラムは正常終了するのでこの処置は入れていません)

 

さらに

try{
   CommPortIdentifier comID = CommPortIdentifier.getPortIdentifier( port_name );
   ---一部省略-----
   port_open = true;
}
catch( Exception e )
{
   Main_Frame.main_control.target_pane_panel.show_message("Comm port fail");
   port_open = false;
}

通信ポートが開けなかった場合に、"Comm port fail"というメッセージを表示して

port_openフラグをfalseにしました。

 

port_openフラグがfalseのときは通信処理をスキップして、メニュー操作が出来るようになりました。

 

目出度し、目出度し

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
後の方の処置だけだと、シリアル・ラインの断線に対処できません。実は前の方の処置だけで動くのですが・・・

何というか、まぁ、気分の問題ですね。

以上、ご参考まで