Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Программирование модемов

© Александр Фролов, Григорий Фролов
Том 4, М.: Диалог-МИФИ, 1993, 236 стр.

[Назад] [Содеожание] [Дальше]

4.5. Система команд hayes-модемов

После выпуска американской фирмой Hayes модемов серии Smartmodem, система команд, использованная в ней, стала неким стандартом, которого придерживаются остальные фирмы - разработчики модемов. Система команд, примененная в этих модемах, носит название hayes-команд, или AT-команд.

Со времени выпуска первых AT-совместимых модемов набор их команд несколько расширился, но основные команды остались без изменения.

Мы рассмотрим сначала расширенный набор AT-команд, а затем в главе "Протоколы коррекции ошибок нижнего уровня" дополнительные команды, применяемые в модемах с аппаратной коррекцией ошибок.

Расширенный набор AT-команд

Все команды, передаваемые компьютером модему, надо начинать префиксом AT (ATtention - внимание), At, at, aT и заканчивать символом возврата каретки (<CR>). Только команда A/ и Escape-последовательность "+++" не требуют для себя префикса AT.

После префикса AT могут идти одна или сразу несколько команд. Для ясности эти команды могут быть отделены друг от друга символами пробела, тире, скобками. В большинстве случаев команды могут быть написаны как заглавными, так и строчными буквами.

При передаче модему команд они сначала заносятся во внутренний буфер, который, как правило, имеет размер 40 символов. Команды, записанные в буфер модема, исполняются после поступления символа возврата каретки (<CR>). Вследствие ограниченности размера буфера не следует передавать модему слишком длинные команды (больше размера буфера). Длинные команды можно разбивать на части и передавать в несколько заходов. При этом каждая часть должна начинаться префиксом AT и заканчиваться символом возврата каретки.

Если вы допустили ошибку при наборе команды, то ее можно исправить, используя клавишу Backspace.

После выполнения каждой команды модем посылает обратно компьютеру ответ в виде числа или слова. Этот ответ означает, выполнена ли команда или произошла ошибка.

Если у вас внешний модем, то на его лицевой панели находится восемь световых индикаторов (лампочек, светодиодов). Хотя их расположение на различных моделях модемов может меняться, их обозначения являются стандартными.

По этим индикаторам вы можете узнать, в каком состоянии находится модем: занимает ли он телефонную линию, передает или принимает данные. Ниже мы приведем их названия и краткое описанние:

MR Modem Ready Модем готов к обмену данными. Если этот индикатор не горит, то надо проверить линию питания модема
TR Terminal Ready Компьютер готов к обмену данными с модемом Этот индикатор горит, когда модем получил от компьютера сигнал DTR.
CD Carrier Detect Индикатор зажигается, когда модем обнаружил несущую частоту на линии. Индикатор должен гореть на протяжении всего сеанса связи и гаснуть, когда один из модемов освободит линию (положит трубку)
SD Send Data Индикатор мигает, когда модем получает данные от компьютера
RD Receave Data Индикатор мигает, когда модем передает данные компьютеру
HS High Speed Модем работает на максимально возможной для него скорости
AA Auto Answer Модем находится в режиме автоответа. То есть модем автоматически будет отвечать на приходящие звонки. Когда модем обнаружит звонок (вызов) на телефонной линии, этот индикатор замигает
OH Off-Hook Этот индикатор горит, когда модем снял трубку (занимает линию)

Теперь мы приведем описание расширенной системы команд hayes-модемов. Команды приведены в алфавитном порядке. Для каждой команды дано ее краткое описание и рекомендации по ее использованию.

AT - начало (префикс) командной строки. После получения этой команды модем автоматически подстраивает скорость передачи и формат данных к параметрам компьютера.

A - автоответ. Если режим автоматического ответа выключен (регистр S0 = 0), команда используется для ответа на звонок от удаленного модема. Команда заставляет модем снять трубку (подключиться к линии) и установить связь с удаленным модемом.

A/ - модем повторяет последнюю введенную команду. Команда передается на модем без префикса AT и исполняется модемом немедленно, не ожидая прихода символа возврата каретки <CR>. Если вы передадите модему строку AT A/ <CR>, то модем укажет на ошибку и вернет слово ERROR.

Bn - команда производит выбор стандарта, согласно которому будет происходить обмен данными между модемами. При скорости передачи 300 бит/с происходит выбор между стандартами BELL 103 и CCITT V.21, при скорости 1200 бит/с - между BELL 212A и CCITT V.22 bis. При скорости 2400 бит/с эта команда игнорируется и используется стандарт CCITT V.22. Если n = 0, устанавливаются стандарты CCITT V.21/V.22, а если n = 1 - стандарты BELL 103/212A.

Ds - команда используется для набора номера. После получения этой команды модем начинает набор номера и при установлении связи переходит в режим передачи данных. Команда состоит из префикса AT, символа D и телефонного номера, в состав которого могут входить следующие управляющие модификаторы:

  P или T. Эти модификаторы производят выбор между импульсной и тоновой системой набора номера (в нашей стране используется импульсная система, если вы будете использовать префикс T, то АТС не сможет вас соединить). Импульсная система означает, что цифры телефонного номера, идущие после символа P, модем должен набирать импульсами (символы 0..9). Тоновая система означает, что цифры телефонного номера, идущие после символа T, модем должен набирать частотными сигналами (разрешено использовать символы 0..9, A..D,* ,#).

  , Символ запятой вызывает паузу при наборе номера. Длительность паузы определяется содержимым регистра S8.

  ; Символ точки с запятой, если он находится в конце командной строки набора номера, переводит модем после набора номера в командный режим.

  @ Модем ожидает пятисекундной тишины на линии в течение заданного промежутка времени. Промежуток времени, в течение которого модем ожидает тишины, задается в регистре S7. Если в течение этого времени паузы тишины не было, модем отключается и отвечает NO ANSWER.

  ! Если знак ! стоит перед знаками последовательности набора, модем переходит в состояние ON HOOK (кладет трубку) на 0,5 секунды, а затем снова переходит в состояние OFF HOOK (снимает трубку).

  S Модем набирает телефонный номер, записанный в его памяти. Эта команда выполняется только для модемов, имеющих встроенную энергонезависимую память и возможность записи в нее номеров телефонов (смотри команду &Zn).

  R После набора номера переводит модем в режим автоответа. Этот модификатор должен находиться в конце набираемого номера.

  W Перед дальнейшим набором телефонного номера модем ожидает длинный гудок из линии. Причем время ожидания гудка содержится в регистре S7. Если в отведенное время гудок не появился, модем прекращает набор номера и возвращает сообщение NO DIALTONE. Этот параметр может быть полезен при наборе междугородных номеров.

En - управление эхо-выводом команд, передаваемых модему. После команды E1 модем возвращает каждый знак, передаваемый ему, обратно компьютеру, что позволяет узнать, как работает связь модема и компьютера. Команда E0 запрещает эхо-вывод.

Fn - переключение между дуплексным/полудуплексным режимами. При n = 0 модем переходит в полудуплексный режим, а при n = 1 - в дуплексный.

Hn - Эта команда используется для управления телефонной линией. Если n = 0, то происходит отключение модема от линии, если n = 1, модем подключается к линии.

In - выдает идентификационный код модема и контрольную сумму содержимого памяти модема. Если n = 0, модем сообщяет свой идентификационный код, если n = 1 модем проводит подсчет контрольной суммы ROM (EPROM) и передает ее компьютеру, n = 2, - модем проверяет состояние внутренней памяти ROM и возвращает сообщение OK или CHECKSUM ERROR (ошибка контрольной суммы). При n = 3 выдается состояние модема. Возвращаемое значение передается компьютеру через COM-порт, к которому подключен модем.

Ln - установка громкости сигнала внутреннего динамика модема. n = 0, 1 соответствует низкой громкости, n = 2 - средней и n = 3 - максимальной.

Mn - управление внутренним динамиком. При n = 0 динамик всегда выключен. При n = 1 динамик включен только во время набора номера и выключается после обнаружения несущей. При n = 2 динамик включен все время. При n = 3 динамик включается после набора последней цифры номера и выключается после обнаружения несущей отвечающего модема.

Qn - управление ответом модема на AT-команды. При n = 0 ответ разрешен, при n = 1 ответ запрещен. Независимо от состояния Q0 или Q1 модем всегда сообщает содержание S-регистров, свой идентификационный код, контрольную сумму памяти и результаты теста (команды S, I).

On - команда переводит модем из командного режима в режим передачи данных. При этом модем отвечает CONNECT. Команда О и О0 переводят модем в режим передачи данных без инициирования последовательности сигналов проверки линии связи. Команда О1 переводит модем в режим передачи данных и заставляет модем передать последовательности сигналов проверки линии связи, т.е. производить повторное квитирование с удаленным модемом.

Sr? - чтение содержимого регистра модема, имеющего номер r.

Sr = n - запись в регистр модема с номером r числа n. Число n может иметь значения от 0 до 255. Все команды модифицируют содержимое одного или более S-регистров. Некоторые S-регистры содержат временные параметры, которые можно поменять только командой S.

Vn - производит выбор вида ответа модема на AT-команды. При n = 0 ответ происходит цифровым кодом, а при n = 1 модем отвечает в символьном виде на английском языке. Использование цифровой формы ответа облегчает обработку результатов выполнения команды при написании собственных программ управления модемом.

  Цифровой код результата оканчивается символом перевода строки, а символьный код начинается и заканчивается символами перевода строки и возврата каретки.

Стандартный набор ответов модема

Ответ в символьном виде Ответ цифровым кодом Значение ответа
OK 0 Модем выполнил команду без ошибок
CONNECT 1 Модем установил связь со скоростью 300 bps (после выполнения команд X1, X2, X3, X4) или со скоростью 600, 1200, 2400 bps (после выполнения команды X0)
RING 2 Модем обнаружил сигнал звонка на телефонной линии. Это сообщение модем передает компьютеру каждый раз, когда по телефонной линии поступает сигнал вызова (звонок)
NO CARRIER 3 Модем потерял несущую или не получил ответ от удаленного модема
ERROR 4 Ошибка в командной строке, командный буфер переполнен или ошибка в контрольной сумме (команда I2)
CONNECT 1200 5 Модем установил связь со скоростью 1200 bps, (смотри команды X1, X2, X3, X4)
NO DIALTONE 6 Отсутствие сигнала станции при снятии трубки (смотри команды X2, X4)
BUSY 7 Модем обнаружил сигнал"занято" после набора номера
NO ANSWER 8 Ответ получается в случае использования в командной пятисекундной тишины
CONNECT 600 9 Модем установил связь со скоростью 600 bps (смотри команды X1, X2, X3, X4)
CONNECT 2400 10 Модем установил связь со скоростью 2400 bps (смотри команды X1, X2, X3, X4)

Xn - определяет набор сообщений модема, управляет определением сигнала "занято" и наличием гудков на линии.

  • X, X0 Сообщение модема об установлении связи приводится в короткой форме - CONNECT - при всех скоростях. Номер набирается модемом после паузы, вне зависимости от присутствия гудка на линии. Состояние "занято" не определяется.
  • X1 Сообщение модема об установлении связи приводится в полной форме:
Сообщение Скорость, bps
CONNECT 300
CONNECT 600 600
CONNECT 1200 1200
CONNECT 2400 2400

  Номер набирается модемом после паузы, вне зависимости от присутствия гудка на линии. Состояние "занято" не определяется.

  • X2 Сообщение модема об установлении связи приводится в полной форме. Номер набирается только при наличии гудка на линии. Состояние "занято" не определяется.
  • X3 Сообщение модема об установлении связи приводится в полной форме. Номер набирается модемом после паузы, вне зависимости от присутствия гудка на линии. Состояние "занято" определяется.
  • X4 Сообщение модема об установлении связи приводится в полной форме. Номер набирается модемом после паузы при наличии гудка на линии. Соотояние "занято" определяется.

Ниже приводится таблица с возможными сообщениями от модема для каждой X-команды:

Сообщение Команды
X0 X1 X2 X3 X4


Смысл
CONNECT
+  +  +  +  +


соединение
RING
+  +  +  +  +


пришел звонок
NO CARRIER
+  +  +  +  +


потеря или неудачная попытка связи
ERROR
+  +  +  +  +


ошибка в команде, неправильная команда
CONNECT 1200
   +  +  +  +


соединение на скорости 1200
NO DIALTONE
      +     +


после снятия модемом телефонной трубки не обнаружен сигнал коммутатора (длинный гудок)
BUSY
         +  +


номер занят
NO ANSWER
      +  +  +


при использовании команды @, модем не обнаружил пятисекундной паузы (тишины) на линии или вызываемый модем не отвечает

Yn - способ отключения модема от линии. Существуют два способа отключения модема от линии: стандартный, когда модем получает неактивный сигнал DTR от компьютера, и принудительный, когда модем получает от удаленного модема сигнал перерыва BREAK. Команда ATH0 направляет удаленному модему сигнал перерыва BREAK, который длится 4 s. При n = 0 модем отключается стандартно (см. команду &D). При n = 1 модем отключается после получения из линии сигнала BREAK.

Z - сбрасывает конфигурацию модема. При этом во все регистры загружаются значения, принятые по умолчанию. Значения регистров, принятые по умолчанию берутся из энергонезависимой памяти модема или, если модем такой памяти не имеет, из постоянной памяти или определяется исходя из состояния переключателей на плате модема.

+++ - Escape-последовательность, используемая для перехода в командный режим работы модема. Благодаря этой команде можно перейти из режима передачи данных модемом в командный режим работы без разрыва связи. Модем требует тишины перед и после направления этой Escape-последовательности. Величина этого промежутка тишины определена в регистре S12 (в заводской установке S12 = 50 - 1 секунда). Десятичную величину знака ASCII, который является знаком последовательности выхода, содержит регистр S2 (в заводской установке S2 = 43, т.е. '+').

&Cn - данная команда управляет сигналом DCD порта RS-232-C. При n = 0 сигнал DCD всегда активен, а при n = 1 сигнал DCD устанавливается только тогда, когда модем обнаруживает несущую частоту от удаленного модема.

&Dn - управление сигналом DTR. При n = 0 - модем игнорирует DTR, n = 1 при потере сигнала DTR модем переходит в командный режим работы, n = 2 - при потере сигнала DTR модем прекращает связь, отключается от линии, отключает режим автоответа и переходит в командный режим работы, n = 3 - при потере сигнала DTR автоматически сбрасывается конфигурация модема, как при выполнении команды ATZ. Модем обнаруживает потерю сигнала DTR, если сигнал DTR отсутствует дольше времени, определенного в регистре модема S25.

&F - Модем устанавливает конфигурацию, записанную в постоянной памяти.

&Gn - включение/выключение защитной частоты: n = 0 - защитная частота выключена, n = 1 - модем генерирует защитную частоту 550 Hz, n = 2 - модем генерирует защитную частоту 1800 Hz. Использование данной команды зависит от особенностей телефонной линии.

&Ln - вид линии связи. При n = 0 передача по обычным телефонным (коммутируемым) линиям связи, n = 1 - передача по выделенным каналам связи.

&Mn - установка асинхронного/синхронного режима работы. При n = 0 устанавливается асинхронный режим; при n = 1, 2, 3 устанавливается синхронный режим. Особенности использования данной команды вы можете посмотреть в описании модема.

&Pn - установка импульсного коэффициента набора номера в соответствии с различными стандартами. При n = 0 - коэффициент заполнения замыкание/интервал 39/61 (американский стандарт), n = 1 - коэффициент заполнения замыкание/интервал 33/67% (английский стандарт).

&Rn - управление сигналом CTS: n = 0 - сигнал CTS переходит в активное состояние после получения сигнала RTS. Данные, передаваемые модему до поступления сигнала RTS, игнорируются. Если n = 1, модем игнорирует RTS. Во время асинхронной передачи данных (команда &M0) сигнал CTS всегда активен. Особенности использования данной команды вы можете посмотреть в описании модема.

&Sn - управление сигналом DSR порта RS-232-C. При n = 0 сигнал DSR активен всегда, пока модем включен, а при n = 1 сигнал DSR активизируется только после окончания этапа установления связи между модемами (квитирования).

&Tn - используется для тестирования модема.

С помощью команды &T0 можно прервать выполнение теста модема в любой момент. Если модем выполняет локальный аналоговый тест или удаленный цифровой тест, то перед передачей команды &T0 надо с помощью Escape-последовательности перевести модем в командный режим.

По команде &T1 модем начинает выполнять локальный аналоговый тест. Продолжительность теста определяется регистром S18. В ходе локального аналогового теста проверяется и модем и компьютер:

По команде &T3 модем выполняет локальный цифровой тест. Этот тест используется для проверки линии связи и удаленного модема. Во время локального цифрового теста модем направляет поступающие ему данные обратно на удаленный компьютер. Для выполнения теста соединитесь с удаленным модемом, затем переключите модем в командный режим и выполните команду &T3. Оператор удаленного модема должен передать несколько проверочных сообщений. Поступив на ваш модем, они будут отправлены обратно удаленному модему. Если принятое удаленным модемом сообщение эквивалентно переданному, значит, линия и удаленный модем исправны.

Команда &T4 дает согласие на начало удаленного цифрового теста, который запрашивает удаленный модем.

Команда &T5 не дает согласия удаленному модему на начало удаленного цифрового теста.

Команда &T6 вызывает выполнение удаленного цифрового теста. При этом происходит проверка локального компьютера, локального модема удаленного модема и линии связи:

По команде &T7 модем выполняет удаленный цифровой тест с самодиагностикой. Модем сам генерирует тестовые сообщения и подсчитывает число ошибок.

По команде &T8 - локальный аналоговый тест с самодиагностикой. При этом модем сам генерирует тестовые сообщения и подсчитывает число ошибок.

&V - модем показывает свою текущую конфигурацию и телефонные номера, записанные в энергонезависимой памяти.

&W - модем записывает свою текущую конфигурацию в энергонезависимую память. При сбросе модема будет загружена именно эта конфигурация.

&Zn..... - используется для записи телефонного номера в энергонезависимую память модема. Количество номеров зависит от конкретной модели модема.

  Например, для записи в энергонезависимую память номера 325-48-17 можно передать модему следующую команду:

AT &Z1 3254817

  Тогда для набора этого номера можно передать модему следующую команду:

AT DP S=1
[Назад] [Содеожание] [Дальше]