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

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

Автор Тема: Архивирование данных с периодом 50 мс.  (Прочитано 2925 раз)

Andrey

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Здравствуйте, Нужно настроить сбор и архивирование данных с периодом в 50 миллисекунд. Ко всему прочему нужно вычислять средние и средне-кубические значения за секунду. И хотя опрос тэгов вроде можно производить с нужной скоростью, но в настройках переменных минимальный цикл архивирования - 100 мс. Если записывать данные по изменению - похоже, что запись происходит не чаще чем раз в 100 мс. (это так?)
Кажется алгоритм примерно такой: по изменению, нужные значения переменных записываются в некий буфер - массив, другой скрипт раз в секунду производит вычисления и подчищает его. Понятно, что в таком случае количество данных в массиве от секунды к секунде будет различаться. У меня в этом случае возникают вопросы. Как создать глобальный массив; как обрабатывать ситуации, если переменная не менялась и в массив не записано ни одного значения? Вообще, подобная схема способна работать с нужной скоростью и точностью? Решение мне кажется... кривоватым. Для записей в архив по изменению, невозможно выбрать период хранения таких данных. Необходимо чтобы они хранились десять дней.

Возможно есть какие-то, более правильные решения.
« Изменён: 26 Августа 2018, 10:31:26 от Andrey »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Архивирование данных с периодом 50 мс.
« Ответ #1 : 27 Августа 2018, 11:11:28 »
Здравствуйте.

Цитировать
И хотя опрос тэгов вроде можно производить с нужной скоростью, но в настройках переменных минимальный цикл архивирования - 100 мс.
Работа разных типов архивации описана здесь. Для типа архивации "По-времени" задаётся интервал времени, например 100 мс. и скада будет игнорировать новое значение, если от предыдущего значения прошло не более 100 мс. (т.е. на каждые 100 мс. будет добавляться (по-возможности) не более одного значения). Под Вашу задачу нужен тип архивации "по-изменению".

Цитировать
Если записывать данные по изменению - похоже, что запись происходит не чаще чем раз в 100 мс. (это так?)
Нет. С типом архивации "по-изменению" запись в архив происходит каждый раз, когда скада получила от OPC-сервера новое значение тега (отличное от предыдущего). Если OPC-сервер будет передавать в скаду изменения с частотой 50 мс., то скада будет добавлять их в архив с той же частотой. OPC-сервер вместе со значением тега передаёт также отметку времени (указывает когда именно изменился тег), скада использует эту отметку времени при архивации. При создании переменной в Редакторе скады, нужно обязательно указать соответствующую частоту опроса (в Вашем случае 50 мс.).

Цитировать
Для записей в архив по изменению, невозможно выбрать период хранения таких данных. Необходимо чтобы они хранились десять дней.
Период хранения архивных данных и тип архивации никак не связаны друг с другом. Можно ограничить время хранения архивных данных в меню "Проект - Настройки - Тренды" , список "Ограничение архива трендов". Тогда скада периодически будет посылать в БД запрос на удаление данных старше указанного срока.

Цитировать
Ко всему прочему нужно вычислять средние и средне-кубические значения за секунду.
Можно в любое время получить среднее значение за произвольный период времени на основе архивных данных пи помощи процедуры ArchiveAverage. Но если нужно получать такие значения часто, постоянно и за короткие периоды, то это не очень оптимальное решение. К тому же нет архивной функции для вычисления среднего кубического.
Можно сделать отдельный скрипт с типом "По-изменению" и в нём пытаться на ходу вычислять нужные значения, но здесь возникнет большое количество проблем например с определением вершин и их значений на начало и конец интервала и др. проблемы, например с вычислением значения, если переменная долго не менялась. Чаще всего для таких задач используют готовые блоки в программе ПЛК для вычисления средних, готовый результат пишут в переменную, которую и используют в скаде для архивации, получая таблицу средних за прошедшее время.
« Изменён: 27 Августа 2018, 11:12:07 от Simple-Scada »

Andrey

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Архивирование данных с периодом 50 мс.
« Ответ #2 : 27 Августа 2018, 13:19:55 »
Спасибо за пояснения.

Период хранения архивных данных и тип архивации никак не связаны друг с другом. Можно ограничить время хранения архивных данных в меню "Проект - Настройки - Тренды" , список "Ограничение архива трендов". Тогда скада периодически будет посылать в БД запрос на удаление данных старше указанного срока.
Средние посекундные значения нужно хранить в течении года.
А сырые данные - те что собираются 20 раз в секунду - 10 дней.
Так можно сделать?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Архивирование данных с периодом 50 мс.
« Ответ #3 : 28 Августа 2018, 20:39:23 »
Можно указать только один интервал хранения для всех архивных данных. Удалять устаревшие данные с произвольным интервалом можно только через собственные SQL-запросы.