是否可以知道RS232端口的连接状态?

时间:2014-08-10 19:31:08

标签: serial-port

在9针电缆中,您建议使用哪个信号/引脚来检查连接状态?

到目前为止,我正在使用 DSR信号,因为在我正在测试的硬件中,如果电缆连接正确,则DSR信号 1 断开连接的DSR转到 0 。然而,对于其他驱动程序和/或操作系统,DSR在消息传输过程中会发生变化,或者始终为0.因此,除非在晴天的25ºC受控条件下,否则我发现此DSR信号不可靠。

那么我如何知道在某个特定时间点我是否仍然连接,即电缆没有断开连接?

请注意,连接可能会丢失,我仍然在操作系统的端口列表中显示并打开了我的串行端口,因此检查端口存在无法解决问题。我唯一的希望是依靠9个引脚中的一个进行检查。

此外,我不想发送或接收字节来检查连接状态。应该有更好的方式...

谢谢!

1 个答案:

答案 0 :(得分:6)

在任何给定时间都没有可靠的方法来确定串行连接状态。

标准方法是让每一方都将DTR变为高电平,因此无论您连接到哪个人都能看到DSR并因此知道某些事情在另一端。您还没有具体说明确切的连接类型,但由于您遇到了这些问题,我现在假设它是DTE / DTE并且需要零调制解调器连接。 / p>

更糟糕的是,问题可能出在电缆本身而不是软件或操作系统上。

See this page for more info,但零调制解调器电缆的引脚排列不止一个。

零调制解调器电缆内所需的最小接线如下所示: No-Handshake Null Modem Cable

这就是" No-Handshake null调制解调器电缆"。您可以看到DTR和DSR引脚(引脚6和4)无处可寻。使用此电缆插入某些东西时,DSR引脚状态不会改变。

然后就是这样:

Loop-Back handshake

这是一个" Loop-Back握手线"。你可以在这里看到DTR和DSR(引脚6和4)在每个连接器处相互桥接,而不是沿着电缆的长度走。这意味着如果您将DTR设置为高,您将看到一个DSR - 您自己的DSR。这告诉您有一条串行电缆连接到您的端口,但该电缆的另一端并不一定要去任何地方。您可以将电缆切成两半并将其粘在鼻子上,但您仍然可以看到软件告诉您的是有效连接。

更好的解决方案是看起来像这样的电缆:

Partial Handshake

或者像这样

Full Handshake

这是部分或全部握手线缆。您可以看到每一侧的引脚4都进入另一侧的引脚6。因此,每一方都可以将DTR设置为高,并查看对方的DSR。这是唯一可以准确确定电缆是否实际连接到设备的情况;即使这样,只有每一方同意设置DTR。除非你控制通信的双方,否则这将会被击中或错过。

在没有发送数据并等待有效回复的情况下,您可以做到最好。