2017-05-27 1 views
0

私のプロジェクトのハードウェアデバイスと通信するためにJSSCライブラリを使用しています。私たちは本当のにそれを作るまでJSSC writeStringはtrueを返しますが、デバイスは受信できません

私のソフトウェアと私のチームのハードウェアは、

すべては私たちのチームのブレッドボードで完璧に動作します(私のソフトウェアは現在、ハードウェアおよびその逆に表示される内容を表示する必要がある)、同期動作する必要がありますボタン付きPCB

私たちのチームの現在のデバイスのために、このUSB - シリアルアダプタを使用して:私たちはブレッドボードでテストをやっていたときhttps://www.sparkfun.com/products/14050

、それはCOM3を介して接続されています。現在のデバイスはCOM5を介して接続されています。

私のソフトウェアは、今だけのデバイスからデータを受信することができ、私のソフトウェアでボタンがクリックされたときに信号を返送することはできません(実際にWriteStringはメソッドがtrueを返しますが、私たちのデバイスは何も受信しない)

さんが持ってみましょう私のソフトウェアのいくつかのコードスニペットを見て:

private void connectButtonActionPerformed(java.awt.event.ActionEvent evt) {            
    if (selectedPort != null && selectedPort.isOpened()) { 
     // Disconnect 
     selectedPort.closePort(); 
     connectButton.setText("Connect"); 
    } else { // Connect 
     selectedPort = new SerialPort(listPort.getSelectedItem().toString()); 
     try { 
      connectButton.setText("Disconnect"); 
      selectedPort.openPort(); 
      selectedPort.setParams(9600, 8, 1, 0, true, false); 
      selectedPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT); 
      int mask = SerialPort.MASK_RXCHAR; 
      selectedPort.setEventsMask(mask); 
      selectedPort.addEventListener(new SerialPortReader()); 
     } catch (SerialPortException ex) { 
      System.out.println(ex); 
     } 
    } 
} 

私はポートを開いて通信を確立するために、このCONNECTボタンを持っています

private void modeListActionPerformed(java.awt.event.ActionEvent evt) {           
    try { 
     JComboBox cb = (JComboBox) evt.getSource(); 
     String selectedItem = (String) cb.getSelectedItem(); 
     switch (selectedItem) { 
      case "VOLTAGE_DC": 
       dataMode = VOL_DC; 
       selectedPort.writeString("v"); 
       break; 
      case "VOLTAGE_AC": 
       dataMode = VOL_AC; 
       selectedPort.writeString("V"); 
       break; 
      case "CURRENT_DC": 
       dataMode = "CUR_DC"; 
       selectedPort.writeString("i"); 
       break; 
      case "CURRENT_AC": 
       dataMode = "CUR_AC"; 
       selectedPort.writeString("I"); 
       break; 
      case "RESISTANCE": 
       dataMode = RES; 
       selectedPort.writeString("r"); 
       break; 
      case "RESISTANCE_CON": 
       dataMode = CON; 
       selectedPort.writeString("c"); 
       break; 
      default: 
       break; 
     } 
     selectedPort.closePort(); 
     selectedPort.openPort(); 
     selectedPort.addEventListener(new SerialPortReader()); 
    } catch (SerialPortException ex) { 
     Logger.getLogger(MainForm.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

マイSerialPortReader

public class SerialPortReader implements SerialPortEventListener { 
     @Override 
public void serialEvent(SerialPortEvent event) { 
    if (event.isRXCHAR() && event.getEventValue() > 0) { 
     try { 
      byte[] buffer = selectedPort.readBytes(event.getEventValue()); 
      SwingUtilities.invokeLater(new Runnable() { 
       public void run() { 
        update_display_by_buffer(buffer); 
      }); 
     } 
     catch (SerialPortException ex) { 
      System.out.println(ex); 
     } 
} 

要約いくつかの重要なポイント:

は、私はまた、デバイスに文字を送信するためにJComboBoxのを持って

  • マイテスト中にブレッドボードとスムーズに通信できるソフトウェア(COM3)
  • 私のソフトウェアは今だけのデータが、実際のデバイス(真さえWriteStringメソッドメソッドの戻り値)
  • 私たちの本当のデバイスが

パテで完璧に動作して周りにいない他の方法を受け取ることができますどのような可能性その理由問題?

何か指摘します。

// を更新:

  • RXTXが混乱です:jSerialCommライブラリに

    結論を使用することによって解決

    問題です。

  • JSSC library sucks。

答えて

0

は、私は別のプロジェクトで同じ行動を観察し、時にはそれがシリアルポートへの書き込み後、「データをフラッシュしない」によるものでした。 JSSCはフラッシングしていないようです。

関連する問題