Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Виктор К от 05 Октября 2021, 12:39:09

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

Про вариант INSERT INTO `trends_data` (ID, Timestamp, Value, Quality) VALUES (11, NOW(), 65, 1) знаю, пока ждем одобрение на закупку лицензии.
Название: Re: Архивация переменных
Отправлено: Simple_Scada от 06 Октября 2021, 11:01:37
Здравствуйте.

Для вычисления расхода за час не требуется сохранять значение переменной строго раз в час. Вместо этого, у переменной должна быть настроена архивация "по изменению (https://simple-scada.com/help/manual/vararchive.html)", тогда можно будет получить точное значение переменной за любой момент времени. Если Вам требуется использовать расход за час в отчете, то для этого не нужно что-либо делать в скриптах. Для этого нужно использовать периодический отчет (https://simple-scada.com/help/report/per-rep.html) с интервалом 1 час и типом обработки "разница" (https://simple-scada.com/help/report/periodicsourcework.html). В итоге, в отчете будут формироваться строки с расходом на каждый час, за заданный интервал времени. При этом, скрипты писать не потребуется и данный способ будет работать гораздо быстрее. Если требуется вычислить расход за час для использования в скаде, то см. пример по ссылке (https://simple-scada.com/help/script/flow-calculation.html).

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

Цитировать
Про вариант INSERT INTO `trends_data` (ID, Timestamp, Value, Quality) VALUES (11, NOW(), 65, 1) знаю
Записывать какие-либо значения в таблицы скады нельзя - это может привести к нарушению структуры БД, проблемам в отображении трендов, проблемам в работе архивных функций и т.д. Если требуется сохранять какие-либо значения в БД, то для этого нужно создать свою таблицу в БД и работать с ней, например как описано по ссылке (https://simple-scada.com/help/script/dbwrtime.html).
Название: Re: Архивация переменных
Отправлено: Виктор К от 07 Октября 2021, 10:02:20
Цитировать
Можно использовать внутреннюю переменную с архивацией "по изменению" и перезаписью из входной в часовом скрипте.
То что нужно. Работает как и задумывалось.

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

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

Спасибо.