Доброе всем! Пишу на Дельфе, для начала использовал TComPort компоненту, но сейчас понимаю, что мне хочется свое сделать. А пришел к этому по причине зависания/ошибки в программе когда устройство сидящее на СОМ порте вдруг заснуло/обесточилось... и тут начинаются танцы с бубном )) в лучшем случае рестарт системы.
Дак вот собственно вопрос - что происходит с портом, когда устройство отвалилось, но потом снова появилось? Как можно снова возобновить работу с портом?
Сейчас планирую написать прогу работающую с функциями CreateFile, GetCommState, SetCommState, SetCommMask, CreateThread. Ключевое тут - потоки. Хочу организовать отдельные потоки на прием, и на передачу данных, чтобы основная прога при этом работала независимо от состояния порта. Но при этом еще понимаю, что нужно организовать полную обработку ошибок с портом. А вот какое событие при каких нарушениях происходят еще не знаю... Вообщем ай нид хелп))
Избитая тема COM-порта. А что если отвалилось?
Модераторы: Duncon, Hawk, Romeo, Eugie
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

На аппаратном уровне есть возможность настроить генерирование прерывания при разрыве соединения или обнаружении ошибки.Дак вот собственно вопрос - что происходит с портом, когда устройство отвалилось, но потом снова появилось?
Но здесь уже нужно знать на каком уровне ты хочешь общаться с COM-портом?
It's a long way to the top if you wanna rock'n'roll
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Хороший вопрос, до низкого уровня не планировал опускаться )) Нашел интересную статью про СОМ порт Описание принципов работы СОМ порта, в нем нашел информацию, что есть некий 4-й бит регистра состояния линии 3FD, который отвечает за информацию о разрыве связи. Но как к нему обратится не знаю )
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD
