This is topic Принудительная запись в архив: особенности реализации in forum Мониторы Реального Времени / Real Time Monitors at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/35/t/000488.html

Posted by Alexander_ (Участник № / Member № 7778) on :
 

 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Бороться с естественными состязаниями в асинхронных процедурах сложно.
Принудительная архивация в данном случае непродуктивна.

Если Вам необходимо сократить поток записей в архив, можно создать программную процедуру трансляции (общий шаблон для всех архивируемых каналов).
В процедуре трансляции надо организовать передачу полученного в канале значения в его атрибут РЕАЛЬНОЕ_ЗНАЧЕНИЕ 1 РАЗ В МИНУТУ.
Архивируемый атрибут РЕАЛЬНОЕ_ЗНАЧЕНИЕ будет записываться в архив не чаще, чем 1 РАЗ В МИНУТУ.

Для оперативного отображения значений этих каналов на экранах выводите на экран атрибут ВХОДНОЕ_ЗНАЧЕНИЕ или АППАРАТНОЕ_ЗНАЧЕНИЕ, которые будут изменяться "по мере поступления раз в 10-15 сек".
 
Posted by jenyak542 (Участник № / Member № 9353) on :
 
Добрый день. Мне нужно записывать данные в архив и затем считывать их на тренде и в архивной таблице. Но я боюсь, что некоторые значения могут изменяться слишком часто, например, показания датчика температуры или уровня. Не хотелось бы записывать множество незначительных колебаний. Поэтому хотелось бы настроить запись в архив, например, один раз в минуту. Хотелось бы узнать какими способами можно это сделать. Как настроить принудительную запись и что такое процедура трансляции?
 
Posted by jenyak542 (Участник № / Member № 9353) on :
 
Либо, если это возможно, установить какой-то диапазон изменения величины, при выходе за который значение канала в архив запишется, а если изменение меньше - не запишется.
 
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
 
Да, для каналов класса Float в их настройках можно задать Апертуру. См. описание в справке в разделах:
Каналы и системные переменные TRACE MODE 6 - Числовые каналы - Канал класса FLOAT - Канал класса FLOAT и Обработка в канале FLOAT
 
Posted by jenyak542 (Участник № / Member № 9353) on :
 
Да, апертуру нашел, спасибо. Но все-таки, необходимость записывать данные в архив с определенной периодичностью осталась. Это можно сделать при помощи канала call.writer?
Создав канал call.writer, выбор СПАД-архива делается именно для этого канала, а у канала float (значения которого по идее и нужно записывать) можно архив не назначать? Не до конца понял, какой параметр канала нужно выбрать и как определить время, через которое значения будут записываться.
 
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
 
Метод с Апертурой позволяет решить озвученную Вами задачу "я боюсь, что некоторые значения могут изменяться слишком часто, например, показания датчика температуры или уровня. Не хотелось бы записывать множество незначительных колебаний. "

Метод принудительной записи в архив записывает любое значение в архив (даже константу) с определенной периодичностью. Таким образом даже незначительные изменения будут записаны в архив.


Вам необходимо определиться с решаемой задачей (затем обсудим метод реализации):

записывать любые значение с определенным периодом (используем процедуру трансляции, см. пост2),

игнорировать несущественные изменения значения (используем метод Апертуры)

или записываем значения при изменении с определенным периодом (просто архивирование и у канала задаем необходимый период пересчета)
 
Posted by jenyak542 (Участник № / Member № 9353) on :
 
Задача следующая: записывать значения нескольких каналов float в архив с периодичностью раз в 1 минуту.
Про апертуру я понял, но есть требование по временной периодичности записи. Поэтому хотелось бы это попытаться реализовать.

Для записи нескольких каналов в архив, можно использовать call.writer с параметром = 3? Не понял, как именно в этом канале call задается временная периодичность записи.

Про трансляцию пост2 прочитал, под этим понимается написание программы что ли?

Короче говоря, задача записывать данные нескольких каналов float в архив раз в минуту, не важно, пусть даже за эту минуту значение не изменится, все равно записать. Как лучше это реализовать?
 
Posted by jenyak542 (Участник № / Member № 9353) on :
 
Из справки по call.writer не до конца понял, каким образом настраивается этот канал. Какой параметр лучше использовать для записи нескольких каналов в архив и что еще для этого нужно сделать?

"Параметр = 3, 10, 4, 11 – групповая запись в SIAD значений всех архивируемых каналов. Реальное значение канала CALL.Writer задает номер архива; нулевой аргумент (arg0, DATE_AND_TIME) – метку времени для записи; первый аргумент (arg1, UDINT) – условие записи сообщения по каналу (arg0 – <канал>.T > arg1)" - как именно задается временная метка? Про arg1 и условие записи не понял, что нужно сделать. Если мне нужно записать значения нескольких каналов float архив, нужно их привязать к аргументам канала call? Сказано, реальное значение канала call задает номер архива, а откуда это реальное значение взять? В общем, не могу понять как пользоваться call.writer, может быть есть какие-то видео или пример?
 
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
 
Задача понятна.
Вы правильно решили использовать Call.Writer.

У нас есть видео-урок с примером (ссылка), в котором продемонстрирован пример использования Call.Writer.
Вас должен интересовать последний пример.
 
Posted by jenyak542 (Участник № / Member № 9353) on :
 
Добрый день. Как я понял, в данном примере метка времени передается из контроллера. Мне бы хотелось, чтобы периодическая запись в архив осуществлялась только при помощи средств ТМ, то есть не изменять программу контроллера, просто получать от него данные, но записывать их в архив с определенной периодичностью. Возможно ли это сделать?
 
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
 
Конечно, возможно.
Это частный пример решения. Вы можете вместо контроллера использовать написанную программу или задавать параметры вручную.

Формально, из описания задачи, следует, что Вам достаточно программно формировать периодическую команду на отработку канала Call.Writer
 
Posted by jenyak542 (Участник № / Member № 9353) on :
 
Да, вы правы. Просто пока не понял как написать эту программу для необходимой отработки канала call. Буду разбираться
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2