Serial port 可以知道RS232端口的连接状态吗?

Serial port 可以知道RS232端口的连接状态吗?,serial-port,Serial Port,在9针电缆中,你们推荐哪个信号/针来检查连接状态 到目前为止,我使用的是DSR信号,因为在我测试的硬件中,如果电缆连接正确,DSR信号为1,如果断开连接,DSR变为0。但是,对于其他驱动程序和/或操作系统,DSR在消息传输过程中会发生变化或始终为0。所以我不认为这个DSR信号是可靠的,除非在阳光明媚的25ºC的受控条件下 那么,我如何知道在给定的时间点我是否仍然连接,即电缆没有断开 请注意,连接可能会丢失,并且我的串行端口仍然存在并在操作系统的端口列表中打开,因此检查端口是否存在解决不了任何问题

在9针电缆中,你们推荐哪个信号/针来检查连接状态

到目前为止,我使用的是DSR信号,因为在我测试的硬件中,如果电缆连接正确,DSR信号为1,如果断开连接,DSR变为0。但是,对于其他驱动程序和/或操作系统,DSR在消息传输过程中会发生变化或始终为0。所以我不认为这个DSR信号是可靠的,除非在阳光明媚的25ºC的受控条件下

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

请注意,连接可能会丢失,并且我的串行端口仍然存在并在操作系统的端口列表中打开,因此检查端口是否存在解决不了任何问题。我唯一的希望是依靠9个针脚中的一个来检查它

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


谢谢

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

标准方法是每一方将DTR设置为高,这样无论您连接到谁,都可以看到DSR,从而知道另一端有什么东西。您还没有明确说明连接的确切类型,但由于存在这些问题,我现在假设它是DTE/DTE,需要一个空调制解调器连接

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

,但空调制解调器电缆有多个引脚

空调制解调器电缆内部所需的最小布线如下所示:

这就是所谓的“无握手零调制解调器电缆”。您可以看到DTR和DSR引脚(引脚6和引脚4)哪儿也去不了。当使用此电缆插入某物时,DSR引脚状态不会改变

然后是这个:

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

更好的解决方案是这样的电缆:

还是像这样

这是部分或全部握手电缆。您可以看到,每一侧的针脚4插入另一侧的针脚6。因此,每一方都可以将DTR设置为高,并查看另一方的DSR。这是唯一可以准确确定电缆是否实际连接到设备的情况;即使如此,只要双方同意设置DTR。除非你控制了沟通的双方,否则这是注定要失败的


这是您在不发送数据并等待有效回复的情况下所能做的最好的事情。

您需要稍微降低期望值,串行端口不像TCP那样保持连接状态。DSR通常是设备通电和电缆连接的良好指示。然而,它也表明了在电缆另一端处理软件的程序员的技能。这确实会让人摸不着头脑,建议打开DTR是[serial port]标签中的一个标准答案。@HansPassant更让我困扰的是,在TCP连接中,我们也无法监控连接状态: