Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: bacchus1 от 22 Мая 2019, 18:01:55

Название: Добавление сообщений/алармов в отчет
Отправлено: bacchus1 от 22 Мая 2019, 18:01:55
Добрый день!
Хотелось бы добавить в отчет алармы. Кроме того требуется фильтровать алармы, т.е. добавить алармы, например по типу (авария, предупреждение) и по ID. каким образом это можно сделать? Только добавлением в отчет данных из внешний источников. Если да, то можно ли получить описание БД хранения сообщений.
Попутный вопрос: можно ли фильтровать алармы в списке сообщений? Есть много однотипных объектов и хотелось бы для каждого отображать свои сообщения на текущей мнемосхеме.
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: Simple-Scada от 23 Мая 2019, 09:43:46
Здравствуйте.

Да, для вывода списка сообщений нужно использовать внешний источник. Т.е. всё нужно делать как описано в этой статье (https://simple-scada.com/help/report/rep-user-data.html), только работать нужно с таблицей "messages_data". Эта таблица состоит из следующих колонок:
В данный момент в редакторе скады можно выделить любую группу сообщений и в списке свойств увидеть ID-группы и на его основе сделать выборку всех сообщений группы. Но ID-сообщений сейчас не выводится в редакторе, поэтому по конкретному сообщению выборку будет сделать проблемно. Мы добавим вывод ID-сообщений в ближайшем обновлении.
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: bacchus1 от 23 Мая 2019, 18:36:27
Видимо не совсем точно сформулировал вопрос. В редакторе я вижу ID группы. Я хочу вставить на мнемосхему элемент Список сообщений и в его параметрах указать какую группу сообщений он должен показывать. Сейчас возможно вывести сообщения: Все, Неподтвержденные, Активные. А хотелось бы, чтобы в этом списке присутствовали другие, созданные мною группы.
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: Simple-Scada от 24 Мая 2019, 11:19:35
Сейчас компонент сообщений может работать только с группами Все, Неподтвержденные, Активные. Возможность выбора остальных групп появится в будущих обновлениях.
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: bacchus1 от 28 Мая 2019, 10:03:50
Есть еще одно пожелание. Когда я создаю самостоятельно сообщения, то я разделяют сообщения по группам самостоятельно. Когда для аналоговых сигналов в редакторе я задаю пределы для формирования сообщений, то нет возможности их привязать к нужной группе сообщений. Сейчас в редакторе сообщений можно вручную числом задать предел формирования сообщения, что неудобно, т.к. под это у переменной есть "границы".
Хотелось бы, чтобы всем сообщениям можно было задать группу.
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: alan54 от 12 Июня 2019, 13:17:20
Что-то не могу понять, как добавлять свои сообщения. При клике на панель сообщений внизу страницы не открывается редактор сообщений. Что я делаю не так?
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: Simple-Scada от 13 Июня 2019, 09:51:02
alan54, в любое меню можно перейти через меню "Проект". К сообщениям: "Проект -> Сообщения" (https://simple-scada.com/help/manual/menu-project.html). По нажатию на панель сообщения тоже должен выполняться переход в меню сообщений. Может быть панель сообщений перекрыта каким-то объектом (например объектом с прозрачностью и поэтому он незаметен). Можете сказать какое разрешение (https://simple-scada.com/help/manual/menu-project.html) имеет Ваш проект?
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: alan54 от 13 Июня 2019, 11:09:01
alan54, в любое меню можно перейти через меню "Проект". К сообщениям: "Проект -> Сообщения" (https://simple-scada.com/help/manual/menu-project.html). По нажатию на панель сообщения тоже должен выполняться переход в меню сообщений. Может быть панель сообщений перекрыта каким-то объектом (например объектом с прозрачностью и поэтому он незаметен). Можете сказать какое разрешение (https://simple-scada.com/help/manual/menu-project.html) имеет Ваш проект?
Через меню Проект -> Сообщения редактор открывается, а при клике на панель открывается на весь экран панель сообщений. Как туда вводить сообщения с клавиатуры? Мне нужно, чтобы оператор записывал сообщения о причинах простоев оборудования непосредственно из клиента. Может, это реализуется как-то по-другому?
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: Simple-Scada от 13 Июня 2019, 21:17:29
В меню "Сообщения" на клиентах только отображаются сообщения которые были выданы ранее, либо выдаются сейчас. Функций редактирования и полей ввода нет в этом меню. Но можно организовать добавление новых произвольных сообщений через поля ввода и процедуры AddMessage (https://simple-scada.com/help/script/addmessage.html) и AddMessageToGroup (https://simple-scada.com/help/script/addmessagetogroup.html). Для этого cоздайте в меню "Переменные - Редактировать" (https://simple-scada.com/help/manual/variable-editor.html) новую внутреннюю переменную с типом данных "String" и именем vrUserMessage. Затем разместите на мнемосхеме компонент Поле и привяжите его к переменной vrUserMessage. Добавьте на мнемосхему компонент Кнопка и на событие OnClick напишите следующий код:
Код: (delphi)
begin
  { добавляем введённый текст в список сообщений (группа "Все сообщения"), не
    отображая его в неподтверждённых сообщениях }
  AddMessage(Now, mkMessage, fldUserMessage.AsStr, FALSE, FALSE);
end.
, где fldUserMessage - это имя Поля в которое осуществляется ввод.
Теперь оператор сможет вводить любое сообщение в поле и по нажатию на кнопку отправлять его в список сообщений. А используя процедуру AddMessageToGroup (https://simple-scada.com/help/script/addmessagetogroup.html) можно реализовать добавление сообщений в какую-то конкретную группу сообщений. Таким образом можно реализовать отдельный журнал произвольных сообщений.
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: alan54 от 13 Июня 2019, 21:52:34
Все получилось, спасибо большое!
P.S. Правда, пока не получается вывести это поле в отчет - ругается: "Не удалось получить данные для колонки vrUserMessage... Вероятно, у данной переменной не включена архивация". Хотя архивация "По изменению" включена. Подскажите, плиз, что еще надо сделать! Может, не городить огород с добавлением в сообщения, а просто сохранять сообщение как строковую переменную в архиве? Сейчас, как я понял, запись оператора уходит в сообщения, но не архивируется.
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: Simple-Scada от 14 Июня 2019, 21:22:06
Архивация массивов и переменных типа string (это тоже массив (символов)) невозможна. Кроме того, если вы добавляете сообщения через AddMessage, то они будут автоматически архивироваться в БД, в таблицу сообщений с именем "messages_data". Все сообщения добавленные через процедуры AddMessage и AddMessageToGroup помечаются MessageID в диапазоне от 999967 до 999999. Чтобы вывести их в отчет, нужно использовать отдельный источник данных, как в этой статье (https://simple-scada.com/help/report/rep-user-data.html). Только не нужно создавать свою таблицу как описано в статье, можно сразу добавить источник данных MySQL и брать данные из таблицы "messages_data". А запрос на выборку нужно изменить добавив выборку только тех сообщений у которых MessageID >= 999967, вот так:
Код: (sql)
select * from messages_data
where (timestamp >= @vrTimeBegin) and (timestamp <= @vrTimeEnd)
and (MessageID >= 999967)
в результате источник данных будет содержать список сообщений добавленных через процедуры AddMessage и AddMessageToGroup за период от vrTimeBegin до vrTimeEnd.

Второй вариант, создать отдельную пустую группу сообщений и добавлять сообщения пользователей конкретно в эту группу, через AddMessageToGroup, а затем брать данные также, как описано выше, только выборку осуществлять по колонке "GroupID":
Код: (sql)
select * from messages_data
where (timestamp >= @vrTimeBegin) and (timestamp <= @vrTimeEnd)
and (GroupID = 77)
, где 77 - это ID группы в которую добавляются пользовательские сообщения.

Третий вариант, создать в БД отдельную таблицу с какой угодно структурой и добавлять в неё новые записи через пользовательские SQL-запросы (процедура RunSQL (https://simple-scada.com/help/script/workbd.html)). Как создать свою таблицу и как вывести её в отчет также описано в этой статье (https://simple-scada.com/help/report/rep-user-data.html).
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: alan54 от 14 Июня 2019, 22:03:49
Спасибо за очень подробный и толковый ответ. Правда, в его ожидании я время не терял и догадался создать источник данных MySQL с таблицей messages_data. Но до фильтров по ID я не допер, так что еще раз спасибо.
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: alan54 от 21 Июня 2019, 20:33:56
Еще такой вопрос - как удалить пользовательские сообщения? Во время тестирования я натыкал кучу сообщений, а как их удалить средствами редактора?
P.S. Ответа не дождался, удалил средствами MySQL Workbench. Видимо, по-другому нельзя.
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: Simple-Scada от 24 Июня 2019, 23:24:55
Все верно, удалить можно средствами MySQL Workbench отправив запрос на удаление с выборкой по времени и ID. То же самое можно сделать из проекта через RunSQL. В целом работа с данными в БД ведётся только через SQL-запросы.
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: alan54 от 31 Июля 2019, 16:41:39
Еще один вопрос - как связать данные из таблиц trends_data и messages_data и вывести их в один отчет? Например, из trends_data в отчет выводится простой линии более 10 мин., а из messages_data в эту строку надо вывести записанную оператором причину простоя.
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: Simple-Scada от 01 Августа 2019, 10:10:23
Еще один вопрос - как связать данные из таблиц trends_data и messages_data и вывести их в один отчет? Например, из trends_data в отчет выводится простой линии более 10 мин., а из messages_data в эту строку надо вывести записанную оператором причину простоя.
trends_data и messages_data это таблицы с разными структурами, поэтому просто объединить их в одну таблицу будет проблематично. Можно создать пользовательских источник данных и описать собственные выборки в которых можно попытаться объединить таблицы примерно как описано здесь (http://kreker.org/items/5), но скорее всего нужный Вам результат получить не удастся, ведь строки в разных таблицах нужно соотносить по времени и это превратится в сложнейшую задачу.
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: alan54 от 05 Августа 2019, 17:02:26
Здравствуйте.
Второй день бьюсь над проблемой соединения таблиц trends_data и messages_data и записи полученных данных в пользовательскую таблицу idle_data. Проблема в том, что созданный запрос работает в MySQL Workbench, но ни в какую не хочет в проекте. Ошибок никаких при компиляции и в журнале нет. Вот текст скрипта:   
Код: (delphi)
var
  aQuery: string;                 // сам запрос
  aFrom, aTo: TDateTime;          // интервал времени в формате TDateTime
  aFromStr, aToStr: string;       // интервал времени в виде строки
begin
   RunSQL('TRUNCATE idle_data', nil, 100);
   aFrom := vrTimeBegin.Value;
   aTo := vrTimeEnd.Value;
   aFromStr := MySQLDateTime(aFrom, dttFull);
   aToStr := MySQLDateTime(aTo, dttFull);
   aQuery := 'REPLACE INTO idle_data (timestamp, value, message) ' +
             'SELECT a.timestamp, a.value, b.text FROM trends_data a ' +
             'LEFT JOIN messages_data b ' +
             'ON DATE_FORMAT(a.timestamp, "%Y %m %d %H %i %S") = ' +
             'DATE_FORMAT(b.timestamp, "%Y %m %d %H %i %S") ' +
             'WHERE (a.timestamp >= ' + aFromStr + ') AND (a.timestamp <= ' + aToStr + ') ' +
             'AND (a.ID = 31);';
    RunSQL(aQuery, nil, 30);
end.
Подскажите, плз, в чем моя ошибка?
Название: Re: Добавление сообщений/алармов в отчет
Отправлено: Simple-Scada от 06 Августа 2019, 10:19:36
Здравствуйте.
Для компилятора и для скады SQL-запросы представляют собой текст, поэтому на этапе компиляции ошибки никогда не будут выдаваться, скада просто передаёт текст SQL-запроса в СУБД в неизменном виде. Компиляцию и проверку SQL-запросов выполняет СУБД (в разных СУБД используется разный синтаксис). В случае успешного выполнения запроса в скаду передаётся результат и скада выполняет скрипты с типом события "Выполнен SQL-запрос" (https://simple-scada.com/help/script/sql-query-completed.html). В случае ошибки, текст ошибки также передаётся в скаду и скада выполняет скрипты с типом события "Ошибка SQL-запроса" (https://simple-scada.com/help/script/sql-query-error.html). Поэтому, чтобы вывести на мнемосхему сообщение об ошибке, нужно использовать скрипт с типом события "Ошибка SQL-запроса" (https://simple-scada.com/help/script/sql-query-error.html). Либо второй вариант: выполнить SQL-запрос от имени таблицы например: "Table1.RunSQL (https://simple-scada.com/help/script/trunsql.html)(aQuery, tsAll);", тогда в случае ошибки скада автоматически отобразит текст ошибки в области ячеек таблицы.