WINNUM Community
Как получить расчеты тегов за длительные периоды - Версия для печати

+- WINNUM Community (https://community.winnum.io)
+-- Сообщество Все сообщества (https://community.winnum.io/forumdisplay.php?fid=1)
+--- Сообщество Динамические приложения в WINNUM Platform (https://community.winnum.io/forumdisplay.php?fid=2)
+--- Темы: Как получить расчеты тегов за длительные периоды (/showthread.php?tid=12)



Как получить расчеты тегов за длительные периоды - Lamantur - 02-16-2024

Для построения отчетов за длительные периоды в WINNUM используется блокчейн. 

 Длительности тегов рассчитываются в конце каждого дня для построения длительных отчетов. 
Эти же значения можно использовать в динамических приложениях, что позволяет использовать данные вместо многочисленных запросов и сокращать время выполнения команд. 

 Так, например, для получения суммарного времени работы под нагрузкой для конкретного станка можно использовать функцию getPriorityTagDuration, в результате мы получим массив из промежутков, когда тег выполнялся с учетом приоритетности, но если временной интервал указать больше двух-трех дней, то результатом будет огромный массив и выполнятся такой запрос может достаточно долго, может даже не хватить оперативной памяти, выделенной под работу браузера и получить зависание всей страницы.

 Что же делать, если нас интересует график загрузки оборудования за год? Для этого работают роботы приложений. Рассчитанное значение тегов за каждый день уже с учетом приоритетности и календаря записано роботом. Для получения этих значений достаточно воспользоваться стандартной функцией getSignal, и указать вместо сигнала адрес в структуре блокчейн.

 Общая структура запроса:
[App ID].[Tag ID].[тип расчета].[тип значения] = значение

Типы расчета:
SCHED_PRIO – с приоритетностью по календарю
SCHED_NOPRIO - без приоритетности по календарю
REG_NOPRIO - без приоритетности без календаря

Типы значений:
PER – проценты, HOUR –
часы


Пример: 17.145.SCHED_PRIO.HOUR
17 – ID приложения
145 – ID тега
SCHED_PRIO – расчет по календарю с учетом приоритетности
HOUR – результат получить в миллисекундах суммарно по всем сменам

Код:
var UUID = "GHIKFKGL-IR85-85JR-JGHUTKOL" ;// UUID - это ключ идентификатор продукта (станка)
var  tagsPriorityID = '6.1.SHED_PRIO.HOUR'; //Из приложение 6 получаем тег NC_WIP с учетом приоритетности по календарю в миллисекундах
var  dateFrom = "2022-12-12 00:00:00";
var dateTo = "2024-02-26 15:40:00";
var wipResult; // Результат за все время положим сюда

baseSdkUtils.service.WNConnectorHelper.getSignal(UUID, tagsPriorityID, false, false, dateFrom, dateTo,'',function(data){
  if (baseSdkUtils.isSuccess(data) ){
    for (var t = 0; t < data.getElementsByTagName('item').length; t++){

                  var itemT = data.getElementsByTagName('item')[t];
                        var valueT = Math.round((((parseFloat(itemT.getAttribute('value'))/3600000);      //Получаем отдельно значение в округленном виде, в часах
                        wipResult +=  valueT; // находим сумму за все время
    }
  }
});

Еще быстрее можно посчитать значения за несколько месяцев, если нас интересуют все дни месяца:
Тогда нужно просто добавить "m", значения появляются в первый день следующего месяца, поэтому его нужно тоже захватить во временной промежуток
Код:
var tagsPriorityID = '6.1.m.SHED_PRIO.HOUR';
var dateFrom = "2022-12-01 00:00:00";
var dateTo = "2024-02-01 15:40:00";

Разница во времени выполнения ощущается даже при построения отчета за несколько дней.