jssc writebytes在linux上停止工作一段时间后

时间:2013-09-30 12:18:30

标签: java linux serial-port

我正在使用Java编程与连接到com-port的设备通信(通过USB连接到PC,但通过RS232到USB电缆连接)。我编写了一个与jssc对话并且在Windows下正常运行的程序,即使没有任何反应也能保持工作更长时间,就像它应该的那样。在Linux下,程序在2或3分钟后停止响应,我想知道为什么。

run语句如下

public void run() {
    while (stayConnected) {
        try {
            serialPort.writeBytes(pollBuf);
            readResponse(false);
            Thread.sleep(400);
            serialPort.writeBytes(readEvents);
            readResponse(true);
        } catch (InterruptedException ie) {
            logger.error("Interrupted exception: " + ie.getMessage());
        } catch (SerialPortException spe) {
            logger.error("SerialPortException: " + spe.getMessage());
        }
    }
}

要知道程序挂起的位置我添加了日志,我发现最后一个正常运行的命令是最后一次调用readResponse(true),第一个停止返回的命令是serialPort.writeBytes(pollBuf)。 希望它能解决这个问题,我将400毫秒的睡眠分成两部分,然后在serialPort.writeBytes(pollBuf)之前放置另一部分睡眠。这没有用。不知何故,serialPort.writeBytes函数永远不会返回,也不会抛出异常。

有没有人猜到失败可能是什么?它不是stayConnected布尔值,因为我从未调用过该函数,因此将其设置为false;

编辑:我刚刚添加了一个计数器,当我运行两次时程序进入循环283和285次,这非常接近并且都在2分钟左右......

2 个答案:

答案 0 :(得分:1)

我在Windows 7下遇到了一个非常类似的问题。我已将我的软件部署到客户端PC上,大约5到6个小时后,串口可以打开,但无法写入。

根据示例,我的代码类似:

String readPort(String command,int byteToRead){

    String Input = null;
    if (opened == true) {
        try {
            serialPort.writeString(command);

            Input = serialPort.readString(byteToRead);

        } catch (SerialPortException ex) {
            System.out.println(ex);
        }
    }

    return Input;
}

不返回的代码行是

serialPort.writeString(命令);

答案 1 :(得分:0)

我有完全相同的问题,原因是另一个线程关闭端口而主要端口仍在读取,我看到你的代码片段是关于Runnable所以仔细检查你的多线程管理。