Взаимодействие с GSM-модемом через ZETVIEW

Распределенные системы мониторинга и контроля (например, системы мониторинга инженерных конструкций) предполагают собой выдачу предупредительных сообщений с целью оповещения обслуживающего персонала о значительных происходящих изменениях. В программном обеспечении ZETVIEW предусмотрены различные варианты для реализации таких функций, в том числе и оповещение путем посылки коротких SMS-сообщений через подключенные к компьютеру GSM-модемы.

В настоящее время существует широкий выбор GSM-модемов с различным функционалом и назначением. Для работы программы с модемом, последний должен иметь возможность возможность работы посредством AT команд через COM-порт. В подавляющем большинстве модемов эта функция есть. В качестве примера мы взяли модем HUAWEI E150 от МТС с обычной SIM-картой.

GSM-модем

При подключении модема к компьютеру и автоматической установке соответствующего программного обеспечения вместе с драйверами в диспетчере устройств операционной системы появляется новый COM-порт.

Окно диспетчера устройств

Общение с модемом через ZETVIEW будет происходить через COM9 посредством AT команд. AT команд довольно много, но для реализации задачи оповещения через SMS их понадобится считанное количество:

  1. ATI — команда идентификации (будет использоваться в качестве тестовой команды, чтобы убедиться, что с модемом есть связь при работе через COM-порт).
  2. AT+CREG? — получение типа регистрации в сети (будет использоваться для определения статуса нахождения в сети).
  3. AT+CMGF — задание режима работы (будет использоваться для задания PDU режима).
  4. AT+CMGS — отправка сообщения (будет использоваться для отправки сообщения в кодировке UCS2). При работе в цифровом режиме сообщение требует кодировки. Функцию конвертации символов можно реализовать у себя в программе, но также есть свободные сервисы, где можно ввести текст сообщения и получить сконвертированное сообщение (например, https://smstools3.kekekasvi.com/topic.php?id=288).

Каждая из команд должна заканчиваться символами возврата каретки и перевода строки (), то есть ASCII символами 0x0D и 0x0A. Кроме того, посылаемое SMS-сообщение в конце должно содержать символ Ctrl+Z, то есть ASCII символ 0x1A.

При создании SCADA-проекта в ZETVIEW воспользуемся компонентом «COM-порт», который настроим для работы с модемом. Также подключим к нему кнопку для включения и выключения работы с портом.

Необходимо задать номер порта, скорость обмена, контроль четности и размер байта (рис. 3). Большинство AT модемов по умолчанию принимают следующие настройки:

  1. скорость 9600, без контроля четности
  2. скорость 115200, без контроля четности

Однако могут быть исключения.

Настройка COM-порта

Для отправки команд модему через компонент поставим связку компонентов «Текстовое поле» и «Программируемый компонент». В текстовом поле будет задаваться команда, а в программируемом компоненте к ней будут добавляться символы возврата каретки и перевода строки и передаваться дальше в COM-порт.

Схема посылки команд в модем

Код программируемого компонента отправки команд

Такую же связку добавим для посылки SMS-сообщения. Отличие ее будет заключаться в том, что программируемый компонент помимо символов возврата каретки и перевода строки будет добавлять еще символ Ctrl+Z. Ответ от модема будет выводиться на компонент «Метка».

Код программируемого компонента отправки сообщений

После того, как SCADA-проект сделан, сохраняем его и компилируем приложение. Запускаем приложение, активируем работу с COM-портом нажатием на соответствующую кнопку.

Активация COM-порта

После этого приступаем к посылке команд. Посылаем команду ATI и принимаем ответ от модема. Модем отвечает, значит связь с ним налажена и можно передавать следующие команды.

Выполнение команды ATI

Посылаем команду AT+CREG? и принимаем ответ от модема. Ответ означает, что модем зарегистрирован в своей домашней сети (второе число в ответе равно 1), значит можно переходить к посылке SMS-сообщения.

Выполнение команды AT+CREG

Для перехода в цифровой режим отправляем команду AT+CMGF=0 и принимаем ответ. Ответ OK означает, что режим установлен.

Выполнение команды AT+CMGF=0

Далее конвертируем сообщение, которое хотим послать. Сообщение будет содержать текст «testing» и отправляться абоненту с номером +7964xxxxxxx. Результат конвертирования «0011000B919746214365F70000FF07F4F29C9E769F01» получился длиной 21 символ (первый символ 00 не учитывается при подсчете длины), поэтому отправляем в модем команду AT+CMGS=21, получаем в качестве ответа «>» и после этого отправляем сконвертированное сообщение и получаем ответ. Убеждаемся, что сообщение дошло до абонента.

Выполнение команды AT+CMGS=21

Отправка сообщения

Данный пример демонстрирует, как можно достаточно просто отправить текстовое сообщение через GSM-модем из SCADA-приложения. Поскольку современные модемы обладают достаточно широким набором команд, то представленный пример можно существенно доработать, снабдив его дополнительными возможностями.

Авторизация
*
*

17 − шесть =

Регистрация
*
*
*

одиннадцать − семь =

Генерация пароля

1 × 5 =