Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Головоломка для одноЭсников или порадуйте блондинку (http://forums.kuban.ru/f1040/golovolomka_dlya_odnoesnikov_ili_poradujte_blondinku-1138828.html)

Helen 1986 22.05.2011 21:30

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

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

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

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



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

poshnaf 22.05.2011 21:41

1-Helen 1986 > Хорошя ты женщина.
Но я ниче не понял.
Чёт отваливается и некрасиво все.
А где головоломка?

Ткачик 22.05.2011 21:55

"[em]Решение через одно место я сделала, все работает[/em]" - знаем мы это место... "Per anus ad astra".

PCI-контроллер COM-порта - и ничего не отваливается, и заморочек куда меньше.

Bazy 22.05.2011 21:59

Поддерживаю (3)
[url]http://krasnodar.snr.ru/catalog/?categoryid=2446&page=0[/url]
И болтами можно прикрутить !!! :)))

Helen 1986 22.05.2011 22:13

два умных одноЭсника?
офигеть

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

у него кстати, всего 3 усб дырки, на которых висит 4 девайса (без усб, хабов, кстати)
клава с мышкой
видео камера
переходник ком-усб

СоболиныйГлаз 22.05.2011 22:18

(5)"и куда я эту плату в нетбук вставлю?" Гусары! Молчать!
А вообще шлепай на "усб дырки" с включенными устройствами кляксы из термоклея.
И вообще - ты пытаешься лепить конфетку, гм ... на неподходящей элементной базе :)

СthuIhu 22.05.2011 22:20

залейте подключенный усб эпоксидкой, делофта.

Helen 1986 22.05.2011 22:27

(6-7) есть у нас такое же чудо, на тебя похожее
сел голыми коленями на плиту с клеем
благо шо плита фанерная
под ржание всего цеха плиту выпилили и отправили его на грузовике в больницу

с тех пор у него кличка - тулза бес мосхов

2Green 22.05.2011 22:28

суперклей

СоболиныйГлаз 22.05.2011 22:30

(8)"сел голыми коленями" - мне аж страшно стало при попытке представить ТАКУЮ анатомию :))))
Чудо в данной ситуации - ты :) Кстати, ни термоклей, ни эпоксидка после застывания ни разу не липкие. Термоклей удобнее тем, что в случае чего проще удалить и почи не оставляет следов.

СthuIhu 22.05.2011 22:34

(8): это как раз на меня не похоже. на меня похожее тот, кто коварно плиту клеем намазал. :)

Helen 1986 22.05.2011 22:36

(10) зато ниче так этот идиот смотрелся на фанерном постаменте в кузове грузовичка

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

кстати, а как в торговом оборудовании эта проблема решается в случае выдергивания сканера или другой железки "на ходу"

Ткачик 22.05.2011 22:37

(5) Покажите слово "нетбук" в (1)?

Тот, кто в таком раскладе рекомендовал купить на замену именно его - даже не ТТО, а ССЗБ.

Helen 1986 22.05.2011 22:37

(11) сам этот идиот и намазал. Просто решил склеить сразу 2 заготовки без распила

Bazy 22.05.2011 22:39

(5)Ну если есть поддержка pcmcia ,то вот :
[url]http://krasnodar.dns-shop.ru/catalog/85/12538/[/url]

А вообще да,лучше нетбук заменить на что нибудь полноценное !!!

Helen 1986 22.05.2011 22:45

(13) твой бы выхлоп да сегодня утром.
вмиг бы ночные лужи просохли

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

прекрасно работает нетбук в этих условиях
экран 10", мужички вставили его в шкапчик, вентиляция через доп вентилятор с фильтром (от старого компа осталась). Производительности хватает - девайс не скоростной, обмен на скорости 9600.
Дешево и сердито. никаких модификаций - - этот нетбук тами сдохнет

Helen 1986 22.05.2011 22:47

(15) а зачем? побольше денег вывалить?
это же не разработка - это эксплуатация

Helen 1986 22.05.2011 22:50

нормальный одноядерный атом
венда с сетевой поддержкой
управление девайсом локально и дистанционно по сетке
показ видео (камера 1.3)
нетбукгерметизирован в шкапчике, клава и мышка снаружи

СоболиныйГлаз 22.05.2011 22:50

(16)Ну а раз "прекрасно работает", то какие проблемы? Пусть и дальше "прекрасно работает" :)
Тебе уже четко и ясно сказали - термоклей на места соединения кабелей с разъемами USB(или очень близко от них). Можно и нетбук на капли термоклея поставить, для фиксации

Helen 1986 22.05.2011 22:56

(19) да хотелось просто нормально решить проблему - это ж не только здесь, но и на переносном оборудовании требуется.

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


Ноут в шкафу там нормально так винтиками прикручен
нафиг там клей

Bazy 22.05.2011 22:56

(17)Все ,я сдаюсь !!! :)))

Ткачик 22.05.2011 22:59

(16) Где ты в (13) увидело совет? Совет был в (3), пока не требовалось телепание.

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

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

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

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

Лично я рекомендую последний вариант.

Garstag 23.05.2011 09:37

Был у меня как-то коротенький удлинитель для УСБ, всего сантиметров 30 длиной. Вот такой бы вставить в нетбук, а с другой стороны переходник КОМ-УСБ уже крепить хоть скотчем, хоть резинкой для денех...
:-)

Helen 1986 23.05.2011 09:56

(23) была такая идея.
удлинитель УСБ --> переходник --> ком шланг
отпала сама собой - лишние разъемы

Helen 1986 23.05.2011 10:19

(13)

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

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

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


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

неудачнеги не читают описания. и это типично

Странный аттрактор 23.05.2011 10:51

Удивляюсь: как, учитывая хамский стиль общения вопрошающего, кто-то ещё желает отвечать? По-моему, автор вполне самодостаточен.

Sk0rp 23.05.2011 11:33

[em]возникает неопределеноое исключение и и форма не дестроится[/em]
Открыть мануал, найти конструкцию try **** catch(...)****, читать, долго думать.
Прийти к решению, что любые исключения, если они возникают ловятся, и, значит, форму можно дестроить.

Helen 1986 23.05.2011 12:12

(27)
я ловлю исключение в момент уничтожения формы
и что? исключение в момент дестроя одного из компонентов. Дестрой формы прерывается

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

Helen 1986 23.05.2011 12:23

последовательность действий проста как палка

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

ловим исключение, сообщаем
пытаемся дестроить компонент - фиг. Он прилип к форме как банный лист
при попытке закрыть форму RTTI опять пытается отдестроить все компоненты формы
напарывается на исключение и отказ

Helen 1986 23.05.2011 12:24

после отказа остаемся со слегка беременным компонентом - и закрыть нельзя и бросить невозможно

ВасяПупкин 23.05.2011 13:57

Не пробовали ловить WM_DEVICECHANGE и проверять "что было, что будет и на чем сердце успокоится?"

Helen 1986 23.05.2011 14:20

(31)
пробовала
для АЦП с УСБ интерфейсом отрабатывает абсолютно нормально
для переходника - ловится событие, ИД девайса отсутствует (непонятно что возникло). кстати, нечто похожее возникает при втыкании девайса с неустановленным двайвером (например, флешки, которая никогда в этот комп не вставлялась)

про эмулируемый ком порт - ваще молчание
как будто вороны склевали

Helen 1986 23.05.2011 14:24

похоже, что
либо венда с ком портом по особому работает
либо драйвер переходника косячит

я выловила событие по другому
проверила в ХР и семерке - работает

Helen 1986 23.05.2011 14:25

но как то некрасиво все это

ВасяПупкин 23.05.2011 14:52

(32) А подписка на событие RegisterDeviceNotification была выполнена?
как-то так: [url]http://msdn.microsoft.com/en-us/library/aa363432%28VS.85%29.aspx[/url]
Рассылаемый по умолчанию широковещательно DBT_DEVICEREMOVECOMPLETE вряд ли подходит для описываемой ситуации, уж очень жоско с девицей обходятся...
Лучше ИМХО подписаться для указанного хэндла, как DEV_BROADCAST_HANDLE (он же есть, я так понял) и ловить событие DBT_DEVNODES_CHANGED, если com-порт таки исчезает, а не остается в системе в каком-то невнятном состоянии.

ВасяПупкин 23.05.2011 14:54

(33) Как удалось?

Helen 1986 23.05.2011 15:07

сом порт именно исчезает - при удалении переходника из усб драйвер деактивируется, и заодно смывается ком порт

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

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

после закрытия ищем ком порт по новой и делаем попытку его открыть по имени. естественно, он не открывается - порта то нет, нет и такого имени

ВасяПупкин 23.05.2011 16:54

(37) Тогда должно генерироваться событие DBT_DEVNODES_CHANGED, но оно просто так, судя по документации, не рассылается, надо подписываться. Впрочем, если оно работает и так - стоит ли прикручивать такие навороты с оконными сообщениями и прочим скарбом? Вопрос открытый...
И опять же, каким путём реализован обмен с com-портом в компоненте? Синхронно? IoCompletionPort?

Капуста 23.05.2011 17:50

Силикон или строительная пена.

Чучундер 23.05.2011 18:01

нет ничего более вечного чем примотанное синей изолентой...


Текущее время: 17:56. Часовой пояс GMT +3.