我正在尝试使用串口在两台计算机之间进行通信,我是这个领域的新手。我需要从一台计算机(比如说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”等消息。 )我该如何处理这种情况?同样,我不是要求实施。只是一些指导方针和可以使用的方法。
答案 0 :(得分:1)
经典"串口"是一种非常低水平的东西"。必须设置波特率,启动和停止位以及流量控制等参数,然后读取和写入字节序列。 Java库使用侦听器来接收直接从串行驱动程序感知的事件派生的事件(您在javadoc中找到类似" line"的术语)。如何反应,取决于"另一方"。
您可以使用流量控制来避免超出或过度填充接收器。 RS-232的行包含C(学习)T(o)S(结束)和R(equest)TS,因此"硬件握手"是一种选择。或者,US-ASCII定义的控制字符XON和XOFF,如果它不是二进制数据,它可以嵌入数据流中。如果发送端没有完全发送或计算机的速度差异很大,流控制应该不是问题。
据我了解,您将一些无线电设备连接到端口,其文档应指定所有参数,以及更高级别的协议,即如何传输和接收数据。该设备可能有特殊要求,例如,您必须在传输实际数据之前传递一些设置数据。 (如果只用一根电缆连接两台电脑,那么所有都取决于您。)
一旦你基本上可以发送和接收,你就必须考虑安全传输。您需要设计协议:
WLAN连接应该使大部分内容变得不必要。真实"无线电" (一些短波?)我从来没有听说过,但我不是电台专家。
答案 1 :(得分:0)
XON / XOFF是软件流控制。假设生成器a和b之间的双向串行字节。如果要么发送一个XON字节就意味着哇,在发送XOFF字节之前停止向我发送字节。
对于硬件,用RTS替换带有CTS和XOFF字节的XON字节。