端口关闭和重新打开后的串口通信

Serial port communication after port is closed and reopen

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

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

我注意到的是,如果由于某种原因发生超时,关闭并重新打开端口,将干扰从该端口进一步读取消息(即无法解码读取的消息)。看起来好像设备上一条消息还在线上,继续进来进行下一次读取操作。

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

任何人都可以阐明这个话题,关于串口在 close/re-open 之后的行为究竟如何?即使我在应用程序中关闭连接,另一部分(设备)是否可能继续发送旧消息?

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

if (serialPort! = null && serialPort.isOpened ()) {
  serialPort.purgePort (1);
  serialPort.purgePort (2);
  serialPort.closePort ();
} 

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