Пожалуйста, включите JavaScript для просмотра этого сайта.

Отчеты Simple-Scada

История: Примеры отчетов

Время наработки / простоя

Пред. Вверх След. Еще

Допустим, в проекте имеется насос с единственным параметром "Нагрузка". Во время работы насоса нагрузка изменяется в диапазоне от 0 до 100%. Требуется построить отчёт за произвольный период времени и отобразить в отчёте время, в течение которого насос простаивал (нагрузка равна нулю), работал на холостом ходу (нагрузка от 0 до 40%) и работал под нагрузкой (нагрузка более 40%).

Создадим новый проект в редакторе. Мы будем работать с архивными данными, поэтому можно сразу настроить подключение проекта к базе данных через меню "Проект -> Настройки -> База данных". На мнемосхеме расположим изображение насоса и поле для отображения нагрузки. Создадим два календаря (чтобы пользователь мог выбрать период времени, за который нужно построить отчёт) и кнопку построения отчёта.

 

Для календарей нужно создать две внутренние переменные vrRepFrom, vrRepTo и привязать календари к этим переменным. В результате, переменных будет три: переменная нагрузки vrValue и две переменные для указания периода времени, за который требуется построить отчёт:

 

Проект подготовлен. Теперь можно приступить к решению задачи. Добавим новые внутренние переменные vrStop (для простоя), vrIdle (для холостого хода) и vrWork (для работы под нагрузкой). Тип данных у переменных должен быть Boolean. Также, у них нужно включить архивацию по-изменению. Теперь в проекте имеется шесть переменных:

 

Необходимо сделать так, чтобы переменная vrStop становилась True, когда насос простаивает и False в остальных случаях. vrIdle должна становиться True, когда нагрузка больше нуля и меньше либо равна 40% и False в остальных случаях. vrWork должна быть True, когда нагрузка на насос больше 40% и False в остальных случаях. Всё это легко описать в одном скрипте. Переходим в меню "Проект -> Скрипты" и создаём новый скрипт с типом события "Изменились переменные". После создания скрипта нужно кликнуть в верхнем правом углу кнопку "выбрать переменные" и добавить переменную vrValue. Теперь наш скрипт будет вызываться при каждом изменении переменной нагрузки vrValue. Напишем код скрипта в соответствии с задачей:

begin
  vrStop.Value := vrValue.Value = 0;
  vrIdle.Value := (vrValue.Value > 0and (vrValue.Value <= 40);
  vrWork.Value := vrValue.Value > 40;
end.

 

Сохраним проект и перейдём к созданию отчёта. Запустим редактор отчётов, выберем проект и создадим новый отчёт с именем "Наработка". 

 

Затем добавим в отчет новый источник данных через меню "Источники" - "Новый источник данных":

 

Заполним поля как показано ниже. Обратите внимание на список "Слой". Если планируется строить отчёт за большой период времени, например за год, то вместо основного слоя лучше выбрать один из прореженных слоёв, например часовой. Если строить отчёт за год из основного слоя, то объём данных для обработки будет очень большим и отчёт будет строиться долго.

 

Источник данных создан и теперь отображается в словаре отчёта. Источник будет работать с архивными данными за период от переменной "Данные_Начало" до "Данные_Конец". Переменная "Данные_Интервал" определяет, на какие интервалы времени нужно разбить данные.

 

Нам не требуется разбивать данные на интервалы, так как мы хотим получить время наработки / простоя за весь период отчёта. Поэтому нужно дважды кликнуть переменную "Данные_Интервал" в словаре отчета и в открывшемся окне задать значение 0.

 

Теперь нужно связать переменные отчёта "Данные_Начало" и "Данные_Конец" с переменными проекта "vrRepFrom" и "vrRepTo" соответственно. Кликаем правой кнопкой мыши переменную проекта "vrRepFrom", в открывшемся меню выбираем пункт "Связать с переменной" и связываем с переменной отчёта "Данные_Начало":

 

Аналогично нужно связать переменную проекта "vrRepTo" с переменной отчёта "Данные_Конец". Остаётся добавить переменные vrStop, vrIdle и vrWork в источник данных. Кликаем правой кнопкой мыши переменную проекта "vrStop"и в открывшемся меню выбираем пункт "Добавить в источник":

 

Имя оставим без изменений, а тип обработки выберем "время вкл.", как показано ниже:

 

Тип обработки "время вкл." работает следующим образом: источник данных берёт архивные данные переменной и подсчитывает время, в течение которого переменная была не равна 0 (или False). Полученный результат отображается в источнике данных. В нашем случае (касаемо переменной vrStop) будет подсчитано время простоя насоса. Аналогично добавляем в источник данных переменные vrIdle и vrWork применяя к ним тот же тип обработки. В результате, наш источник данных в словаре отчёта должен выглядеть так:

Остаётся расположить источник данных на странице отчёта. Перетянем источник данных на страницу. В открывшемся окне выберем колонки vrStop, vrIdle, vrWork и включим флажок "Заголовок данных".

 

В итоге, получится такой шаблон отчета:

 

Переименуем заголовки в бэнде "HeaderДанные" следующим образом:

 

Далее, нужно задать формат времени у текстовых полей в бэнде DataДанные. Кликаем по ним правой кнопкой мыши и в раскрывшемся меню нажимаем на иконку форматирования:

Важно! Формат времени HH:MM:CC не позволяет отобразить значения более 24 часов.

Если требуется отображать время наработки более 24 часов, то нужно изменить формат в отчете и отобразить помимо времени ещё и количество дней. Для этого можно выбрать у ячейки стандартный формат:

Тогда значение будет отображаться в формате: "количество_дней.ЧЧ:ММ:СС":

Второй вариант, формировать значение самостоятельно через код выражения(двойной клик по ячейке -> вкладка "Выражение"), например задать для ячейки такое выражение:

{
Данные.vrStop.Days + " дней " +
Данные.vrStop.Hours + ":" +
(Данные.vrStop.Minutes).ToString("00") + ":" +
(Данные.vrStop.Seconds).ToString("00")
}

, где Данные - имя источника данных, vrStop - имя колонки в источнике, из которой нужно взять время. Тогда в отчете время будет отображаться так:

Третий вариант - через выражение задать формат, в котором не будут отображаться дни. Вместо этого будет отображаться полное количество часов:

{
(int)Данные.vrStop.TotalHours + ":" + 
(Данные.vrStop.Minutes).ToString("00") + ":" + 
(Данные.vrStop.Seconds).ToString("00")
}

Тогда результат будет выглядеть так:

 

Отчёт готов, остаётся только настроить его внешний вид, при необходимости изменить шрифты, добавить заголовок и т.д.. В данной статье мы пропустим эти шаги. Сохраним отчёт и вернёмся к редактированию проекта. Выделяем кнопку "Построить отчёт" и дважды кликаем кнопку "..." напротив события "OnClick", чтобы создать соответствующий скрипт:

 

В коде скрипта вызываем построение и отображение отчёта:

var
  aReport: TM_Report;
begin
  aReport := ReportBuild('Наработка'); // построить отчёт
  aReport.View(GetClientName);         // открыть для просмотра
end.

Процедура "ReportBuild" формирует отчёт с заданным именем и возвращает результат в переменную aReport. В следующей строке мы открываем отчёт для просмотра используя метод View. Теперь сохраним и запустим проект. Подключимся клиентом к проекту, выберем время начала и время конца в календарях и нажмём кнопку "Построить отчёт". Сервер передаст данные отчёта клиенту, после чего откроется окно просмотра отчёта. Из этого окна пользователь может сохранить отчет в одном из доступных форматов (PDF, HTML, HTML5, Word, Excel, CSV, txt и т.д.), а также распечатать его, выполнить поиск и т.д. Соответствующие кнопки расположены в верхней части окна. При необходимости, можно формировать отчёт и сохранять его на клиентский или серверный ПК в нужном формате - подробнее см. по ссылке.