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

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

Автор Тема: Архивация переменных  (Прочитано 638 раз)

Виктор К

  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Архивация переменных
« : 05 Октября 2021, 12:39:09 »
Добрый день. Подскажите, есть ли такая возможность чтоб принудительно сохранить значение переменной в базу?
Сейчас на переменной стоит архивация раз в 1 час, но час отсчитывается от запуска проекта/сервера.
Нужно сохранять по скрипту прошел час, он инициируется ровно в начале каждого часа(будет считаться расход за час, сутки).

Про вариант INSERT INTO `trends_data` (ID, Timestamp, Value, Quality) VALUES (11, NOW(), 65, 1) знаю, пока ждем одобрение на закупку лицензии.

pan2000

  • Постоялец
  • ***
  • Сообщений: 152
    • Просмотр профиля
Re: Архивация переменных
« Ответ #1 : 06 Октября 2021, 04:34:12 »
     Здравствуйте.
Ваше записанное значение отразится в тренде только после перезапуска проекта.
Можно использовать внутреннюю переменную с архивацией "по изменению" и перезаписью из входной в часовом скрипте.
Если значение входной переменной не изменилось и не записано в БД, то последующие вычисления по БД будут некорректными.
Для записи в БД можно:
- изменить внутреннюю переменную на незначимую величину (тренд отображается правильно);
- применить прямую запись в таблицу (о тренде см.выше)

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 922
    • Просмотр профиля
Re: Архивация переменных
« Ответ #2 : 06 Октября 2021, 11:01:37 »
Здравствуйте.

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

Цитировать
Сейчас на переменной стоит архивация раз в 1 час, но час отсчитывается от запуска проекта/сервера.Нужно сохранять по скрипту прошел час
Переменная архивируется только по изменению, даже если Вы установили тип архивации «По времени» и задали интервал в 1 час. Новое значение переменной будет записано в архив при изменении значения переменной, если прошло больше времени (от последней добавленной в архив точки), чем указано в параметре "Интервал архивации", таким образом даже если выбран тип архивации «По времени», в архив данные будут попадать не обязательно строго раз в час.

Цитировать
Про вариант INSERT INTO `trends_data` (ID, Timestamp, Value, Quality) VALUES (11, NOW(), 65, 1) знаю
Записывать какие-либо значения в таблицы скады нельзя - это может привести к нарушению структуры БД, проблемам в отображении трендов, проблемам в работе архивных функций и т.д. Если требуется сохранять какие-либо значения в БД, то для этого нужно создать свою таблицу в БД и работать с ней, например как описано по ссылке.

Виктор К

  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: Архивация переменных
« Ответ #3 : 07 Октября 2021, 10:02:20 »
Цитировать
Можно использовать внутреннюю переменную с архивацией "по изменению" и перезаписью из входной в часовом скрипте.
То что нужно. Работает как и задумывалось.

Там переменная с ОРС сервера приходит каждые 15 секунд, и имеет вид "нарастающий итог". Она даже и не особо нужна для архивации(4*60*24*31=~175000 строк в базе за месяц против 1*24*31=740).

Цитировать
Записывать какие-либо значения в таблицы скады нельзя
Проверил вариант с "INSERT INTO" (не через RunSQL), да, возникла проблема в работе архивных функций, нужно согласовывать последовательность действий. Слишком заморочено получалось.

Спасибо.