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

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

Здравствуйте.
Имеем железо подключенное по USB через виртуальный COM.
Все работает стабильно. При РАБОТАЮЩЕЙ программе могу "на горячую" подключать-отключать железо (есть проверка соединения ПК с железом с соответствующим оповещением, втыкаем шнур обратно, жмем ОК и программа продолжает работать стабильно).
Но !!!!
Если РЯДОМ в порт USB воткнуть например флэшку (или любой другой девайс) программа больше не находит порт (ошибка VISA - 1073807346) и всегда выдает (так задумано) мое оповещение о разрыве, но если вытащить кабель и воткнуть его обратно (и в оповещении нажать ОК) программа обнаруживает порт и продолжает работу.
Причем замечено, что такое происходит ТОЛЬКО тогда, когда флэша вставляется РЯДОМ (в соседний "второй" разъём USB). Поясню этот момент.
Например на матерях порты USB разведены допустим парами (одна пара - один хаб, хотя могут быть и по четыре). Так вот этот баг наблюдается только тогда, когда подключения делаются в рамках одной пары (четверки) - одного хаба. Пробовал с группами разъёмов как на самой материнке, так и посредством подключения внешних USB-хабов. Эффект одинаковый.
А вот момент отключения флэши никак на работу программы не влияет.
Повторюсь, что принудительный разрыв соединения (вытащить разъем) и затем подключения к таким казусам не приводит.
Каждый раз при подключении флэши дергать разъем прибора - не вариант. Какие мысли господа???
Аватара пользователя
Kosist

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

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

Сообщение Kosist »

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

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

Сообщение Atom »

Ситуация возникает сразу после втыкания флэшки.
Использую PIC18F45xx без всяких мостов (в нем все есть) напрямую к шнурку.
В программе есть постоянный цикл (раз в секунду) на проверку стринги из прибора. В том-то и дело, что стрингу правильную получаю,
а вот (это только моё мнение) с ресурс нэйм возможно не лады.
В диспетчере устройств номер СОМ порта НЕ меняется В ЛЮБЫХ комбинациях и со слов винды "устройство работает нормально".
По электричеству все впорядке.
Если после отрыва ничего не делая просто вытащить и назад вставить разъём (причем в тот-же разъём) все становится нормально.
Аватара пользователя
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 »

Да без затей.
Одновременно с выскакиванием моего окна (что связь разорвалась) делаю VISA Close.
Далее (после нажатия ОК в моем окне) запускается VI-ка определения порта (VISA Find -> VISA Open -> проверка стринги от железа ....).
Если стриги нет то VISA Close и к диалогу о разрыве, стринга есть -> основная программа продолжает работу. Но т.к. железо не находится опять выскакивает окно о разрыве. И так до тех пор пока не нажмешь "отмена" в моем окне и программа предложит завершить работу, можно отказаться от завершения работы, но тогда опять попросит восстановить соединение. Как то так.
Но все дело в том, что VI-ка определения портов работает (вытащил шнур, вставил назад и все находится и работает).
Отрыв происходит в момент втыкания флэши. Если после этого дернуть туда-сюда кабель от моего железа и нажать ОК в диалоге, то все заработает.
С ней или без неё уже не важно. Проблема только в моменте подключения флэши.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

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

Сообщение Vitekkz88 »

Atom, На других ПК такая же проблема? После подключения флешки устройство в диспетчере задач есть? В МАХе?
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Atom писал(а):Если РЯДОМ в порт USB воткнуть например флэшку (или любой другой девайс) программа больше не находит порт (ошибка VISA - 1073807346)
Эта ошибка говорит о том, что сессия VISA каким-то образом стала некорректной: Why Do I Receive VISA Error -1073807346: The Given Session or Object Reference Is Invalid?
Надо искать, где она закрылась. Вы расписали порядок действий программы в случае, когда сессия "накрылась". Но нигде не вижу, как именно определяется, что сессия стала некорректной. То ли кластер error out анализируется, то ли в параллельном цикле VISA Find всё время вызывается... Выложили бы :vi: , многое стало бы проще и понятнее.
Atom писал(а):Далее (после нажатия ОК в моем окне) запускается VI-ка определения порта (VISA Find -> VISA Open -> проверка стринги от железа ....).
Я так понимаю, применяется вот этот подход: http://www.labviewportal.org/viewtopic. ... 019#p67019 Лично я бы не стал им пользоваться, т.к. он не совсем удачный в плане работы с разной USB периферией. Во-первых, VISA Find работает довольно медленно, т.к. видимо сам по себе опрашивает каждый порт на предмет подключения/сопоставления сессий. Во-вторых, при таком подходе мы "долбимся" в каждый порт каждого устройства, что не хорошо. Разные производители разных USB-устройств закладывают разные протоколы общения со своими устройствами. Это касается и флэшек, и накопителей, и UART-адаптеров. Послав некоторую команду случайному устройству, мы можем "выбить его из колеи", нарушив коммуникацию (особенно, если оно уже подключено и используется). Более корректным было бы перечислять список портов средствами OC (WMI), например, используя listComPorts (см. моё сообщение в той же теме). Если порт найден, то берём его и используем в VISA Open / VISA Configure Serial Port.
Atom писал(а):Использую PIC18F45xx без всяких мостов (в нем все есть) напрямую к шнурку.
А что за шнурок? Виртуальный порт всё-таки чем создаётся - микросхемой или адаптером?
Blackman

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

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

Сообщение Blackman »

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

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

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

Сообщение dadreamer »

Blackman писал(а):VISA - драйвер высокого уровня и не работает напрямую с железом. Общение VISA драйвера с системой можно посмотреть в отладчике NI IO Trace (бывший NI Spy).
Так или иначе, функции WinAPI вызываются, и они перенаправляют команды вниз по стэку - до драйвера "железки". Идея отнюдь не хорошая - дёргать все USB девайсы ради одного.
Blackman писал(а):А проблема видимо в "просадке" напряжения питания USB порта в момент подключения дополнительной нагрузки (флешки).
Почему же тогда
Atom писал(а):Если после этого дернуть туда-сюда кабель от моего железа и нажать ОК в диалоге, то все заработает.
?
Нагрузка-то никуда не делась.
Blackman

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

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

Сообщение Blackman »

Посмотрите внимательно процесс обмена. Любая команда начинается с открытия сессии к ресурсу и после ее выполнения сессия закрывается. Если ресурс занят или какие-то другие проблемы, то ничего никуда не передается.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

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

Сообщение Vitekkz88 »

Автор, попробуйте использовать хаб с внешним блоком питания, и на любой ли флешке это повторяется. Воткните мышку или клавиатуру вместо флешки. Всё так же?
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Blackman писал(а):Любая команда начинается с открытия сессии к ресурсу и после ее выполнения сессия закрывается.
- Сессия VISA открывается через VISA Open / VISA Configure Serial Port;
- Сессия VISA закрывается через VISA Close или когда :vi: верхнего уровня прекращает свою работу и стоит галка "Automatically close VISA sessions"
Проверяется элементарно: How Can I Get a List of Open VISA Sessions in LabVIEW?
Blackman писал(а):Если ресурс занят или какие-то другие проблемы, то ничего никуда не передается.
Даже когда порт открыт, всё равно не стоит с ним работать, если он "чужой". Как я уже сказал, к нему может быть подключено какое-то другое оборудование, которое может своеобразно отреагировать на команду пользователя. И кроме того, программа будет работать быстрее, если мы не будем тратить время на опрос всех портов в системе, а сразу подключимся к нужному.
Atom
advanced
advanced
Сообщения: 196
Зарегистрирован: 01 ноя 2009, 23:18
Версия LabVIEW: 2010
Откуда: Москва
Контактная информация:

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

Сообщение Atom »

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

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

Сообщение Atom »

dadreamer писал(а):Даже когда порт открыт, всё равно не стоит с ним работать, если он "чужой". Как я уже сказал, к нему может быть подключено какое-то другое оборудование, которое может своеобразно отреагировать на команду пользователя. И кроме того, программа будет работать быстрее, если мы не будем тратить время на опрос всех портов в системе, а сразу подключимся к нужному.
Я никогда не знаю какой номер СОМ порта свободен на компьютере заказчика. Даже при подключении в соседний USB разъём (даже в рамках одного хаба) Винда присваивает ему другой порядковый номер СОМ порта. Поэтому не зная к какому разъёму подключено мое железо я не могу четко прописать номер порта. Да и если юзеру позарез потребовался порт именно "этот" разъём и он решил мою железяку переткнуть в другой, то она должна будет работать уже на другом порте с другим номером виртуального СОМ.
А SubVI-ка поиска портов у меня запускается только тогда когда обнаружился разрыв связи, и НЕ крутится постоянно, а вызывается из основной проги.
В параллельном цикле у меня раз в секунду происходит обращение к уже конкретно определенному порту и чтение из него стринги. Если стринга не получена или получена не та что надо тогда оповещаем о разрыве и по нажатию ОК вызываем подпрогу определения портов.
Аватара пользователя
dadreamer

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

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

Сообщение dadreamer »

Atom писал(а):Я никогда не знаю какой номер СОМ порта свободен на компьютере заказчика. Даже при подключении в соседний USB разъём (даже в рамках одного хаба) Винда присваивает ему другой порядковый номер СОМ порта. Поэтому не зная к какому разъёму подключено мое железо я не могу четко прописать номер порта. Да и если юзеру позарез потребовался порт именно "этот" разъём и он решил мою железяку переткнуть в другой, то она должна будет работать уже на другом порте с другим номером виртуального СОМ.
Да это-то всё понятно. COM-порт - величина переменная, надо определять динамически. Но идентификатор-то должен быть один и тот же. Так что listComPorts проблему бы решил.
В параллельном цикле у меня раз в секунду происходит обращение к уже конкретно определенному порту и чтение из него стринги. Если стринга не получена или получена не та что надо тогда оповещаем о разрыве и по нажатию ОК вызываем подпрогу определения портов.
А в протоколе общения с прибором всё верно? Терминатор используете? Через терминал проверяли этот эффект, что описываете? Если нет, то обязательно проверьте. Подключаетесь через терминал к прибору и работаете с ним (хотя бы серийник просите у него время от времени). Подключаете вашу флэшку, снова просите серийник и т.п. Если не ответит, ну значит, проблема не в :labview: даже. А возможно в кривом драйвере или прошивке. Да в много в чём может быть.
Ответить

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