如何使用C#的SerialPort
类来发现设备是否连接到特定的串行(COM)端口?
注意:即使没有设备连接到端口,该类的Open
方法也会打开端口。
答案 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)
你可以尝试一些事情