0

外部デバイスとjSSC(java-simple-serial-connector)というライブラリを使ってJavaでシリアルポート通信アプリを書いています。

メッセージを送信してその返信を待った後、一定時間 (2 秒) 後に読み取りがない場合に読み取りを中止するタイムアウトがあります。その場合、ポートは閉じられ、その後のメッセージ交換のために再度開かれます。

私が気付いたのは、何らかの理由でタイムアウトが発生し、ポートが閉じられて再度開かれた場合、ポートからのメッセージの読み取りが妨げられる (つまり、読み取られたメッセージをデコードできない) ことです。デバイスからの前のメッセージがまだ回線上にあり、次の読み取り操作のために着信し続けているように見えます。

私はシリアルポートにあまり詳しくないので、これが当てはまるかどうかは完全にはわかりません。私は(TCP/IP通信のように)自分の側から接続を閉じた後、他の部分によって送信された前のメッセージが破棄されると思います(しかし間違っているかもしれません)。

シリアルポートが閉じてから再度開いた後にどのように動作するかについて、このトピックに光を当てられる人はいますか? アプリケーションで接続を閉じた後も、他の​​部分 (デバイス) が古いメッセージを送信し続けることは可能ですか?

4

2 に答える 2

1

あなたの場合、タイムアウトの場合は、パージを実行してからポートを閉じてから、ポートを再度開く必要があると思います。

if (serialPort! = null && serialPort.isOpened ()) {
  serialPort.purgePort (1);
  serialPort.purgePort (2);
  serialPort.closePort ();
} 
于 2015-09-22T11:04:08.617 に答える