Избитая тема COM-порта. А что если отвалилось?

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

20 янв 2017, 07:03

Доброе всем! Пишу на Дельфе, для начала использовал TComPort компоненту, но сейчас понимаю, что мне хочется свое сделать. А пришел к этому по причине зависания/ошибки в программе когда устройство сидящее на СОМ порте вдруг заснуло/обесточилось... и тут начинаются танцы с бубном )) в лучшем случае рестарт системы.

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

Сейчас планирую написать прогу работающую с функциями CreateFile, GetCommState, SetCommState, SetCommMask, CreateThread. Ключевое тут - потоки. Хочу организовать отдельные потоки на прием, и на передачу данных, чтобы основная прога при этом работала независимо от состояния порта. Но при этом еще понимаю, что нужно организовать полную обработку ошибок с портом. А вот какое событие при каких нарушениях происходят еще не знаю... Вообщем ай нид хелп))
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

20 янв 2017, 15:40

Дак вот собственно вопрос - что происходит с портом, когда устройство отвалилось, но потом снова появилось?
На аппаратном уровне есть возможность настроить генерирование прерывания при разрыве соединения или обнаружении ошибки.
Но здесь уже нужно знать на каком уровне ты хочешь общаться с COM-портом?
It's a long way to the top if you wanna rock'n'roll
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

23 янв 2017, 07:31

Хороший вопрос, до низкого уровня не планировал опускаться )) Нашел интересную статью про СОМ порт Описание принципов работы СОМ порта, в нем нашел информацию, что есть некий 4-й бит регистра состояния линии 3FD, который отвечает за информацию о разрыве связи. Но как к нему обратится не знаю )
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Ответить