Формирование отчетов — различия между версиями
(→Формирование суточных, недельных и т.п. отчетов) |
(Отметить эту версию для перевода) |
||
Строка 1: | Строка 1: | ||
<translate> | <translate> | ||
− | == Формирование суточных, недельных и т.п. отчетов == | + | == Формирование суточных, недельных и т.п. отчетов == <!--T:1--> |
+ | <!--T:2--> | ||
<p> Для оптимизации производительности устройства данные для отчетов целесообразно регистрировать "в потоке". В WebHMI для этого есть механизм событий, которые после регистрации фактически дают готовые отчеты. </p> | <p> Для оптимизации производительности устройства данные для отчетов целесообразно регистрировать "в потоке". В WebHMI для этого есть механизм событий, которые после регистрации фактически дают готовые отчеты. </p> | ||
::'''Необходимые переменные, скрипты и события -''' <br> | ::'''Необходимые переменные, скрипты и события -''' <br> | ||
Строка 23: | Строка 24: | ||
+ | <!--T:3--> | ||
<syntaxhighlight lang = "lua"> | <syntaxhighlight lang = "lua"> | ||
+ | <!--T:4--> | ||
function main (userId) | function main (userId) | ||
Строка 40: | Строка 43: | ||
+ | <!--T:5--> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | <!--T:6--> | ||
Скрипт, снимающий флаг и соответственно событие после записи: | Скрипт, снимающий флаг и соответственно событие после записи: | ||
+ | <!--T:7--> | ||
<syntaxhighlight lang = "lua"> | <syntaxhighlight lang = "lua"> | ||
+ | <!--T:8--> | ||
function main (userId) | function main (userId) | ||
-- проверяем выполняется ли событие | -- проверяем выполняется ли событие | ||
Строка 58: | Строка 65: | ||
end | end | ||
+ | <!--T:9--> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Настройки события для данного отчета:<br> | Настройки события для данного отчета:<br> | ||
Строка 64: | Строка 72: | ||
+ | <!--T:10--> | ||
Результатом будет являться отчет такого вида:<br> | Результатом будет являться отчет такого вида:<br> | ||
[[Файл:Rep example.png | 800 px]]<br> | [[Файл:Rep example.png | 800 px]]<br> | ||
При поминутной регистрации данные результаты получаться, если время скана будет меньше чем секунда. Тогда "виртуальный" электросчетчик не пропустит своих секунд. | При поминутной регистрации данные результаты получаться, если время скана будет меньше чем секунда. Тогда "виртуальный" электросчетчик не пропустит своих секунд. | ||
</translate> | </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
Настройки события для данного отчета:
Результатом будет являться отчет такого вида:
При поминутной регистрации данные результаты получаться, если время скана будет меньше чем секунда. Тогда "виртуальный" электросчетчик не пропустит своих секунд.