К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Головоломка для одноЭсников или порадуйте блондинку

Гость
0 - 22.05.2011 - 21:30
Проблема
есть комп и железо, подключенное к нему через ком порт. Все работает нормально, сбои порта и девайса нормально обрабатываются, негтовность или выключение устройства диагностируются и производится восстановление процесса или диагностика.

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

Данную ситуацию винда не обрабатывает нормально с точки зрения ком порта. Драйвер ловит ампутацию усб девайса, и т.к. девайс кончился - драйвер отваливается, и заодно исчезает ком порт. И программа с открытым хендлом (win api) ломится в никуда.

Как корректно поймать отваливание ком порта и закрыть хендл? Работа ведется через готовую компоненту и после отваливаения даже форму уничтожить нельзя - возникает неопределеноое исключение и и форма не дестроится



Решение через одно место я сделала, все работает, но хотелось бы красиво
исходники компоненты тоже есть



Гость
1 - 22.05.2011 - 21:41
1-Helen 1986 > Хорошя ты женщина.
Но я ниче не понял.
Чёт отваливается и некрасиво все.
А где головоломка?
2 - 22.05.2011 - 21:55
"Решение через одно место я сделала, все работает" - знаем мы это место... "Per anus ad astra".

PCI-контроллер COM-порта - и ничего не отваливается, и заморочек куда меньше.
Гость
3 - 22.05.2011 - 21:59
Поддерживаю (3)
http://krasnodar.snr.ru/catalog/?categoryid=2446&page=0
И болтами можно прикрутить !!! :)))
Гость
4 - 22.05.2011 - 22:13
два умных одноЭсника?
офигеть

и куда я эту плату в нетбук вставлю?

у него кстати, всего 3 усб дырки, на которых висит 4 девайса (без усб, хабов, кстати)
клава с мышкой
видео камера
переходник ком-усб
Гость
5 - 22.05.2011 - 22:18
(5)"и куда я эту плату в нетбук вставлю?" Гусары! Молчать!
А вообще шлепай на "усб дырки" с включенными устройствами кляксы из термоклея.
И вообще - ты пытаешься лепить конфетку, гм ... на неподходящей элементной базе :)
Гость
6 - 22.05.2011 - 22:20
залейте подключенный усб эпоксидкой, делофта.
Гость
7 - 22.05.2011 - 22:27
(6-7) есть у нас такое же чудо, на тебя похожее
сел голыми коленями на плиту с клеем
благо шо плита фанерная
под ржание всего цеха плиту выпилили и отправили его на грузовике в больницу

с тех пор у него кличка - тулза бес мосхов
Гость
8 - 22.05.2011 - 22:28
суперклей
Гость
9 - 22.05.2011 - 22:30
(8)"сел голыми коленями" - мне аж страшно стало при попытке представить ТАКУЮ анатомию :))))
Чудо в данной ситуации - ты :) Кстати, ни термоклей, ни эпоксидка после застывания ни разу не липкие. Термоклей удобнее тем, что в случае чего проще удалить и почи не оставляет следов.
Гость
10 - 22.05.2011 - 22:34
(8): это как раз на меня не похоже. на меня похожее тот, кто коварно плиту клеем намазал. :)
Гость
11 - 22.05.2011 - 22:36
(10) зато ниче так этот идиот смотрелся на фанерном постаменте в кузове грузовичка

а по поводу сабжа - похоже, одноЭсники то и не в курсе.
наверное, все как я 1986 года

кстати, а как в торговом оборудовании эта проблема решается в случае выдергивания сканера или другой железки "на ходу"
12 - 22.05.2011 - 22:37
(5) Покажите слово "нетбук" в (1)?

Тот, кто в таком раскладе рекомендовал купить на замену именно его - даже не ТТО, а ССЗБ.
Гость
13 - 22.05.2011 - 22:37
(11) сам этот идиот и намазал. Просто решил склеить сразу 2 заготовки без распила
Гость
14 - 22.05.2011 - 22:39
(5)Ну если есть поддержка pcmcia ,то вот :
http://krasnodar.dns-shop.ru/catalog/85/12538/

А вообще да,лучше нетбук заменить на что нибудь полноценное !!!
Гость
15 - 22.05.2011 - 22:45
(13) твой бы выхлоп да сегодня утром.
вмиг бы ночные лужи просохли

Буратины только и умеют давать такие советы.

прекрасно работает нетбук в этих условиях
экран 10", мужички вставили его в шкапчик, вентиляция через доп вентилятор с фильтром (от старого компа осталась). Производительности хватает - девайс не скоростной, обмен на скорости 9600.
Дешево и сердито. никаких модификаций - - этот нетбук тами сдохнет
Гость
16 - 22.05.2011 - 22:47
(15) а зачем? побольше денег вывалить?
это же не разработка - это эксплуатация
Гость
17 - 22.05.2011 - 22:50
нормальный одноядерный атом
венда с сетевой поддержкой
управление девайсом локально и дистанционно по сетке
показ видео (камера 1.3)
нетбукгерметизирован в шкапчике, клава и мышка снаружи
Гость
18 - 22.05.2011 - 22:50
(16)Ну а раз "прекрасно работает", то какие проблемы? Пусть и дальше "прекрасно работает" :)
Тебе уже четко и ясно сказали - термоклей на места соединения кабелей с разъемами USB(или очень близко от них). Можно и нетбук на капли термоклея поставить, для фиксации
Гость
19 - 22.05.2011 - 22:56
(19) да хотелось просто нормально решить проблему - это ж не только здесь, но и на переносном оборудовании требуется.

у нас много диагностичекого оборудования с ноутами идет, последнее время с нетбуками стали поставлять - маленькие, легче таскать , дольше работают


Ноут в шкафу там нормально так винтиками прикручен
нафиг там клей
Гость
20 - 22.05.2011 - 22:56
(17)Все ,я сдаюсь !!! :)))
21 - 22.05.2011 - 22:59
(16) Где ты в (13) увидело совет? Совет был в (3), пока не требовалось телепание.

Впрочем, и сейчас еще не поздно посоветовать. И совет будет вот каким: исключать.

Либо ненадежность контакта переходника с нетбуком (клей, скотч, шурупы).

Либо сам этот контакт, например: http://www.rtcs.ru/hwsubtype.asp?id=262

Либо программера, чересчур уверенного в своей способности решить любую проблему программно.

Лично я рекомендую последний вариант.
22 - 23.05.2011 - 09:37
Был у меня как-то коротенький удлинитель для УСБ, всего сантиметров 30 длиной. Вот такой бы вставить в нетбук, а с другой стороны переходник КОМ-УСБ уже крепить хоть скотчем, хоть резинкой для денех...
:-)
Гость
23 - 23.05.2011 - 09:56
(23) была такая идея.
удлинитель УСБ --> переходник --> ком шланг
отпала сама собой - лишние разъемы
Гость
24 - 23.05.2011 - 10:19
(13)

Маленькая собачка до старости щенок
или вторая серия измышлений неудачнега

Либо программера, чересчур уверенного в своей способности решить любую проблему программно

типичное поведение неудачнега - инициативные и амбициозные сотрудники их всегда запинывают.
лично я неинициативных предпочитаю прикручивать клеем и скотчем


http://www.rtcs.ru/hwsubtype.asp?id=262

неудачнеги не читают описания. и это типично
Гость
25 - 23.05.2011 - 10:51
Удивляюсь: как, учитывая хамский стиль общения вопрошающего, кто-то ещё желает отвечать? По-моему, автор вполне самодостаточен.
Гость
26 - 23.05.2011 - 11:33
возникает неопределеноое исключение и и форма не дестроится
Открыть мануал, найти конструкцию try **** catch(...)****, читать, долго думать.
Прийти к решению, что любые исключения, если они возникают ловятся, и, значит, форму можно дестроить.
Гость
27 - 23.05.2011 - 12:12
(27)
я ловлю исключение в момент уничтожения формы
и что? исключение в момент дестроя одного из компонентов. Дестрой формы прерывается

дестрой формы не завершится нормально, пока не отдестроятся все компоненты - в этом и проблема вся. При попытке повторного вызова вылазит неотдестроенная форма - она то не уничтожилась и вызывается уже существующая с ком портом, направленным в никуда
Гость
28 - 23.05.2011 - 12:23
последовательность действий проста как палка

попытка вывода в порт
напарываемся на то, что провод переходника вырвали и ком порт в системе испарился
при этом происходит исключение

ловим исключение, сообщаем
пытаемся дестроить компонент - фиг. Он прилип к форме как банный лист
при попытке закрыть форму RTTI опять пытается отдестроить все компоненты формы
напарывается на исключение и отказ
Гость
29 - 23.05.2011 - 12:24
после отказа остаемся со слегка беременным компонентом - и закрыть нельзя и бросить невозможно
Гость
30 - 23.05.2011 - 13:57
Не пробовали ловить WM_DEVICECHANGE и проверять "что было, что будет и на чем сердце успокоится?"
Гость
31 - 23.05.2011 - 14:20
(31)
пробовала
для АЦП с УСБ интерфейсом отрабатывает абсолютно нормально
для переходника - ловится событие, ИД девайса отсутствует (непонятно что возникло). кстати, нечто похожее возникает при втыкании девайса с неустановленным двайвером (например, флешки, которая никогда в этот комп не вставлялась)

про эмулируемый ком порт - ваще молчание
как будто вороны склевали
Гость
32 - 23.05.2011 - 14:24
похоже, что
либо венда с ком портом по особому работает
либо драйвер переходника косячит

я выловила событие по другому
проверила в ХР и семерке - работает
Гость
33 - 23.05.2011 - 14:25
но как то некрасиво все это
Гость
34 - 23.05.2011 - 14:52
(32) А подписка на событие RegisterDeviceNotification была выполнена?
как-то так: http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
Рассылаемый по умолчанию широковещательно DBT_DEVICEREMOVECOMPLETE вряд ли подходит для описываемой ситуации, уж очень жоско с девицей обходятся...
Лучше ИМХО подписаться для указанного хэндла, как DEV_BROADCAST_HANDLE (он же есть, я так понял) и ловить событие DBT_DEVNODES_CHANGED, если com-порт таки исчезает, а не остается в системе в каком-то невнятном состоянии.
Гость
35 - 23.05.2011 - 14:54
(33) Как удалось?
Гость
36 - 23.05.2011 - 15:07
сом порт именно исчезает - при удалении переходника из усб драйвер деактивируется, и заодно смывается ком порт

(36) для ком порта аварийное завершение операций в/в с кодами 2 и 3 (Read/Write operation failed) выдается только при сносе эмулируемого ком порта и никогда - для нормального кома (возможно, если реальный ком сгорит - они и выдадутся).

ловишь это исключение и плавно-плавно закрываешь хендл файла, открытого на коме.
главное - не допустить операций физического в/в типа чтения/записи или сброса регистров порта - в этом случае система прихлопнет хендл и порт сам отвалится.
если же пропустить операцию в/в - всё, трындец - хендл фиг закроешь

после закрытия ищем ком порт по новой и делаем попытку его открыть по имени. естественно, он не открывается - порта то нет, нет и такого имени
Гость
37 - 23.05.2011 - 16:54
(37) Тогда должно генерироваться событие DBT_DEVNODES_CHANGED, но оно просто так, судя по документации, не рассылается, надо подписываться. Впрочем, если оно работает и так - стоит ли прикручивать такие навороты с оконными сообщениями и прочим скарбом? Вопрос открытый...
И опять же, каким путём реализован обмен с com-портом в компоненте? Синхронно? IoCompletionPort?
Гость
38 - 23.05.2011 - 17:50
Силикон или строительная пена.
39 - 23.05.2011 - 18:01
нет ничего более вечного чем примотанное синей изолентой...


К списку вопросов






Copyright ©, Все права защищены