【问题标题】:Get the device name connected to the serial port获取串口连接的设备名称
【发布时间】:2010-12-21 14:00:22
【问题描述】:

我搜索如何获取串口连接的素材的设备名称。

我有两种不同类型的材料可以连接在上面。

第一个:打印机(只接收数据不发回) 第二个:余额(只发送数据,不接收)

如何区分这两种材料?

谢谢。

【问题讨论】:

  • Balance 不会定期发送数据,只有在另一端发生某些事件时才会发送数据;)

标签: c# serial-port


【解决方案1】:

试试这个:

        ManagementObjectCollection ManObjReturn;
        ManagementObjectSearcher ManObjSearch;
        ManObjSearch = new ManagementObjectSearcher("Select * from Win32_SerialPort");
        ManObjReturn = ManObjSearch.Get();

        foreach (ManagementObject ManObj in ManObjReturn)
        {
            //int s = ManObj.Properties.Count;
            //foreach (PropertyData d in ManObj.Properties)
            //{
            //    MessageBox.Show(d.Name);
            //}
            MessageBox.Show(ManObj["DeviceID"].ToString());
            MessageBox.Show(ManObj["PNPDeviceID"].ToString());
               MessageBox.Show(ManObj["Name"].ToString());
               MessageBox.Show(ManObj["Caption"].ToString());
               MessageBox.Show(ManObj["Description"].ToString());
               MessageBox.Show(ManObj["ProviderType"].ToString());
               MessageBox.Show(ManObj["Status"].ToString());

        }

【讨论】:

  • 太棒了!比检查所有连接的 USB 设备然后过滤它们要快得多,谢谢!
【解决方案2】:

没有通用的方法来识别串口 (UART RS232) 设备。

除非设备有特殊的命令,您可以发送到设备并让它响应识别信息,否则您无能为力。

通常依赖串行端口的应用程序将有一个标准设置屏幕,用户将使用该屏幕来配置设备所连接的串行端口、波特率、奇偶校验位、停止位和数据位等端口配置。如果可以在同一个端口上切换多个设备,则操作员将负责在与设备通信之前为目标设备选择正确的配置。

这是 USB 等新技术的优势,其中设备标识内置于标准中。

【讨论】:

  • 我在一个工业项目中,所以 USB 并没有在所有地方实现...... :( 你将如何处理这种情况?
  • @Arnaud:询问用户(可能只问一次并记住答案)。
  • @ArnaudF,由于 RS-232 规范中没有对此的标准,因此您最好的希望是探测串行端口并希望设备有某种识别响应,您可以使用。如果幸运的话,这些设备甚至可能有一个记录在案的命令语言,您可以使用它来通信和查询设备,但这将是某种启发式的,具体取决于所讨论的设备。最典型的是,这作为应用程序设置的一部分进行处理,用户负责识别设备和串行端口配置(波特率、奇偶校验等)
  • 这似乎是最好的解决方案,你是对的。谢谢克里斯!
【解决方案3】:
static void Main(string[] args)
{
    ManagementObjectCollection ManObjReturn;
    ManagementObjectSearcher ManObjSearch;
    ManObjSearch = new ManagementObjectSearcher("Select * from **Win32_ParallelPort**");
    ManObjReturn = ManObjSearch.Get();

    foreach (ManagementObject ManObj in ManObjReturn)
    {
        //int s = ManObj.Properties.Count;
        //foreach (PropertyData d in ManObj.Properties)
        //{
        //    MessageBox.Show(d.Name);
        //}
        Console.WriteLine(ManObj["DeviceID"].ToString());
        Console.WriteLine(ManObj["PNPDeviceID"].ToString());
        Console.WriteLine(ManObj["Name"].ToString());
        Console.WriteLine(ManObj["Caption"].ToString());
        Console.WriteLine(ManObj["Description"].ToString());
        Console.WriteLine(ManObj["ProviderType"].ToString());
        Console.WriteLine(ManObj["Status"].ToString());

    }

}

http://www.seeques.com/20766280/the-port-name-is-illegal-or-couldnt-be-connected-to-the-device.html

端口名不合法怎么会有这样的错误信息...fio.!

【讨论】:

    【解决方案4】:
    Class1 UD = new Class1();
    {
    string strUserAgent = Request.UserAgent.ToLower();
            if (strUserAgent != null)
            {
                string Browser = Request.Browser.Browser;
                string a = Request.Browser.MobileDeviceManufacturer;
                string b = Request.Browser.MobileDeviceModel;
                string c = Request.Browser.Platform;
                string d = Request.Browser.Type;
                string e = Request.Browser.Version;
    
                UD.Browser = Browser;
                UD.MobileDeviceModel = b;
                UD.MobileDeviceManufacturer = a; 
                UD.Platform2 = c;
                UD.Type = d;
                UD.Version2 = e; 
    
    
    
    
                if (Request.Browser.IsMobileDevice == true || strUserAgent.Contains("iphone") ||
                         strUserAgent.Contains("blackberry") || strUserAgent.Contains("mobile") ||
                         strUserAgent.Contains("windows ce") || strUserAgent.Contains("opera mini") ||
                         strUserAgent.Contains("palm"))
                {
                    UD.deviceType = "Request from Mobile Device";
                }
                else
                {
                    UD.deviceType = "Request from Computer";
                }
    
            }
    }
    

    【讨论】:

    • Android 设备将作为“移动设备”出现
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2017-12-20
    相关资源
    最近更新 更多