Формирование отчетов — различия между версиями

Материал из WebHMI Wiki
Перейти к: навигация, поиск
(Новая страница: «== Формирование суточных, недельных и т.п. отчетов == <p> Для оптимизации производительнос…»)
 
(Формирование суточных, недельных и т.п. отчетов)
Строка 1: Строка 1:
 +
<translate>
 
== Формирование суточных, недельных и т.п. отчетов ==  
 
== Формирование суточных, недельных и т.п. отчетов ==  
  
Строка 66: Строка 67:
 
[[Файл:Rep example.png | 800 px]]<br>
 
[[Файл:Rep example.png | 800 px]]<br>
 
При поминутной регистрации данные результаты получаться, если время скана будет меньше чем секунда. Тогда "виртуальный" электросчетчик не пропустит своих секунд.
 
При поминутной регистрации данные результаты получаться, если время скана будет меньше чем секунда. Тогда "виртуальный" электросчетчик не пропустит своих секунд.
 +
</translate>

Версия 18:36, 22 марта 2018

Формирование суточных, недельных и т.п. отчетов

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

Необходимые переменные, скрипты и события -
  • скрипт, выдающий номер дня, месяца, недели, квартала и т.п. из системного времени во внутренний регистр "день недели", "час", "секунда"
  • скрипт подсчета разницы "текущие показание - предыдущие", и фиксации результата в регистре "счетчик" (скрипт работает также по изменению регистра "минута")
  • регистр-флаг генерации события, однократного, достаточного для записи текущего посчитанного счетчика и метки времени
  • скрипт, снимающий флаг, когда есть событие (т.е. данные уже зафиксированы)'
  • событие для регистрации

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

function main (userId)
  -- получить номер минуты
  local min = os.date("%M",os.time());
  -- записать во внутренний регистр
  WriteReg("minute", min); -- Минуты  
end

Скрипт, работающий на изменение регистра "minute":


function main (userId)
 
  local current = GetReg("FlowMeter"); -- текущие показания
  local prevMin = GetReg("pMinTotal"); -- предыдущее значение 
  local cnt = current - prevMin; -- посчитать разницу
 
  WriteReg("MinuteFlow", cnt); -- записать счетчик во внутр. регистр. он используется в событии
  WriteReg("pMinTotal", current); -- записать текущее в предыдущее для след. периода
  
   -- поднять флаг для отчета 
  WriteReg("EventFlag", 1); -- Установить флаг для события  
  end


Скрипт, снимающий флаг и соответственно событие после записи:


function main (userId)
  -- проверяем выполняется ли событие 
  local event_state = (GetReg("ES1") == 1); -- Событие 1 выполняется  (ES1@Internal register)
  -- и сбрасываем флаг
  if event_state then 
      WriteReg("EventFlag", 0); -- Флаг минутного отчета  
  end 
end

Настройки события для данного отчета:
Rep example2.png
Rep example3.png


Результатом будет являться отчет такого вида:
Rep example.png
При поминутной регистрации данные результаты получаться, если время скана будет меньше чем секунда. Тогда "виртуальный" электросчетчик не пропустит своих секунд.