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

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

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Kosist »

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

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

Сообщение Atom »

Blackman писал(а):VISA - драйвер высокого уровня и не работает напрямую с железом. Общение VISA драйвера с системой можно посмотреть в отладчике NI IO Trace (бывший NI Spy).
А проблема видимо в "просадке" напряжения питания USB порта в момент подключения дополнительной нагрузки (флешки).
Конечно-же в PIC-ке у меня зашита программа (програмище :) ) описывающая взаимодействие непосредственно железа с программным уровнем USB порта (дескриптор). Я это не указывал т.к. без этого вообще ничего не может работать.

Но .............. вот тут звучат фанфары.
То-ли бессонница так благоприятно влияет на работоспособность, то-ли отчаяние что все правильно написано, но работать не хочет
при очередном, от беспомощности, гипнотическом сеансе в 4 часа ночи макетки с МК заметил, что отвалилась нога электролита (10uF) которая по питанию контроллера. Получалось, что по питанию у него осталась только одна керамика на 0,1. И в момент подключения чего-либо в соседний разъем был импульс который уводил МК в ступор. Так-что Blackman ты угадал.
Итог - все работает. По крайней мере пока. Буду жестко этот режим проверять со всяким разным ....
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

dadreamer писал(а):Да это-то всё понятно. COM-порт - величина переменная, надо определять динамически. Но идентификатор-то должен быть один и тот же. Так что listComPorts проблему бы решил.
Так я и проверяю только СОМ порты (все СОМ-ы), а не все порты которые есть в компе (LPT, USB, и т.д.).
Я же знаю что мой девайс может быть подключен только через СОМ, зачем мне все остальные проверять.
Или я чего не правильно понял. Расшифруй поподробнее идею про listComPorts, если не затруднит.
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Atom писал(а):Так я и проверяю только СОМ порты (все СОМ-ы), а не все порты которые есть в компе (LPT, USB, и т.д.).
Я же знаю что мой девайс может быть подключен только через СОМ, зачем мне все остальные проверять.
Или я чего не правильно понял. Расшифруй поподробнее идею про listComPorts, если не затруднит.
Так я и говорю про COM-порты. Просто как сейчас делается: перебираются все COM-порты по очереди и к каждому порту идёт обращение вида "открытие" -> "отправка команды" -> "приём ответа" -> "закрытие". Если у вас в системе 10 портов (предположим), и искомый девайс сидит на 10-м, то вам придётся перебрать 9 лишних портов, чтобы до него достучаться. Таким образом, затрачивается какое-то количество времени на подключение. Можно этого избежать, если средствами Винды или утилиткой типа listComPorts получить список всех портов и их идентификаторов, распарсить в :labview: список и сразу подключиться к нужному порту. Экономится время на подключение. Другой минус этого подхода (хотя Blackman утверждал, что ничего страшного не случится, просто VISA в ошибку свалится - возможно, но who knows): если у вас помимо макетки в порт подключено некоторое другое устройство (USB-UART адаптер, Bluetooth / Wi-Fi свисток, 3G/4G модем), то он может "отрубиться". Многое зависит от девайса, вероятно на самом деле, что VISA выдаст ошибку "порт занят". А может случиться ещё и так, что протокол совпадёт частично (смотря, что за команда отправляется). Тогда ваша программа будет юзать "чужой" девайс. :crazy:
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

dadreamer писал(а):Я так понимаю, применяется вот этот подход: http://www.labviewportal.org/viewtopic. ... 019#p67019 Лично я бы не стал им пользоваться, т.к. он не совсем удачный в плане работы с разной USB периферией.
Посмотрел эту ссылочку - у меня отдаленно приблизительно так и сделано, только VISA Close убрана в структуру по отрицательному (стринга не найдена) событию.
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Atom писал(а):
dadreamer писал(а):Я так понимаю, применяется вот этот подход: http://www.labviewportal.org/viewtopic. ... 019#p67019 Лично я бы не стал им пользоваться, т.к. он не совсем удачный в плане работы с разной USB периферией.
Посмотрел эту ссылочку - у меня отдаленно приблизительно так и сделано, только VISA Close убрана в структуру по отрицательному (стринга не найдена) событию.
Ну так вот. Я б переделал. Представьте, что вы зашли в подъезд и забыли, в какой квартире живёте. И стали по очереди заходить в каждую квартиру, чтоб посмотреть, не ваша ли. :D Гораздо проще было бы, если б вы знали, что квартира имеет номер 5, дверь у неё железная, обитая деревом, и установлен современный английский замок.

Но раз у вас всё работает, то оставляйте как есть. :wink:
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

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

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

Сообщение Atom »

Тут поперетыкивал все USB порты и наткнулся на один порт который винда номерует как СОМ 3 (TestMyProject COM 3), но в системе присутствует девайс на СОМ 3 (это что-то интеловское от разведенного на материнке компа, расположение: шина PCI, устройсво 22, функция 3). Со слов винды оба (мое и интеловское) работают нормально. И вот в этом разъеме (занумерованном как порт СОМ 3) мой девайс уже не определяется SubVI-кой. Это как раз к нашему разговору о чужих квартирах.
Выкладываю скрины диспетчера устройств и моей виайки (как я говорил ранее в структуре по отрицательному (false) событию сидит VISA Close и больше ничего там нет).
Как винда может так номер порта присвоить который уже занят. :cantbe:
Вложения
Диспетчер устройств
Диспетчер устройств
Определение СОМ портов
Определение СОМ портов
ComPortSearch.png (8.63 КБ) 6801 просмотр
Последний раз редактировалось Atom 26 дек 2016, 20:40, всего редактировалось 1 раз.
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Kosist »

Atom писал(а):Как тут картинки подцеплять, никак в ум не возьму.
На форум? Жмете кнопку "Ответить", и внизу будет вкладка "Добавить вложения". Дальше - дело техники.
add image.PNG
Мы делили апельсин - много наших полегло...
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

Спасибо. Уж больно не заметная вкладка с учетом что картинки наше первое дело. :)
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Atom писал(а):Как винда может так номер порта присвоить который уже занят. :cantbe:
Хм. Странно это. Не должны два устройства занимать один и тот же порт. Попробуйте прочистить алиасы портов с помощью вот этой статьи: http://superuser.com/questions/408976/h ... rts-in-use Авось поможет. Если не поможет, отключите Интеловский девайс в диспетчере (всё равно им не будете пользоваться).
Atom писал(а):Ваши доводы разумны и я хочу вникнуть в это.
Ну, тогда надо ID конвертора определить сперва. Хотя можно и вашу строчку "TestMyProject" использовать. Смотрите, что вам больше понравится.
1. В командной строке выполните

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

wmic path Win32_SerialPort get DeviceID,Caption,Description,Name,ProviderType
Запостите сюда вывод.

2. Запустите вот этот :vi:
ListComPorts.rar
lv2009
(5.8 КБ) 156 скачиваний
Запостите сюда вывод.
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

Вот результаты тестов.
В названии файлов разные варианты соответственно для Wmic и для listComPorts.
1. Без железа
2. С железом на порту COM 3 (вместе с интеловским)
3. С железом на порту COM 4

Тот вариант что с железом на порту COM 3 (вместе с интеловским) - listComPorts вообще НИЧЕГО не определил (проверил несколько раз).
Вложения
Wmic без железа.png
Из listComPorts без железа.png
Из listComPorts без железа.png (7.01 КБ) 6787 просмотров
Wmic с железом на COM 3.png
Из listComPorts с железом на COM 3.png
Из listComPorts с железом на COM 3.png (5.49 КБ) 6787 просмотров
Wmic с железом на COM 4.png
Из listComPorts с железом на COM 4.png
Из listComPorts с железом на COM 4.png (7.7 КБ) 6787 просмотров
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Atom, вот последние две картинки только радуют. То есть, если работать чисто по имени порта, то можно использовать нативную тулзу wmic. Если работать по идентификатору адаптера, то можно юзать listComPorts. Соответственно, VID=04D8, PID=000A, больше ничего не надо.
Но вот эта ситуация, когда один порт распределён на два устройства... Надо как-то избавляться от такого. Попробуйте вручную в диспетчере назначить порт на оба устройства. Также фантомные порты надо удалить, если есть.
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

Удалил на компе любое упоминание про драйвера для PIC-ка, вычистил весь реестр с упоминанием моей стринги и VID / PID контроллера.
Фантомных СОМ портов нет, эту проблему решил давно как только начинал проект.
По интеловской приблуде так и не понял что это и зачем ей виртуальный СОМ порт организованный на шине PCI. Принудительно (руками) отправил ее на Сом 2 с глаз долой.

Теперь все работает вот так:
Запускаем основную программу, вытаскиваем шнурок из разъема, открывается диалог о разрыве связи, втыкаем шнурок обратно (причем НЕ обязательно в тот-же разъем, можно в любой свободный USB, хоть на прямую хоть через внешний хаб), нажимаем ОК в диалоге, программа (через SubVI-ку) определяет новый порт и основная программа продолжает работать.

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

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

Сообщение Atom »

К вопросу про VISA Find / listComPorts (LCP):

VID=04D8, PID=000A эти параметры по умолчанию у всех PIC-ов с USB. Нет можно конечно отправить запрос на получение собственного VendorID / ProductID через usb.org и гордо прилепить соответствующий шильдик, но эта наклейка не дешевая.
Поэтому нет никакой гарантии что у заказчика не будет еще какого нибудь девайса с таким VID/PID. А стринга все таки вещь более уникальная (в рамках моей фантазии). Или я не прав?
Цель выбрать вариант наиболее корректно работающий исходя из следующих основных критериев:
Я не знаю что за компьютер у заказчика
Я не знаю какие проги у него на нем стоят (исключая ОС)
Я не знаю какая периферия к этому компу подключена
......
но мое должно работать и не навредить другим девайсам.

И еще насколько корректно использование готового кода LCP (его ведь кто-то придумал) в моем проекте.

И вообще в чем различие этих двух подходов. Ты ранее писал что VISA F работает медленно. Но для меня это не страшно, т. к. эта функция выполняется только при запуске программы один раз, либо один раз при каждом разрыве соединения (но юзер не будет же целенаправленно со скоростью +100500 колебаний с секунду дергать шнурок по разъемам).
Ответить

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