与JSSC同步/异步串行端口通信

时间:2015-02-11 04:59:05

标签: java serial-port jssc

我正在尝试使用串口在两台计算机之间进行通信,我是这个领域的新手。我需要从一台计算机(比如说A)发送请求到另一台计算机(比如说B)并接收发送请求的响应。我正在使用响应更新Java Swing用户界面。

我正在使用jSSC库来执行此操作。我查看了SerialPortReader examples,以下是我的理解。

我必须在两台计算机上实现SerialPortEventListener .A将使用writeBytes方法发送请求。 B将侦听使用SerialPortEventListener发送的命令,并将使用writeBytes方法发送响应。 A将使用其SerialPortEventListener的实现来监听数据,并且当收到数据时,将更新UI。以下是我的问题。

a)我的上述观察是否正确?有没有不同的方法来做到这一点(例如,协议中是否存在将返回响应的writeBytes方法?)

b)我在几个步骤中读到串口通信可以是同步的也可以是异步的。但是从示例中,我无法理解该代码是否已实现异步或同步通信。如何使用jSSC实现同步/异步通信?我不是要求实施。只是一些指导方针和可以使用的方法。

c)消息可能会部分传递。例如,如果我将命令作为字符串“get variableThreeValue”发送,则可能只会收到“get”或类似“get varia”的内容。(这可能会导致“get get”等消息。 )我该如何处理这种情况?同样,我不是要求实施。只是一些指导方针和可以使用的方法。

2 个答案:

答案 0 :(得分:1)

经典"串口"是一种非常低水平的东西"。必须设置波特率,启动和停止位以及流量控制等参数,然后读取和写入字节序列。 Java库使用侦听器来接收直接从串行驱动程序感知的事件派生的事件(您在javadoc中找到类似" line"的术语)。如何反应,取决于"另一方"。

您可以使用流量控制来避免超出或过度填充接收器。 RS-232的行包含C(学习)T(o)S(结束)和R(equest)TS,因此"硬件握手"是一种选择。或者,US-ASCII定义的控制字符XON和XOFF,如果它不是二进制数据,它可以嵌入数据流中。如果发送端没有完全发送或计算机的速度差异很大,流控制应该不是问题。

据我了解,您将一些无线电设备连接到端口,其文档应指定所有参数,以及更高级别的协议,即如何传输和接收数据。该设备可能有特殊要求,例如,您必须在传输实际数据之前传递一些设置数据。 (如果只用一根电缆连接两台电脑,那么所有都取决于您。)

一旦你基本上可以发送和接收,你就必须考虑安全传输。您需要设计协议:

  • 消息格式,例如包含长度,序列号,数据字节,CRC。
  • 消息排序,即谁可以发送什么以及何时例如消息A到B,从B到A的确认,重复。或者来自B的NAK,A必须重新发送。
  • 也许您需要一个"会话协议",即登录(如在ftp中)和注销
  • 超时:如果任何一方在T?
  • 内没有收到另一条消息怎么办?
  • 您是否需要心跳,即在频道空闲时发送的消息,以了解对方仍然是#34;活着"。

WLAN连接应该使大部分内容变得不必要。真实"无线电" (一些短波?)我从来没有听说过,但我不是电台专家。

答案 1 :(得分:0)

XON / XOFF是软件流控制。假设生成器a和b之间的双向串行字节。如果要么发送一个XON字节就意味着哇,在发送XOFF字节之前停止向我发送字节。

对于硬件,用RTS替换带有CTS和XOFF字节的XON字节。