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

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Atom писал(а):По интеловской приблуде так и не понял что это и зачем ей виртуальный СОМ порт организованный на шине PCI.
https://ru.wikipedia.org/wiki/Active_Ma ... Technology
https://habrahabr.ru/company/intel/blog/247699/
https://software.intel.com/en-us/articl ... he-fullest
VID=04D8, PID=000A эти параметры по умолчанию у всех PIC-ов с USB. Нет можно конечно отправить запрос на получение собственного VendorID / ProductID через usb.org и гордо прилепить соответствующий шильдик, но эта наклейка не дешевая.
Ну, вы же не собираетесь включать несколько таких устройств в одну машину одновременно? Я к тому, что на один сеанс работы будет всегда приходиться один девайс с указанными VID/PID. И поэтому его можно однозначно обнаружить в системе.
А стринга все таки вещь более уникальная (в рамках моей фантазии). Или я не прав?
Скорее всего да, так как вы вправе менять её, как захотите. Хоть свой серийник сгенерить. Ну раз так, то проще будет на самом деле использовать обычный запрос WMI в cmd.
Atom писал(а):И еще насколько корректно использование готового кода LCP (его ведь кто-то придумал) в моем проекте.
Это открытая и свободно распространяемая инфа. Плюс к тому, код там простейший. Подобный код можно найти в массе мест в сети. Например, вот скрипт на PowerShell:

Код: Выделить всё

$colItems = get-wmiobject -class "Win32_PnPEntity" -namespace "root\CIMV2" -computername "."
foreach ($objItem in $colItems) {
  if ( $objItem.Name -like "*COM*" ) {
      write-host "Name: -" $objItem.Name "-"
      write-host "PNP Device ID: " $objItem.PNPDeviceID
      write-host
   }     
}
Делает почти то же самое, что и LCP. Можете запустить, проверить.
И вообще в чем различие этих двух подходов. Ты ранее писал что VISA F работает медленно. Но для меня это не страшно, т. к. эта функция выполняется только при запуске программы один раз, либо один раз при каждом разрыве соединения (но юзер не будет же целенаправленно со скоростью +100500 колебаний с секунду дергать шнурок по разъемам).
Принципиальное различие: способ через VISA Find требует открытия порта для его идентификации, в то время как способ перечисления портов средствами ОС не требует какого-либо взаимодействия с портом. Раз так, имеем 100%-ную точность попадания в "наш" порт и отсутствие лишних операций.
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

dadreamer писал(а):Ну, вы же не собираетесь включать несколько таких устройств в одну машину одновременно? Я к тому, что на один сеанс работы будет всегда приходиться один девайс с указанными VID/PID. И поэтому его можно однозначно обнаружить в системе.
Я про то и говорю, что чисто гипотетически у юзера может УЖЕ иметься "USB кофеварка" :) построенная на PIC-ке и плюс он приобрел мой девайс "USB взбивалку молока" тоже на PIC-ке и готовит себе капучино. Что кофеварка, что взбивалка не имеют собственных VID/PID, а используют дефолтные значения от микрочипа.
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

dadreamer писал(а):
Atom писал(а):По интеловской приблуде так и не понял что это и зачем ей виртуальный СОМ порт организованный на шине PCI.
https://ru.wikipedia.org/wiki/Active_Ma ... Technology
https://habrahabr.ru/company/intel/blog/247699/
https://software.intel.com/en-us/articl ... he-fullest
Спасибо. Ознакомился. Причем у всех она по умолчанию стоит на COM 3. Я конечно могу в траблшутах по установке своего девайса прописать чтобы юзер отправлял эту i-АМТ на свободный (допустим СОМ 2) порт. Но скорее всего помимо i-АМТ найдется еще какая нибудь девайсина которая поведет себя так-же допустим на порте СОМ 4 или СОМ 5 ...... Почему винда позволяет поставить мое железо на СОМ 3 когда он занят. Ладно если устройство отключено или от этой i-АМТ нет отклика, но на тестах выше мы видим что отклик от порта 3 ( i-АМТ ) получаем. :cantbe:
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

dadreamer писал(а):Принципиальное различие: способ через VISA Find требует открытия порта для его идентификации, в то время как способ перечисления портов средствами ОС не требует какого-либо взаимодействия с портом. Раз так, имеем 100%-ную точность попадания в "наш" порт и отсутствие лишних операций.
Вот это уже нормальный плюс. Дабы не стучаться не просто в присутствующие в системе порты, а в порты которые сейчас используются другими девайсами. А то не ровен час поломаем их моим проектищем. :wink:
Глупый (для чайника) конечно вопрос. Я так понял что эта LCP альтернатива "квадратику" VISA F. Я к тому, как мне ее прикрутить к моей SubVI-ке (скрин ранее в посте) с учетом, что мы определились проверять порт на корректность стринги. Скорее всего нужно убирать цикл и структуру (на скрине не видно что в структуре по событию false стоит "голая" VISA Close).
Blackman

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

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

Сообщение Blackman »

dadreamer писал(а):Принципиальное различие: способ через VISA Find требует открытия порта для его идентификации, в то время как способ перечисления портов средствами ОС не требует какого-либо взаимодействия с портом. Раз так, имеем 100%-ную точность попадания в "наш" порт и отсутствие лишних операций.
Для идентификации ресурса с требуемыми атрибутами (свойствами) VISA Find не требуется открытие сессии к самому ресурсу (порту).
На рис простой пример поиска всех ресурсов со скоростью передачи 9600 бод
NI-VISA Help хороший источник)
Upd: Из VISA Вы никогда не сможете получить доступ (чтение- запись-изменение атрибутов) к ресурсу (порту) занятому другим приложением.
Вложения
VISA Find Log.PNG
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

А истина где-то в серединке :drink:
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Atom писал(а):Глупый (для чайника) конечно вопрос. Я так понял что эта LCP альтернатива "квадратику" VISA F. Я к тому, как мне ее прикрутить к моей SubVI-ке (скрин ранее в посте) с учетом, что мы определились проверять порт на корректность стринги. Скорее всего нужно убирать цикл и структуру (на скрине не видно что в структуре по событию false стоит "голая" VISA Close).
Ну, вот посмотрите вот такую :vi: :
List Com Ports (WMI).vi
lv2009
(10.62 КБ) 146 скачиваний
На входе задаём имя порта, который требуется найти, и :vi: возвращает номер порта вида "COM №". Номер далее можно послать на VISA Open для открытия. Если подойдёт, то можете прямо так и вставить к себе.
У этого подхода есть один минус - не возвращает виртуальные порты (только железячные). Чтобы все порты возвращались, надо там кое что допиливать. Ну, в вашем случае должно работать (судя по картинкам).
Blackman писал(а):Для идентификации ресурса с требуемыми атрибутами (свойствами) VISA Find не требуется открытие сессии к самому ресурсу (порту).
Прочтите тему внимательнее. Требуется получить не названия нативных Визовских атрибутов, а имена портов, как они представлены в Диспетчере устройств Windows. Или покажите, как можно с помощью VISA Find, не открывая сессию, получить эти имена, вкупе с именем порта в виде "COM №".
Последний раз редактировалось dadreamer 27 дек 2016, 21:19, всего редактировалось 1 раз.
Blackman

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

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

Сообщение Blackman »

dadreamer писал(а): Прочтите тему внимательнее. Требуется получить не названия нативных Визовских атрибутов, а имена портов, как они представлены в Диспетчере устройств Windows. Или покажите, как можно с помощью VISA Find, не открывая сессию, получить эти имена, вкупе с именем порта в виде "COM №".
LabVIEW Help VISA Find Resource Function :super:
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Blackman писал(а):
dadreamer писал(а): Прочтите тему внимательнее. Требуется получить не названия нативных Визовских атрибутов, а имена портов, как они представлены в Диспетчере устройств Windows. Или покажите, как можно с помощью VISA Find, не открывая сессию, получить эти имена, вкупе с именем порта в виде "COM №".
LabVIEW Help VISA Find Resource Function :super:
Возвращает либо ASRL#::INSTR, либо COM#. А где имя порта?..
Вложения
2016-12-27_23-31-20.jpg
2016-12-27_23-31-20.jpg (25.5 КБ) 8369 просмотров
Blackman

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

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

Сообщение Blackman »

Что такое имя порта? Interface Information:Interface Description?
Udp: Так это оно и есть)
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Blackman писал(а):Что такое имя порта? Interface Information:Interface Description?
Udp: Так это оно и есть)
Да. Но даже сам узел Property Node открывает порт. Если предварительно в терминале занять порт, то узел возвращает ошибку. Что косвенно говорит о том, что Визе нужно открыть сессию, чтобы получить свойство. А через VISA Find не получается у меня. Прописываю, скажем VI_ATTR_INTF_INST_NAME == "Последовательный порт", выдаёт ошибку.
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

Попробую вмешаться на "кухонном" языке.
Я так понял, что VISA Find собирает в СТРОКОВЫЙ МАССИВ дескрипторы (стринги) всех портов (по умолчанию СОМ) из например диспетчера устройств (или wmi это не суть) и выдает его из себя вместе с размером (количеством найденных дескрипторов). При этом в нем только дискрипторы портов, но не ресурсные значения.
А вот дальше для того чтобы получить нужный нам ресурс (resource name) нам нужно принудительно открывать сессию через VISA Open и сравнивать требуемую строковую константу с теми дескрипторами которые получили в массиве из VISA Find. И делать это столько раз сколько дескрипторов содержится в массиве (выход размера массива из VISA Find). Ну и в случае отрицательного результата (не совпадении требуемого дескриптора с эталонным) не забывать каждый раз закрывать сессию.
От сюда я делаю заключение что сама VISA Find не должна открывать сессию, но для получения Resource Name нам САМИМ НЕОБХОДИМО открыть сессию с помощью VISA Open.
Надеюсь понятно изложил.
Или я не прав? Подтвердите или опровергните плиз.
Последний раз редактировалось Atom 27 дек 2016, 22:27, всего редактировалось 2 раза.
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Atom писал(а):Или я не прав? Подтвердите или опровергните плиз.
Вроде так. Если мы хотим остаться только на инструментарии VISA.
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

dadreamer писал(а):Вроде так. Если мы хотим остаться только на инструментарии VISA.
Глубоко филосовское заключение.
Мнеж потом с определенным (конкретным ресурсом) портом в программе работать. Отправлять и получать данные, управлять режимами работы моей железки и т. д. Я далее в программе плотно использую VISA R / VISA W. Или я уже не в тренде?
Blackman

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

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

Сообщение Blackman »

1. VISA Interface Information:Interface Description выдает строку отличающуюся от строки в диспетчере.
2. Однако в MAXе все выглядит почти как в диспетчере.
3. Find cо строкой от VISA выдает ошибку "Invalid expression specified for search".
Upd: Кроме коллизии с двумя и более Вашими интерфейсами в системе все у Вас хорошо). Нормально все сделано. Добавите диалог выбора ресурса для 2 и более приборов и все дела)
Upd2: В каком то мануале от NI было предупреждение не использовать Interface Information:Interface Description атрибут для парсинга ресурса, так как его реализация может изменяться от версии к версии.
Последний раз редактировалось Blackman 27 дек 2016, 22:57, всего редактировалось 2 раза.
Ответить

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