Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: ArchiveValueByTime  (Прочитано 1350 раз)

asutpfoma

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
ArchiveValueByTime
« : 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;

Timothy Clement

  • Постоялец
  • ***
  • Сообщений: 149
  • ОАО Борисовский завод "Металлист"
    • Просмотр профиля
    • Полымя
Re: ArchiveValueByTime
« Ответ #1 : 01 Ноября 2021, 13:07:37 »
Создать скрипт "Изменились переменные" для временных переменных. Перед вычитанием проверять что обе переменные не равны 0, после вычитания обнулять временные переменные.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1165
    • Просмотр профиля
Re: ArchiveValueByTime
« Ответ #2 : 01 Ноября 2021, 13:21:01 »
Здравствуйте.

Timothy Clement указал верный способ. Архивные функции выполняются в отдельных потоках и не вычисляются мгновенно. Смотрите описание в этой статье. Но судя по коду скрипта, возможно Вы производите данные расчеты для использования в отчете. Если это так, то можно обойтись без скриптов используя возможности системы отчетов. ​Для этих целей подойдет периодический отчет с необходимым интервалом(например час, если требуется выводить разницу за каждый час). Для получения разницы между значением переменной на конец интервала и значением на начало интервала(т.е. суммарный расход/объем за интервал) во время создания отчета на шаге добавления переменной в источник нужно выбрать "тип обработки" -> "разница". Данный способ будет проще и производительнее.
« Изменён: 01 Ноября 2021, 19:40:21 от Simple-Scada »

asutpfoma

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: ArchiveValueByTime
« Ответ #3 : 01 Ноября 2021, 13:25:24 »
Да, хочу формировать часовые параметры по пяти насосам. К сожалению, trial версия системы отчетов.
« Изменён: 01 Ноября 2021, 16:07:13 от Simple_Scada »