c#串口.IsOpen在物理断开连接时返回true

本文关键字:连接 返回 true 断开 串口 IsOpen | 更新日期: 2023-09-27 18:14:43

c# SerialPort。当物理断开USB端口上的串行电缆时,IsOpen返回true。有谁能帮我克服这个问题吗?

c#串口.IsOpen在物理断开连接时返回true

这不是串行端口的工作方式,它们没有像TCP这样的标准连接面向协议。"IsOpen"名称的选择不是偶然的,它没有说"已连接",只表明Open()调用成功,当程序退出时调用Close()方法可能是一个好主意。

如果运气好的话,您应该可以看到SerialPort。DsrHolding属性false在断开线缆或关闭设备电源时。串口。ctholding应该表明设备已准备好接收数据。这些硬件握手信号并不总是正确实现,当由于电气噪声而断开电缆时,它们可能会给出错误的指示。

没有一个很好的理由让电缆断开,而不是让任何人意识到这一点,串行端口电缆总是很短。

据我所知,串行端口没有标准的方法来知道另一端是否有东西。有些设备可能会将一些线拉高以表示连接,但这完全取决于设备,这意味着您必须自己实现该逻辑。

我建议你试一试,看看能不能得到什么回报。如果你启用了握手,如果另一端没有设备,你很可能会得到一个超时

你的问题很模糊,细节会有所帮助,但我无论如何都会尝试。

这不是IsOpen的作用。如果你想知道串行端口是否连接到某些东西,你将不得不使用Read和Write TimeOut属性,并在你发送的任何msg语句周围放置一个try catch。

我通常做的是创建一个简单的方法,在串行端口上向设备发送查询,然后如果它接收到一些东西,它就连接了。如果超时,就说明有问题。我打开串行端口后立即调用此方法以确保一切正常工作。在那之后,你将不得不依赖于超时异常,每次你试图发送一些东西。

用于检测USB线是否已拔出,转到串行转换器。如果转换器未插入,它应该从可用的端口列表中删除。如果是这样,当您尝试打开端口时,SerialPort应该抛出异常。

IsOpen将始终返回true,如果您已经打开了串行端口。它只能告诉您之前是否打开过串行端口。

如果你想知道你的串行端口是否物理断开,试着发送一个命令字符串到你的设备,你可以从命令中得到响应。每隔5秒或10秒执行一次,以密切关注设备的连接情况。

以上就是我在我的项目中是怎么做的,如果有更好的方法,请在下面评论

我所做的是有2个定时器首先是较短的,它试图找到端口并初始化设备,如果发现我禁用定时器1另一个较长,试图读取端口。字节读取,如果失败,在catch中,我启用定时器1