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

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

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

Postby Atom on 23 Dec 2016, 22:03

Здравствуйте.
Имеем железо подключенное по USB через виртуальный COM.
Все работает стабильно. При РАБОТАЮЩЕЙ программе могу "на горячую" подключать-отключать железо (есть проверка соединения ПК с железом с соответствующим оповещением, втыкаем шнур обратно, жмем ОК и программа продолжает работать стабильно).
Но !!!!
Если РЯДОМ в порт USB воткнуть например флэшку (или любой другой девайс) программа больше не находит порт (ошибка VISA - 1073807346) и всегда выдает (так задумано) мое оповещение о разрыве, но если вытащить кабель и воткнуть его обратно (и в оповещении нажать ОК) программа обнаруживает порт и продолжает работу.
Причем замечено, что такое происходит ТОЛЬКО тогда, когда флэша вставляется РЯДОМ (в соседний "второй" разъём USB). Поясню этот момент.
Например на матерях порты USB разведены допустим парами (одна пара - один хаб, хотя могут быть и по четыре). Так вот этот баг наблюдается только тогда, когда подключения делаются в рамках одной пары (четверки) - одного хаба. Пробовал с группами разъёмов как на самой материнке, так и посредством подключения внешних USB-хабов. Эффект одинаковый.
А вот момент отключения флэши никак на работу программы не влияет.
Повторюсь, что принудительный разрыв соединения (вытащить разъем) и затем подключения к таким казусам не приводит.
Каждый раз при подключении флэши дергать разъем прибора - не вариант. Какие мысли господа???
Atom
advanced
advanced
 
Posts: 182
Joined: 01 Nov 2009, 23:18
Location: Москва
LabVIEW Version: 2010
Karma: 0

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

Postby Kosist on 23 Dec 2016, 22:37

Каким образом "на горячую" Вы отключаете прибор, и как в программе это детектируется? Может, при "втыкании" флэшки, программа думает, что воткнут прибор, пытается инициализировать коммуникацию с ним, но не может - т.к. это флэшка; и потом выскакивает ошибка?
Под лампочкой "прогоняли" код? В каком участке кода порт перестает быть доступным после того, как флэшка была воткнута?
Глупый вопрос, но все же - после подключения флэшки, не меняется новер виртуального ком-порта? Или юсб устройств в целом?
Еще - если работаете через виртуальный ком порт, значит у Вас переходник USB - RS какой-то там, не важно. Так вот, юсб хаб выдает достаточно питания для этого переходника? "Электрическая" совместимость нормальная? Вы используете FTDI переходник, или что-то другое?
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 637
Joined: 21 Feb 2011, 23:44
Location: СумГУ
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2015
Karma: 202
CLAD I/O VIP students

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

Postby Atom on 23 Dec 2016, 23:20

Ситуация возникает сразу после втыкания флэшки.
Использую PIC18F45xx без всяких мостов (в нем все есть) напрямую к шнурку.
В программе есть постоянный цикл (раз в секунду) на проверку стринги из прибора. В том-то и дело, что стрингу правильную получаю,
а вот (это только моё мнение) с ресурс нэйм возможно не лады.
В диспетчере устройств номер СОМ порта НЕ меняется В ЛЮБЫХ комбинациях и со слов винды "устройство работает нормально".
По электричеству все впорядке.
Если после отрыва ничего не делая просто вытащить и назад вставить разъём (причем в тот-же разъём) все становится нормально.
Atom
advanced
advanced
 
Posts: 182
Joined: 01 Nov 2009, 23:18
Location: Москва
LabVIEW Version: 2010
Karma: 0

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

Postby dadreamer on 24 Dec 2016, 00:51

Atom, покажите, как переподключаете девайс в случае извлечения и повторного подключения. Потому что на словах не совсем понятно в данном случае. И как завершаете VISA-сессию в таких случаях.
User avatar
dadreamer
doctor
doctor
 
Posts: 2610
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2016
Karma: 662
I/O VIP vision internet

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

Postby Atom on 24 Dec 2016, 04:49

Да без затей.
Одновременно с выскакиванием моего окна (что связь разорвалась) делаю VISA Close.
Далее (после нажатия ОК в моем окне) запускается VI-ка определения порта (VISA Find -> VISA Open -> проверка стринги от железа ....).
Если стриги нет то VISA Close и к диалогу о разрыве, стринга есть -> основная программа продолжает работу. Но т.к. железо не находится опять выскакивает окно о разрыве. И так до тех пор пока не нажмешь "отмена" в моем окне и программа предложит завершить работу, можно отказаться от завершения работы, но тогда опять попросит восстановить соединение. Как то так.
Но все дело в том, что VI-ка определения портов работает (вытащил шнур, вставил назад и все находится и работает).
Отрыв происходит в момент втыкания флэши. Если после этого дернуть туда-сюда кабель от моего железа и нажать ОК в диалоге, то все заработает.
С ней или без неё уже не важно. Проблема только в моменте подключения флэши.
Atom
advanced
advanced
 
Posts: 182
Joined: 01 Nov 2009, 23:18
Location: Москва
LabVIEW Version: 2010
Karma: 0

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

Postby Vitekkz88 on 24 Dec 2016, 07:03

Atom, На других ПК такая же проблема? После подключения флешки устройство в диспетчере задач есть? В МАХе?
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
leader
leader
 
Posts: 894
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 249
hardware I/O VIP

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

Postby dadreamer on 24 Dec 2016, 11:00

Atom wrote:Если РЯДОМ в порт 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 wrote:Далее (после нажатия ОК в моем окне) запускается VI-ка определения порта (VISA Find -> VISA Open -> проверка стринги от железа ....).

Я так понимаю, применяется вот этот подход: viewtopic.php?p=67019#p67019 Лично я бы не стал им пользоваться, т.к. он не совсем удачный в плане работы с разной USB периферией. Во-первых, VISA Find работает довольно медленно, т.к. видимо сам по себе опрашивает каждый порт на предмет подключения/сопоставления сессий. Во-вторых, при таком подходе мы "долбимся" в каждый порт каждого устройства, что не хорошо. Разные производители разных USB-устройств закладывают разные протоколы общения со своими устройствами. Это касается и флэшек, и накопителей, и UART-адаптеров. Послав некоторую команду случайному устройству, мы можем "выбить его из колеи", нарушив коммуникацию (особенно, если оно уже подключено и используется). Более корректным было бы перечислять список портов средствами OC (WMI), например, используя listComPorts (см. моё сообщение в той же теме). Если порт найден, то берём его и используем в VISA Open / VISA Configure Serial Port.
Atom wrote:Использую PIC18F45xx без всяких мостов (в нем все есть) напрямую к шнурку.

А что за шнурок? Виртуальный порт всё-таки чем создаётся - микросхемой или адаптером?
User avatar
dadreamer
doctor
doctor
 
Posts: 2610
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2016
Karma: 662
I/O VIP vision internet

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

Postby Blackman on 24 Dec 2016, 11:19

VISA - драйвер высокого уровня и не работает напрямую с железом. Общение VISA драйвера с системой можно посмотреть в отладчике NI IO Trace (бывший NI Spy).
А проблема видимо в "просадке" напряжения питания USB порта в момент подключения дополнительной нагрузки (флешки).
Blackman
leader
leader
 
Posts: 550
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 116

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

Postby dadreamer on 24 Dec 2016, 11:24

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

Так или иначе, функции WinAPI вызываются, и они перенаправляют команды вниз по стэку - до драйвера "железки". Идея отнюдь не хорошая - дёргать все USB девайсы ради одного.
Blackman wrote:А проблема видимо в "просадке" напряжения питания USB порта в момент подключения дополнительной нагрузки (флешки).

Почему же тогда
Atom wrote:Если после этого дернуть туда-сюда кабель от моего железа и нажать ОК в диалоге, то все заработает.

?
Нагрузка-то никуда не делась.
User avatar
dadreamer
doctor
doctor
 
Posts: 2610
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2016
Karma: 662
I/O VIP vision internet

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

Postby Blackman on 24 Dec 2016, 11:35

Посмотрите внимательно процесс обмена. Любая команда начинается с открытия сессии к ресурсу и после ее выполнения сессия закрывается. Если ресурс занят или какие-то другие проблемы, то ничего никуда не передается.
Blackman
leader
leader
 
Posts: 550
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 116

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

Postby Vitekkz88 on 24 Dec 2016, 11:46

Автор, попробуйте использовать хаб с внешним блоком питания, и на любой ли флешке это повторяется. Воткните мышку или клавиатуру вместо флешки. Всё так же?
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
leader
leader
 
Posts: 894
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 249
hardware I/O VIP

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

Postby dadreamer on 24 Dec 2016, 12:08

Blackman wrote:Любая команда начинается с открытия сессии к ресурсу и после ее выполнения сессия закрывается.

- Сессия 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 wrote:Если ресурс занят или какие-то другие проблемы, то ничего никуда не передается.

Даже когда порт открыт, всё равно не стоит с ним работать, если он "чужой". Как я уже сказал, к нему может быть подключено какое-то другое оборудование, которое может своеобразно отреагировать на команду пользователя. И кроме того, программа будет работать быстрее, если мы не будем тратить время на опрос всех портов в системе, а сразу подключимся к нужному.
User avatar
dadreamer
doctor
doctor
 
Posts: 2610
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2016
Karma: 662
I/O VIP vision internet

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

Postby Atom on 26 Dec 2016, 17:28

Vitekkz88 wrote:Автор, попробуйте использовать хаб с внешним блоком питания, и на любой ли флешке это повторяется. Воткните мышку или клавиатуру вместо флешки. Всё так же?

Я выше писал, что эффект повторяется не зависимо от внешнего или "внутреннего" хаба. Главное условие для проявления эфеекта - подключения осуществлять в пределах одного хаба. И не важно с внешним БП или с питанием от порта.
Atom
advanced
advanced
 
Posts: 182
Joined: 01 Nov 2009, 23:18
Location: Москва
LabVIEW Version: 2010
Karma: 0

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

Postby Atom on 26 Dec 2016, 17:42

dadreamer wrote:Даже когда порт открыт, всё равно не стоит с ним работать, если он "чужой". Как я уже сказал, к нему может быть подключено какое-то другое оборудование, которое может своеобразно отреагировать на команду пользователя. И кроме того, программа будет работать быстрее, если мы не будем тратить время на опрос всех портов в системе, а сразу подключимся к нужному.

Я никогда не знаю какой номер СОМ порта свободен на компьютере заказчика. Даже при подключении в соседний USB разъём (даже в рамках одного хаба) Винда присваивает ему другой порядковый номер СОМ порта. Поэтому не зная к какому разъёму подключено мое железо я не могу четко прописать номер порта. Да и если юзеру позарез потребовался порт именно "этот" разъём и он решил мою железяку переткнуть в другой, то она должна будет работать уже на другом порте с другим номером виртуального СОМ.
А SubVI-ка поиска портов у меня запускается только тогда когда обнаружился разрыв связи, и НЕ крутится постоянно, а вызывается из основной проги.
В параллельном цикле у меня раз в секунду происходит обращение к уже конкретно определенному порту и чтение из него стринги. Если стринга не получена или получена не та что надо тогда оповещаем о разрыве и по нажатию ОК вызываем подпрогу определения портов.
Atom
advanced
advanced
 
Posts: 182
Joined: 01 Nov 2009, 23:18
Location: Москва
LabVIEW Version: 2010
Karma: 0

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

Postby dadreamer on 26 Dec 2016, 17:56

Atom wrote:Я никогда не знаю какой номер СОМ порта свободен на компьютере заказчика. Даже при подключении в соседний USB разъём (даже в рамках одного хаба) Винда присваивает ему другой порядковый номер СОМ порта. Поэтому не зная к какому разъёму подключено мое железо я не могу четко прописать номер порта. Да и если юзеру позарез потребовался порт именно "этот" разъём и он решил мою железяку переткнуть в другой, то она должна будет работать уже на другом порте с другим номером виртуального СОМ.

Да это-то всё понятно. COM-порт - величина переменная, надо определять динамически. Но идентификатор-то должен быть один и тот же. Так что listComPorts проблему бы решил.
В параллельном цикле у меня раз в секунду происходит обращение к уже конкретно определенному порту и чтение из него стринги. Если стринга не получена или получена не та что надо тогда оповещаем о разрыве и по нажатию ОК вызываем подпрогу определения портов.

А в протоколе общения с прибором всё верно? Терминатор используете? Через терминал проверяли этот эффект, что описываете? Если нет, то обязательно проверьте. Подключаетесь через терминал к прибору и работаете с ним (хотя бы серийник просите у него время от времени). Подключаете вашу флэшку, снова просите серийник и т.п. Если не ответит, ну значит, проблема не в :labview: даже. А возможно в кривом драйвере или прошивке. Да в много в чём может быть.
User avatar
dadreamer
doctor
doctor
 
Posts: 2610
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2016
Karma: 662
I/O VIP vision internet

Next

Return to Коммуникация с приборами

Who is online

Users browsing this forum: No registered users and 2 guests

cron