Здравствуй мой дорогой пернатый друг. Сегодня я расскажу тебе сказку о командах модема, позволяющих сделать твою терминальную программку крутой, да и ты почувствуешь себя намного лучше. Усаживайся поудобнее, я начинаю.
Достаточно часто, мы сталкиваемся с ситуацией, когда программа не позволяет сделать с модемом то, что тебе необходимо. В таких случаях, нам приходиться использовать “прямое программирование” модема. Я заключил выражение “прямое программирование” в кавычки из-за того, что вам не придётся самому писать программы, компилировать, компоновать, мы просто будем использовать команды модема, для достижения невероятных результатов в области управления модемом (во загнул). Для добавления новых возможностей вашей терминальной программе, вам не придётся её перекомпилировать, написав несколько команд на языке модема, а этот язык чем-то похож на английские буквы, мы избавимся от большинства проблем возникающих при работе с ним.
Первый раз я столкнулся с этой проблемой, когда на моём родном предприятии, начали внедряться компьютеры. Через некоторое время возникла потребность в соединении компьютеров между собой. Для этого были приобретены модемы. Выбор в пользу модемов произошёл из-за большого расстояния между подразделениями, что не позволяло протянуть простую сеть, а на волокно я так и не смог уговорить своё начальство. После закупки модемов начался полный геморрой. Во-первых, предприятие, на котором я работал, было достаточно большим и поэтому имело свою собственную АТС, но это пол беды. Основная беда была в том, что этих АТС было две. Из-за этого для звонка внутри одной АТС необходимо было просто набрать номер. Для звонка на вторую АТС необходимо было набрать “7”, дождаться гудка, а затем номер телефона. Для звонка в город, необходимо нажать “7”, дождаться гудка, потом “9”, дождаться гудка, и только после этого номер вызываемого абонента. Реализовать такие вещи, с помощью стандартных терминальных программ не удавалось, поэтому я намучился и плюнул на это грязное дело.
Сегодня я уже смог бы решить большинство проблем, возникших в те моменты, но на это ушли годы. Для того чтобы вы никогда не попали в такую ситуацию, я расскажу, как управлять модемом с помощью встроенных в него команд.
В каждом модеме существует определённый набор команд, прошитых в его память. В те времена, когда ещё сверх достижением компьютерной промышленности были модемы со скоростью 2400, каждый производитель вставлял в свой модем свой набор команд. Каждому производителю казалось, что его набор команд является наилучшим, но как всегда победил сильнейший. В настоящее время, все модемы поддерживают AT-команды, позволяющие управлять работой модема.
Модемы бывают внутренними и внешними, но вне зависимости от его типа основными устройствами являются: микропроцессор, различные микросхемы памяти и динамик. Ты можешь спросить: “А зачем динамик?”, если ты задал этот вопрос, то ты не разу не работал с модемом. Динамик необходим для контроля сеанса связи. Конечно же, в большинстве случаев, тебе не захочется, да и не понадобиться слушать его шипение, но иногда необходимо слышать, что происходит на линии. Поэтому тебе захочется научится управлять состоянием динамика.
В памяти храниться рабочая конфигурация и несколько телефонных номеров (количество зависит от размера памяти), а также буфера данных. Память модема делиться на рабочую память, память доступная только для чтения и энергонезависимая память. Некоторые из команд работы с модемом, рассмотренные в этой книге, сохраняют результат своих действий в памяти модема.
Командами, посылаемыми на модем, управляет маленький микропроцессор.
Если модем внешний, то на передней панели можно увидеть лампочки индикаторов. Назначение индикаторов в основном описано в документации или на нижней стороне модема. В таблице 1 приведено назначение наиболее распространённых индикаторов.
Таблица 1.
MR
Modem Ready
Модема включён
TR
Terminal Ready
Терминал (компьютер) в состоянии готовности
CD
Carrier Detect
Несущая опознана
SD
Send Data
Передаются данные
RD
Receive Data
Принимаются данные
HS
High Speed
Моде работает на номинальной скорости
AA
Auto Answer
Режим автоответа
JY
OFF-Hook
Телефонная линия занята модемом
Модем может работать в двух базовых режимах: командном и режиме передачи данных. После того как ты включил модем, он автоматически переходит в командный режим. В командном режиме вы можете вводить команды диалога, изменять рабочую конфигурацию и другие операции по программированию модема. Именно этот режим в наибольшей степени будет нас интересовать. После соединения с другим модемом, оба модема переходят в режим данных. В режиме данных вы не можете изменить настроек модема, так как команды модема воспринимаются как данные и будут передаваться, как и любые другие данные посланные на модем. Смена режима возможна вводом соответствующей командой. В процессе работы, модем сам может перейти из режима в режим в следующих случаях:
- при вводе команды в момент набора номера;
- при приеме команды о разрыве связи от модема абонента ;
- при потере несущей в процессе передачи данных.
Практически во всех программах работы с модемом, необходимо откорректировать строку инициализации модема. В основном эта корректировка производится единожды и при последующих запусках программы используется откорректированная строка. Практически во всех терминальных программах, в строке инициализации системы набора, по умолчанию стоит тоновый набор, а в нашей стране до сих пор применяется старая технология импульсного набора, поэтому приготовьтесь изменить этот параметр, потому что если вы его не измените, ваш модем вообще откажется набирать номер.
От настройки строки инициализации зависит также качество связи. Большинство настроем можно изменить в самой программе, но очень часто это удобнее сделать в командном режиме.
Помимо команд инициализации, модем поддерживает большое количество команд для тестирования состояния модема. Эти команды помогут тебе при поиске неисправностей.
Большинство команд модема состоят из одной буквы, после которой могут идти цифры или специальные символы (в зависимости от команды). Исключением в нашем первом правиле является команда “АТ” (в дальнейшем просто префикс). “АТ” - сокращение от английского слова “Attention”, что означает внимание. В большинстве случаев модему безразлично, какими буквами ты пользуешься, но я тебе советую использовать большие буквы, это
позволит тебе избавиться от лишних проблем с запоминанием команд требующих определённого регистра.
Префикс указывает на то, что после него последует несколько исполняемых команд. Команды могут вводиться в одной строке и для удобства разделятся пробелами. Последовательность команд для модема заканчивается нажатием клавиши “Enter”. Если во время набора команды вы ошиблись, то ты без проблем можешь исправить строку команд, так как команды отправляются на выполнения только после нажатия клавиши “Enter”. После
того как ты отправил строку команд на выполнения, большинство команд выполняться сразу, а некоторые модемом может исполнить по наступлению необходимого момента. Как правило, модем не воспринимает командные строки больше 40 символов.
Очень часто, при программировании модема приходиться менять содержимое регистров, эти регистры (обычно S-регистры) хранят различные параметры, используемые при выполнении определённых команд. В документации на модемы, производитель указывает, какое количество регистров содержит
модем и на какие команды влияет его содержимое. При работе с регистрами есть свои особенности, на данном этапе тебе необходимо запомнить, что тебе доступны не все регистры и некоторые из регистров ты можешь сохранить в энергонезависимой памяти. Каждая команда возвращает код результата выполнения, который может быть числом или слово, который ты так же можешь регулировать с помощью команд модема.
Я думаю, что теперь ты готов перейти к непосредственному изучению команд, если ты ещё не устал, то переходи к рассмотрению следующей главы.
При изучении команд не забудь, что во второй колонке может быть не только описание, но и расшифровка параметров команды.
АТ команды модема
А
Переводит модем в режим автоответа
А/
Заставляет модем повторить предыдущую команду. У этой команды есть одна особенность, после неё не надо нажимать “Enter”, она выполняется немедленно.
В
Устанавливает стандарт, по которому будет происходить передача данных. Стандарт различается в зависимости от скорости.
D
Набор телефонного номера. Эта команда выполняется с определёнными параметрами:
P,T – выбор системы набора телефонного номера. Как я уже говорил существуют тоновый (T) и импульсный (P).
Простейший пример набора телефонного номера с импульсной системой будет выглядеть как: АТDP. Я тебе гарантирую, что одна из этих систем установлена в твоём модеме по умолчанию.
Дополнительные параметры набора номера:
,
Пауза при набору номера, определяется содержимым регистра S8. В команде могут быть несколько интервалов паузы.
;
Ставиться в конце строки команды набора номера. После набора номера модем переходит в командный режим.
@
Перевод модема в режим ожидания одного или более гудков
!
Временное отключение модема от линии (0,5 сек)
R
После набора номера модем переходит в режим автоответа
W
Модем должен ждать непрерывного гудка, время гудка определяется содержимым регистра S7. Если гудка не произошло, то ты увидишь код результата
E
Эхо-печать в командном режиме. Е0 – не эхо-печати, Е1 – эхо-печать присутствует.
F
Режим работы модема. При F0 – модем работает в полудуплексном режиме, а при F1 в режиме полного дуплекса.
H
Этот параметр устанавливает действия твоего модема в ответ на действия модема оппонента. При H0 после отключения модема оппонента твой модем тоже отключается, при H1 модем останется на линии.
I
При I0 – команда запрашивает идентификационный номер модема. При I1 контрольную сумма содержимого памяти.
L
Регулировка громкости сигнала динамика модема.
Значение параметра изменяется от 0 до 3. Эта команда может быть выполнена без параметра, что будет означать минимальный уровень громкости динамика (в большинстве случаев эффект от команды L практически не отличается от L0). L3 соответствует максимальному уровню громкости.
M
Включение и выключение динамика.
M, M0 динамик всегда выключён
М1 – динамик включён до момента определения несущей.
М2 – динамик всегда включен
М3 – динамик выключается в момент диалога
О
Команда перевода модема из командного режима в режим передачи данных.
Q
Q0 – показывать коды результатов выполнения введённой команды, Q1 – не показывать коды.
S
Управление регистрами модема.
Sn – чтение содержимого регистра “n”.
Sn=z присвоение регистру “n” значения Z. Z – целое число от 0 до 256.
V
Устанавливает, в каком виде представлять результаты выполнения команд. Если ты используешь V1 то результат будет представляться в словесной форма, V0 превратит результаты в числовую.
Коды результатов
OK
0
Команда выполнена без ошибок
CONNECT
1
Связь установлена
RING
2
Телефон звонит
NO CARRIER
3
Несущая потеряна или не вообще найдена
ERROR
4
Ошибка в командной строке
CONNECT 1200
5
Связь установлена на черепашьей скорости
NO DIAL TONE
6
Нет гудка или вышло время (Time out)
BUSY
7
Перезвоните позже
NO ANSWER
8
Вызываемый номер не отвечает
CONNECT 2400
9
Выкинь свой модем
Х
Полнота текста кода результата и других сообщений.
X,X0 – текст сообщения об установке связи сокращается до слова CONNECT. Номер набирается после паузы вне зависимости от наличия гудка на линии. Состояние “занято” не определяется.
Х2 – сообщение об установлении связи приводится в полной форме. Номер набирается после паузы вне зависимости от наличия гудка на линии. Состояние “занято” не определяется.
Х3 – Сообщение об установлении связи приводится в полной форме. Номер набирается только при наличии гудка. Но состояние “занято” уже определяется.
Х4
Y
Y0 – после тайм аута модем не разрывает связь
Y1 – модем разрывает связь после тайм-аута.
Длина тайм аута 1.6 секундочки
Z
Сброс конфигурации и установка регистров модема по умолчанию.
+++
Переводит модем из режима передачи данных в командный режим. При этом символ “+” используется в качестве ESC
Я думаю на сегодня хватит. Подожди месяц, и мы продолжим изучать момед