我正在使用一个名为jSSC(java-simple-serial-connector)的库和一个外部设备在Java中编写串口通信应用程序。
发送消息并等待其返回后,如果在一定时间(2秒)后没有读数,我将超时读取中止。如果发生这种情况,端口将关闭并重新打开以进行进一步的消息交换。
我注意到,如果由于某种原因,超时发生,并且端口关闭并重新打开,则端口的进一步消息读取将受到干扰(即,无法解码消息读取)。看起来好像来自设备的先前消息仍在线上并继续进入下一次读取操作。
我对串口不太熟悉,所以我不确定是否是这种情况。我认为(但可能是错误的)在我从我这边关闭连接之后(在TCP / IP通信中)丢弃了由其他部分发送的先前消息。
关于/重新打开后,有没有人能够详细介绍串口的行为?即使在关闭应用程序中的连接后,其他部分(设备)是否可以继续发送旧消息?
答案 0 :(得分:1)
在您的情况下,我认为如果超时,您应该先执行清除,然后关闭端口,然后再尝试重新打开它。
if (serialPort! = null && serialPort.isOpened ()) {
serialPort.purgePort (1);
serialPort.purgePort (2);
serialPort.closePort ();
}
答案 1 :(得分:0)
您应该在关闭时但在打开串行端口时清除端口。操作系统和驱动程序为串行端口数据维护自己的缓冲区。当调用purge时,它实际上调用操作系统(和驱动程序)的flush函数,这是先前接收的数据被丢弃(删除)的地方。还尝试使用任何其他库,如串行通信管理器。