我正在开发一个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();
答案 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