Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Архивация по условию и отчеты с текстовыми полями  (Прочитано 2787 раз)

Izergill

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Добрый день!
Подскажите как решить задачи, не знаю с какой стороны зайти. Существует необходимость архивирования параметров процесса сушки зерна и вывод отчета по форме аналогичного журналу сушильщика. Образовалось 2 задачи.
Задача №1 - какие настройки выполнить чтобы переменные архивировались только когда запущен процесс сушки. Потенциально сервер SimpleScada будет работать постоянно, а вот сушка будет осуществляться периодически. В процессе сушки необходимо архивировать технологические параметры с заданным интервалом. Есть переменная - признак работы сушилки.
Задача №2 - как можно вывести в столбце отчета имя пользователя (он же оператор)? Эта необходимость обусловлена тем, что оператор может поменяться в процессе сушки.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3146
    • Просмотр профиля
    • Simple-Scada
Здравствуйте.

Цитировать
Задача №1 - какие настройки выполнить чтобы переменные архивировались только когда запущен процесс сушки. Потенциально сервер SimpleScada будет работать постоянно, а вот сушка будет осуществляться периодически. В процессе сушки необходимо архивировать технологические параметры с заданным интервалом. Есть переменная - признак работы сушилки.
Если Вы хотите вывести данные за период работы сушки в отчет, то нет необходимости прерывать процесс архивации. Обычно архивация переменных включена во время работы проекта, а в отчет делаются выборки за нужный период времени (в Вашем случае выборка за период работы сушилки). Недавно мы опубликовали пример реализации отчета по циклам который возможно подойдёт Вам. В примере процесс также запускается периодически (архивация тех. параметров при этом постоянная), но в отчет выводятся только данные за время процесса.

Если архивация по-условию требуется для каких-то других целей, то можно предложить следующее решение: пусть у нас есть переменные vrA, vrB, vrProcess (у всех архивация выключена). Нужно, чтобы переменные vrA и vrB архивировались только когда vrProcess = True. Тогда можно создать две внутренние переменные vrA1, vrB1 и включить у них архивацию по-изменению. Далее переходим в меню скриптов и создаём новый скрипт с типом события "Изменились переменные". В список переменных этого скрипта вносим переменные vrA и vrB и пишем такой код:

Код: (delphi)
begin
  if vrProcess.AsBool = False then Exit;  // прерываем выполнение, если vrProcess равна False
 
  if Variable = vrA then           // если изменилась переменная vrA
    vrA1.Value := Variable.Value;  // копируем значение vrA в vrA1

  if Variable = vrB then           // если изменилась переменная vrB
    vrB1.Value := Variable.Value;  // копируем значение vrB в vrB1
end.

В результате получается, что значения из vrA и vrB копируются в vrA1 и vrB1 только когда переменная процесса (vrProcess) включена. В то же время скада архивирует vrA1 и vrB1, т.к. у них включена архивация по-изменению.

Цитировать
Задача №2 - как можно вывести в столбце отчета имя пользователя (он же оператор)? Эта необходимость обусловлена тем, что оператор может поменяться в процессе сушки.
Уточните, в процессе сушки оператор может измениться несколько раз, верно? Т.е. в отчете нужно отобразить все авторизации всех пользователей за период работы сушки?
« Изменён: 26 Мая 2018, 13:33:05 от Simple-Scada »

Izergill

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Да, верно, оператор может смениться несколько раз.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3146
    • Просмотр профиля
    • Simple-Scada
Izergill, сейчас авторизация пользователей попадает только в таблицу сообщений (messages_data) и помечается кодом равным 4 (Kind = 4). Поэтому в отчете можно создать новый пользовательский источник данных с именем, например "Users" (о добавлении пользовательских источников данных можно прочесть здесь) с таким кодом запроса:

Код
SELECT `timestamp`, `text` FROM `my_db`.messages_data 
WHERE (`kind`=4) AND (`timestamp` >= @vrFrom) AND (`timestamp` <= @vrTo);

Такой источник будет содержать все строки с авторизацией пользователей за весь период отчета. Если у Вас отчет по циклам как в этой статье, то новый источник нужно перетянуть на страницу, кликнуть его ПКМ и выбрать пункт "Редактировать", затем на вкладке "Master компонент" выбрать мастером бэнд "DataЦиклы", а на вкладке "Фильтры" создать новый фильтр с таким выражением:

Код
(Users.timestamp >= Циклы.vrCycleStart) && (Users.timestamp <= Циклы.vrCycleEnd)

Теперь для каждого цикла будут выводиться все строки с авторизацией пользователей за период работы цикла. Но у такого способа есть существенный недостаток. Если за время работы цикла ни один пользователь не авторизовался, то для этого цикла ничего не выведется. Поэтому в ближайшем обновлении мы внесем несколько изменений в скаду, которые позволят обойти это ограничение. Также мы дополним статью отчета по циклам и добавим вывод сообщений с авторизацией пользователей для каждого цикла.

Izergill

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Спасибо, понял.
Когда можно будет ожидать обновление с добавленным функционалом?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3146
    • Просмотр профиля
    • Simple-Scada
В ближайшем обновлении появится такая возможность. Точную дату сейчас трудно назвать, постараемся по возможности быстрее сделать сборку и опубликовать.

Izergill

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Добрый день!
Вопрос о добавлении в отчет имени пользователя актуален. В новых обновлениях удалось решить обозначенную выше проблему?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3146
    • Просмотр профиля
    • Simple-Scada
Здравствуйте.

Цитировать
Вопрос о добавлении в отчет имени пользователя актуален. В новых обновлениях удалось решить обозначенную выше проблему?
Извиняемся за задержку с ответом. Да, начиная с версии 2.2.7.0 мы добавили в скрипты с типом события "Авторизация пользователя" параметр "auLogin" (логин под которым авторизовался пользователь). Благодаря этому можно реализовать архивацию любого успешного входа в систему и затем использовать эти данные в отчете с источником данных "по-изменению". Можете выслать нам текущую версию проекта на support@simple-scada.com с указанием отчета в который нужно добавить авторизации пользователей? Мы могли бы описать процесс реализации под Ваш проект.