Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: asutpfoma от 01 Ноября 2021, 13:00:06

Название: ArchiveValueByTime
Отправлено: asutpfoma от 01 Ноября 2021, 13:00:06
Приветствую.
По нажатию клавиши извлекаю из архива два значения на разные метки времени. Затем я хочу посчитать разницу между этими значениями и присвоить это значение новой переменной. Новая переменная привязана к 1-ой ячейки таблицы. Не срабатывает присвоение, хелп. Я так понимаю, что проблема в асинхронности, вычитание выполняется раньше, чем выборка из архива. Как разрулить такое?

aDate2 := EncodeDateTime(YearOf(PumpReportDate.AsDateTime), MonthOf(PumpReportDate.AsDateTime), 1, 13, 30, 49, 00);
aDate  := EncodeDateTime(YearOf(PumpReportDate.AsDateTime), MonthOf(PumpReportDate.AsDateTime), 1, 13, 39, 30, 00);
ArchiveValueByTime(freq_1, tempFreq, aDate);
ArchiveValueByTime(freq_1, tempFreq_1, aDate2);
Pump1Report_1.Value := tempFreq.Value - tempFreq_2.Value;
Название: Re: ArchiveValueByTime
Отправлено: Timothy Clement от 01 Ноября 2021, 13:07:37
Создать скрипт "Изменились переменные" для временных переменных. Перед вычитанием проверять что обе переменные не равны 0, после вычитания обнулять временные переменные.
Название: Re: ArchiveValueByTime
Отправлено: Simple_Scada от 01 Ноября 2021, 13:21:01
Здравствуйте.

Timothy Clement указал верный способ. Архивные функции выполняются в отдельных потоках и не вычисляются мгновенно. Смотрите описание в этой статье (https://simple-scada.com/help/script/work-with-archive.html?anchor=warn). Но судя по коду скрипта, возможно Вы производите данные расчеты для использования в отчете. Если это так, то можно обойтись без скриптов используя возможности системы отчетов (https://simple-scada.com/help/report/index.html). ​Для этих целей подойдет периодический отчет (https://simple-scada.com/help/report/per-rep.html) с необходимым интервалом(например час, если требуется выводить разницу за каждый час). Для получения разницы между значением переменной на конец интервала и значением на начало интервала(т.е. суммарный расход/объем за интервал) во время создания отчета на шаге добавления переменной в источник нужно выбрать "тип обработки (https://simple-scada.com/help/report/periodicsourcework.html)" -> "разница". Данный способ будет проще и производительнее.
Название: Re: ArchiveValueByTime
Отправлено: asutpfoma от 01 Ноября 2021, 13:25:24
Да, хочу формировать часовые параметры по пяти насосам. К сожалению, trial версия системы отчетов.