Взаимодействие с GSM-модемом через ZETVIEW
Распределенные системы мониторинга и контроля (например, системы мониторинга инженерных конструкций) предполагают собой выдачу предупредительных сообщений с целью оповещения обслуживающего персонала о значительных происходящих изменениях. В программном обеспечении ZETVIEW предусмотрены различные варианты для реализации таких функций, в том числе и оповещение путем посылки коротких SMS-сообщений через подключенные к компьютеру GSM-модемы.
В настоящее время существует широкий выбор GSM-модемов с различным функционалом и назначением. Для работы программы с модемом, последний должен иметь возможность возможность работы посредством AT команд через COM-порт. В подавляющем большинстве модемов эта функция есть. В качестве примера мы взяли модем HUAWEI E150 от МТС с обычной SIM-картой.
При подключении модема к компьютеру и автоматической установке соответствующего программного обеспечения вместе с драйверами в диспетчере устройств операционной системы появляется новый COM-порт.
Общение с модемом через ZETVIEW будет происходить через COM9 посредством AT команд. AT команд довольно много, но для реализации задачи оповещения через SMS их понадобится считанное количество:
- ATI — команда идентификации (будет использоваться в качестве тестовой команды, чтобы убедиться, что с модемом есть связь при работе через COM-порт).
- AT+CREG? — получение типа регистрации в сети (будет использоваться для определения статуса нахождения в сети).
- AT+CMGF — задание режима работы (будет использоваться для задания PDU режима).
- AT+CMGS — отправка сообщения (будет использоваться для отправки сообщения в кодировке UCS2). При работе в цифровом режиме сообщение требует кодировки. Функцию конвертации символов можно реализовать у себя в программе, но также есть свободные сервисы, где можно ввести текст сообщения и получить сконвертированное сообщение (например, https://smstools3.kekekasvi.com/topic.php?id=288).
Каждая из команд должна заканчиваться символами возврата каретки и перевода строки (
При создании SCADA-проекта в ZETVIEW воспользуемся компонентом «COM-порт», который настроим для работы с модемом. Также подключим к нему кнопку для включения и выключения работы с портом.
Необходимо задать номер порта, скорость обмена, контроль четности и размер байта (рис. 3). Большинство AT модемов по умолчанию принимают следующие настройки:
- скорость 9600, без контроля четности
- скорость 115200, без контроля четности
Однако могут быть исключения.
Для отправки команд модему через компонент поставим связку компонентов «Текстовое поле» и «Программируемый компонент». В текстовом поле будет задаваться команда, а в программируемом компоненте к ней будут добавляться символы возврата каретки и перевода строки и передаваться дальше в COM-порт.
Такую же связку добавим для посылки SMS-сообщения. Отличие ее будет заключаться в том, что программируемый компонент помимо символов возврата каретки и перевода строки будет добавлять еще символ Ctrl+Z. Ответ от модема будет выводиться на компонент «Метка».
После того, как SCADA-проект сделан, сохраняем его и компилируем приложение. Запускаем приложение, активируем работу с COM-портом нажатием на соответствующую кнопку.
После этого приступаем к посылке команд. Посылаем команду ATI и принимаем ответ от модема. Модем отвечает, значит связь с ним налажена и можно передавать следующие команды.
Посылаем команду AT+CREG? и принимаем ответ от модема. Ответ означает, что модем зарегистрирован в своей домашней сети (второе число в ответе равно 1), значит можно переходить к посылке SMS-сообщения.
Для перехода в цифровой режим отправляем команду AT+CMGF=0 и принимаем ответ. Ответ OK означает, что режим установлен.
Далее конвертируем сообщение, которое хотим послать. Сообщение будет содержать текст «testing» и отправляться абоненту с номером +7964xxxxxxx. Результат конвертирования «0011000B919746214365F70000FF07F4F29C9E769F01» получился длиной 21 символ (первый символ 00 не учитывается при подсчете длины), поэтому отправляем в модем команду AT+CMGS=21, получаем в качестве ответа «>» и после этого отправляем сконвертированное сообщение и получаем ответ. Убеждаемся, что сообщение дошло до абонента.
Данный пример демонстрирует, как можно достаточно просто отправить текстовое сообщение через GSM-модем из SCADA-приложения. Поскольку современные модемы обладают достаточно широким набором команд, то представленный пример можно существенно доработать, снабдив его дополнительными возможностями.