0

我正在使用带有外部设备的名为 jSSC(java-simple-serial-connector)的库在 Java 中编写串行端口通信应用程序。

发送消息并等待其返回后,如果在一定时间(2 秒)后没有读取,我会超时,将中止读取。如果发生这种情况,端口将关闭并重新打开以进行进一步的消息交换。

我注意到的是,如果由于某种原因发生超时,并且端口被关闭并重新打开,则会干扰从端口读取的进一步消息(即无法解码读取的消息)。看起来好像来自设备的先前消息仍然在线并继续进入下一个读取操作。

我对串口不是很熟悉,所以我不完全确定是否是这种情况。我认为(但很可能是错误的)在我关闭我这边的连接后(如在 TCP/IP 通信中),另一部分发送的先前消息将被丢弃。

关于关闭/重新打开后串行端口的行为如何,任何人都可以对这个主题有所了解吗?即使在我关闭应用程序中的连接后,另一部分(设备)是否可以继续发送旧消息?

4

2 回答 2

1

在您的情况下,我认为如果超时,您应该先执行清除然后关闭端口,然后再尝试再次重新打开它。

if (serialPort! = null && serialPort.isOpened ()) {
  serialPort.purgePort (1);
  serialPort.purgePort (2);
  serialPort.closePort ();
} 
于 2015-09-22T11:04:08.617 回答
0

您不应该在关闭端口时清除端口,而是在打开串行端口时清除端口。操作系统和驱动程序维护自己的串行端口数据缓冲区。当 purge 被调用时,它实际上调用了操作系统(和驱动程序)的刷新函数,这就是之前接收到的数据被丢弃(删除)的地方。也尝试使用任何其他库,如串行通信管理器。

于 2016-03-10T04:48:16.750 回答