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

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

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

Сообщение Mephistt »

dadreamer, ещё раз спасибо за ссылку на WMI Code Creator. Прикладываю исходный код на C#, который выдаёт всю информацию об объектах из классов Win32_USBHub и Win32_SerialPort.
Скомпилировал exe - работает! По крайней мере, в консоль выдаётся информация о номере встроенного COM-порта и всех подключённых USB-устройствах... (Повторюсь, собственно на целевых микросхемах протестировать пока не могу.)

А теперь основной вопрос: я так понял, что нельзя сделать stand-alone приложения, требуется установка .NET Framework 4.0... А используются в программе по сути несколько функций из System.Management.dll... Это нормально? Обойти никак?.. В примере WMI_LabVIEW.vi используется оснастка LabView 8.0 для доступа к System.Management. Означает ли это, что .NET Framework должен стоять на машине с LabView 8.0?..

Если вкратце, то меня мучает совсем простой вопрос. Хочу иметь stand-alone приложение типа devcon.exe, которое будет понимать и выдавать русские названия устройств. Хотел такое приложение скомпилировать через WMI Code Creator и Microsoft Visual C#, но понял, что stand-alone'ом тут и не пахнет... куда копать - теперь не знаю...
Вложения
WMIQuery.txt
Исходный код на C#, создан WMI Code Creator: все данные объектов Win32_USBHub и Win32_SerialPort выводятся в командную строку
(10.76 КБ) 293 скачивания
AndreyDmitriev

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

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

Сообщение AndreyDmitriev »

Mephistt писал(а): А теперь основной вопрос: я так понял, что нельзя сделать stand-alone приложения, требуется установка .NET Framework 4.0... А используются в программе по сути несколько функций из System.Management.dll... Это нормально? Обойти никак?.. В примере WMI_LabVIEW.vi используется оснастка LabView 8.0 для доступа к System.Management. Означает ли это, что .NET Framework должен стоять на машине с LabView 8.0?..
Да, конечно, .net соответствующей версии должен стоять. Ну и LabVIEW Run-Time 8.0 до кучи должна стоять тоже.
Mephistt писал(а): Если вкратце, то меня мучает совсем простой вопрос. Хочу иметь stand-alone приложение типа devcon.exe, которое будет понимать и выдавать русские названия устройств. Хотел такое приложение скомпилировать через WMI Code Creator и Microsoft Visual C#, но понял, что stand-alone'ом тут и не пахнет... куда копать - теперь не знаю...
ILMerge уже попробовали?

Ну или можно взять исходники devcon (они в открытом доступе) и разобраться, почему там затык с русскими буквами. Не думаю, что там всё очень сложно. Я бы и сам посмотрел, но мне право лень ставить VS c WDK - они уж больно увесистые.
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Mephistt

По порядку на все вопросы. Насчет версии 6.1 не знаю, сейчас под рукой есть 7.1, там в палитре Communication -> .NET есть инструменты для работы с NET-объектами, т.е. поддержка есть. В 6.1 может и не быть её, т.к. первый официальный релиз Framework'а вышел 5 января 2002 г., а :labview: 6.1 - 12 апреля 2001 (согласно Википедии). Так что надо проверять.

Для работы программы обязательно потребуется Framework той версии, что использовался при компиляции и при работе с LabVIEW. Скорее всего, при установке Run-time он автоматически поставится, а если нет, то его можно скачать с сайта Майкрософт. Можно для верности установить всё вышедшие фреймворки по порядку. Хотя, достаточно поставить 3.0, 3.5 и 4.0. Если винда Vista, 7 или 8, то ещё 4.5. Обойти - вряд ли, если только использовать другой подход. Всё, что выводится в диспетчере устройств, можно получить другими средствами, через реестр или WinAPI. Если есть желание, можете поставить ProcessMonitor и отследить обращения к библиотекам/реестру/файлам.

Devcon ни разу не использовал, может, там проблема с Unicode (помнится, в LabVIEW какие-то траблы с ним были)... Нашел ещё одну интересную команду для консоли - wmic, можете почитать тут или вбить название в гугле, вылезет множество ссылок. Есть ещё вот такая софтина.
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

14-03-2013 13-27-56.jpg
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

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

Сообщение Mephistt »

AndreyDmitriev, спасибо. Жаль, конечно, что Framework необходим... Приходится часто работать в условиях, когда каждый новый пакет драйверов вызывает множество сложностей... (Это политическая, а не техническая сложность.)
ILMerge не пробовал, начал читать... Исходники devcon нашёл, но с русским выводом я пока также не разобрался.
Спасибо за подсказки!

dadreamer, в 6.1 палитры .NET нет, думал, может, доставить можно... но это опят-таки нестандартный пакет LabView получится...
вау... Name даёт имя устройства, как в Диспетчере, да ещё и русский понимает!..
Красота, спасибо!
Пробую в инете найти необходимые условия успешной работы WMIC.exe, и то ли я не нахожу, то ли их нет... Это штатное средство Windows?
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

По идее да, на сайте Microsoft заявлена поддержка начиная с Windows XP и Windows Server 2003. У меня на XP и на 7-ке эта команда работает. Прочитайте статью, обратите внимание на пункт "Чтобы работало wmic".

А палитру вряд ли вы сможете поставить, должна быть поддержка Framework в самом LabVIEW, т.е. exe должен знать, что с ним делать, плюс в ресурсах должны лежать библиотеки для работы с NET. Лучше бы вам все-таки обновить ваш :labview:
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

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

Сообщение Mephistt »

Итак, спасибо всем, кто помогал найти решение.
На данный момент остановился на использовании WMIC.exe, поскольку не требует дополнительных драйверов и может выдать всю необходимую информацию.
Проблема в том, что, в отличие от CP210x, FTDI нет в классах Win32_USBHub и Win32_SerialPort. Точнее, есть, но без указания назначенного COM-порта. А вот класс Win32_PnPEntity содержит всё оборудование и сразу. А там уже можно найти и "CP210x USB to UART Bridge Controller (COM7)", и "USB Serial Port (COM3)" вместе с идентификаторами типа "USB\VID_10C4&PID_EA60&MI_00\0001_0" и "FTDIBUS\VID_0403+PID_6001+6&158DFA5E&0&3\0000" соответственно. Ну, и встроенные COM-порты, естественно.
В System Exec вызываю следующее: "WMIC Path Win32_PnPEntity get DeviceID,Name".
После выполнения команды зачем-то создается пустой файл TempWmicBatchFile.bat (???), который я удаляю.
Да, и ещё. Вывод идёт в следующей таблице символов:
Изображение
Это корректно отображается только в шрифте Terminal. Так что делаю преобразование русских символов в таблицу, которую понимает LabView и стандартный Блокнот...
Вывод идёт в файл.
Прикрепляю саму программу.
Ещё раз СПАСИБО всем за помощь!
Вложения
wmic.vi
Получение списка оборудования через консольную команду wmic (LabVIEW 6.1)
(52.48 КБ) 276 скачиваний
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Mephistt

Смотрите, как ещё можно (без промежуточного файла и сразу с выводом):
Вложения
ShellExecute.vi
LV 8.0
(25.46 КБ) 309 скачиваний
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

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

Сообщение Mephistt »

dadreamer писал(а):Прочитайте статью, обратите внимание на пункт "Чтобы работало wmic".
У меня не выполнено ни одно из условий этого пункта, но всё работает. Похоже, речь идёт о настройках для удалённого использования wmic.
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

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

Сообщение Mephistt »

dadreamer писал(а):Смотрите, как ещё можно (без промежуточного файла и сразу с выводом):
Не могу понять, куда идёт вывод... или откуда его брать.
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Mephistt

Если запустили напрямую из браузера, то в C:\WINDOWS\Temp (хотя, зависит ещё от типа браузера). А если сохранили где-нибудь и оттуда запустили, то 123.txt будет там же, где и VI. Можно, и даже нужно, прописать путь полностью в параметрах функции.
Mephistt
beginner
beginner
Сообщения: 16
Зарегистрирован: 09 мар 2013, 15:48
Версия LabVIEW: 6.1

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

Сообщение Mephistt »

Кому-то может пригодиться.

1) VISA Find Resourse не выдаёт VIP/PID и, кроме того, на одной из трёх машин не выдал вообще ничего, даже COM-порт материнки. С чем это связано - не знаю, но решил не связываться во избежание дальнейших проблем.

2) Есть одно действительно важное требование к использованию WMIC - права администратора.

3) Протестировал WMIC на Windows XP x86. Если у кого-то другая платформа, отпишитесь, работает ли wmic.vi из поста выше.
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Mephistt писал(а):Если у кого-то другая платформа, отпишитесь, работает ли wmic.vi из поста выше.
Win 7 x64 - замечательно работает, проверял на :labview: 2011 (x32/x64) и 2012 (x32).
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Нашёл тут некоторые свои старые наработки по работе с USB-устройствами. В частности, был создан :vi: для получения буквы USB-устройства (например, флешки) по VID/PID. Этот :vi: работает безо всяких посредников типа WMIC, а через функции SetupDi... из setupapi.dll. Реализация довольно непростая даже для текстовых языков, не говоря уж о :labview: , так что :vi: был и есть в стадии бета-теста. Частично за основу был взят вот этот код.
Описывать алгоритм смысла не вижу. Более-менее протестировано на Windows 7, чуть менее - на XP.
Так выглядит FP:
2015-03-08_21-32-22.jpg
Как видим, нужно указать VID и PID флешки, которые можно подсмотреть в диспетчере устройств, и далее программа определит букву диска, символическое имя, зависимости USB (шины/удаления или иные, если необходимо) и список свойств, аналогичных тем, что можно увидеть в диспетчере устройств. Символическое имя можно использовать при желании с такими функциями как CreateFile и т.п. для прямой работы с устройством. Если буквы диска у устройства нет, то соответствующий индикатор будет пустым. Из недоработок можно отметить вывод списка свойств. В массив заносятся все 37 свойств (хотя согласно setupapi.h их 32) (??) безо всякой фильтрации. При желании можно задать параметр Propety явно (SetupDiGetDeviceRegistryProperty), тогда цикл For будет не нужен. Также толком не реализована обработка ошибок функций.

В принципе, данный :vi: способен решить задачу автора темы, хотя она уже давно решена. В списке свойств USB-переходника можно увидеть номер COM-порта:
2015-03-08_21-51-49.jpg
upd:
Пришлось немного подкорректировать этот :vi: : как оказалось, в качестве символьного имени возвращалось не имя самого девайса (диска), а имя "родителя" девайса, т.е. символьное имя USB-контроллера. Если использовать символьное имя контроллера с функциями CreateFile и Read/WriteFile / DeviceIoControl, то результат будет не таким, как при использовании буквы диска с этими же функциями (в большинстве случаев - ошибка при выполнении). :vi: переделан согласно решению отсюда.
Вложения
Get_USB_Info.vi
LV2011 (старая версия)
(65.85 КБ) 210 скачиваний
Get USB Info - 2.vi
LV2011 (новая версия)
(101.02 КБ) 220 скачиваний
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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