# Набор команд для Hayes-совместимых модемов

Ниже приводится описание набора команд для Hayes-совместимых модемов. Большинство модемов поддерживают этот набор команд в достаточно большой степени. Если вы потеряли руководство по эксплуатации вашего модема (или если руководства не было), этот раздел может быть оказаться весьма полезным. К примеру, я определил, как отключать динамик моего модема: команда `ATM0` -- наконец-таки тишина!

Инициализационная строка модема являет собой последовательность команд. Она подготавливает модем к коммуникациям, задавая ему такие параметры как: режим дозвона, ожидание, определение сигнала Занято и многие другие установки. Современные коммуникационные программы создают строки инициализации сами, на основе выбранных вами опций меню, на основе включенных вами функций, и т. д.

На протяжении многих лет Hayes-совместимые модемы являются промышленным стандартом. Несмотря на возросшее количество производителей модемов, большинство из них очень близки к стандарту Hayes-совместимых. Ниже приводится (частично) набор команд для Hayes- совместимых модемов. (Так называемые AT-команды). Набор команд для Hayes-совместимых модемов можно разделить на четыре группы:

Основной набор команд

- Цифра после заглавной буквы. Например, `M1`.

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

- Символ & (амперсант) с последующей заглавной буквой в сочетании с цифрой. Это расширение основного набора команд. К примеру, `&M1`. Обратите внимание на то, что команда `M1` отлична от команды `&M1`.

Частный набор команд

- Обычно начинающиеся с символа обратного слэша (\) или знака процента (%), эти команды очень различаются на разных моделях модемов. По этой причине ниже приведены только некоторые из них.

Команды для управления регистрами

- `S`r`=`n``, где `r` означает номер регистра, значение которого нужно изменить, а `n` -- заменяющее значение.

  Регистр -- компьютерный термин, означающий некую физическую область памяти. Количество памяти в модемах мало. Этот четвертый набор команд используется для ввода значения в определенный регистр (область в памяти). Регистр хранит определенную переменную (алфавитно-цифровые данные), которые используются модемом и коммуникационным программным обеспечением. К примеру, команда `S7=60` указывает компьютеру Установить значение регистра #7 равным 60.

Кроме того, большинство команд определяются буквенно-цифровой комбинацией (`L0`, `L1` и так далее), использование нуля является необязательным. К примеру, команда `L0` аналогична команде `L`. Имейте это ввиду при ознакомлении с таблицей, приведенной ниже!

Ниже приводятся некоторые из наиболее важных символов в строке инициализации модема. Как правило, изменение этих символов не требуется.

`AT`

- Указывает модему, что последует набор команд. С этой команды начинаться каждая строка, содержащая команды.

`Z`

- Сбросить установки модема в состояние по умолчанию

`,` (запятая)

- задерживает выполнение программы на одну секунду. Допускается использование нескольких команд `,` в одном ряду. Например, команда `,,,,` создаст задержку в 4 секунды. (Время паузы задается значением регистра `S8`.

`^M`

- Отправляет модему символ-прерывание Возврат каретки (CR). Этот управляющий код большая часть коммуникационных программ понимает как Carriage Return

## Основной набор команд Hayes

В алфавитном порядке:

## Основной набор команд Hayes

Команда | Описание | Комментарии
`A0` или `A` | Ответить на входящий звонок |
`A/` | Повторить последнюю выполненную команду | Не предварять командой `AT`. За этим, как правило, следует завершение сеанса.
`B0` или `B` | Обработка входящих звонков | Процедура ответа на входящий звонок - протокол V32/CCITT
`B1` | Обработка входящих звонков | Процедура ответа на входящий звонок - Bell 212A
`B2` | Обработка входящих звонков | Режим ответа на входящий звонок: Отчет/Без отчета
`D` | Дозвон | Дозвониться по указанному номеру и выполнить процедуру приветствия. `P` Импульсный набор номера `T` Тоновый набор номера `W` Ожидать повторного зуммера `,` Выдержать паузу, заданную значением регистра `S8` (обычно 2 секунды) `;` После дозвона остаться в командном режиме `!` Краткое прерывание линии (На полсекунды повесить трубку, как в случае перевода звонка. `L` Набрать последний набранный номер
`E0` или `E` | Без эхо | В компьютер не поступает эхо-команд
`E1` | Эхо | В компьютер поступает эхо-команда (отображаются набранные символы)
`H0` | Состояние линии | Линия используется - повесить трубку
`H1` | Состояние линии | Линия свободна - поднять трубку
`I0` или `I` | Запрос на сведения | Эта команда сильно зависит от модели модема. Обычно, команда `I0` возвращает число или код, тогда как более высокие номера предоставляют намного более полезные сведения.
`L0` или `L` | Громкость динамика модема. Эти опции отсутствуют у модемов с механической регулировкой. | Громкость динамика модема в положении Тихо или Выключено
`L1` |  | Громкость динамика модема в положении Тихо
`L2` |  | Громкость динамика модема в положении Средне
`L3` |  | Громкость динамика модема в положении Громко
`M0` или `M` | Динамик модема выключен | Команда `M3` также встречается, но на разных моделях интерпретируется по-разному
`M1` |  | Динамик включен, пока не определен удаленный носитель (т. е., пока не будет услышан другой модем)
`M2` |  | Динамик модема всегда включен (после соединения слышны звуки передачи данных)
`N0` или `N` | Скорость при приветствии | Приветствовать только при скорости, указанной в регистре `S37`
`N1` |  | Приветствовать при наибольшей скорости, по значению превышающей значение регистра `S37`
`O0` или `O` | Вернуться в режим На связи | Смотрите также `X1`, так как может быть включен режим определения наличия зуммера.
`O1` |  | Вернуться в режим На связи после выполнения проверки эквалайзера
`Q0` или `Q1` | Тихий режим | Выключено - отображаются коды ответов, пользователь видит ответы на команды (например, `OK`)
`Q1` | Тихий режим | Включено - коды ответов опускаются, пользователь их не видит.
`S`n`?` |  | Запросить значение S-регистра `n`
`S`n`=`r`` | Сохранить | Сохранить значение `r` в S-регистре `n`
`V0` или `V` | Режим отчета | Цифровые коды ответов
`V1` |  | Коды ответов на английском языке (к примеру, `CONNECT`, `BUSY`, `NO CARRIER` и так далее)
`X0` или `X` | Smartmodem | Коды ответов для модемов, совместимых с Hayes Smartmodem 300
`X1` |  | Добавляет скорость соединения к основному коду ответа (например `CONNECT 1200`
`X2` |  | Добавляет определение способа набора номера (предотвращает дозвон вслепую и иногда предотвращает выполнение команды `AT0`)
`X3` |  | Добавляет определение сигнала Занято
`X4` |  | Добавляет определение сигналов Занято и Тональный набор
`Z0` или `Z` | Сброс | Сбросить установки модема и загрузить сохраненную схему конфигурации. Используйте команды `Z0`, `Z1`, и т. д., если вы используете несколько схем. Эквивалент команды `&F` для загрузки заводских установок на модемах без NVRAM (non voltaile memory)

## Расширенный набор команд Hayes

Команды с амперсендом

## Расширенный набор команд Hayes

Команда | Описание | Комментарии
`&B0` or `&B` | Параметры повтора | Выключить функцию автоповтора
`&B1` | Параметры повтора | Включить функцию автоповтора
`&B2` | Параметры повтора | Включить функцию автоповтора, но разъединиться, если состояние линии не улучшилось за период времени, заданный значением регистра `S7`
`&C0` или `&C1` | Определение наличия связи | Сигнал всегда включен
`&C1` | Определение наличия связи | Соответствует удаленному носителю (как правило, оставляйте без изменений)
`&D0` или `&D` | DTR -- Готовность к передаче данных | Сигнал игнорируется (Зависит от модема, сведения вы можете найти в руководстве по эксплуатации!)
`&D1` | DTR -- Готовность к передаче данных | Если DTR переключается из состояния Включено в Выключено, модем переходит в командный режим (только некоторые модели)
`&D2` | DTR -- Готовность к передаче данных | Некоторые модемы при изменении состояния DTR вешают трубку (Как правило, является установкой по умолчанию)
`&D3` | DTR -- Готовность к передаче данных | Повесить трубку, сбросить установки модема в начальное состояние и перейти в командный режим при сигнале DTR
`&F0` или `&F` | Заводские установки | Установки по умолчанию для Generic Hayes-совместимых модемов. Как правило, имеет смысл использовать эту команду в строке инициализации модема, так как команды `&F1`-`&F3` могут по-разному быть поняты различными модемами, тем самым вызывая проблемы при соединении. (Никогда нельзя точно знать какие установки изменяет команда `&F2`. С другой стороны, бывает целесообразным использовать приведенные ниже опции; большинство проблем можно решить, заменив сложную строку инициализации простой командой `&F2` или подобной. Тем не менее, если вы создаете строку инциализации, лучше начать ее простой командой `&F`, а не использовать измененные типы установок по умолчанию.
`&F1` | Заводские установки | Заводские установки, прошитые в IBM PC-совместимых модемах
`&F2` | Заводские установки | Заводские установки с программным приветствием (Макинтош)
`&F3` | Заводские установки | Заводские установки с аппаратным приветствием (Макинтош)
`&G0` or `&G` | Защитные тоновые сигналы | Выключить защитные тоновые сигналы
`&K0` или `&K` | Локальное управление потоком | Выключить локальное управление потоком
`&K1` | Локальное управление потоком | Включить локальное аппаратное управление потоком RTS/CTS
`&K2` | Локальное управление потоком | Включить локальное программное управление потоком XON/XOFF
`&K3` | Локальное управление потоком | Включить локальное аппаратное управление потоком RTS/CTS
`&K4` | Локальное управление потоком | Включить локальное программное управление потоком XON/XOFF
`&L0` или `&L` | Режим дозвона | Выбрать режим дозвона
`&M0` или `&M` | Режим контроля ошибок | Выбрать асинхронный не-EC режим (то же самое, что и команда `&Q0`)
`&P0` или `&P` | Соотношение набор-пауза импульсного дозвона | Импульсный дозвон с соотношением набор-пауза 39% / 61% (США/Канада)
`&P1` | Соотношение набор-пауза импульсного дозвона | Импульсный дозвон с соотношением набор-пауза 33% / 67% (Великобритания/Гонконг)
`&Q0` или `&Q` | Режим контроля ошибок | Асинхронный не-EC режим. Буферизация данных отключена. ASB отключено.
`&Q5` | Режим контроля ошибок | Выбрать операцию EC протокола V.42 (необходимо управление потоком)
`&Q6` | Режим контроля ошибок | Асинхронный режим с ASB (необходимо управление потоком)
`&Q8` | Режим контроля ошибок | Выбрать альтернативный протокол EC (MNP)
`&Q9` | Режим контроля ошибок | Условное сжатие данных: V.42bis = да, MNP5 = нет.
`&S0` или `&S` | Выбор действия DSR | Всегда в состоянии Включено (по умолчанию)
`&S1` | Выбор действия DSR | Следовать спецификации EIA (Включено слежение за тональным сигналом носителя, до потери связи.)
`&T0` или `&T` | Самопроверка | Самопроверка (у некоторых модемов, зависит от модели)
`&U0` или `&U` | Решетчатая модуляция кода | Включить протокол V.32 TCM
`&U1` | Решетчатая модуляция кода | Выключить протокол V.32 TCM
`&V0` или `&V1` | Просмотреть активную конфигурацию | (и, зачастую, сохраненную) (то же, что и команда `ATI4`
`&W0` или `&W` | Сохранить схему | В NVRAM (команды `&W0`, `&W1`, и т. д. для нескольких схем). Некоторые установки сохранению не подлежат. Они не выводятся в ответ на команду `&V` или же `ATI4`
`&Y0` или `&Y` | Выбрать конфигурацию, загружаемую при включении питания | Загрузить схему 0 (по умолчанию)
`&Y1` | Выбрать конфигурацию, загружаемую при включении питания | Загрузить схему 1
`&Z`n`=`x`` | Мягкий сброс установок и загрузка схемы номер `n` | Заметьте, что содержимое командной строки после `&Z` будет проигнорировано

## Команды Backslash (обратный слэш) и Percent (процент)

Команда | Описание | Комментарии
`\A0` или `\A` | Максимальный размер блока MNP (в символах) | 64 символа максимум
`\A1` | Максимальный размер блока MNP (в символах) | 128 симоволов максимум
`\A2` | Максимальный размер блока MNP (в символах) | 192 символа максимум
`\A3` | Максимальный размер блока MNP (в символах) | 256 символов максимум
`%C0` или `%C` | Включить/Выключить режим сжатия данных | Выключить
`%C1` | Включить/Выключить режим сжатия данных | Включить MNP5
`%C2` | Включить/Выключить режим сжатия данных | Включить V.42bis (BTLZ)
`%C3` | Включить/Выключить режим сжатия данных | Включить MNP5 & V.42bis (BTLZ)
`%D0` или `%D` | Сжатие данных | Размер словаря 512 BLTZ
`%D1` | Сжатие данных | Размер словаря 1024 BLTZ
`%D2` | Сжатие данных | Размер словаря 2048 BLTZ
`%D3` | Сжатие данных | Размер словаря 4096 BLTZ
`%E0` или `%E1` | Метод Escape | Выключить ESCAPE
`%E1` | Метод Escape | Метод `+++AT` (по умолчанию)
`%E2` | Метод Escape | Метод `Break` `AT`
`%E3` | Метод Escape | Включить оба метода
`%E4` | Метод Escape | Выключить получение отклика `OK` на команду `+++`
`%E5` | Метод Escape | Включить получение отклика `OK` на команду `+++`
`\J0` или `\J` | Авторегулировка DTE | Выключить
`\J1` | Авторегулировка DTE | Значение DTE приводится в соответствие со значением носителя.
`\N0` или `\N` | Тип соединения | Нормальное соединение (определение приведено ниже)
`\N1` | Тип соединения | Прямое соединение
`\N2` | Тип соединения | Соединение с надежной (с авторегулировкой) связью MNP
`\N3` | Тип соединения | Соединение с надежной (с авторегулировкой) связью
`\N4` | Тип соединения | Надежная связь протокола V.42bis с определением фазы
`\N5` | Тип соединения | Надежная (с авторегулировкой) связь протокола V.42bis с определением фазы
`\N6` | Тип соединения | Надежная связь протокола V.42 с определением фазы
`\N7` | Тип соединения | Надежная (с авторегулировкой) связь протокола V.42 с определением фазы

Прямое соединение -- это простое соединение без использования протоколов коррекции ошибок и сжатия данных. В этом случае скорости компьютер-модем и модем-модем должны быть идентичными.

Нормальное соединение использует управление потоком (аппаратное или программное) для буферизации отправленных и полученных данных, таким образом, модем может передавать данные на скорости, отличной от скорости передачи компьютера. К примеру, компьютер может отправлять данные на скорости 57 Кб/с с использованием сжатия, а модем ведет передачу на скорости 28.8 Кб/с. Этот режим используется большинством модемов.

Соединение с надежной связью подобно нормальному соединению; если по какой-либо причине не происходит сжатия данных или отключен режим коррекции ошибок, в таком случае произойдет разъединение. (В частности, такой модем проверяет все соединения на предмет надежности, в противном же случае вешает трубку.)

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

## S-регистры

Регистр | Диапазон | По умолчанию | Функция
`S0` | 0-255 звонков | 1-2 | Ответить при определенном количестве звонков. Не отвечать при значении 0
`S1` | 0-255 звонков | 0 | Если значение регистра `S0` больше 0, этот регистр предназначен для подсчета входящих звонков.
`S2` | 0-127 ASCII | 43 + | Переход в командный режим симовлом ESC
`S2` | >127 |  | неприятие символа ESC
`S3` | 0-127 ASCII | 13 CR | Символ возврата каретки
`S4` | 0-127 ASCII | 10 LF | Символ перехода на новую строку
`S5` | 0-32, 127 ASCII | 8 BS | Символ забоя
`S6` | 2-255 секунд | 2 | Время ожидания зуммера (для набора номера вслепую смотрите X`n`
`S7` | 1-255 секунд | 30-60 | Время ожидания ответа удаленного носителя
`S8` | 0-255 секунд | 2 | Время паузы при дозвоне
`S9` | 1-255 1/10-ых долей секунды | 6 | Время на определение наличия связи
`S10` | 1-255 1/10-ых долей секунды | 7-14 | Время между утратой связи и командой модему повесить трубку
`S11` | 50-255 миллисекунд | 70-95 | Продолжительность тоновых сигналов и интервал между ними при тональном наборе номера
`S12` | 0-255 1/50-ых долей секунды | 50 | Задержка при выполнении команды `+++`
`S36` | Возможные опции при невозможности устранить ошибки связи: 0 - Разъединить 1 - Установить прямое соединение 3 - Установить нормальное соединение 4 - Установить MNP-соединения при возможности, иначе разъединить 5 - Установить MNP-соединение при возможности, иначе установить прямое соединение. 7 - Установить MNP-соединение при возможности, иначе установить нормальное соединение | 7 | Обработка сбоев установления связи
`S37` | 1 = 300 bps 5 = 1200 bps 6 = 2400 bps 7 = 1200/75 bps (протокол v.23) 8 = 4800 bps 9 = 9600 bps 10 = 12000 bps 11 = 14400 bps 12 = 7200 bps | 0 | Начальная скорость (установление связи)

У многих модемов существуют десятки, даже сотни S-регистров, но стандартными являются только первые десять. Их значения изменяются командой `ATS`n`=`N``, а проверяются командой `ATS`n`?` (например, команда ``AT` `S10``=70` `S1?`` укажет модему не вешать трубку в в течении семи секунд без ответа другого модема и вернет последнее зарегистрированное число звонков.)