реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Отсоединение ft232bm во время работы программы
plan
сообщение Dec 23 2005, 10:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 23-12-05
Из: Украина Днепродзержинск
Пользователь №: 12 599



Привет ВСЕМ! Есть проблема с преобразователем usb-com. Проблема возникает когда программа с девайсом работает как с ком портом ,а девайс выдергивают из компьютера.Тогда комп начинает тормозить,и может даже зависнуть если не убить процесс программы.Эта проблема проявляется не только с чипом ft232bm ,но и с pl2303hx.А вот с cp2102 таких проблем нет.Подскажите плиз как вылечить эту проблему.Заранее благодарен.
Go to the top of the page
 
+Quote Post
IV_K
сообщение Dec 26 2005, 16:44
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 17-06-05
Пользователь №: 6 087



драйвер похоже кривой. при пользовании стандартного виндового usbser.sys, я проверял на AT91SAM7S, такие же проблемы.
Go to the top of the page
 
+Quote Post
plan
сообщение Dec 27 2005, 05:54
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 23-12-05
Из: Украина Днепродзержинск
Пользователь №: 12 599



Так получается проблема существует,а все молчат.Напрашивается вывод - зачем такие девайсы в виде виртуальных портов,которые вешают машину при удалении.Получается,что человек который пишет программу работающую с ком портом,может контролировать наличие порта лишь на стадии открытия.А в процессе работы программы ,когда порт открыт закрыть отвалившийся порт уже поздно.Может я чего-то не понимаю,может есть какой нибудь выход из сложившейся ситуации.Заранее благодарю всех откликнувшихся.
Go to the top of the page
 
+Quote Post
Aleks17
сообщение Dec 27 2005, 06:42
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 238
Регистрация: 17-01-05
Из: Новосибирск
Пользователь №: 2 003



А не пробовали при работе с портом timeout-ы задавать? Сдаётся мне тут проблема не драйверов а ПО верхнего уровня.
Go to the top of the page
 
+Quote Post
plan
сообщение Dec 27 2005, 07:07
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 23-12-05
Из: Украина Днепродзержинск
Пользователь №: 12 599



Проблема ведь не с тайм-аутами , а с тем что порт открыт программой, она с ним работает,а тут его резко вырубают.С таймингами я игрался- никакого эффекта.Тем более я использовал и свой софт и других производотелей.Результат одинаковый.А вот cp2102 прекрасно работает.То есть при выдергивании девайса машина вообше не тормозит.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 27 2005, 08:45
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(plan @ Dec 27 2005, 07:54) *
Так получается проблема существует,а все молчат.

Личный опыт - проблемы c зависанием в связке с терминалом ZOC нет.

Выход из положения с Ваших слов решается прибиванием _приложения_ (не названного) работающего с портом. А виноватым Вы называете драйвер.
Не слишком убедительно. Для локализации:
1. Пробуете протестировать с вышеупомянутым терминалом.
2. Ставите оба ( и COM порта тоже) свежих драйвера от производителя.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
plan
сообщение Dec 27 2005, 08:59
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 23-12-05
Из: Украина Днепродзержинск
Пользователь №: 12 599



Приходиться прибивать приложение,но реакция системы на три пальца очень медленная(порядка 2-5 минут).По поводу драйверов - я пробовал и новые и старые - результат нулевой. Подскажите плиз что за терминал такой ZOC.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 27 2005, 09:46
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(plan @ Dec 27 2005, 10:59) *
Подскажите плиз что за терминал такой ZOC.

Как только наберете в google поиск ZOC, сразу найдете в первой срочке и дюжине последующих...
Вообще - самая лучшая и многофунциональная терминальная программа, практически на все случаи
жизни. Использую с незапамятных времен.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
khach
сообщение Dec 27 2005, 12:07
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Проблема с передергиванием ФТДИшек существует. Давайте решать вместе.
Т.к зависает приложение, то позволю спросить- как у вас происходит общение с ком-портом:
пуллинг или евенты? Исполь зуеться ли отдельный поток для приема из порта? Вываливаетесь ли по таймауту или остаетесь в вечном цикле? Чему равен дескриптор (хендл) порта после "вываливания"?
Мы используем CPort3 by Dejan Crnila. Валиться одинаково хорошо как с FTDI, так и с Prolific.
Интересно вообще, как с точки зрения программы корректно обрабатывать состояние "потери" порта?
С терминалами проще- они обычно непрерывно "пулят" состояние порта, забирая все байты, что окажутся во входном буффере. Попутно обрабатывая все ошибки. Если же обмен идет по событиям ( например прием пакета с ожиданиме символа 00 или CR как признака конца пакета) то возврата по таймауту непроисходит. Похоже, что хендл после отваливания порта становиться равен -1 и каллбек евента никогда невызываеться.
Go to the top of the page
 
+Quote Post
plan
сообщение Dec 28 2005, 06:26
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 23-12-05
Из: Украина Днепродзержинск
Пользователь №: 12 599



Я пользуюсь компонентой ASYNC TMS32 .И на сколько я понимаю ,то она работает через события.Пробовал ZOC - он при выдёргивании не зависает,но постоянно опрашивает порт.А вот CP2102 работает нормально-при отключении программа даже не видит ,что порта уже нет в системе.А по поводу фтдишек и пл то у них чего то там с дровами и мне кажется,что надо обрабатывать исключение(отказано в доступе) и тогда будет всё ок,но это теория и надо попробовать на практике.
Go to the top of the page
 
+Quote Post
Harbour
сообщение Dec 28 2005, 07:53
Сообщение #11


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



Цитата(khach @ Dec 27 2005, 14:07) *
Проблема с передергиванием ФТДИшек существует. Давайте решать вместе.
Т.к зависает приложение, то позволю спросить- как у вас происходит общение с ком-портом:
пуллинг или евенты? Исполь зуеться ли отдельный поток для приема из порта? Вываливаетесь ли по таймауту или остаетесь в вечном цикле? Чему равен дескриптор (хендл) порта после "вываливания"?
Мы используем CPort3 by Dejan Crnila. Валиться одинаково хорошо как с FTDI, так и с Prolific.
Интересно вообще, как с точки зрения программы корректно обрабатывать состояние "потери" порта?
С терминалами проще- они обычно непрерывно "пулят" состояние порта, забирая все байты, что окажутся во входном буффере. Попутно обрабатывая все ошибки. Если же обмен идет по событиям ( например прием пакета с ожиданиме символа 00 или CR как признака конца пакета) то возврата по таймауту непроисходит. Похоже, что хендл после отваливания порта становиться равен -1 и каллбек евента никогда невызываеться.

Проблемы у Вас в криво написанной библиотеке для работы с комами. Драйвера и ОС тут не причем. Если либу не можете написать сами - юзайте for ex. от мохи или commoncpp - в частности перед aRead без суеты вызываем isPending(pendingError) и будет Вам счастье ...
Go to the top of the page
 
+Quote Post
khach
сообщение Dec 28 2005, 11:35
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Обычно для опроса состояния порта используеться функция API (в паскалевской нотации)
function ClearCommError(hFile: THandle; var lpErrors: DWORD; lpStat: PComStat): BOOL; stdcall;
Можно расшифровать это
Цитата
isPending(pendingError)
? Какие функции АПИ оно вызывает? И где ее вызывать, если я ожидаю события по ивенту в течении десятков секунд и за это время порт может "отвалиться"?
Если алгоритм поведения в ожидании отвала будет описан "лопатологично" то внести соответствующие изменения в пакет привычных коммуникационных компонет несоставит труда.
Go to the top of the page
 
+Quote Post
plan
сообщение Dec 28 2005, 12:00
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 23-12-05
Из: Украина Днепродзержинск
Пользователь №: 12 599



У меня получилось победить фтди. Я при операциях с портом начал обрабатывать исключения ,происходящие при отключении девайса и проблема решилась .
Go to the top of the page
 
+Quote Post
Harbour
сообщение Dec 28 2005, 15:11
Сообщение #14


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



Цитата(khach @ Dec 28 2005, 13:35) *
Обычно для опроса состояния порта используеться функция API (в паскалевской нотации)
function ClearCommError(hFile: THandle; var lpErrors: DWORD; lpStat: PComStat): BOOL; stdcall;
Можно расшифровать это
Цитата
isPending(pendingError)
? Какие функции АПИ оно вызывает? И где ее вызывать, если я ожидаю события по ивенту в течении десятков секунд и за это время порт может "отвалиться"?
Если алгоритм поведения в ожидании отвала будет описан "лопатологично" то внести соответствующие изменения в пакет привычных коммуникационных компонет несоставит труда.

Я вообще делал потоками - стандартные producer/consumer thread'ы, так удобнее и быстрее произвольный траффик обрабатывать. В случае однопоточного варианта тоже нет проблем, так как вторым параметром идет max время ожидания события.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 16:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01465 секунд с 7
ELECTRONIX ©2004-2016