在java中轮询串口以获取设备的当前状态

时间:2014-01-02 20:28:05

标签: java io serial-port javax.comm

我正在使用javax.comm通过串口进行通信而我遇到的问题是我不确定如何轮询端口以获取启动时设备的当前状态(4x8矩阵切换器)。当状态改变时,我能够使用串行端口事件监听器获得当前状态(即我向端口写入内容,监听器在更改时捕获数据位)。

这是我捕获事件的代码。如何在不实际更改状态的情况下修改此值以轮询当前状态?

public void serialEvent(SerialPortEvent event) {
    waitingForResponse = true;
    System.out.println("Serial Event Detected: " + event.getEventType() + " Going to read buffer..");

    switch(event.getEventType()) {
    case SerialPortEvent.BI:
        System.out.println("Data Event: BI");
    case SerialPortEvent.OE:
        System.out.println("Data Event: OE");
    case SerialPortEvent.FE:
        System.out.println("Data Event: FE");
    case SerialPortEvent.PE:
        System.out.println("Data Event: PE");
    case SerialPortEvent.CD:
        System.out.println("Data Event: CD");
    case SerialPortEvent.CTS:
        System.out.println("Data Event: CTS");
    case SerialPortEvent.DSR:
        System.out.println("Data Event: DSR");
    case SerialPortEvent.RI:
        System.out.println("Data Event: RI");
    case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
        System.out.println("Data Event: OUTPUT_BUGGER_EMPTY");
        break;
    case SerialPortEvent.DATA_AVAILABLE:
        System.out.println("Data available in buffer..");
        //byte[] readBuffer = new byte[11];

        try {              
            StringBuilder readBuffer = new StringBuilder();

            try{
                int value;     
                int byteLengthCounter = 0;
                // reading just one at a time
                while (byteLengthCounter < 8) {

                    value = inputStream.read();
                    readBuffer.append((char) value);
                    currentState = new String(readBuffer);
                    byteLengthCounter++;
                }
                System.out.println("Successful read. Current state: " + getCurrentState());
                byteLengthCounter = 0;

                waitingForResponse = false;

            }catch(Exception e){System.out.println("Did not read buffer: " + e);}

        } catch (Exception e) {System.out.println(e);}
        break;
    } 

    try{
        System.out.println("Going to close steam..");
        if (inputStream != null)    inputStream.close();
        //System.out.println("Going to close port..");
        //if (serialPort != null) serialPort.close();

        }catch (Exception e){}
}

1 个答案:

答案 0 :(得分:0)

谢谢Jim--你发送查询字符串并收到回复是完全正确的。非常简单!我的问题的答案取决于制造商和我需要发送到我的设备的字符串。不知何故,我在手册中忽略了这一点。现在我能够“轮询”设备以恢复其当前状态。简单回答!感谢您的帮助。