Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Как определить, подключено ли устройство к COM


Автор: Bitter 24.5.2007, 23:53
Есть устройство, которое в нормальном режиме ничего в порт не посылает. Как узнать подключено ли оно к КОМ порту? Может как-то по питанию? Или по другим признакам. 

Спасибо

Автор: dumb 25.5.2007, 00:16
Цитата(Bitter @  24.5.2007,  23:53 Найти цитируемый пост)
в нормальном режиме ничего в порт не посылает

ввести его в ненормальный режим и заставить ответить. иначе - никак.

Автор: Bitter 25.5.2007, 15:52
Ввести его в ненормальный режим не возможно. Это пожарный датчик.

Но ведь есть же в последовательном порте понятие MARK. Это когда на линни присутствует логическая единица. В этом состоянии линия находится всегда, кроме момента передачи данных. Кроме того, это состояние отстутсвует, если нет соединения с устройством. Значит его можно проверить. Но как? Кто-нить знает?

Автор: cardinal 25.5.2007, 21:00
Bitter, сделай маленькое промежуточное устройство (стоимостью в 300 рублей) и контролируй им связь =)

Автор: Bitter 26.5.2007, 01:13
Ну что вы такое говорите? какое промежуточное устройство? Я про программирование спрашиваю, блин. У меня задание такое.

Вот, может я сейчас глупость скажу, так как я в СОМ портах еще ничего не понимаю, но есть такая функция как SetCommMask, которая указывает на какие события нужно реагировать. Среди этих событий есть событие EV_BREAK, которое возникает при разрыве связи с устройством.
Следовательно, по его возникновению можно судить о том, что устройство не подключено. Проверить наличие этого события можно функцией WaitForSingleObject, но проблема в том, что я не знаю как ей пользоваться. Подскажите пожалуйста.

Добавлено через 6 минут и 37 секунд
Хочу добавить: тут даже дело не в том как ей пользоваться, это ж функция - бери и пользуйся, а в том, как организовать сам принцип работы алгоритма опроса датчика. Вот, допустим, его нужно опрашивать 10 раз в секунду, во время опроса необходимо выяснить: подключено ли устройство (то есть нет ли разрыва соединения), далше наличие сообщений в буфере, ну и ещё обработать всё это. Вот начиная со слова "дальше" я могу выполнить, а вот до него не пойму как. Ведь функция WaitForSingleObject останавливает работу программы пока не прийдет сообщение. Или нет? Прошу помощи именно профессионалов. Не советуйте подключить дополнительное устройство за 300 рублей. Спасибо

Автор: cardinal 26.5.2007, 03:19
Посмотри вот тут, думаю поможет в решении проблемы (там тем более несколько вариантов)
http://forum.developing.ru/archive/index.php/t-9238.html
Я бы запускал для обработки отдельный поток... (опять же см. ссылка)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)