使用Java串行通信jssc库

时间:2016-10-24 13:15:58

标签: java delay jssc

我正在开发一个Java应用程序,它使用jssc库与外部设备进行串口通信。我需要发送一个命令然后立即阅读回答。我面临的问题是,在写入和读取命令之间没有200毫秒的延迟,答案是空的。我已经使用python开发了类似的功能,并且在python中它工作得很好,但是在Java中由于200毫秒的延迟,通信非常慢。我想问一下是否有可能让它更快?我一直在尝试,关闭ang操作之间的端口,清除端口但没有任何成功。预先感谢您的帮助。贝娄你可以找到我的代码

serialPort = new SerialPort(getPortName());

        if (false == serialPort.isOpened()) {
            try {

                logger.debug("Opening serial port: " + getPortName());
                // Open port
                serialPort.openPort();
                // We expose the settings. You can also use this line - serialPort.setParams(9600, 8, 1, 0);
                serialPort.setParams(SerialPort.BAUDRATE_115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
                        SerialPort.PARITY_NONE);
            } catch (SerialPortException ex) {
                logger.error("Exceptiion during opening port: " + ex);
            }
        }
serialPort.writeBytes(cmd);
            logger.debug("command sended=" + javax.xml.bind.DatatypeConverter.printHexBinary(cmd));
            // delay added because java didn`t read data at once
            Thread.sleep(200);

            answer = serialPort.readBytes();

1 个答案:

答案 0 :(得分:0)

我认为JSSC基于Javax comm api javax.comm,这个API在发送命令然后阅读回复时有200ms的延迟......我想这就是为什么你在尝试阅读时没有得到任何回应在200ms之前......

这是我使用javax.comms的输出时间,我正在尝试找到这个延迟的解决方案,我正在使用串行通信与ESP8266进行通信

2016-11-08 12:32:31.155[INFO]Starting the receiver 2016-11-08 12:32:31.355[INFO]Receives first char 200ms after..

会尝试一些事情并发布,如果我有一个解决方案...也发布在这里,以防有人找到解决方案。

------- UDATE -------------(对不起StackOverflow上的所有新评论)

在javax comms API中有一个属性来设置阅读器等待数据的时间,默认情况下设置为200毫秒(我猜太多了)你可以将它设置为你想要的任何值,但要记住您可以在数据到达后读取并获得-1作为响应字节:

            port = (javax.comm.SerialPort) portId.open( String.valueOf( this ), (int) timeout );
            port.setSerialPortParams( freq, dataBits, stopBits, parity );
            port.enableReceiveTimeout( 0 );

通过这个以及对我的代码进行一点重新编程,我在不到3毫秒内得到了响应,我想在JSSC中发生了类似的事情。

2016-11-08 01:43:32.875[DEBUG]Starting the receiver 2016-11-08 01:43:32.878[DEBUG]Receives first char 3ms after