Определение номера COM-порта USB-UART конвертера по VID/PID

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

Определение номера COM-порта USB-UART конвертера по VID/PID

Сообщение Mephistt »

Здравствуйте, уважаемые профессионалы!
Имеется разнообразное оборудование (самодельное), которое подключается к ПК через USB-UART конвертеры с виртуальным COM-портом (FT232BM, CP2102, подобные).
При подключении оборудования к каждому конкретному USB-порту назначается какой-то определённый номер COM-порта, который можно посмотреть/изменить в диспетчере устройств. В LabView приходится вручную устанавливать номер COM-порта каждый раз на новой машине или при подключении к другому USB-потру... Думаю, проблема известная, но в поиске решения не нашёл.
Собственно, вопрос: (1) как программно узнать по VID/PID/PART_NUMBER/SERIAL_NUMBER факт подключения определённого оборудования и (2) номер назначенного системой COM-порта?
Версия LabVew 6.1.
Сканировать все порты по очереди, посылая стандартную посылку и ожидая ответ, - элементарное, но не подходящее решение, поскольку часть COM-портов может быть занята другим оборудованием со своим протоколом обмена...
Спасибо заранее!
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение dadreamer »

На этом форуме уже есть похожая тема, там в частности предлагается использовать Windows Management Instrumentation (WMI), что является наверное самым подходящим в вашем случае. Можно обращаться к WMI через .NET интерфейс или же написать DLL на Delphi, C/C++ или другом языке, для них уже есть готовые библиотеки (WbemScripting_TLB, например). По идее, ещё можно попытать счастья с kernel32 или System Exec.
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение Mephistt »

Действительно, похожая тема... но по имени устройства ищут, не по VIP/PID/SERIAL - именно поэтому не нашёл поиском.
Попробую проштудировать, может, VID/PID теми способами тоже можно задействовать...

Хотелось бы, в идеале, решить проблему стандартными средствами LabView, без привлечения сторонних библиотек и драйверов...
ESeid

Автор
advanced
advanced
Сообщения: 150
Зарегистрирован: 30 мар 2011, 22:41
Награды: 1
Версия LabVIEW: 8.2-2013
Контактная информация:

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение ESeid »

Mephistt, посмотри здесь:
http://www.ftdichip.com/Support/Softwar ... abVIEW.htm
Я использовал эти примеры для подключения модуля FT к произвольному USB порту. Но мои инстументы тебе не подойдут - они написаны на LV10, я не смогу дать тебе версию для LV 6.
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение Mephistt »

Спасибо за ссылку, посмотрел (какие молодцы... для обратной совместимости версий выложили скриншоты программы).
Поиск устройства в этих примерах идет по Device Index. Как я понял, это порядковый номер подключенного устройства, начиная с нуля?.. Или это конфигурируемый параметр для каждого экземпляра устройства?..
К сожалению, сейчас нет возможности проверить, может, подскажете: есть ли в Device Description или где-то еще номер назначенного системой COM-порта, или надо "до конца" через dll и Handle работать? Спрашиваю потому, что в системе могут быть не только FTDI, но и другие устройства типа CP2102, так что предпочтительней узнать номер COM-порта и в дальнейшем иметь общий для всех устройств протокол связи.
И вообще, что содержится в строке Device Description? Можно попросить кинуть пример?
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение Mephistt »

Да, к сожалению, нигде пока так и не увидел пример определения устройства именно по VID/PID/SERIAL... Была идея VID/PID чипов не менять, чтобы родные драйвера легко вставали без танцев с бубном на любой машине, а в поля PART_NUMBER/SERIAL_NUMBER зашить информацию о конкретном оборудовании. Тогда LabView в момент подключения будет знать, что именно за устройство подключено и, соответственно, на какой COM-порт оно "село".
C WMI через .NET пока ничего не понял и где почитать не нашёл...
ESeid

Автор
advanced
advanced
Сообщения: 150
Зарегистрирован: 30 мар 2011, 22:41
Награды: 1
Версия LabVIEW: 8.2-2013
Контактная информация:

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение ESeid »

Mephistt, очень тяжело с тобой общаться, имея такую разницу в версиях LV. Я уж и не помню, что вообще есть в 6-й версии. У тебя нет возможности обновиться хотя бы до 8-й?
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1337
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 44 раза
Контактная информация:

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение AndreyDmitriev »

Самое простое - devcon.exe find * через SystemExec.vi
Затем разбираем вывод, там будет что-то типа
ACPI\PNP0501\1 : Communications Port (COM1)
USB\VID_067B&PID_2303\6&12E1C52B&0&1 : Prolific USB-to-Serial Comm Port (COM7)
FTDI сейчас под рукой нет, но думаю, там тоже номер порта будет указан. Где-то так.
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение Mephistt »

ESeid, понимаю, конечно... и прошу прощения. Более того, возможность достать версию 8.5 есть, но ряд приложений по некоторым соображениям делаем на 6.1... Я потому и спрашиваю, как можно решить проблему в принципе, поскольку каждое конкретное решение для 8.5 может не работать или не существовать для 6.1.

AndreyDmitriev, отлично, спасибо за указание, что devcon выдает и vid/pid, и COM! Собственно, это и нужно. Буду копать в этом направлении, поскольку и легко, и VIP/PID задействуется, может даже SERIAL выдаст...
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение Mephistt »

Как будет возможность, протестирую на FT232BM и CP2102.
devcon.exe выдаёт VID/PID, название и ещё много интересного, надеюсь только, что и номер порта будет...
Всем спасибо за помощь!
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение dadreamer »

Mephistt

Вот ещё пример работы с WMI. Переделал маленько попавшийся в сети пример. Если решитесь его использовать, надо будет закрыть все открытые ссылки на NET-объекты и обработать ошибки. И вот ещё ссылка на WMI Code Creator от Майкрософт, это утилита для создания запросов к WMI для C# и VB, показывает весь список классов, свойств и методов, можно выбрать подходящие и сразу же протестировать с выводом в командную строку.
Вложения
WMI_LabVIEW.vi
пример работы с WMI через .NET (LabVIEW 8.0)
(17.08 КБ) 400 скачиваний
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение Mephistt »

dadreamer, спасибо, посмотрел Вашу программу с WMI.
К огромному моему сожалению, нет под рукой ни одного USB-UART конвертера. Завтра протестирую вывод команды devcon.exe find * с обоими модулями. Как я понял, WMI дает практически тот же вывод, только структурировано и стандартными средствами LabView... А есть ли поддержка .NET для версии 6.1?.. Где поискать, кто подскажет?
На домашнем компе есть один COM-порт, и в выводе он отображается "ACPI\PNP0501\1". Меняю в диспетчере устройств номер порта и не вижу никакой разницы в выводе devcon.exe... Это меня одновременно наводит на мысли и пугает, что devcon (как и WMI) дадут информацию о подключении модулей, но самого номера COM-порта там может не оказаться... Пока это лишь сомнения, завтра напишу конкретно, что получится.
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение Mephistt »

Хм... как писал AndreyDmitriev, вывод devcon.exe на встроенный COM-порт должен быть примерно следующим:
"ACPI\PNP0501\1 : Communications Port (COM1)".
У меня же русская версия Windows и в диспетчере устройств порт называется "Последовательный порт (COM1)", а вывод devcon.exe:
"ACPI\PNP0501\1 ".
При вызове devcon.exe из cmd.exe русские символы также не отображаются. При этом нет ни одного русского названия оборудования, только те названия отображаются, где английские символы. Я что-то в тупике, как же получить в выводе devcon русские названия?..
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение Mephistt »

Я, похоже, погорячился, сказав, что WMI даёт тот же вывод, что и devcon.exe... Он, скорее, может дать ВСЁ, если только уметь искать... Поправьте, если я неправ.
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

Re: Определение номера COM-порта USB-UART конвертера по VID/

Сообщение Mephistt »

У WMI проблем с русским нет. Надеюсь, в каком-то свойстве Win32_USBHub (может, Name?) будет указан COM-порт...
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приборами»