SoloScada. Ведение журнала событий в базе данных

Запись данных в базы данных ведется с помощью скриптов. Алгоритм следующий:

  1. Создать скрипт, выполняемый по изменению значения переменной.
  2. Сформировать SQL-запрос в локальной переменной скрипта типа string
  3. Выполнить запрос с помощью функции ExecSQL

У нас есть таблица в базе данных с 2 полями

Data – дата и время; event - события.

Напишем следующий скрипт, запускаемый при изменении значения переменной:

var NewValue:string; // Новое значение переменной

var NamePeremen:string; // Название переменной

var RusNamePeremen:string; // Русское название переменной

var sqlscript,sqlevnt:string;

PrintLn('Количество параметров: '+ IntToStr( ParamCount));//Параметры появляются в режиме исполнения при

//способе запуска по изменению значения

if ParamCount>=3 then //Количество параметров

begin

PrintLn('Новое значение переменной: '+ParamStr(0));

PrintLn('Название переменной: '+ParamStr(1));

PrintLn('Русское название переменной: '+ParamStr(2));

if ParamStr(0)='0' then sqlevnt:=''''+ParamStr(2)+' Отключение'''

else

if ParamStr(0)='1' then sqlevnt:=''''+ParamStr(2)+' Включение''';

sqlscript:='INSERT INTO journal(data, event)'+

'VALUES ('''+ FormatDateTime('yyyy-mm-dd hh.nn.ss.zzz', Now)+''','+sqlevnt +');';

ExecSQL('DB_0',sqlscript);

end;

Затем на вкладке приём/передача данных в свойстве переменной «Скрипт при изменении» выберите из выпадающего списка название нужного скрипта. Информацию о значении и имени переменной скрипт узнает из массива ParamStr.

Теперь отобразим журнал событий из базы данных

В папке web_main расположен пример events.html. Используются библиотеки:

jquery-ui.js, datepicker-ru – для отображения календаря,

angular.js, ui-grid.js – для отображения таблицы (Grid)

events.js – собственная библиотека

Подключаем контроллер angular.js с помощью

Выбор даты календарем реализуем с помощью скрипта

var str = '';

$( function() {

$( "#datepicker" ).datepicker({

showButtonPanel: true,

"dateFormat" : "dd.mm.yy",

onSelect: function(date, datepicker) {

var startDate = $('#datepicker').datepicker("getDate");

var Month_temp = startDate.getMonth()+1;

str ='?p_year='+startDate.getFullYear()+'&p_mounth='+Month_temp +'&p_day='+startDate.getDate() ;

}

});

$( "#datepicker" ).datepicker( $.datepicker.regional[ "ru" ] );

} );

Подключаем табличку

<div ui-grid="gridOptions" ui-grid-selection ui-grid-exporter ui-grid-resize-columns></div>

В файле events.js описан скрипт для работы таблицы. Журнал сервер представляет в json формате. В ответ на запрос events.json?p_year=2017&p_mounth=5&p_day=2 выдается результат:

[{"data":"2017-05-02 11:16:08","event":"В-10-111 Включение"},{"data":"2017-05-02 11:28:36","event":"В-10-111 Отключение"}]

Для представления данных в формате json используется скрипт создания events.json:

var str,parametsjson,p_year,p_mounth,p_day,p_date_start,p_date_end: String;

if ParamCount>=1 then //Количество параметров

begin

parametsjson:=ParamStr(0);// Получить параметры из GET-запроса.

p_year:=GetParamVal(parametsjson,'p_year', IntToStr( YearOf(now)));

p_mounth:=GetParamVal(parametsjson,'p_mounth', IntToStr( MonthOfYear(now)));

p_day:=GetParamVal(parametsjson,'p_day', IntToStr( DayOfMonth(now)));

p_date_start:=p_year+'-'+p_mounth+'-'+p_day+' 00:00:00';

p_date_end:=p_year+'-'+p_mounth+'-'+p_day+' 23:59:59.999';

str:='SELECT *'

+'FROM journal '+

'WHERE (data>'''+p_date_start+''')AND(data <'''+p_date_end+''');';

Print(SQLQueryToJSON('DB_0',str)); //Выполняем запрос, представляем его в JSON и выводим в консоль

end;