Как сделать запись в архив с отсчетом от начала суток, например данные должны архивироваться и отображаться в трендах с периодом 30 мин .: 00:00:00, 00:30:00, 1:00:00, 1:30:00 ... и.т.д.
Тут два варианта есть. Первый: Для вашей переменной задать архивацию "По времени" и Интервал = 30 мин. И в секундном скрипте поймать начало часа/пол часа, проверить не запущена ли архивация, и если нет, то запустить архивацию. П.С. Не катит, нет свойства у переменной позволяющего проверить, архивируется она или нет. Тогда не проверять, а просто запустить архивацию и все.
Второй: Для переменной задать архивацию "По времени" и Интервал = 2 мин.
В скрипте типа "Прошла секунда" прописать
begin
//Проверяю на начало часа или на пол часа.
if (Now.MinuteOf = 0) or (Now.MinuteOf = 30)
then
//включаю архивацию
VariableX.Archived := true
else
//выключаю архивацию
VariableX.Archived := false;
end.
Поскольку следующая точка пойдет в архив только через 2 минуты, то секундный скрипт выключит архивацию раньше. Ну и да, секундный скрипт должен успевать обрабатываться за 1 секунду, иначе точно в секунды вы не уложитесь. И еще отключите в скрипте типа "Запуск проекта" архивацию переменной, иначе до того как словится в первый раз начало часа/пол часа запишутся лишние значения.
begin
VariableX.Archived := false;
end.
Как сделать запись в архив с отсчетом от начала суток, например данные должны архивироваться и отображаться в трендах с периодом 30 мин .: 00:00:00, 00:30:00, 1:00:00, 1:30:00 ... и.т.д.
Здравствуйте. Наиболее надёжным вариантом, который предусматривает погрешности при получении времени, является следующий вариант: создать новую виртуальную переменную с теми же параметрами, что и основная переменная. Допустим оригинальная переменная имеет имя vrBase, а новая виртуальная имя vrVirtual. Архивацию включить нужно только у vrVirtual, её же выводить в тренды, тип архивации "по-изменению". Далее создаем новый скрипт с типом события "Прошла секунда" и пишем следующий код:
const
INTERVAL: Word = 30;
begin
if (MinuteOf(Now) mod INTERVAL = 0) and
(MinuteSpan(Now, vrVirtual.Timestamp) > 1) then
vrVirtual.Value := vrBase.Value;
end.
А для чего архивация строго в 00:00, 00:30 и т.д.? Как планируется использовать эти архивные данные?