2017-10-25 15 views
0

私はrs485モジュールを使ってプロジェクトを作っています。
モジュールが私のcomポートにデータを送信するたびに、そのデータを捕まえたいです。
それはうまくいく、私はそれをキャッチすることができます。しかし、私はそれをキャッチするときに私は複数の行にそれを参照してください。シリアルデータを1行に読み込みます

私のデータは毎回*で始まり、#で終わります。

私は1行でデータをキャッチするのに役立つことができますか?ありがとう!問題は、あなたがあなただけの使用入力に改行文字を取得している場合、あなたはこの

receivedData = receivedData.substring(receivedData.indexOf('*'), receivedData.indexOf('#')); 

を行うことができますchar配列としてreceivedDataを反復しているということであれば

public void serialEvent(SerialPortEvent event) { 
    //if(event.isRXCHAR() && event.getEventValue() > 0) { 
    try { 

     String receivedData = serialPort.readString(event.getEventValue()); 
     while (receivedData.charAt(0) == '#') { 
      receivedData = receivedData.substring(1, receivedData.length()); 
     } 
     System.out.println("Received response from port: " + receivedData); 
    } catch (SerialPortException ex) { 
     System.out.println("Error in receiving response from port: " + ex); 
    } 
    //} 
} 
+0

。あなたが先行する '*'が得られるまで読む必要があります。これは、読み込み1つだけでなければなりません。そして、あなたが得るまで読むことができるようになります。(while(receivedData.charAt(0)== '#') ' *後続* '#'。 – EJP

+0

@YCF_Lあなたはどういうことを言っていますか?投稿には入力コードが含まれています – EJP

+0

@YCF_L OPは、 '*'で終わり、 '# 'で終わります。あなたが話していることはまだ不明です。 – EJP

答えて

-1

receivedData = receivedData.replaceAll("(\\n)", ""); 
+0

私はindexOf関数の+1を見逃している可能性があります。 しかし、インデックスカウントが包括的か排他的かを覚えていません。 –

+0

テスト中にエラーが発生する "文字列インデックスが範囲外です:-1" –

+0

どうすればこのエラーを解決できますか?私はそれを取得しません。 –

-1

enter image description here

タクこれを見てください。 実行していないのでString receivedData = serialPort.readString(event.getEventValue());をループで使用するには、文字列を取得する必要があります。だから私はあなたが得ている文字列はすべての文字の後に\ nを持っていると仮定しています。
この仮定は正しいですか? それとも別のものですか?

+0

私はあなたが正しいと思うが、私はパテを開始するとshureではない、私は今、エラーのためのオンラインのデータを取得する "範囲外の文字列インデックス-1"私は+1を自分のコードで入力したが、エラー "文字列インデックスが範囲外-2" –

+0

@ JensG申し訳ありません。 Withouthは実際に何が起こっているのかを見ることができ、それを試してそれに取り組むのは難しいです。私がJavaに慣れている間は、ポートからシリアルデータを読み込んだ経験が非常に限られています –

+1

スクリーンショットを撮る代わりにここにコードをコピーして貼り付けてください。 – bfontaine

0

あなたは「あなたが最初の*を得るまで読んで、あなたが最終#を得るまで、読んでする必要があります。

String ch; 
StringBuffer data = new StringBuffer(); 
while (!(ch = serialPort.readString(1)).equals("*")) 
    ; 
while (!(ch = serialPort.readString(1)).equals("#")) 
    data.append(ch); 
return data.toString(); 

あなたはもちろん、これにエラー処理とEOSを追加する必要があり

関連する問題