Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

AT-команды модема

5.1K
28 ноября 2007 года
Karrde
88 / / 15.10.2007
Работаю в visual c++ 6. пишу программу для работы с модемом. Почему когда посылаю в порт одну AT-команду(набор номера), она идет, но если я после нее хочу отослать ещё одну команду, то уже ни одна команда не идет и вместо набора идет длинный гудок? Причем команды инициализации проходят всегда хорошо
Код программы:
Цитата:

//команды инициализации
StringData = "AT<cr>";
StringData = StringData + '\r' + '\0';
WriteFile(hCom, StringData, StringData.GetLength(), &iSize, 0);

StringData = "AT &F E0 &C1 &D2 V1 S0=0\V1<cr>";
StringData = StringData + '\r' + '\0';
WriteFile(hCom, StringData, StringData.GetLength(), &iSize, 0);

//собственно команды
StringData = "ATDT ,8,,0296186691<cr>";
StringData = StringData + '\r' + '\0';
WriteFile(hCom, StringData, StringData.GetLength(), &iSize, 0);
Sleep(1);

StringData = "AT H0<cr>";
StringData = StringData + '\r' + '\0';
WriteFile(hCom, StringData, StringData.GetLength(), &iSize, 0);

489
28 ноября 2007 года
NeO_u
277 / / 11.10.2006
Первое, что бросилось в глаза...как осуществляется работа с модемом? обычном с ком портов (модемом) работают в асинхронном режиме...а у тебя помоему синхронный.

Второе, зачем ты передаешь <cr>? убери это. <cr> - это и есть '\r' '\n'.
2.9K
28 ноября 2007 года
Ation
96 / / 27.07.2004
команда at h0 это положить трубку.
1.8K
28 ноября 2007 года
_const_
229 / / 26.11.2003
После набора номера модем переходит в режим приёма/передачи данных. Для перевода в командный режим надо послать Esc-последовательность "+++" (без кавычек). Для перевода обратно в режим обмена данными надо послать какую-то команду (см. Manual к модему).
5.1K
29 ноября 2007 года
Karrde
88 / / 15.10.2007
Тут ещё проблема вот в чем похоже. в этой программе сразу после того, када я посылаю первую команду в порт, идет вторая, то есть первая (в данном случае набор номера) не успевает полностью исполниться. Как сделать, чтобы прога сначала ждала, пока не установиться подключение, а уже потом шла следующая команда(sleep() по идее тут не пойдет-там ведь только фиксированное значение)
1.6K
29 ноября 2007 года
Vov4ick
476 / / 01.02.2007
При удачном исполнении команды модем возвращает "OK". При установке соединения - "CONNECT параметры". и поднимает бит Carrier Detected своего ком-порта. Как этот бит узнать - могу только отослать к выньАПИ.

Для возврата обратно в режим передачи данных исп. команда On, где n=0 - бер реконнекта, n=1 - с реконнектом (например, если в режиме команд изменили какие-то параметры работы). А вообще в программе это лучше не использовать и устанавливать все параметры модема заблаговременно до сеанса связи.

Прекратить сеанс связи можно подав команду повесить трубку, либо сбросив бит порта DTR.
5.1K
29 ноября 2007 года
Karrde
88 / / 15.10.2007
Извините за мою тупость. То есть, после посылки AT-команды набора номера, нужно сделать шо то типа таймера, и ждать пока ком-порт не возвратит OK, и тока после этого выполнять следующую команду
1
29 ноября 2007 года
kot_
7.3K / / 20.01.2000
Цитата: Karrde
Извините за мою тупость. То есть, после посылки AT-команды набора номера, нужно сделать шо то типа таймера, и ждать пока ком-порт не возвратит OK, и тока после этого выполнять следующую команду


лучше создать объект ожидания или использовать callback-функцию.

1.8K
30 ноября 2007 года
_const_
229 / / 26.11.2003
Цитата: Karrde
Извините за мою тупость. То есть, после посылки AT-команды набора номера, нужно сделать шо то типа таймера, и ждать пока ком-порт не возвратит OK, и тока после этого выполнять следующую команду


Есть AT-команда, переводящая модем в режим ответа кодами, а не ASCII-символами. На мой взгляд, так будет удобнее. Тем не менее, ответ от модема обязательно надо получать, хотя бы для того, чтобы убедиться в его наличии.

5.1K
01 декабря 2007 года
Karrde
88 / / 15.10.2007
А вот ещё подскажите насчет глюка.
Я посылаю команду в модем и хочу получить ответ с помощью ReadFile. Но в переменную StringBuf так ничего и не записывается. Да и вообще почему а ReadFile этот атрибут-указатель, а не какой нибудь определенный тип(допустим string)
Цитата:

StringData = "AT<cr>";
WriteFile(hCom, StringData, StringData.GetLength(), &iSize, 0);

StringData = "ATI3<cr>";
WriteFile(hCom, StringData, StringData.GetLength(), &iSize, 0);

ReadFile(hCom, &StringBuf, 100, &iSize, 0);

1.6K
02 декабря 2007 года
Vov4ick
476 / / 01.02.2007
Вообще неплохо бы проверять готовность модема и порта к приёму или передачи данных. Так и до висяка недолго.
Про типы данных лучше обратиться к справке, как они там это реализовали. Это ведь не выньАПИ, а функции сишнека.
5.1K
03 декабря 2007 года
Karrde
88 / / 15.10.2007
а нельзя ли считывать ответы модема не посимвольно, а целиком всю строку(а то везде где читаю, считывают посимвольно)
489
03 декабря 2007 года
NeO_u
277 / / 11.10.2006
Вот хороший пример, с исходниками для посылки работы с модемом:
http://www.codeproject.com/system/SerialPortComm.asp?df=100
Мне хватило разобраться и написать небольшую прогу для модема.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог