Simple-Scada forum
Simple-Scada 2 => Ваши вопросы => Тема начата: Andrey от 26 Августа 2018, 10:30:44
-
Здравствуйте, Нужно настроить сбор и архивирование данных с периодом в 50 миллисекунд. Ко всему прочему нужно вычислять средние и средне-кубические значения за секунду. И хотя опрос тэгов вроде можно производить с нужной скоростью, но в настройках переменных минимальный цикл архивирования - 100 мс. Если записывать данные по изменению - похоже, что запись происходит не чаще чем раз в 100 мс. (это так?)
Кажется алгоритм примерно такой: по изменению, нужные значения переменных записываются в некий буфер - массив, другой скрипт раз в секунду производит вычисления и подчищает его. Понятно, что в таком случае количество данных в массиве от секунды к секунде будет различаться. У меня в этом случае возникают вопросы. Как создать глобальный массив; как обрабатывать ситуации, если переменная не менялась и в массив не записано ни одного значения? Вообще, подобная схема способна работать с нужной скоростью и точностью? Решение мне кажется... кривоватым. Для записей в архив по изменению, невозможно выбрать период хранения таких данных. Необходимо чтобы они хранились десять дней.
Возможно есть какие-то, более правильные решения.
-
Здравствуйте.
И хотя опрос тэгов вроде можно производить с нужной скоростью, но в настройках переменных минимальный цикл архивирования - 100 мс.
Работа разных типов архивации описана здесь (https://simple-scada.com/help/manual/variable-new.html). Для типа архивации "По-времени" задаётся интервал времени, например 100 мс. и скада будет игнорировать новое значение, если от предыдущего значения прошло не более 100 мс. (т.е. на каждые 100 мс. будет добавляться (по-возможности) не более одного значения). Под Вашу задачу нужен тип архивации "по-изменению".
Если записывать данные по изменению - похоже, что запись происходит не чаще чем раз в 100 мс. (это так?)
Нет. С типом архивации "по-изменению" запись в архив происходит каждый раз, когда скада получила от OPC-сервера новое значение тега (отличное от предыдущего). Если OPC-сервер будет передавать в скаду изменения с частотой 50 мс., то скада будет добавлять их в архив с той же частотой. OPC-сервер вместе со значением тега передаёт также отметку времени (указывает когда именно изменился тег), скада использует эту отметку времени при архивации. При создании переменной в Редакторе скады, нужно обязательно указать соответствующую частоту опроса (в Вашем случае 50 мс.).
Для записей в архив по изменению, невозможно выбрать период хранения таких данных. Необходимо чтобы они хранились десять дней.
Период хранения архивных данных и тип архивации никак не связаны друг с другом. Можно ограничить время хранения архивных данных в меню "Проект - Настройки - Тренды" , список "Ограничение архива трендов". Тогда скада периодически будет посылать в БД запрос на удаление данных старше указанного срока.
Ко всему прочему нужно вычислять средние и средне-кубические значения за секунду.
Можно в любое время получить среднее значение за произвольный период времени на основе архивных данных пи помощи процедуры ArchiveAverage (https://simple-scada.com/help/script/archiveaverage.html). Но если нужно получать такие значения часто, постоянно и за короткие периоды, то это не очень оптимальное решение. К тому же нет архивной функции для вычисления среднего кубического.
Можно сделать отдельный скрипт с типом "По-изменению" и в нём пытаться на ходу вычислять нужные значения, но здесь возникнет большое количество проблем например с определением вершин и их значений на начало и конец интервала и др. проблемы, например с вычислением значения, если переменная долго не менялась. Чаще всего для таких задач используют готовые блоки в программе ПЛК для вычисления средних, готовый результат пишут в переменную, которую и используют в скаде для архивации, получая таблицу средних за прошедшее время.
-
Спасибо за пояснения.
Период хранения архивных данных и тип архивации никак не связаны друг с другом. Можно ограничить время хранения архивных данных в меню "Проект - Настройки - Тренды" , список "Ограничение архива трендов". Тогда скада периодически будет посылать в БД запрос на удаление данных старше указанного срока.
Средние посекундные значения нужно хранить в течении года.
А сырые данные - те что собираются 20 раз в секунду - 10 дней.
Так можно сделать?
-
Можно указать только один интервал хранения для всех архивных данных. Удалять устаревшие данные с произвольным интервалом можно только через собственные SQL-запросы (https://simple-scada.com/help/script/workbd.html).