Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: mvs от 02 Апреля 2018, 15:23:31

Название: Архивные тренды
Отправлено: mvs от 02 Апреля 2018, 15:23:31
Как сделать запись в архив с отсчетом от начала суток, например данные должны архивироваться и отображаться в трендах с периодом 30 мин .: 00:00:00, 00:30:00, 1:00:00, 1:30:00 ... и.т.д.
Название: Re: Архивные тренды
Отправлено: TeNQ от 02 Апреля 2018, 19:51:27
Как сделать запись в архив с отсчетом от начала суток, например данные должны архивироваться и отображаться в трендах с периодом 30 мин .: 00:00:00, 00:30:00, 1:00:00, 1:30:00 ... и.т.д.
Тут два варианта есть. Первый: Для вашей переменной задать архивацию "По времени" и Интервал = 30 мин. И в секундном скрипте поймать начало часа/пол часа, проверить не запущена ли архивация, и если нет, то запустить архивацию. П.С. Не катит, нет свойства у переменной позволяющего проверить, архивируется она или нет. Тогда не проверять, а просто запустить архивацию и все.
Второй: Для переменной задать архивацию "По времени" и Интервал = 2 мин.
В скрипте типа "Прошла секунда" прописать
Код: (delphi)
begin
  //Проверяю на начало часа или на пол часа.
  if (Now.MinuteOf = 0) or (Now.MinuteOf = 30)
  then
    //включаю архивацию
    VariableX.Archived := true
  else
    //выключаю архивацию
    VariableX.Archived := false;
end.
Поскольку следующая точка пойдет в архив только через 2 минуты, то секундный скрипт выключит архивацию раньше. Ну и да, секундный скрипт должен успевать обрабатываться за 1 секунду, иначе точно в секунды вы не уложитесь. И еще отключите в скрипте типа "Запуск проекта" архивацию переменной, иначе до того как словится в первый раз начало часа/пол часа запишутся лишние значения.
Код: (delphi)
begin
  VariableX.Archived := false;
end.
Название: Re: Архивные тренды
Отправлено: Simple-Scada от 02 Апреля 2018, 23:53:04
Как сделать запись в архив с отсчетом от начала суток, например данные должны архивироваться и отображаться в трендах с периодом 30 мин .: 00:00:00, 00:30:00, 1:00:00, 1:30:00 ... и.т.д.
Здравствуйте. Наиболее надёжным вариантом, который предусматривает погрешности при получении времени, является следующий вариант: создать новую виртуальную переменную с теми же параметрами, что и основная переменная. Допустим оригинальная переменная имеет имя vrBase, а новая виртуальная имя vrVirtual. Архивацию включить нужно только у vrVirtual, её же выводить в тренды, тип архивации "по-изменению". Далее создаем новый скрипт с типом события "Прошла секунда" и пишем следующий код:
Код: (delphi)
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 и т.д.? Как планируется использовать эти архивные данные?
Название: Re: Архивные тренды
Отправлено: Nikso от 03 Апреля 2018, 15:13:41
Буквально вчера возник аналогичный вопрос. В моем случае это необходимо для сопоставления с архивом с приборов учёта не входящих в проект. В частности есть почасовые показания коммерческого прибора учета ээ по высокой стороне и 10 приборов учета по низкой стороне. Путем сопоставления данных определяются потери в линиях и трансформаторах.
Название: Re: Архивные тренды
Отправлено: mvs от 03 Апреля 2018, 20:49:43
Добрый день. Данные нужно архивировать для системы учета электроэнергии. В счетчиков электроэнергии график нагрузки составляет 30 мин. для сведения баланса нужно иметь данные за такие промежутки времени.
Название: Re: Архивные тренды
Отправлено: mvs от 05 Апреля 2018, 22:01:38
Как сделать чтобы в момент старта (остановки) сервера данные не сохранялись.
Название: Re: Архивные тренды
Отправлено: Simple-Scada от 06 Апреля 2018, 14:54:12
Как сделать чтобы в момент старта (остановки) сервера данные не сохранялись.
Это возможно только если не использовать стандартную систему архивации, и вместо этого добавлять данные в архив когда требуется при помощи пользовательского SQL-запроса. Для выполнения запросов к БД можно использовать процедуру RunSQL (https://simple-scada.com/help/script/workbd.html).