Radio Life - Работа с GPRS модемом Telit

Работа с GPRS модемом Bitcord СТ-2-05

1. С чего начать.

GPRS-модем Bitcord СТ2-05 представляет из себя небольшую коробочку с двумя слотами для сим-карт, индикаторами TIMER и NET и набором разъемов. На начальном этапе работы требуются три из них — разъем питания, RS232 и антенный разъем.

Рис. 1. Внешний вид модема

Задача, собственно, очень простая — обеспечить соединение модема с сервером TELNET и организовать прием/передачу данных через порт RS232 с помощью любой терминальной программы (Hyper Teminal, Putty и т. п.).

Соединение будем устанавливать через Мегафон с фиксированным IP.

Естественно, начать надо с того, чтобы вставить в слот для SIM1 сим-карту, присоединить антенну, затем подключить питание. Должен несколько раз мигнуть, затем загореться зеленый индикатор TIMER. В процессе работы он будет "подмигивать" с некоторым интервалом, который зависит от установленного времени таймера перезапуска модема.

Частое мигание индикатора NET показывает, что соединения с оператором нет. Если он не переходит в режим "помаргивания" с интервалом примерно 3 сек., то надо проверить антенну, сим-карту и вообще наличие соответствующего оператора в данном месте.

Конечно, требуется компьютер с нормальным 9-пиновым COM-портом. Если имеется только USB, то можно использовать преобразователь USB-COM.

Порт RS232 модема по умолчанию установлен в режим автоматического определения скорости передачи, поэтому на компьютере можно установить скорость передачи любую. Я поставил 115200, 8 бит, 1 стоповый.

Подключаем кабель модема к порту компьютера и приступаем к настройке.

2. Информация о модели, сброс к "заводским" настройкам

Сначала надо проверить "доступность" модема. Набираем команду AT:


AT
OK

Если получили ответ OK, можно продолжать. Для начала определим версию модели и прошивки. Можно заметить, что команды модему можно набирать как прописными, так и строчными буквами:


at+cgmm (модель)
GL865-DUAL-V3.1
OK
at+cgmr (прошивка)
16.01.173
OK
AT+GMI (информация о производителе)
telit
OK

В процессе работы может потребоваться сбросить модем к начальным установкам. Обнаружить, что сбрасывает стандартная команда AT&F0(1) не удалось (похоже, что ничего). Поэтому приходится использовать следующие команды:


at+cfun=4
OK
at+cmar=00000000
OK

Команда AT+CFUN=4 деактивирует SIM-карту и сбрасывает сетевое соединение. Команда AT+CMAR=00000000 сбрасывает данные пользователя. 00000000 — "секретный код". Возможно, на других модемах он может быть иным, но производитель данного устройства указал для сброса такой код.

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


at#sled=2,10,10
OK
at#sledsav
OK
at&w
OK

3. Настройка сетевых параметров

Прежде всего — проверим установки и подключение SIM-карты:


at#qss?    (запрос статуса SIM-карты)
#QSS: 0,1  (0 — запрос статуса по команде QSS, 1 — SIM-карта вставлена)
OK
at+cpin?      (запрос готовности PIN-кода)
+CPIN: READY  (ввод PIN-кода не требуется)
OK
at+cgreg?     (запрос статуса GPRS)
+CGREG: 0,1   (0 — отключен код регистрации в сети, 1 — модем зарегистрирован в сети)
OK
at+cops?      (запрос имени оператора)
+COPS: 0,0,"MegaFon RUS"
OK

Итак, SIM-карта подключилась к нужному оператору (в нашем случае — Мегафон) и теперь можно перейти к настройкам собственно соединения. Сначала проверим установки параметров сокетов:


at#scfg?

#SCFG: 1,1,300,90,600,50
#SCFG: 2,1,300,90,600,50
#SCFG: 3,1,300,90,600,50
#SCFG: 4,2,300,90,600,50
#SCFG: 5,2,300,90,600,50
#SCFG: 6,2,300,90,600,50

Команда выводит параметры для 6 возможных сокетов и двух (из 5 возможных) наборов контекстов PDP (Packet Data Protocol type). Нам требуется всего один сокет (для telnet-соединения), выберем для работы сокет 1 и контекст 1. Рассмотрим по порядку, что означают эти цифры для первого сокета.

1 — номер сокета; 1 — номер контекста PDP, который используется для этого сокета; 300 — размер пакета данных, передаваемых по TCP-соединению; 90 — таймаут ожидания сброса соединения при отсутствии активности (в секундах); 600 — таймаут ожидания установки соединения (в сотнях миллисекунд); 50 — таймаут передачи данных (в сотнях миллисекунд), в случае, если пакет для передачи меньше размера пакета (в данном случае — 300 байт).

Подробнее о значении этих параметров, возможно, скажу ниже, а пока можно оставить их "как есть".

Теперь настроим параметры контекста соединения. Это делает команда CGDCONT:


at+cgdcont=1,"IP","FixedIP.nw"

Здесь: 1 — идентификатор контекста; IP — тип протокола передачи данных (интернет протокол); FixedIP.nw — имя точки доступа APN, зависит от оператора и им же должно сообщаться. В нашем случае используется фиксированный IP Мегафона. Команда CGDCONT имеет еще ряд параметров, но для нашего случая достаточно и этих (остальные отсавим по умолчанию), поэтому ими и ограничимся. Значения всех параметров контекста можно посмотреть той же командой:


at+cgdcont?
+CGDCONT: 1,"IP","FixedIP.nw","",0,0
OK

У нас настроен только один контекст, поэтому выводится только одна строка. При настройке нескольких контекстов PDP будет столько строк, сколько есть настроенных контекстов.

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

4. Установка соединения

Перед установкой соединения с сервером telnet еще раз проверим наличие соединения с сетевым оператором командой CREG:


at+creg?
+CREG: 0,1
OK

Результат аналогичен описанной выше команде CGREG.

Далее активируем собственно контекст командой SGACT:

 
at#sgact=1,1
#SGACT: 100.000.000.000
OK

В строке команды можно дополнительно указать пользователя и пароль, но в нашем случае этого не требуется. При успешном завершении команда выводит IP адрес модема, который в случае SIM-карты со статическим адресом будет всегда один и тот же.

И, наконец, устанавливаем telnet соединение с сервером с помощью команды SD:


at#sd=1,0,23,200.200.100.100
CONNECT
œœ œ#œ'

1 — номер сокета; 0 — протокол передачи TCP; 23 — номер порта; 200.200.100.100 — адрес сервера.

Возможно, в большинстве случаев приведенного выше набора команд для работы будет достаточно, однако в нашем случае сервер не только ответил загадочным набором символов, но и категорически отказывается воспринимать ввод с клавиатуры. Можно добавить, что в случае бездействия, через интервал, установленный командой SCFG (при указанных выше настройках этот таймаут равен 90 сек) соединение будет сброшено, и модем выведет сообщение NO CARRIER. В любом случае желательно решить две проблемы:

1. Набирать указанные команды при каждом подключении не очень удобно — всегда есть вероятность ошибки.

2. Для установки соединения с нашим сервером необходимо сделать еще что-то, чтобы обеспечить возможность обмениваться данными.

Для решения этих задач придется обратиться к скриптам, которые будем писать на языке Python, интерпретатор которого встроен в данный модем.

5. Подготовка к работе со скриптами

Для разработки скриптов необходим следующий минимум программного обеспечения:

1. Любой текстовой редактор. Я пользуюсь tsWebEditor.

2. Терминальный клиент HiperTerminal. Выбор этой программы обусловлен тем, что с ее помощью можно загружать в модем текстовые неоткомпилированные скрипты. Настройки программы для загрузки приведены в инструкции telit_easy_script_python_r18.pdf и будут приведены ниже.

3. Для сборки скриптов нужен Telit Python package (TelitPy1.5.2+_v4.1.exe), который содержит необходимые библиотеки.

4. Для загрузки в модем откомпилированных скриптов желателен Rsterm.

Желательность компиляции обусловлена тем, что время запуска текстового скрипта резко возрастает при увеличении его размера, и может достигать на совсем простеньком скрипте десятков минут. Однако скрипт в несколько строк загружается всего несколько минут, поэтому для коротких программ можно ограничиться двумя первыми пунктами.

6. Простой скрипт

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

Для общения с внешним миром в модемы Telit встроен ряд программных модулей, которые и будем использовать. Эти модули следующие:

MOD — некоторый набор функций, имеющих отношение к работе самого модема.

MDM — интерфейс, который отвечает за обмен командами и данными с внешним миром.

SER — интерфейс последовательного порта, через который происходит прием/передача данных.

Пока достаточно этих модулей, что будет видно из текста программы. Для того, чтобы использовать эти модули, их необходимо "подключить", для чего в текст программы надо вставить следующие строки:


import MOD
import MDM
import SER

После подключения необходимых модулей, пишем собственно скрипт:


SER.send('GPRS CONTEXT activated ... \r\n')
MDM.send('AT#SGACT=1,1\r', 10)
MOD.sleep(20)
SER.send('GPRS Connect ...\r\n')
MOD.sleep(20)
MDM.send('AT#SD=1,0,23,200.200.100.100\r', 10)

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

MOD.sleep(20): простая задержка, выражающаяся в сотнях миллисекунд. Нужна для того, чтобы дать как модему, так и оператору время на выполнение операции.

SER.send('GPRS CONTEXT activated ... \r\n'): команда вывода на COM-порт информационного сообщения, чтобы мы могли хотя бы знать, что скрипт запустился.

MDM.send('AT#SGACT=1,1\r', 10): описанная выше команда активации контекста PDP.

MDM.send('AT#SD=1,0,23,200.200.100.100\r', 10): установка соединения с сервером.

Полный текст скрипта получается такой:


import MOD
import MDM
import SER

SER.send('GPRS CONTEXT activated ... \r\n')
MDM.send('AT#SGACT=1,1\r', 10)
MOD.sleep(20)
SER.send('GPRS Connect ...\r\n')
MOD.sleep(20)
MDM.send('AT#SD=1,0,23,200.200.100.100\r', 10)

Сохраняем его в виде текстового файла с расширением".py", например, test.py, и перейдем к процессу загрузки и запуска.

Рис. 2. Настройки параметров COM-порта

Прежде всего, приведем настройки HyperTerminal'а в соответствие с рекомендациями Telit. Рекомендованные настройки показаны на рис. 2—4.

Рис. 3. Свойства терминала

Рис. 4. Настройки параметров ASCII

Передача данных в модем производится в режиме отправки текстового файла (см. рис. 5). Для этого вводится следующая команда:


at#wscript="test.py",227

>>>

Где test.py — имя файла, а 227 — его размер. Естественно, у вас может быть и другой размер, в зависимости от оформления текста скрипта.

Рис. 5. Загрузка файла в модем.

После появления на экране терминала приглашения к передаче (>>>), следует успеть перейти к передаче файла. Обратите внимание, что для того, чтобы иметь возможность указать терминалу имя передаваемого файла в окошке Тип файлов следует указать Все файлы (*.*).

В случае успешной передачи будет получено стандартное подтверждение OK. Чтобы убедиться в том, что файл загружен в модем, можно посмотреть содержимое каталога модема:


at#lscript
#LSCRIPT: "test.py",227

OK

Далее настроим режим запуска скрипта. Это можно сделать с помощью команды STARTMODESCR, применив ее следующим образом:


at#startmodescr=1,30

OK

Первый параметр определяет режим запуска скрипта: 0 — запуск зависит от уровня сигнала DTR. На мой взгляд, это не совсем удобно. 1 — запуск скрипта произойдет автоматически через интервал, указанный во втором параметре команды (в нашем случае — 30 сек.), при условии, что в течение этого интервала не будет введена команда через порт RS232. Мне больше нравится этот вариант, т. к. он позволяет надежно остановить запуск скрипта, что вполне может понадобится при отладке.

Теперь надо указать модему, какой скрипт следует запустить (ведь скриптов в модем можно записать не один — памяти для этого достаточно). Это устанавливается следующей командой:


at#escript="test.py"

OK
at#escript?
#escript="test.py"

OK

В заключение добавлю, что если по каким-то причинам вы остановили запуск скрипта вводом команды через порт RS232, то его при необходимости можно запустить "вручную":


at#execscr

OK

При этом будет запущен скрипт, ранее указанный командой ESCRIPT.

Теперь можно перезапустить модем (например, выключив и включив питание) и посмотреть что у нас получилось. В общем, при нормальных условиях, на экране терминала, подключенного к модему, должно появиться примерно следующее: FF FD 18 FF FD 20 FF FD 23 FF FD 27