![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Nil |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 15.4.2007 Репутация: нет Всего: нет |
Здравствуйте.
Ответа именно на мои вопросы не нашел, поэтому все же решил создать новую тему.
Таким образом открываю порт для чтения/записи. Есть следующие проблемы: 1) Если сразу после записи в порт начаь читать из него, то получу только что записанную строку, что не очень удобно, как бороться ? Как правильно читать ? 2) Можете пояснить на счет структуры COMMTIMEOUTS - какое поле за что отвечает ?.. ReadTotalTimeoutMultiplier - сколько макс. ждем одного символа ? ReadTotalTimeout - ? не совсем понял логику... ---------- Вообще требуется после того как записал в порт строку, ждать ответа в виде "ОК" максимально в течение 5 секунд, как это лучше реализовать ?.. |
|||
|
||||
Static |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: нет Всего: 2 |
Это, конечно, староватый топик, но наиболее подходящий...
Есть у меня задача - подключить электронные весы к компу. Пока весы фиг знает где стоят, решил потренироваться на чем-нить еще - никогда с com не работал. Нашел модем. И... я, наверно, делаю что-то не так. Если с модемом связаться через гипертерминал, например, - все ок: пишем AT - получаем OK. Ну и т.п. А вот прога, которую я наваял, получает только эхо :( Перерыл дофига всего - везде все (на первый взгляд) идентично, даже в исходниках другого терминала, который тоже работает нормально. Мой код:
Подозреваю, что-то элементарное забыл/не сделал/не знал. Подскажите, пожалуйста. --------------------
Я не настолько безнадежен, как кажется... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
некрофилия, конечно у нас не в почете, но поскольку вопрос привязан только к названию темы...
для AT-команд, думаю, это элементпрное - символ перевода строки в конце команды, т.е. "\r" или "\n" или "\r\n" -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Static |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: нет Всего: 2 |
да пробовал... было и вот так:
и вот так:
никакой разницы. Может еще вариант подкинете? --------------------
Я не настолько безнадежен, как кажется... |
||||
|
|||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
так будет логичнее:
Добавлено через 55 секунд это можно не добавлять:
это просто для красоты ) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
Static |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: нет Всего: 2 |
ну, видать, не красота спасет мир... То же только в профиль.
Передается "AT\r\n" - это точно. А принимается только эхо. Т.е. точно то же, что и послали. Может я неправильно делаю ReadFile? --------------------
Я не настолько безнадежен, как кажется... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
для теста сойдет,
а в гипертерминале то же самое? или ОК все же приходит? если и там не приходит, смотри документацию к модему, тут может потребоваться перевод модема в командный режим "+++", вобщем, это уже специфка конкретного модема -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Static |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: нет Всего: 2 |
Проблема где-то в моем коде... --------------------
Я не настолько безнадежен, как кажется... |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
'ОК' придет, но позже - модем довольно медленное устройство, а уж COM порт и подавно
![]() Стоит разобраться как работает модем с COM портом - Когда в модем передают символы (те самые AT), он их отправляет назад (так же посимвольно) - таким образом получается эхо (сам по себе COM порт эхо НЕ ОБЕСПЕЧИВАЕТ!) Когда модеи получает символ CR ('\r'), он начинает выполнять команду, ПОСЛЕ чего посылает ответ. Рекомендую перед ReadFile поставить Sleep(500) - должно хватить для приема ответа |
|||
|
||||
Static |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: нет Всего: 2 |
Спасибо за подсказку... Сейчас попробую.
--------------------
Я не настолько безнадежен, как кажется... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
ну да, а может и Get/SetCommState возвращаются с ошибкой,
т.к. DCB инициирован неправильно, тут пропущена по крайнеймере установка длины структуры:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Static |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: нет Всего: 2 |
Нет... это не то. Да и в гипретерминале модем почти мгновенно отвечает.
Даже Sleep(5000) не решает. Я правильно понимаю, что полученные данные никуда не деваются, а спокойно лежат в буфере? И ReadFile их просто оттуда достает?.. Может модем просто не понимает, что я ему команду отправил? Кодировка или еще что-нить может не совпадать? Добавлено через 4 минуты и 40 секунд Ошибок ни то, ни другое не возвращает. И, насколько я понимаю, получив структуру при помощи GetCommState, длину ей задавать уже не надо. В лбом случае - явное задание ничего не решает. --------------------
Я не настолько безнадежен, как кажется... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
поставь проверки на все вызовы, тогда возможно будет понятно где проблема -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Static |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: нет Всего: 2 |
ок. Только какие проверки? Единственный вызов write/read проверять?
--------------------
Я не настолько безнадежен, как кажется... |
|||
|
||||
smoke_man |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 25.1.2007 Где: Рязань Репутация: 5 Всего: 17 |
Посмотри пример может поможет.
-------------------- 0x2b|~0x2b |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |