Модем на основе модуля Enfora GSM0308
Модем на основе модуля Enfora GSM0308
Программа для чтения UDP сообщений с исползованием компанента Indy C++ Builder
Речь пойдет о модемах на модулях Enfora
http://www.enfora.com,
а точнее о модеме питерской фирмы
Оликом СПб
SL116. Все драйвера и описание можно взять у них с со страницы
http://gsm.olicom.spb.ru/gsm_enfora/sl116.html или у меня
enfora.rar, правда в мой
архив входят так же и материалы которыми я пользовался для подготовки данной
статьи, а также исходники для C++ Builder 6 к программе
чтения UDP сообщений модема SL116 о которой так же пойдет
речь ниже.
И так, начинаем знакомиться с этим модемом. В нем на 6 - контактном разъеме имеются выводы GPIO1, GPIO2, GPIO3, GPIO4 - это дискретные выводы, (В документации прилагаемой к архиву есть инструкция: GPIOEnfora GSM1208.pdf как настроить модем на стандартную охранную функцию, а именно: при поступлении сигнала на выбранный дискретный вход, модем посылает СМС с заданным текстом на определенный номер телефона) ADC1 - это как раз нужный нам аналоговый вход и GND - общий провод, относительно которого и происходят все измерения. Электропитание терминала происходит через USB интерфейс. На всякий случай я приведу здесь схему распайки USB, потому как не всегда модем у нас будет находиться возле компьютера, а блок питания на 5 В. найти не проблема.
Вывод | Название | Цвет провода | Описание |
---|---|---|---|
1 | VCC |
|
+5В |
2 | D- |
|
Данные - |
3 | D+ |
|
Данные + |
4 | GND |
|
Земля |
Модем устанавливаем согласно инструкции:
1. Запустите файл SetupSL116.exe Файл находиться в архиве.
2. Установите в модем SIM карту.
3. Подключите антенну.
4. Подключите модем при помощи кабеля к USB порту компьютера.
5. При установке драйвера USB-COM укажите папку с драйверами C:\Program Files\OlicomSPb\SetupSL116\
6. после того как Вы установили драйвера для USB-COM порта, установите драйвер
модема. Драйвер: MdmSL0116.inf, находится в папке C:\Program Files\OlicomSPb\SetupSL116\.
7. в свойствах модема нужно поставить «скорость порта для модема» 115200
8. модем готов к работе.
В том, что модем установился нормально можно убедиться в
диспетчере устройств.
Настраивать модем следует через программы: Hyper
Terminal - входит в стандартный пакет Windows (можно,
конечно, использовать терминальную программу стороннего разработчика) и
DIO Event Tool - входит в архив. Настройку рекомендую проводить
без SIM карты.
Программу Hyper Terminal находим по пути
Пуск-Программы-Стандартные-Связь. Запускаем. В окошко "Описание
подключения" вводим название соединения, например:
SL116, жмем ОК.
В следующем окошке "Подключение"
выбираем: Подключаться через COM4 (У
меня COM4 назначен для SL116, у
Вас может быть другой COM), жмем ОК.
Далее в строке "Скорость (бит/c)"
выбираем 115200 и жмем Применить и следом ОК. Программа готова к работе с
модемом. Когда будете закрывать программу не забудьте согласиться на предложение
сохранить соединение под предложенным именем, чтобы каждый раз не настраивать
соединение заново, а загружать уже готовое.
Общение с модемом происходит с помощью АТ-команд. Файл со списком
поддерживаемых АТ-команд и описанием на английском языке входит в архив, под
именем
GSM0308AT001_-_Enabler_III_AT_Command_Set_-_Revision_1.02.pdf.
Набираем: AT&V
Модем отвечает:
Этой командой Вы считали конфигурацию модема. Рекомендую то, что
вы получили на экране скопировать в буфер обмена и затем сохранить в текстовом
файле. Эту конфигурацию задала фирма производитель. Особенно обратите внимание
на то, что вы видите в разделе $EVENT. Забегая вперед
скажу, что вся ваша программа будет тоже располагаться в этом разделе. А здесь
уже что-то присутствует. Разработчик мне объяснил, что это адаптация модема под
наших сотовых операторов. Хорошо разобравшись со всеми параметрами команды
AT$EVENT, возможно вы сможете понять, что же
корректировал разработчик, а пока не советую давать команду AT&F,
которая загружает заводские установки, т. к. то что вы видите в разделе
$EVENT пропадет, впрочем конечно все можно восстановить загрузив
файл SL116_2.txt входящий в архив через программу DIO
Event Tool или используя команду AT$EVENT
и ту информацию, что вы сохранили по моей рекомендации.
Командой AT$MDMID="Unique name" зададим уникальное
имя модема. Как видим сейчас это имя 8904test.
Командой AT+CGDCONT=1,”IP”,”MYAPN”,””,0,0 зададим
точку доступа. Как видим сейчас точка доступа "internet"
- вероятно модем был подключен к Мегафону. У Теле2 APN: internet.tele2.ru.
Очевидно, что у вашего сотового оператора нужно точно узнать
APN и внести его вместо MYAPN.
Командой AT$AREG=2, определим
требование автоматической активации GPRS соединения при
включении питания модема.
А с помощью команды AT$HOSTIF=1 модем будет устанавливать и поддерживать
UDP PAD соединение.
Замечание:
Вероятно есть смысл также подать команду AT$ACTIVE=1 -
этим определяется, что модем будет активным клиентом TCP PAD
соединения (а не пассивным сервером при ACTIVE=0),
хотя наверное этот параметр имеет значение при AREG=1 и
HOSTIF=2, тогда процесс соединения должен происходить по
команде ATD*99# (чтобы модем автоматически выполнял какую-то АТ-команду
при наступлении события, её надо внести в память модема:
AT$STOATEV=1,ATD*99# и вызывается она так AT$EVENT=10,3,44,1,0 ). Параметром
$PADDST="62.126.72.126",1725 определяется адрес и порт используемые для
TCP соединения. Но в нашем случае благодаря AREG=2
соединение происходит сразу по включению питания модема.
Список IP-адресов
вноситься в параметр FRIEND. AT$FRIEND=1,1,"213.33.233.140",1721,0
Здесь первая цифра означает порядковый номер параметра
FRIEND. Это значение может быть от 1 до 10.
Вторая цифра обозначат FRIEND как клиент про 0 или
как сервер при 1.
В следующем параметре вносится IP-адрес или
DNS имя, очевидно, что это ваш постоянный IP-
адрес, который вы имеете на основе договора с провайдером.
Четвертое значение - порт. Для UDP передачи это
значение игнорируется, оно используется только для TCP
соединения.
И последнее значение определяет для какого соединения TCP
или UDP будет использоваться
FRIEND. В нашем случае только для UDP.
Значение порта для UDP соединения задается в
параметре UDPAPI командой AT$UDPAPI=,40000 Здесь уже
игнорируется значение IP адреса.
Командой AT$NETMON=15, 1,
15, 1 зададим автоматическую проверку модемом соединения путем ping
раз в 15 минут по всем IP адресам из
списка FRIEND.
Наступила пора собственно определить ту
информацию, что будем посылать в UDP сообщении и как
часто это будет происходить. Повторюсь, что т. к. производитель занял
EVENT с 1 по 5, то наша программа должна располагаться ниже.
Начнем с 10. Запустим DIO Event Tool , выберем вкладку
Input Events, в окошко Event Group
введем10, в строке Input Event Category выберем
Timer Events, в окошке Selection выбираем
Timer1, в окошко Period(Seconds)
введем 60, нажимаем кнопку Add, в окне Input Event
Summary появляется строка:
Timer 1, 60.00 (seconds).
Выбираем вкладку Output Event,
в строке Output Event Category выбираем:
UDP broadcast message - это UDP
сообщение будет передаваться по всем адресам входящим в список FRIRND,
далее выбираем что у нас будет
передаваться в UDP сообщении, а именно Message
Number, ModemID, Analog1. Чтобы в случае пропадания сети
сообщение сохранялось и отправлялось когда сеть появиться вновь поставим галочку
возле Store Message. В окошко Message#
введем номер сообщения, например: 2009.
Выберем ASСII, чтобы передача была в ASСII
символах и нажмем Add. В окне
Output Event Summary появиться надпись: UDP Broadcast
Message Event, 2009, 86
Далее нажимаем на вкладку Result.
В окне AT Commands мы видим все
команды, что нужно набрать, чтобы UDP сообщение с информацией о номере сообщения,
идентификационном номере модема (значение параметра MDMID)
и величине сигнала на аналоговом входе передавалась каждые 60
секунд. Теперь можно закрыть программу Hyper
Terminal, чтобы освободить Com порт,
проверить, что в окошке Modem COM Port программы
DIO Event Tool выставлен нужный нам порт, нажать кнопку
Write to Modem. Но по-моему мнению лучше набрать ручками эти три
команды в Hyper Terminal-е, а программу DIO Event
Tool использовать лишь для генерации нужных нам команд
AT$EVENT, чтобы не сильно долго разбираться с параметрами, хотя
пару слов об этих параметрах стоит сказать.
И так: AT$EVENT1=60 - задаем время
работы первого таймера 60 секунд. Минимальное время 1
секунда.
AT$EVENT=10,1,12,1,1 Первая цифра: 10 - группа EVENT, понятно, чтобы исходящее событие было реализовано оно должно входить в одну группу с соответствующим входящим событием. Вторая цифра - тип EVENT - 1 означает, что это входящее событие будет истинным и запустит выходное, если его параметры выйдут за определенную область, в данном случае счет таймера превысит заданное значение ( 0 означал бы, что событие будет истинным если, параметры в процессе изменения наоборот попадут внутрь заданной области, например событие AT$EVENT=11, 0, 3, 1, 1 будет истинным если состояние четвертого дискретного входа примет значение логической 1). Третья цифра - категория EVENT, 12 означает собственно событие по первому таймеру. Четвертая и пятая цифры - те самые параметры EVENT, определяющие границы изменяемого значения, в этом EVENT должны соответствовать 1.
AT$EVENT=10,3,42,2009,86
Первая цифра: 10 - группа EVENT,
та же что и у входящего события. Вторая цифра - тип
EVENT, 3 исходящее событие. Третья цифра - категория
EVENT, 42 передача широко вещательного UDP
сообщения по IP-адресам из списка
FRIEND. Четвертая цифра - первый параметр EVENT,
2009 номер сообщения. Пятая цифра - второй параметр EVENT,
86 образуется путем сложения: 2 (передача номера
сообщения) + 4 (идентификационном номере модема, значение MDMID) +
16 (Величина сигнала аналогового на
аналоговом входе) + 64 (Сохранять сообщения в случае отсутствия связи).
Кстати, а в каком виде мы будем принимать значение напряжения на
аналоговом входе и какое оно может быть максимально?
Почитаем, что сказано о команде AT$IOADC1 Понятно:
подавать на аналоговый вход мы можем 0-1.75 В, разрешение 1.709
мВ т. е. подав 1В и выполнив команду AT$IOADC1 в
Hyper Terminl -е мы получим цифру 1/0.001709=585
Ну у меня получилось 595, наверное мой блок питания Б5-47 на пару милливольт
брешет. В общем точно такие цифры мы должны наблюдать в UDP
сообщении.
Как заключительный штрих сохраним введенную конфигурацию AT&W.
Теперь можно вставлять SIM карту и принимать
сообщение от модема каждые 60 секунд. Но чтобы это было возможно еще нужен софт
для нашего компьютера.
Замечание: Правда можно, конечно, отправлять сообщение на
сервер фирма Enfora. В документе
GSM0000AN021_-_Access_the_Enfora_Test_Server_-_Revision_1.00.pdf об этом
подробно написано, только наша задача отправлять сообщение на наш компьютер!
Далее на C++
Builder напишем программу для чтения UDP сообщений