如何发现设备是否连接到特定的串行(COM)端口?

时间:2012-10-10 06:21:40

标签: c# .net serial-port

如何使用C#的SerialPort类来发现设备是否连接到特定的串行(COM)端口?

注意:即使没有设备连接到端口,该类的Open方法也会打开端口。

4 个答案:

答案 0 :(得分:3)

1.WMI:SELECT * FROM Win32_SerialPort

ManagementObjectSearcher manObjSearch = new ManagementObjectSearcher("Select * from Win32_SerialPort");
ManagementObjectCollection manObjReturn = manObjSearch.Get();

foreach (ManagementObject manObj in manObjReturn)
{
    //int s = manObj.Properties.Count;
    //foreach (PropertyData d in manObj.Properties)
    //{
    //    Console.WriteLine(d.Name);
    //}
    Console.WriteLine(manObj["DeviceID"].ToString());
    Console.WriteLine(manObj["Name"].ToString());
    Console.WriteLine(manObj["Caption"].ToString());
}

2. 如果设备发送回复: System.IO.Ports.SerialPort.GetPortNames() 并发送基本命令:

foreach (string portname in SerialPort.GetPortNames())
{
    var sp = new SerialPort(portname, 4800, Parity.Odd, 8, StopBits.One);
    try
    {
        sp.Open();
        sp.Write("Your known command to device");
        Thread.Sleep(500);
        string received = sp.ReadLine();

        if (received == "expected response")
        {
            Console.WriteLine("device connected to: " + portname);
            break;
        }
    }
    catch (Exception)
    {
        Console.WriteLine("device NOT connected to: " + portname);
    }
    finally
    {
        sp.Close();
    }
}

答案 1 :(得分:2)

答案取决于设备和电缆。

在某些情况下,连接设备时会引发DSR(SerialPort.DsrHolding)甚至CTS(SerialPort.CtsHolding)。

但在某些情况下,您可能只连接了Tx / Rx,唯一的方法是尝试与设备通信。

您需要查看设备及其电缆的文档。

没有适用于任何设备的通用解决方案。

答案 2 :(得分:0)

您可以通过打开串口并发送设备支持的最基本命令来检查响应。例如,对于GSM调制解调器,您打开端口并按命令发送并接收确认响应。

答案 3 :(得分:0)

你可以尝试一些事情

  1. 创建串口对象并打开端口,现在是设备 连接后,OS应该发送CDChanged事件。
  2. 您ping串口,如果收到回复,则认为已连接。