| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Работа с COM портом, посылю данные |
| Автор: Angel_19 21.8.2012, 14:36 | ||
| Работаю с COM портом. Посылаю данные, они принимаются портом, но нет как бы нажатия Enter, хотя вместе с коммандой посылаю - #13 Проверяю работу с помощью программы мониторинга COM порта. Вот модуль:
Непойму, что не так делаю ... |
| Автор: AndreyIQ 21.8.2012, 16:12 |
| Попробуйте #10+#13 или #13+#10 |
| Автор: northener 21.8.2012, 16:19 | ||
Что означает
|
| Автор: Angel_19 21.8.2012, 16:26 |
| Это значит, что после того, как я записал данные в порт, в программе мониторинга они появляются, но нет ответа от модема. И если в порт записать еще данные они идут как бы в куче с моими. |
| Автор: kami 21.8.2012, 18:13 | ||||
А что вы хотели? Ком-порт, в отличие от процессора компьютера - крайне медленная штука. На основании этого смотрим код еще раз:
И в дополнение: чтобы ReadFile работала, нужно чтобы
|
| Автор: Angel_19 21.8.2012, 20:24 |
| kami - спасибо! Учел замечания, заработало. |
| Автор: kami 21.8.2012, 22:21 |
Что-то мне подсказывает, что оно "заработало" путем вставки между Write и Read чего-то типа Sleep. Если так, то это - костыль, причем - не особо прочный. |
| Автор: Angel_19 28.8.2012, 21:44 |
| Sleep не использовал. Использовал вставки - Application.ProcessMessages; Т.к. без них все плохо. Видимо когда идет запись/чтение в/из порт(а), нужно "отпустить" текущий поток. Конечно, хорошо бы сделать, чтобы порт сам уведомлял о готовности (или опрашивать на предмет готовности), но не знаю как. Если есть знающие подскажите. |
| Автор: kami 28.8.2012, 22:51 |
Я же и говорю - Если не обязательно всё самому реализовывать на WinAPI, то берется любой компонент, работающий с COM-портом, имеющий нужные события. Я использовал BComPort, более того - он идет с примерами. Если обязательно самому на WinAPI - берется любой компонент, работающий с COM-портом, имеющий нужные события |
| Автор: Angel_19 25.9.2012, 14:39 |
| Попробовал компонент - BComPort. Работает отлично. Также ознакомился быстро с книжкой. Но вот какой вопрос волнует. Я например посылаю в COM порт команды. И жду ответа. В тот момент, когда жду ответа, например на модем позвонили и модем сообщает о входящем звонке. И как тут понять, что информация о поступившем звонке это не ответ на одну из моих комманд? (Как вариант включить эхо.) Или сначало будет ответ на мою комманду, а уже потом сообщение о поступившем звонке? Т.е. как грамотно организовать отправку комманд и обработку ответов? |
| Автор: northener 26.9.2012, 00:53 | ||
Имхо, модем сообщает о поступившем звонке выставляя сигнал на ноге соответствуюей микросхемы (для разъёма СОМ-порта это нога RING). И больше ничего. Так что если вы приняли на СОМ-порт какую-то информацию по входу Rx, то это точно ответ на вашу команду. |