串口电缆不插电

时间:2009-06-29 19:17:55

标签: .net serial-port

在.Net的SerialPort对象中,有没有办法确定串口是否已拔下或插入。

7 个答案:

答案 0 :(得分:14)

与USB不同,串行端口没有任何内置方法来检测链路状态的物理变化。可以使用一些引脚(即DTR,DSR,有时是DCD)来完成有限形式的“设备就绪/未就绪”信号,但这看起来不像您正在寻找的(它不是内置的)到RS232 - 设备必须支持它,你主要用它来与调制解调器通信。)

因此,简而言之:不,一般情况下。如果您知道/可以对您尝试与之通信的设备进行编程,并且您知道它将保持一定的高线(例如),您可以轮询它以查找该线路变高。但是如果你插入一个没有编程的设备来做那样可预测的事情,那么真的没办法说出来。 (有些设备可能会默认将DSR设置为高电平,但绝对不能确定。)

答案 1 :(得分:2)

大多数串行设备对查询都有某种类型的ack响应。只需发送一个简单的查询并等待响应。如果你没有得到它,设备就不存在或者至少没有响应。

答案 2 :(得分:1)

我没有尝试过,但请查看SerialPort.PinChanged事件和DsrChanged

每当有任何普通设备插入串口并打开时,我都希望端口的DSR引脚被置位;相反,如果该设备被拔掉,或者当它被关闭时,那么我希望DSR引脚状态能够改变/下降。


各种引脚的通常含义是:

  • DSR:设备已插入并已打开
  • CTS:设备已准备好接收数据(即使设备已插入,也可能会关闭,例如,当设备具有有限的板载缓冲区并使用此引脚来流量控制来自PC的数据传输时)< / LI>
  • DCD:设备(调制解调器)通过电话线与另一个调制解调器建立连接(因此您发送的任何内容都被视为要传输到远程调制解调器的数据)

其中,回答OP的是DSR。

答案 3 :(得分:1)

一种检测.NET中串行端口删除/插入的方法 - 请参阅我在Detect serial port insertion/removal的回答

答案 4 :(得分:1)

    Public Class SerialPort
        Inherits IO.Ports.SerialPort

        Event Disconnected()

        Public Sub OpenWithDisconnectionevent()
            Me.Open()
            Dim t As New Threading.Thread(AddressOf ConnectivityChecker)
            t.Start()
        End Sub


        Sub ConnectivityChecker()
            Do
                If Me.IsOpen = False Then
                    RaiseEvent Disconnected()
                    GoTo ThreadExit
                End If
            Loop
ThreadExit:
        End Sub
    End Class

答案 5 :(得分:0)

你可以检测到可用的串口,你可以尝试在try ... catch块中与它们通信。

这是c#

中端口检测的示例
using System;
using System.Collections.Generic;
using System.IO.Ports;

public class MyClass
{
 public static void Main()
 {
   string[] sPorts = SerialPort.GetPortNames();
   foreach(string port in sPorts)
     WL(port);
  RL();
 }

 #region Helper methods

 private static void WL(object text, params object[] args)
 {
  Console.WriteLine(text.ToString(), args); 
 }

 private static void RL()
 {
  Console.ReadLine(); 
 }

 private static void Break()
 {
  System.Diagnostics.Debugger.Break();
 }

 #endregion
}

答案 6 :(得分:0)

这将取决于您使用何种类型的电缆连接的设备类型。

您最好的办法是尝试处理PinChanged事件处理程序。

某些设备在连接和打开时会引发DSR,其他设备会使用这些设备进行握手。