Разрывается связь с СОМ портом

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Разрывается связь с СОМ портом

Сообщение Blackman »

Atom писал(а):... Пытался на протяжении ШЕСТИ часов попасть на форум. ...
У меня вчера гугла вообще не находил вход на сайт.
Atom писал(а):А если в диспетчере во вкладке "Вид" поставить галку на "Показать скрытые устройства" - он где нибудь покажется? Может даже не обязательно в разделе портов.
Порт находится в группе модемы.
Добавил :vi: поиска. Блок диаграмму показывал выше.
А теперь ситуация: В один прекрасный день Вы получите в списке более одного ресурса с Вашей "Волшебной строкой "). Что делать дальше? Где кофемолка, а где кофеварка?))
Вложения
Blackman--VISA_Find by Interface Name10.vi
(13.52 КБ) 243 скачивания
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

Re: Разрывается связь с СОМ портом

Сообщение Atom »

Blackman писал(а):Где кофемолка, а где кофеварка?))
1. Я никогда не знаю в какой разъем юзер воткнет мою железку (и как следствие я не знаю какой номер СОМ порта винда присвоит этому разъему).
2. По VID /PID я тоже привязываться не могу т.к. кофемолка и кофеварка могут быть сделаны на одинаковом МК с дефолтными VID /PID (описывал ранее).
3. А вот строковый дескриптор это мое УНИКАЛЬНОЕ название железяки (кофеМОЛКА - кофеВАРКА или кофемолка "1" - кофемолка "2"). По нему я точно могу определить что это моя железка. Мало того эту строку я могу менять по своему усмотрению в зависимости от версий и функциональности моей железяки ("кофеварка_Lite_version" или "кофеварка_Full_version").
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Разрывается связь с СОМ портом

Сообщение Blackman »

Atom писал(а): 3. А вот строковый дескриптор это мое УНИКАЛЬНОЕ название железяки (кофеМОЛКА - кофеВАРКА или кофемолка "1" - кофемолка "2"). По нему я точно могу определить что это моя железка. Мало того эту строку я могу менять по своему усмотрению в зависимости от версий и функциональности моей железяки ("кофеварка_Lite_version" или "кофеварка_Full_version").
Я имел в виду, что к компу будет подключено две "железяки" с одинаковым описанием интерфейса например - "кофеварка_Lite_version".
Аватара пользователя
dadreamer

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

Re: Разрывается связь с СОМ портом

Сообщение dadreamer »

Blackman писал(а):VISA это делает без всяких условий. Исходная тема уже давно трансформировалась в тему о способах (технике, алгоритме, стиле ...) программного поиска требуемых ресурсов, а какой он - физический, виртуальный или "призрак" уже второе дело.
Вы тут маленько путаете "красное" и "горячее". С помощью SetupDi... мы получаем информацию о классе устройств, таких как класс модемов, класс последовательных портов и так далее. Ваш подход (VISA Find - VISA Open - VISA Close) сваливает все девайсы в одну кучу. По крайней мере по той диаграмме, что вы привели, это так работает. Не спорю, можно это дело и улучшить - сделать анализ атрибутов сессии на тип устройства и т.п. А вот те :vi: , что я выше выкладывал, выдают список портов заданного класса: List COMs.vi - класс COM-портов, List COMs - 2.vi - класс последовательных интерфейсов, List COMs (Modems).vi - класс модемов. Всё это хозяйство, в первую очередь, предназначено решить задачу автора темы. Если было бы нужно, я бы объединил инфу по нескольким классам устройств в одном :vi:

Как я сказал уже по поводу "призрачного" порта - его можно перечислить, указав класс модемов для GetClassDevs. Посмотрите List COMs (Modems).vi. Он способен вернуть инфу по присутствующему в системе модему с вкладки "Сведения" диспетчера устройств. Номер порта, к сожалению, не возвращается через функции Setup API. Здесь нужно применить несколько иной подход: http://forum.sources.ru/index.php?showt ... ew=showall Используя арсенал TAPI, можем без труда запросить у модема имя и порт, на котором он "сидит":
2016-12-29_13-51-40.jpg
Честно, с Сей на :labview: эти сорцы мне перегонять лень. Если остро встанет задача получения номера порта модема, то можно будет повозиться. А пока... Я вижу, вы целиком и полностью довольны Визой и своим подходом. :wink: Так что ни к чему лишние хлопоты.

Кроме прочего, я вижу, что VISA Find возвращает номер порта без friendly name. По крайней мере у меня в MAX'е имя порта нигде совсем не пишется (хотя, как видите, модем имеет своё наименование). У вас на картинке какое-то имя порта возвращается, но оно совсем не совпадает с тем, что указано в диспетчере устройств. Я это к чему... Сдаётся мне, что VISA Find использует стандартый "брутфорс"-приём через CreateFile. Сейчас у меня нет времени это проверять, но если так, то это увеличивает шанс на блокировку работающего устройства. Собираюсь проверить позднее.
Atom писал(а):А если в диспетчере во вкладке "Вид" поставить галку на "Показать скрытые устройства" - он где нибудь покажется? Может даже не обязательно в разделе портов.
Нет, не покажется никаким образом. Как бы получше сказать... Модем и есть COM-порт. Это как "котопёс": с одной стороны модем, с другой - COM-порт. Так что это одно целое. :crazy:
Blackman писал(а):А теперь ситуация: В один прекрасный день Вы получите в списке более одного ресурса с Вашей "Волшебной строкой "). Что делать дальше? Где кофемолка, а где кофеварка?))
ТС может задать такой ID, что он никогда не совпадёт ни с каким другим ID какого-либо из существующих устройств. Может вообще сгенерить уникальный хэш своего прибора, который у каждого прибора будет разным (это к слову о двух одинаковых "железках").
Вложения
enum_modems.rar
список модемов через TAPI
(32.14 КБ) 204 скачивания
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

Re: Разрывается связь с СОМ портом

Сообщение Atom »

dadreamer писал(а):Но даже сам узел Property Node открывает порт.
Вот те на.
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

Re: Разрывается связь с СОМ портом

Сообщение Atom »

В приведенном ранее примере мне не нравится, что мы открываем сессию со ВСЕМИ (по очереди) портами пока не найдем НУЖНЫЙ.

Допустим в диспетчере мы видим:
Вася (СОМ 1)
Петя (СОМ 2)
Света (СОМ 3)
TestMyProject (СОМ 4)
.....
Сначала мы физически "беспокоим" (в смысле вежливо спрашиваем, а не в глаз:) Васю (открываем с ним сессию и тут-же закрываем), затем "Петю" и т.д.
А хочется не беспокоя всех определить где "TestMyProject" и открыть сессию.
Вложения
ComPortSearch.png
ComPortSearch.png (8.63 КБ) 11403 просмотра
Последний раз редактировалось Atom 29 дек 2016, 17:22, всего редактировалось 1 раз.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Разрывается связь с СОМ портом

Сообщение Blackman »

Может NI-VISA help внесет ясность в суть проблемы?)
http://www.ni.com/pdf/manuals/370131r.zip
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

Re: Разрывается связь с СОМ портом

Сообщение Atom »

Намек понят, что надо сворачиваться. :cry:
Аватара пользователя
dadreamer

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

Re: Разрывается связь с СОМ портом

Сообщение dadreamer »

dadreamer писал(а):Сдаётся мне, что VISA Find использует стандартый "брутфорс"-приём через CreateFile. Сейчас у меня нет времени это проверять, но если так, то это увеличивает шанс на блокировку работающего устройства. Собираюсь проверить позднее.
VISA Find сам по себе абсолютно безвреден. В процессе вызова запрашивает обновление файла C:\ProgramData\National Instruments\NIvisa\visaconf.ini и читает его. В нём содержится список всех устройств и их алиасов. К слову, сам файл обновляет системная служба (драйвер от NI) с некоторым не очень большим интервалом. Если успеть внести изменения "ручками" в файл и вызвать VISA Find, то вернёт исправленные значения. Очевидно, что такой подход содержит в себе ещё один недостаток - задержку операций чтения/записи файловой системы (драйвер обновляет файл -> :labview: файл читает, формируя список).

А вот VISA Open - VISA Close в цикле, как и ожидалось, дёргают CreateFile:
2016-12-29_17-45-31.jpg
Так что можно сделать соответствующие выводы.
Atom писал(а):Намек понят, что надо сворачиваться.
И правда. :) Что-то ходите вокруг, да около. Вам тут на 5 страниц советов и программ надавали. :D Бери - не хочу!
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

Re: Разрывается связь с СОМ портом

Сообщение Atom »

Отсюда делаем вывод, что для моей задачи та VI-ка которая есть является наиболее ОПТИМАЛЬНЫМ и КОМПАКТНЫМ вариантом.
Будем стучаться ко всем соседям и спрашивать у них имена, т.к. как видно что без VISA O и т.п. не обойтись.

Ребята, СПАСИБО ОГРОМНОЕ и прошу прощения за отнятое у Вас время, но с другой стороны мы конкретно обсосали тему и возможно наши изыски помогут многим коллегам. Еще раз Спасибо. :bye:

Всех с наступающим Новым Годом, счастья, здоровья, удачи. :drink:
Аватара пользователя
dadreamer

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

Re: Разрывается связь с СОМ портом

Сообщение dadreamer »

Atom писал(а):Отсюда делаем вывод, что для моей задачи та VI-ка которая есть является наиболее ОПТИМАЛЬНЫМ и КОМПАКТНЫМ вариантом.
Будем стучаться ко всем соседям и спрашивать у них имена, т.к. как видно что без VISA O и т.п. не обойтись.
Интересные у вас выводы :D
Atom, я вам предоставил 5 недостатков подхода "VISA Find -> VISA Open -> VISA Close". Но вы всё ходили вокруг, да около, как кот вокруг миски со сметаной. И под конец вот это:
Atom писал(а):Отсюда делаем вывод, что для моей задачи та VI-ка которая есть является наиболее ОПТИМАЛЬНЫМ и КОМПАКТНЫМ вариантом.
Будем стучаться ко всем соседям и спрашивать у них имена, т.к. как видно что без VISA O и т.п. не обойтись.
То ли вы аки матёрый тролль, провоцировали меня на всю эту писанину... То ли на самом деле так и не поняли того, что я пытался донести до вас.

В любом случае, мне жаль. Разбирайтесь сами со своими проблемами с железом.

Мне эта тема уже порядком...
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

Re: Разрывается связь с СОМ портом

Сообщение Atom »

dadreamer писал(а):То ли вы аки матёрый тролль, провоцировали меня на всю эту писанину... То ли на самом деле так и не поняли того, что я пытался донести до вас.В любом случае, мне жаль. Разбирайтесь сами со своими проблемами с железом
Дорогой Dadreamer. Я не в коем разе не являюсь троллем, и никого не провоцирую. Я просто спросил совета как правильнее и КОРРЕКТНЕЕ сделать обращение к НУЖНОМУ мне порту (я никогда не знаю к какому порту подключено мое железо, я лишь знаю как оно называется). Возможно я действительно не понял ваших объяснений. И плюс в последних постах мы все равно пришли к VISA O (и подобным).
Т. К. по примерам мы из ОС берем ресурс нэйм портов, а описание (стрингу) мы получаем посредством обращения к ним.
В чем здесь троллинг, если я действительно не понял. Может Вы уважаемый не поняли о чем я спрашиваю.
Повторюсь:
Допустим в диспетчере мы видим:
Вася (СОМ 1)
Петя (СОМ 2)
Света (СОМ 3)
TestMyProject (СОМ 4)
.....
Сначала мы физически "беспокоим" Васю (открываем с ним сессию, спрашиваем - ты "TestMyProject", нет, и тут-же закрываем), затем "Петю" и т.д.
А хочется не беспокоя всех определить где "TestMyProject" и открыть сессию.
Аватара пользователя
dadreamer

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

Re: Разрывается связь с СОМ портом

Сообщение dadreamer »

Atom, обычно на большинстве подобных форумов (и я считаю это нормальным явлением) никогда не дают "рыбу", а только лишь "удочку", чтоб автор темы мог сам попробовать предлагаемые ему вещи и проверить, как это работает в его "окружении". Так же и здесь. Кроме того, железка находится у вас и проверить, как она работает, можете лишь вы. Так что вам и карты в руки. :vi: были выложены, а мы ждали от вас результатов примерно в таком виде: "вот эта :vi: не работает, это работает через раз, тут так, тут этак". На основании этих экспериментов можно было скорректировать :vi: и подобрать оптимальный алгоритм поиска вашего устройства. Вы, почему-то, проигнорили все предлагаемые :vi: , даже не попробовав. Что в такой ситуации делают обычно?.. :wink: Оставляют всё, как есть (темы мы тут не закрываем) - работает через VISA Find, ок, пусть будет так.
Atom писал(а):Повторюсь:
Это можно не описывать, итак понятно уже. Изображение
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

Re: Разрывается связь с СОМ портом

Сообщение Atom »

Все :vi: были проверены и все они работают (с моим железом) так как были задуманы.
Кроме того я интегрировал (адаптировал) их как частично, так и целиком (в зависимости от самих :vi: ) в мой проект.
Но все равно для решения задачи без VISA Open (и подобным) ко всем портам в списке не обойтись пока не найдем нужный и отвечающий критериям поиска.
Аватара пользователя
dadreamer

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

Re: Разрывается связь с СОМ портом

Сообщение dadreamer »

Atom писал(а):Но все равно для решения задачи без VISA Open (и подобным) ко всем портам в списке не обойтись пока не найдем нужный и отвечающий критериям поиска.
Так соль в том, чтобы выкинуть VISA Find и цикл перебора всех портов, а сделать сразу так: List Com Ports -> парсинг массива/списка портов и получение строки с именем порта (например, COM1) -> VISA Open (для COM1) -> операции VISA Read/VISA Write согласно алгоритму программы -> VISA Close. Итак, мы вызываем VISA Open - ... - VISA Close один раз на нашем порте, как и дожно быть.

VISA Open я не предлагал выкидывать. Более того, это нецелесообразно - придётся тогда использовать какую-то иную библиотеку для работы с последовательным интерфейсом. Зачем, когда есть универсальный API в виде VISA...
Ответить

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