Отчет о наработке в моточасах
Для подготовки отчета о времени наработки агрегата рассмотрим пример части технологического процесса работы насосов. Тип создаваемого отчета — периодический.
В качестве активных в проект необходимо добавить следующие теги:
| Тег | Тип данных | Описание |
|---|---|---|
| Насос 1 | Boolean |
Работа насоса 1 |
| Насос 2 | Boolean |
Работа насоса 2 |
| Насос 3 | Boolean |
Работа насоса 3 |
| Начало периода | DateTime |
Начало периода времени, за который требуется сформировать отчет |
| Конец периода | DateTime |
Конец периода времени, за который требуется сформировать отчет |
| Время наработки Н1 | Double |
Время наработки насоса 1 (секунды) |
| Время наработки Н2 | Double |
Время наработки насоса 2 (секунды) |
| Время наработки Н3 | Double |
Время наработки насоса 3 (секунды) |
| Сброс времени наработки | Boolean |
Обнуление значения времени наработки |
Примечание
Перед созданием отчета необходимо:
- Включить архивацию для тегов "Время наработки Н1", "Время наработки Н2" и "Время наработки Н3", установив флаг "Активность" в свойстве "Сохранение в БД".
- Для каждого тега отключить флаг "Сохранить только в пределах шкалы".
В новом проекте по умолчанию шкала имеет максимальное значение диапазона, равное 100. Поскольку предполагается архивировать значения, превышающие этот предел, необходимо либо отключить опцию сохранения в пределах шкалы, либо установить для неё новое максимальное значение.
- Заблаговременно развернуть проект на сервере, чтобы обеспечить накопление исторических данных в базе.
Пример:
Составить отчет за временной промежуток не превышающий 24 часа, ограниченный значениями тегов "Начало периода" и "Конец периода". В отчет необходимо вывести исторические данные тегов "Время наработки Н1", "Время наработки Н2" и "Время наработки Н3".
Добавим новую мнемосхему в проект. С помощью полей для ввода будем указывать начальный и конечный периоды, а также формировать отчет и выполнять сброс времени наработки.
На мнемосхеме разместите анимированные фигуры насосов из "Общей галереи". Для тегов "Начало периода" и "Конец периода" используйте компонент "Ввод даты и времени" из "Палитры компонентов". Кроме того, добавьте две "Многофункциональные кнопки" из "Общей галереи" и определите им действие:
- "Сгенерировать отчет" для кнопки "Отчет".
- Записать значение в тег (без фиксации) для кнопки "Сброс часов наработки".

В примере расчет моточасов наработки производится внутри "Симплайт 5". Для этого потребуется написать скрипт, который будет вычислять время работы каждого насоса в секундах. В скрипте потребуется самостоятельно добавить библиотеку для работы с временем наработки тега.
-- Подключение модулей
local async = require("async")
local motoHours = require("lib.motoHours")
local tagApi = require("simplight.api.channels.sync")
-- Массив насосов
local pumps = {
{key = "p1", name = "Насос 1", desc = "Насос 1"},
{key = "p2", name = "Насос 2", desc = "Насос 2"},
{key = "p3", name = "Насос 3", desc = "Насос 3"}
}
-- Таблица для хранения моточасов
local pumpWatchers = {}
for _, pump in ipairs(pumps) do
pumpWatchers[pump.key] = motoHours.watch({
watchTagName = pump.name,
resetTagName = "Сброс времени наработки",
})
end
-- Вычисление времени наработки насосов в секундах
setInterval(function()
local t1 = math.floor(pumpWatchers.p1.getTotalWorkTime() / 1000)
local t2 = math.floor(pumpWatchers.p2.getTotalWorkTime() / 1000)
local t3 = math.floor(pumpWatchers.p3.getTotalWorkTime() / 1000)
-- Запись значений времени наработки в теги
tagApi.writeMany({
values={
{ name="Время наработки Н1", value = t1, quality = 0xC0 },
{ name="Время наработки Н2", value = t2, quality = 0xC0 },
{ name="Время наработки Н3", value = t3, quality = 0xC0 },
}})
end, 1000)

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

В словаре отчета будет добавлен источник данных "Данные" с единственной колонкой "Время". Также будут определены три переменные: "Данные_Начало", "Данные_Конец" и "Данные_Интервал".
Теперь система будет передавать в этот источник только те данные из архива, которые находятся в интервале времени от значения переменной "Данные_Начало" до значения переменной "Данные_Конец". Все остальные данные, находящиеся вне этого временного промежутка, не будут включены в источник.

Далее свяжите теги проекта "Начало периода" и "Конец периода" с соответствующими переменными источника "Данные_Начало" и "Данные_Конец". В процессе формирования отчета значения переменных "Данные_Начало" и "Данные_Конец" будут автоматически заменены на значения тегов проекта "Начало периода" и "Конец периода" соответственно. Это позволит источнику "Данные" оперировать заданным временным периодом.


В источнике добавьте три колонки, соответствующие поставленной задаче: "Время наработки Н1", "Время наработки Н2", "Время наработки Н3".
На данном этапе добавьте в источник тег времени наработки насоса 1. Для этого нажмите правой кнопкой мыши на переменной "Время наработки Н1" и выберите пункт "Добавить в источник".

В диалоговом окне добавления новой колонки выберите источник "Данные", тип обработки "Последнее значение" и назовите новую колонку "Время наработки Н1". Для данного тега в отчет будет передано значение, которое было зафиксировано последним в указанном интервале.

Выполните аналогичные действия для тегов "Время наработки Н2" и "Время наработки Н3", присвоив им соответстующие имена и тип. После выполнения всех действий структура словаря должна выглядеть следующим образом.

Чтобы изменить интервал, с которым генератор отчета будет извлекать значения из базы данных, внесите изменения в переменную "Данные_интервал". Для этого дважды нажмите левой кнопкой мыши по данной переменной в словаре. В диалоговом окне "Изменение переменной" установите значение 86400 секунд, что соответствует 24 часам. Данный интервал выбран с целью формирования в отчете только одной строки с последними архивируемыми значениями.
Примечание
Существует возможность связать переменную с целочисленным тегом проекта и отобразить ее на мнемосхеме, чтобы оператор мог выбирать не только время начала и окончания отчета, но и временной интервал.

На данном этапе добавьте заголовок к отчету. Для этого воспользуйтесь кнопкой "Секции" "Панели инструментов", либо активируйте меню "Вставить". Заголовок выводится один раз в начале отчета, перед другими бэндами.

После переноса заголовка он автоматически расположится в верхней области отчета. Теперь в зоне бэнда "Заголовок отчета" требуется разместить элемент "Текст" заголовка.

Откроется окно редактирования текста. В нем укажите название для заголовка, а также перенесите переменную "Данные конец", чтобы автоматически сформировать актуальную дату и время в шапке отчета.

Бэнд "Данные" является одним из наиболее часто используемых бэндов. Он берет данные из источника, с которым связан, и выводится столько раз, сколько строк в источнике данных. Перетащите источник "Данные" в шаблон отчета.

В диалоговом окне "Данные" установите флаги для всех колонок, а также активируйте флаг "Заголовок данных".

В колонке "Время" удалите переменную, добавленную по умолчанию и перенесите в данную ячейку переменную "Данные_Конец", чтобы выводить актуальное время для конца периода.

С помощью инструментальной панели определите требуемое форматирование для текста и всех ячеек отчета.

Если все настройки выполнены корректно, то при активировании предварительного просмотра отчета появятся значения о наработке в секундах.

Для пересчета в минуты выйдите из режима просмотра. Нажмите два раза левой кнопкой мыши на переменной "Время наработки Н1", перейдите на вкладку "Выражение" и добавьте арифметическое действие внутри фигурных скобок. Для остальных переменных проделайте аналогичные действия.

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

Чтобы изменить формат вывода значения, нажмите левой кнопкой мыши на переменной в столбце, выберите вкладку "Свойства" и в поле формат нажмите на кнопку ✏️.

В диалоговом окне "Формат" укажите количество знаков дробной части в соответствующем поле.

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