繁体   English   中英

同一台计算机上两个应用程序之间的串行通信(RS232)(串行回送)

[英]Serial communication (RS232) between two applications on the same computer (serial loop back)

我有一个应用程序(应用),它刚刚从串口给出输入数据。 我没有任何外部设备通过串行端口将输入数据发送到应用程序,因此我想制作一个Java应用程序(App2),该应用程序可以通过串行端口与第一个应用程序(App1)通信,以将输入数据发送到App1。 但是我不知道如何与两个应用程序之间的串行端口通信。 就像使用127.0.0.1 IP(回送)上的套接字编程进行本地网络通信一样。 我知道有像RXTX和jSSC这样的库,但是在它们的文档中找不到像使用串行端口环回这样的库。 你能给我解决办法吗? 谢谢。

简单图:| App2 | =======(串行通信)======> | App1 |

这个答案没有JAVA内容,只有多年的痛苦经验...

如果您习惯使用套接字,那么串行通信还有很多其他功能。

空调制解调器电缆

您的计算机上需要两个串行端口,每个应用程序一个。 您将需要使用零调制解调器电缆将它们连接在一起。 串行端口没有内部环回,必须通过电缆连接。

波特率,奇偶校验等

然后,您必须选择波特率,停止位的数量以及要使用的奇偶校验。 您甚至不得不说一个单词有多大-5、7或8位(5是非常有历史意义的,少了7,8是最近的标准)。 这些必须匹配任何一端,否则应用程序将无法通信。 每个应用程序都必须设置其串行端口。

握手

然后,您必须决定使用哪种握手机制-XON / XOFF,硬件或不使用。 如果要发送二进制数据,则XON / XOFF不好,但仅需要RX / TX / GND线。 如果在应用程序中正确接线并正确设置,则硬件会更好。 许多廉价的廉价USB串行端口适配器无法正确执行硬件流控制。 根本不容易握手,也只需要RX / TX / GND,但是最难在软件中使用。 如果一个应用程序不读取而另一应用程序正在写入,则数据会丢失。

同步化

然后您有同步问题。 您必须编写应用程序,以便它们可以彼此同步。 如果您没有选择握手,那么在app1准备收听之前,没有什么可以阻止app2发送。 当然,您可以在app2之前先启动app1,但这还是不能令人满意的,并且如果您进行双向通信(数据双向传输),则无法正常工作。 您不能先启动两个应用程序。

启动

然后就是一个问题,即使您在应用程序中使用硬件握手,也无法保证在运行串行端口之前操作系统已通过这种方式设置了串行端口。 例如,您可能首先启动app2,而app1的串行端口可能会说“清除发送”,因为在您有机会运行app1之前,操作系统已经以这种方式设置了app1的串行端口。 App2认为它可以发送消息,并且可以这样做,直到app1启动,配置端口,然后App2才意识到它发送数据的时间太早,并且数据已经丢失。

简而言之,您需要在涉及双向通信的应用程序之间使用一些同步协议,以便他们可以确保另一端的应用程序确实存在并且正在监听。

这比使用套接字要难得多。 使用TCP套接字,栈可确保仅当另一端准备读取数据时,数据才流动。

可能在应用程序的用户界面上有一个“立即开始”按钮。 然后,用户可以告诉每个应用程序另一个正在运行,并且电缆已插入。

结论

串行端口比套接字更令人讨厌!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM