ЖУРНАЛ «СТА» 3/2016

Был создан базовый класс – SMSbyHTTP, который выпол- няет отправку запросов SMS-сервису по протоколу HTTP. Для работы класса необходимо добавить в VBA-проект ссылку на объект Microsoft WinHTTP Services, version 5.1 (рис. 9). Соз- дание объекта Microsoft WinHTTP Services проводится при инициализации класса SMSbyHTTP. По сути, разработанный класс выполняет подготовку запроса по HTTP-протоколу и возвращает результат – ответ сервера SMS-сервиса. Он име- ет только функцию POST, код которой приведён в листинге 1. Поскольку при отправке сообщений возможны нештатные ситуации, разработана процедура обработки аварийных со- общений ErrHandlerSub (листинг 2), аналогичная процедура используется и в других классах. ErrHandlerSub использует объект g типа SWXRuntimeLib.Global из основного кода скрипта. Далее был создан зависимый от SMSbyHTTP класс – SMSAero, который определяет порядок взаимодействия уже с конкретным SMS-сервисом, в данном случае SMS Aero. У класса есть свойство ListNumbers, оно представляет собой массив номеров, по которым должна быть сделана рассылка. При присвоении свойству строки, содержащей мобильные номера, разделённые «;», происходит автоматический разбор строки и формирование массива номеров. Также в классе SMSAero есть поле Message – собственно отправляемое со- общение. В классе реализованы две процедуры: SendSMS от- правляет сообщение Message на заданный номер, SendSMSAll рассылает сообщение Message по всем номерам, содержа- щимся в ListNumbers, для этого используется процедура SendSMS. Код процедуры SendSMS класса SMSAero приве- дён в листинге 3. Основной код скрипта размещён в модуле SMS_sender, в нём создана процедура SendSMS. Именно её надо указать в поле Script на экранной форме под списком скриптов в ScriptWorX64 Configurator. Данная процедура получает в ка- честве параметра объект TriggerData, содержимое которого зависит от типа триггера. Для процедуры SendSMS требует- ся только атрибут № 3 (нумерация атрибутов идёт с 0), он содержит текстовое описание аварии, получаемое из AlarmWorX64 Server. Время аварии из TriggerData брать не- желательно, поскольку оно хранится без учёта часового пояса. Код процедуры SendSMS из модуля SMS_sender при- ведён в листинге 4. Также в модуле SMS_sender при инициа- лизации скрипта происходит получение списка номеров для рассылки (листинг 5). После окончания разработки остаётся проверить состав VBA-проекта (рис. 10) и сохранить его. Названия переменных в UDM, с которыми работает при- ведённый скрипт, следующие: ● SMS_config.SMS_Numbers – строка, содержащая номе- ра, на которые делаем рассылку, они разделены точкой с за- пятой; ● SMS_config.SMS_Alarmlog – строка, содержащая послед- нее аварийное сообщение от скрипта; ● SMS_config.SMS_Alarm– бит, установленный в 1, если про- изошла авария при работе скрипта. После сохранения результатов разработки необходимо вы- полнить запуск скрипта в ScriptWorX64. Для этого надо вы- брать созданный скрипт в ScriptWorX64 Configurator и нажать кнопку в виде светофора на панели вверху (рис. 2), чтобы он стал зелёным, при этом запустится ScriptWorX Runtime. Ход работы скрипта можно отслеживать в MonitorWorX, там будут следующие типы сообщений: 1)сообщения об ошибке в работе скрипта; 2)сообщение об отправке SMS-сообщения; 3)сообщение об успешной отправке SMS-сообщения. Примеры полученных сообщений приведены на рис. 11, они содержат всю необходимую информацию: время и дату возникновения аварийного события и его описание. З АКЛЮЧЕНИЕ Результатом работы стало создание простого и прозрачно- го механизма SMS-информирования оперативного персона- ла. При этом были использованы только встроенные средства ICONICS GENESIS64, что лишний раз показывает широчай- шие возможности данной SCADA-системы. Разработанный код является во многом универсальным и может быть легко модернизирован для организации отправки SMS-сообщений через любой известный SMS-сервис. ● E-mail: ssa-company@rambler.ru 113 СТА 3/2016 www.cta.ru В ЗАПИСНУЮ КНИЖК У ИНЖЕ Н Е РА Рис. 11. Примеры сгенерированных SMS-сообщений на смартфоне Рис. 10. VBA-проект разработанного скрипта SMS-информирования

RkJQdWJsaXNoZXIy MTQ4NjUy