Делаем свой журнал (архив) алармов в Citect

Почему «делаем» — потому что его там фактически нет. 74635e2b0d994074a9e60aef459726d6.jpg
Почему «свой» — на случай, если кто-то в комментариях выкатит некую «сущность», выдавая её за журнал/архив алармов.
Это не готовая инструкция, а скорее направление действия, поэтому тега tutorial нет.


Журнал алармов будем делать на основе web-сервер apache, интерпретатор языка php, БД SQLite.
Сам журнал состоит из:


1) файла alarmlog.db — содержит архив тревог;
2) web-сервер apache — обрабатывает наши http запросы из web-морды со страницы SCADA системы;
3) файловов (.html, .php и т.д.) в папке, например, «C:\alarmlog_ostrov»;
4) ODBC драйвера SQLite.


В папке C:\alarmlog_ostrov у нас лежат:


1) папка img — там картинка календарика;
2) папка css — красоту наводим стилями;
3) папка js — JavaScript календаря, взят готовый на просторах интернета;
4) alarmlog.db — сама БД, куда Citect складывает свои алармы;
5) front_end.html — фронт-энд нашего журнала;
6) index.php — самый важный файл;
7) my_lib.inc — файл c собственными функциями на php;
8) sqlite3_connect.php — механизм подключения к БД, наружу в index.php всегда «торчим» унифицированным интерфейсом, независимо от используемого типа БД (вообще таких файлов несколько — под каждый тип БД).


УСТАНОВКА WEB-СЕРВЕРА APACHE


Установку описывать не буду — там все просто. Я использовал httpd-2.2.25-win32-x86-openssl-0.9.8y.msi.


Главное чтоб в трее появился знакомый значок 1787532d26ac487ab21b85379b513519.png
и в файле настроек C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\ httpd.conf были следующие настройки:


1) ServerRoot «C:/Program Files (x86)/Apache Software Foundation/Apache2.2»
2) Listen 80
3) LoadModule php5_module «c:/PHP/php5apache2_2.dll» (c учетом, что PHP у нас в корне диска C:)
4) AddType application/x-httpd-php .php
5) DocumentRoot «C:\alarmlog_ostrov» c учетом, что наш журнал располагается в этой папке.


УСТАНОВКА ODBC ДРАЙВЕРА SQLITE


Установка несложна. Я использовал файл sqliteodbc_0.996.exe. Драйвер необходимо использовать 32 битный (даже, если используете 64-битную ОС).


В окне «Choose Components» необходимо выбрать пункт «SQLite 2 Drivers».


0da1b7ee281b4a9cad897317bd7d818d.png

Установленный драйвер ODBC можно наблюдать в Администраторе источников данных ODBC.


eceb91efc94e452fb6c10082fd61b1e8.png.


УСТАНОВКА ИНТЕРПРЕТАТОРА ЯЗЫКА PHP


Я использовал вариант c файлом-архивом PHP_5.4.26.zip, распаковал в папку С:/PHP.
Файл настроек php.ini необходимо хранить в папке C:/Windows .


НАСТРОЙКА ODBC ПОДКЛЮЧЕНИЯ


Связь SCADA системы с файлом БД журнала тревог осуществляется посредством ODBC. Необходимо сконфигурировать источник данных в Администраторе источников данных ODBC.


Настраивается источник данных ODBC в Администраторе источников данных ODBC (файл C:\Windows\SysWOW64\odbcad32.exe).


В окне Администратора источников данных ODBC перейти на вкладку «СИСТЕМНЫЙ DSN».


c65faa3ea3b04dafa3a37a57d4ac5735.png

Для добавления источника данных ODBC необходимо нажать кнопку «Добавить», из списка выбрать SQLite 3 ODBC Driver, нажать кнопку «Готово».


Для ODBC подключения необходимо задать следующие параметры:


1) Source Name — ALM_LOG_OSTROV;
2) Database Name — C:\alarmlog_ostrov\alarmlog.db;
3) Lock Timeout (ms) — 5000;
4) Sync Mode — OFF;
5) NoWCHAR — поставить флажок/галку;


fd4fe5369b934df98903a2f8d90b5ac3.png

Чтобы SCADA система имела доступ на запись к файлу C:\alarmlog_ostrov\alarmlog.db, ему надо дать права вида «Пользователь: Все — полный доступ».


В самой SCADA нам необходимо в Devices создать устройство, например, alm_log_db типа SQL_DEV.


d6cd8a770a3e417e90d2e3bec0668ff3.png

В категориях алармов необходимо указать наше устройство alm_log_db.


70c76e62b9fc4c67ab9ca747d5ac596a.png

Раньше использовали Citect 7ю0 под Windows XP и журнал открывали в стороннем приложении Firefox. Потом перешли на Windows 7 и Citect 7.3 (сейчас 7.5) и на графической странице журнала используем ActiveX элемент Microsoft Web Browser.


2dfbfd7e1e9143b0876eb61dfceabad2.png.


В событиях страницы на «On Shown» ставим самописную функцию-обертку, которая в ActiveX элемент прописывает нужный web-адрес.


b457ed3c7e884b62b13a33be9c1f50da.png

В рантайме это выглядит так.


10356277.jpg

Содержимое самой БД выглядит так:


f8f62ae590c64b9c862d28683310c581.png
2d1be5c2bebb4381b0b7f52025b6fbba.png

Делалась попытка объединить алармы c фактами квитирования через две таблицы и механизм представлений, но на целевой машине это очень тормозило (на виртуалке разработчика никаких тормозов).


fa0d9770792543fb9fe6fc32c2e68728.png

Вышли из положения установкой параметра в citect.ini, который в алармы вписывает не только On, Off, но еще и Аск событие изменения состояния аларма.


Тот самый календарь на JavaScript.


3c8c5f85b01041eeb98c18618b4b6acc.png

Окно календаря журнала тревог предоставляет следующий интерфейс пользователя:


1) выпадающий список выбора месяца;
2) выпадающий список выбора года;
3) индикатор выбранных года и месяца;
4) текущий день месяца;
5) выбранный день месяца (после клика на день окно закрывается автоматически);
6) кнопка закрытия окна календаря журнала тревог.


Журнал тревог имеет возможность печати результат выборки. Для этого необходимо воспользоваться пунктом «Печать…» контекстного меню, которое вызывается кликом правой кнопкой мыши на полотне журнала.


f1c431a650124f329d9cd0e31da8105d.png

При установленном PDFCreator получаем прекрасный механизм экспорта в pdf.


Предварительный просмотр позволяет отрегулировать внешний вид печатного документа.


394c96d4a69741e38613903b1d97f82c.png

Комментарии (1)

  • 2 марта 2017 в 10:23 (комментарий был изменён)

    –1

    Интересный подход для промышленного изделия: Возьмем недоSCAD’у без базовой функциональности и прикрутим эту функциональность с помощью самодельного г. и палок. Вавилонская башня: вебсервер + php+ sqlite+ бета-версия ODBC драйвера+ activeX.

    Самоделки в промышленности — это не то, что хотелось бы иметь для категорийных по энергоснабжению объектов.

    1. Это что, с трендами (БД и графики аналоговых параметров, сленг) такая же пляска в Citect?

    2. БД непрерывно работающего объекта имеет свойство переполняться (особенно с приведенной структурой БД, хранящей все в текстовых полях). Но хранить последние год/три все равно надо. Как планируется сегментация/очистка/контроль размера?

    3. Неужели при таком разнообразии SCADA систем, в Питер не завезли адекватную? Как производился выбор?

© Habrahabr.ru