当设备断开连接时RXTX仍然读取数据

问题描述:

我在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

RXTX是专为串行通信,你的串行端口之间得到的电阻是基于内部TTL转换到RS232主板上(或USB到串行转换器),因此更多的是硬件问题。

我从你的问题,你正试图拉流量控制引脚向上或向下猜,这将有效地产生对引脚的电压(和无关与销之间的电阻)。

,如果你发布代码示例,我可以帮助解决代码中的任何潜在错误。并期望从串口输出。

不幸的是,这是一个与Prova 700相关的问题,因为您所描述的行为正是人们所期望的欧姆计的行为。基本上通过从电阻上去除探针,电阻上升直到达到不能被装置测量的水平(空气阻力)。在这种情况下,设备的内部状态将会显示:我们已达到不定式阻力,并显示0.0L。

我不是100%确定你的确切目标是与你的软件,但我认为这样的工作流程:

  • 用户将探测电阻
  • 在去除您的软件自动记录探头数据

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

请看看Prova 700的使用说明书。手册中关于RS-232协议的含义是什么?像这样的其他设备有一个在串行线路上讨论的指令协议,以便您能够将命令发送到系统中。然后人们可以执行的工作流程是这样

  • 使用者将探针到电阻器在计算机上
  • 压力机按钮
  • 计算机发送命令到所述欧姆 - 米
  • 欧姆 - 米与当前阻力
  • 回复
  • 计算机存储电阻,并显示消息,它是保存删除探针

希望这有助于!

+0

谢谢您的回答,我想获得阻力值并与产品性能进行比较,如果tolerans产品的价值通过测试。问题是如果用户犯错并在探针被移除时测量,因为我仍然有价值,并且如果产品线有问题,我必须得到0.L值,即使是连接探针。 – Chrial 2015-02-11 09:37:51