Название: Проблемы с VCP в Windows Отправлено: juvf от Август 04, 2021, 08:39 Программа через USB-VCP общается с железкой. Для СОМ порт используется QSerialPort.
Подключил железку по USB, в винде появился COM порт, запустил программу, открыл порт - работаешь. Закрыл порт, закрыл программу.... Всё прекрасно... до тех пор, пока не дёрниш USB при открытом порте в программе. Естественно в программе прекращается обмен данными. А вот дальше проблема: закрыл компорт в программе (остановил обмен), подключил USB обратно, снова появился VCP, в программе пытаюсь открыть СОМ порт - получаю ошибку открытия порта. Запускаю другую программу, пытаюсь открыть порт - ошибка открытия порта. В общем в системе (в диспетчере устройств) СОМ порт есть, но ни одна программа его открыть не может. 1) Как это лечится? 2) Можно как-то автоматически определить в программе (в QSerialDevice) что открыты СОМ порт более в системе не существует и сделать принудительное закрытие порта? ps Windows 7 64 Название: Re: Проблемы с VCP в Windows Отправлено: juvf от Август 04, 2021, 08:47 ну да ладно.... не хочешь работать по СОМ30, переименовать в СОМ31 и открыть СОМ31....
такое чувство, что после закрытия QSerialPort и самой программы компорт продолжает оставаться открытым Название: Re: Проблемы с VCP в Windows Отправлено: kuzulis от Август 04, 2021, 11:13 Вендопроблемы.
Из моего опыта, выдернутый ком порт остается "занятым" некоторое время (по крайней мере в течении минуты или как то так). Хотя, хз, многое зависит от драйвера. Как вариант - кикать "зависшее" у-во программно через WinAPI функции, но для этого нужны права админа... Но это дичь какая то. :) Название: Re: Проблемы с VCP в Windows Отправлено: tux от Август 04, 2021, 12:50 При выдергивании железки из порта, порт остаётся "занятым" не только в оффтопике. В Linux такая же проблема. Разве что интервал "отпускания" другой.
Название: Re: Проблемы с VCP в Windows Отправлено: Old от Август 04, 2021, 12:54 При выдергивании железки из порта, порт остаётся "занятым" не только в оффтопике. В Linux такая же проблема. Разве что интервал "отпускания" другой. В linux устройство сразу исчезает из /dev и момент отключения можно отловить и закрыть порт/прекратить обмен. А после подключения устройства его можно спокойно открыть вновь.Название: Re: Проблемы с VCP в Windows Отправлено: tux от Август 04, 2021, 13:03 В linux устройство сразу исчезает из /dev и момент отключения можно отловить и закрыть порт/прекратить обмен. Не всегда. Особенно, если в момент выдёргивания был обмен. Какой нибудь /dev/ttyUSBX остаётся на некоторое время. Через некоторое время да, пропадёт. Одно время раздражало, потом плюнул.gentoo - если интересна OS. Название: Re: Проблемы с VCP в Windows Отправлено: Old от Август 04, 2021, 13:08 Не всегда. Особенно, если в момент выдёргивания был обмен. Какой нибудь /dev/ttyUSBX остаётся на некоторое время. Через некоторое время да, пропадёт. Одно время раздражало, потом плюнул. Странно, никогда не сталкивался.gentoo - если интересна OS. Название: Re: Проблемы с VCP в Windows Отправлено: tux от Август 04, 2021, 13:17 Странно, никогда не сталкивался. Я бы тоже на слово не поверил. :) Но у меня это наблюдается на домашней машине и на рабочей. Система одинаковая, железка - преобразователь USB-TTL.Возможно, что время "отваливания" настраивается. Название: Re: Проблемы с VCP в Windows Отправлено: juvf от Август 04, 2021, 13:51 через WinAPI функции Точно! WinAPI!!!Запустил свою старую утилиту, там компорт поднят на WinAPI. кагбэ в 3-х строчках код такой Код: if(openPort(cbSerialPorts->currentText()) timeOut заряжен на 10...100 секунд. компорт в WinAPI заряжен на 1...10 сек Код: COMMTIMEOUTS ct; Если воткнуть железку обратно и опять запустить прогу (хоть на WinAPI, хоть на QSerialPort), то компорт ни кем не занят, открывается и работает. Т.е. при использовании WinAPI таких траблов в маздае нет, а с QSerialPort есть. ((( Название: Re: Проблемы с VCP в Windows Отправлено: kuzulis от Август 04, 2021, 21:05 Цитировать Т.е. при использовании WinAPI таких траблов в маздае нет, а с QSerialPort есть. ((( Ну, как бы QSerialPort юзает то самое винапи... Сейчас оно юзает ReadFileEx/WriteFileEx ф-ции... Ты попробуй с ними, а также открой в overlapped режиме, чтоб честно было )) ЗЫ: Я больше не занимаюсь сериал портом, не сопровождаю его. Так что спрашивай у кутешников теперь к ним все претензии (они там вроде хотели кишки под винду подшаманить). Там наверно теперь кто-то из них должен тянуть этот модуль (ну, или выкинут его вообще) ;) Название: Re: Проблемы с VCP в Windows Отправлено: juvf от Август 05, 2021, 06:03 ЗЫ: Я больше не занимаюсь сериал портом, не сопровождаю его. Так что спрашивай у кутешников Я знаю, что ты съехал с сериалПорт-а, это притензия не к тебе, да и вообще это не притензия, это проблема, и может кто уже с такой проблемой сталкивался и как-то её решил?теперь к ним все претензии Название: Re: Проблемы с VCP в Windows Отправлено: juvf от Август 05, 2021, 08:37 и как-то её решил? Вобщем Название: Re: Проблемы с VCP в Windows Отправлено: kuzulis от Август 05, 2021, 15:14 А попробуй ка пошаманить в COMMTIMEOUTS через QSerialPort::handle(), естественно, после открытия и настройки порта
Название: Re: Проблемы с VCP в Windows Отправлено: juvf от Август 06, 2021, 11:27 JSerialPort тоже залип. Сейчас наблюдаю и QSerialPort и WinAPI одинаковое поведение. Нашел алгоритм 100% залипания компорта
1) вткаем железку в ПК 2) открываем компорт 3) выдергиваем усб, тут теряется связь 4) втыкаем усб, порт продолжает быть открытым, связь естественно не востанавливается 5) закрываем компорт 6) открываем компорт - ВСЁ!!! Порт залип. Занят др. приложением. Можно задергать шнурок - порт не освободиться. Вычислил танец с бубном, который 100% отлипает компорт 7)выдергиваем усб 8 ) открываем компорт на выдернутом усб. получаем ошибку, такого порта нет. после этого действия порт "освобождается" 9) втыкаем усб 10) открываем порт, работаем. Т.е. порт залипает если, грубо говоря, вызвать close() на дескриптор порта, который отваливался и сейчас опять есть. |