Получить имя устройства, подключенного к последовательному порту

Я ищу, как получить имя устройства материала, подключенного к последовательному порту.

У меня есть два разных типа материала, которые могут соединиться с ним.

Первый: принтер (только получает данные и ничего не отправляет обратно) Второй: баланс (только отправляет данные и ничего не получает)

Как я могу различить эти два типа материала?

Благодарю.

5 ответов

Решение

Не существует универсального способа идентификации устройств с последовательным портом (UART RS232).

Если на устройствах нет специальных команд, которые вы можете отправить на устройство, и чтобы оно отвечало идентифицирующей информацией, вы ничего не можете сделать.

Обычно приложение, использующее последовательный порт, будет иметь стандартный экран настроек, который пользователь будет использовать для настройки последовательного порта, к которому подключено устройство, настройки порта для таких вещей, как скорость передачи, биты четности, стоповые биты и биты данных. Если несколько устройств могут быть подключены к одному и тому же порту, оператор будет нести ответственность за выбор правильной конфигурации для целевого устройства перед установкой связи с устройством.

Это преимущество новых технологий, таких как USB и т. Д., Где идентификация устройства встроена в стандарт.

Попробуй это:

        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());

        }
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.!

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";
            }

        }
}

Это не работает на Win11, а иногда и на Win10. Попробуйте вместо этого использовать devcon.exe с аргументом hwids =ports.

          private void RetrieveDeviceInfo()
           {
        Process proc1 = null;
        try
        {
            proc1 = new Process();
            proc1.StartInfo = new ProcessStartInfo();
            proc1.StartInfo.FileName = this.DevConExeFile;
            proc1.StartInfo.Arguments = "hwids =ports";
            //proc1.StartInfo.RedirectStandardInput = true;
            proc1.StartInfo.RedirectStandardOutput = true;
            proc1.StartInfo.UseShellExecute = false;
            proc1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            proc1.StartInfo.CreateNoWindow = true;
            proc1.Start();
            proc1.WaitForExit(1000);
            string AllOutput = proc1.StandardOutput.ReadToEnd();
            this.LastOutput = AllOutput;
        }
        catch(Exception em1)
        {
            throw em1;
        }
        finally
        {
            try
            {
                proc1.Kill();
            }
            catch
            {

            }
        }
    }
    
Другие вопросы по тегам