Модем на основе модуля Enfora GSM0308

 

Введение

Модем на основе модуля Enfora GSM0308

Программа для чтения UDP сообщений с исползованием компанента Indy C++ Builder

Управление модемом Enfora через СМС

Пишите автору сайта ganatol2000@mail.ru


  Речь пойдет о модемах на модулях
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 В. найти не проблема.

Распайка USB

 

Вывод Название Цвет провода Описание
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 сообщений
 

Hosted by uCoz