2015-02-11 104 views
1

我在java中使用RXTX庫,如果我寫空間ascii(32)outpurstream我可以獲取數據,除非我無法獲取。我不知道爲什麼,它可能是一個問題?當設備斷開連接時RXTX仍然讀取數據

問題是:我從歐姆表中獲取數據,測量產品,但是當我脫下探針時,ohmetter顯示一個值,然後顯示「0.L」,但我總是得到最後的數據,所以我無法檢測如果ohmetter測量產品或不。

例如

02.00 OHM(coreect值)>> 125.20 OHM(同時起飛探頭)>> 0.L(起飛後探頭)

我總是得到125.20 OHM,我怎樣才能得到0.L的價值?

有什麼建議嗎?

編輯:

public class SerialComm { 

SerialPort serialPort; 
OutputStream outStream = null; 
InputStream inStream = null; 

public SerialComm() { 
    super(); 
} 

void connect(String portName) throws Exception { 

    CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(portName); 
    serialPort = (SerialPort) portId.open("gnu.io.CommPortIdentifier", 5000); 
    int baudRate = 9600; 

    serialPort.setSerialPortParams(
      baudRate, 
      SerialPort.DATABITS_8, 
      SerialPort.STOPBITS_1, 
      SerialPort.PARITY_NONE); 
    serialPort.setFlowControlMode(
      SerialPort.FLOWCONTROL_NONE); 
    setSerialListener(); 
} 

public void initIOStream() throws InterruptedException { 

    try { 
     outStream = serialPort.getOutputStream(); 
     inStream = serialPort.getInputStream(); 
     write(); 
    } catch (IOException ex) { 
     Logger.getLogger(SerialComm.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

public void disconnect() { 
    if (serialPort != null) { 
     try { 
      outStream.close(); 
      inStream.close(); 
     } catch (IOException ex) { 
     } 
     serialPort.close(); 
    } 
} 

public void write() throws IOException, InterruptedException { 
    outStream.write(32); 
    outStream.flush(); 
} 

private byte[] readBuffer = new byte[400]; 

private void readSerial() throws InterruptedException, Exception { 
    try { 
     initIOStream(); 
     Thread.sleep(2000); 
     int availableBytes = inStream.available(); 
     if (availableBytes > 0) { 
      inStream.read(readBuffer, 0, availableBytes); 
      System.out.println("value: " + new String(readBuffer, 0, 30)); 
     } 
    } catch (IOException e) { 
    } 
} 

private class SerialEventHandler implements SerialPortEventListener { 

    @Override 
    public void serialEvent(SerialPortEvent event) { 
     System.out.println("event.getEventType()" + event.getEventType()); 
     switch (event.getEventType()) { 
      case SerialPortEvent.DATA_AVAILABLE: { 
       try { 
        readSerial(); 
       } catch (Exception ex) { 
        Logger.getLogger(SerialComm.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
      break; 
     } 
    } 
} 

private class ReadThread implements Runnable { 

    @Override 
    public void run() { 
     while (true) { 
      try { 
       readSerial(); 
      } catch (InterruptedException ex) { 
       Logger.getLogger(SerialComm.class.getName()).log(Level.SEVERE, null, ex); 
      } catch (Exception ex) { 
       Logger.getLogger(SerialComm.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    } 
} 

public void setSerialListener() throws InterruptedException, TooManyListenersException { 
    new Thread(new ReadThread()).start(); 
} 

public void setSerialEventHandler(SerialPort serialPort) throws Exception { 
    try { 
     initIOStream(); 
     serialPort.addEventListener(new SerialEventHandler()); 
     serialPort.notifyOnDataAvailable(true); 
    } catch (TooManyListenersException ex) { 
     System.err.println(ex.getMessage()); 
    } 
} 

public static void main(String args[]) throws IOException, Exception { 
    SerialComm serial = new SerialComm(); 
    serial.connect("COM3"); 
} 

}

+0

您使用的是什麼精確的歐姆表? – 2015-02-11 08:48:04

+0

Prova Model 700 Ohmmetter – Chrial 2015-02-11 08:49:30

回答

0

RXTX是專爲串行通信,你的串行端口之間得到的電阻是基於內部TTL轉換到RS232主板上(或USB到串行轉換器),因此更多的是硬件問題。

我從你的問題,你正試圖拉流量控制引腳向上或向下猜,這將有效地產生對引腳的電壓(和無關與銷之間的電阻)。

,如果你發佈代碼示例,我可以幫助解決代碼中的任何潛在錯誤。並期望從串口輸出。

0

不幸的是,這是一個與Prova 700相關的問題,因爲您所描述的行爲正是人們所期望的歐姆計的行爲。基本上通過從電阻上去除探針,電阻上升直到達到不能被裝置測量的水平(空氣阻力)。在這種情況下,設備的內部狀態將會顯示:我們已達到不定式阻力,並顯示0.0L。

我不是100%確定你的確切目標是與你的軟件,但我認爲這樣的工作流程:

  • 用戶將探測電阻
  • 在去除您的軟件自動記錄探頭數據

但是,正如你所看到的,這是行不通的。

請看看Prova 700的使用說明書。手冊中關於RS-232協議的含義是什麼?像這樣的其他設備有一個在串行線路上討論的指令協議,以便您能夠將命令發送到系統中。然後人們可以執行的工作流程是這樣

  • 使用者將探針到電阻器在計算機上
  • 壓力機按鈕
  • 計算機發送命令到所述歐姆 - 米
  • 歐姆 - 米與當前阻力
  • 回覆
  • 計算機存儲電阻,並顯示消息,它是保存刪除探針

希望這有助於!

+0

謝謝您的回答,我想獲得阻力值並與產品性能進行比較,如果tolerans產品的價值通過測試。問題是如果用戶犯錯並在探針被移除時測量,因爲我仍然有價值,並且如果產品線有問題,我必須得到0.L值,即使是連接探針。 – Chrial 2015-02-11 09:37:51

相關問題