This is topic HDA и Тренды in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


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

Posted by Ширинкин Андрей (Участник № / Member № 3320) on :
 
Имеем OPC сервер, с которого получаем архивные значения по HDA, отображающиеся на тренде, с вводом начального и конечного времени (здесь все в порядке).
Программа ТМ, сама, каждые две минуты подает новые значения границы (начальное и конечное время) в тренд, а также в первые два аргумента (T_FROM и T_TO) канала HDA. Проблема возникла с отображением графика, т.е. каждые две минуты получаем новое количество аргументов в канале HDA, также изменяются границы и в тренде, а сама линия графика не прорисовывается на тренде. Причем если через N-ое время самостоятельно изменить (начальное и конечное) время в тренде (через компоненты), то график дорисовывается.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
А если перейти с экрана на экран кривая перерисовывается?

Пришлите Ваш проект на hotline3@adastra.ru
 
Posted by Поляков Илья (Участник № / Member № 3358) on :
 
Да, перерисовывается.
Проект отправил.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Есть предположение, что у Вас данные поступают в каналы позже, чем границы передаются ГЭ "Тренд". Следовательно, тренд отрисовывается сначала без данных.

Попробуйте разнести эти события, чтобы данные приходили гарантировано раньше.
 
Posted by Поляков Илья (Участник № / Member № 3358) on :
 
Каким образом?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Например разбить программу на две. Первая будет получать данные в каналы и запускать вторую, а вторая будет передавать границы в тренд.

Можно сделать и в одной, на разных тактах пересчета.
 
Posted by Поляков Илья (Участник № / Member № 3358) on :
 
Испробовали оба варианта.
Пошли оба, но с одним моментом - пока горизонтальным скролл-баром не пошевелишь, график не перерисовывается.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Не совсем понятно.

График перерисовывается в момент изменения границ тренда. Каким образом это делается, программно или вручную, неважно.
 
Posted by Ширинкин Андрей (Участник № / Member № 3320) on :
 
Вот что выявили:
Как было сказано ранее программа ТМ, сама, каждые две минуты подает новые значения границы (начальное и конечное время) в тренд, а также в первые два аргумента (T_FROM и T_TO) канала HDA. Вы посоветовали нам разбить программу на две части или сделать это в разных тактах (см выше)
Заработали оба варианта.

НО, С ОДНИМ НЮАНСОМ: если мы подаем границы в тренд за один час (например с 8:00 до 9:00), а в канале HDA имеем массив за сутки (с 0:00 до 23:59) то все в порядке, график перерисовывается без проблем.
А если границу в тренде увеличим хотя бы на 30 минут (т.е. с 8:00 до 9:30) то график перестает перерисовываться, пока не пошевелишь скролл-баром.

Нам в итоге надо отобразить на трэнде весь массив из HDA, т.е. сутки, потому и запрашиваем в HDA сутки.

Также во всех перечисленных вариантах эксперимента иногда не получаем данные в канале HDA, хотя границы в канал были переданы. После перезагрузки МРВ, данные вновь получаем.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
"А если границу в тренде увеличим хотя бы на 30 минут (т.е. с 8:00 до 9:30) то график перестает перерисовываться, пока не пошевелишь скролл-баром."
Что значит "не перерисовывается"?
Не изменяется временная шкала на тренде?
Шкала устанавливается "с 8:00 до 9:30", но график прорисован только "с 8:00 до 9:00"?

Если Вы считываете массив за сутки, то зачем Вы повторяете считывание каждые 2 минуты?

В каком релизе Вы работаете?

В релизе 6.06.3 канал CALL_HDA должен иметь период "Однократно" и автоматически выключаться после отработки. Для того, чтобы он снова обратился к OPC-HDA-серверу, надо не только менять его временные границы, надо его включать.
 
Posted by Ширинкин Андрей (Участник № / Member № 3320) on :
 
>>Что значит "не перерисовывается"?
>>Шкала устанавливается "с 8:00 до 9:30", но график прорисован только "с 8:00 до 9:00"?

Да

>>Если Вы считываете массив за сутки, то зачем Вы повторяете считывание каждые 2 минуты?

Так надо. На тренде показываем "окно" изменения параметра за сутки от текущего времени. БД обновляется раз в 2 минуты

>>В каком релизе Вы работаете?

6.06.3 + пакет исправлений IDE_BASE_20091118.RAR

>>В релизе 6.06.3 канал CALL_HDA должен иметь период "Однократно"...

Проверим в течении дня - ответим
 
Posted by Ширинкин Андрей (Участник № / Member № 3320) on :
 
>>В релизе 6.06.3 канал CALL_HDA должен иметь период "Однократно" ...
Получилось следующее: указали у канала CALL_HDA период "Однократно". Были заданы границы с 8:00 до 10:00. Далее после отработки канал выключился, т.е. атрибут «Выключить – (3, C) Состояние» становится Off+T и были получены соответсвующие значения с 8:00 до 10:00.
После включения канала (через 2 минуты) подали в атрибут канал значение 0. Получили значения в канале с 8:02 до 10:02. На тренде границы изменились соответственно, но сам график был прорисован с 8:00 до 10:00.
Таким образом, прождали 20 минут, т.е. в канале данные были получены с 8:20 – 10:20, границы тренда также были с 8:20 – 10:20, а вот сам график по-прежнему был прорисован лишь с 8:00 до 10:00.
Как только пошевелили горизонтальным скролл-баром, график тут же прорисовался с 8:20 до 10:20
При этом заметили что при задании интервала границ в тренде 1 час (т.е допустим с 8:00 до 9:00) такого бага не замечается все работает стабильно. Но как только интервал увеличиваем больше чем на один час (т.е. с 8:00 до 9:30) прекращается перерисовка графика. Хотя все данные были получены корректно (т.е. данные в канал получены за период с 8:00 до 9:30, и через 2 такта были обновлены границы тренда с 8:00 до 9:30)
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Проведите, пожалуйста, следующий эксперимент.
Считайте суточный архив 2-минутных значений целиком и остановите считывание архива.
Затем запустите Вашу программу изменения границ тренда с периодом 2 мин. - 8:00-10:00, 8:02-10:02, 8:04-10:04 и т.д.
Я провел такой эксперимент на Вашем проекте (который Вы присылали нам). Никаких нарушений не обнаружил. При каждом смещении границ тренда подчитывался новый фрагмент архива.

Поэтому можно преположить, что, введенная задержка между подъемом архива и смещением тренда не достаточна - архив в канале обновляется позже, чем смещается тренд.
В процедуре участвуют 3 потока: программы, чтение архива, отображение на тренде. Все 3 потока друг по отношению к другу асинхронны. И рассинхронизация вполне соизмерима с введенной задержкой (2 цикла основного потока). При этом надо учитывать также и то, что каналы в потоках обрабатываются в порядке своих ID, что также вводит дополнительную рассинхронизацию.
Возможно, что Вам придется увеличивать задержку.
 
Posted by Ширинкин Андрей (Участник № / Member № 3320) on :
 
Эксперименты прошли успешно.
Вопрос: как узнать что данные в канале HDA получены полностью?
 
Posted by Поляков Илья (Участник № / Member № 3358) on :
 
И еще вопрос: по каким критериям каналу HDA выставляется аппаратная недостоверность (004 атрибут)?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Из документации:
"Атрибут ASK (120) - – переменная DataReady, принимает значение 1, если запрошенные данные успешно считаны;"
"1" запоминается, поэтому после того, как Вы проверили этот атрибут, сбросьте его.

Недостоверность выставляется, если OPC-сервер не отвечает или отвечает с передачей свойства "BAD"
по любому из параметров.
 
Posted by Поляков Илья (Участник № / Member № 3358) on :
 
>>или отвечает с передачей свойства >>"BAD" по любому из параметров.

Я спрашивал про HDA, а не про DA.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Прошу прощения, "по любой из возвращаемых записей".
 
Posted by Ширинкин Андрей (Участник № / Member № 3320) on :
 
Провели вот такой эксперимент:
Допустим, в данный момент реальное время 8:00 и дата 21 января 2010, и программа начинает выполнятся в это время.
Эксп №1: Имеем два канала HDA. Программой отсылаем в оба канала HDA значения границ (с 8:00 20.01.2010 по 8:00 21.01.2010), с периодом «1 цикл CALC».
Через 10 циклов после того, как каналам были переданы значения границ, мы передаем значения границ в тренд (с 7:00 21.01.2010 до 8:00 21.01.2010), и каждые две минуты обновляем значения границ в HDA и тренде, т.е. так:

HDA - с 8:00 20.01.2010 по 8:00 21.01.2010;
Тренд - с 7:00 21.01.2010 до 8:00 21.01.2010;
Через 2 минуты программа отсылает новые значения:
HDA - с 8:02 20.01.2010 по 8:02 21.01.2010;
Тренд - с 7:02 21.01.2010 до 8:02 21.01.2010;
Через 2 минуты опять программа отсылает новые значения:
HDA - с 8:04 20.01.2010 по 8:04 21.01.2010;
Тренд - с 7:04 21.01.2010 до 8:04 21.01.2010;
И так далее….
В итоге получаем: ПОЛНОСТЬЮ РАБОТОСПОСОБНЫЙ ТРЕНД

Эксп №2: Имеем два канала HDA. Программой отсылаем в оба канала HDA значения границ (с 8:00 20.01.2010 по 8:00 21.01.2010), с периодом «1 цикл CALC».
Через 50 (затем увеличивали до 75 и 100) тактов, после того как каналам HDA были переданы значения границ, мы передаем значения границ в тренд (с 8:00 20.01.2010 до 8:00 21.01.2010), и тоже обновляем через каждые 2 минуты:

HDA - с 8:00 20.01.2010 по 8:00 21.01.2010;
Тренд - с 8:00 20.01.2010 до 8:00 21.01.2010;
Через 2 минуты программа отсылает новые значения:
HDA - с 8:02 20.01.2010 по 8:02 21.01.2010;
Тренд - с 8:02 20.01.2010 до 8:02 21.01.2010;
Через 2 минуты опять программа отсылает новые значения:
HDA - с 8:04 20.01.2010 по 8:04 21.01.2010;
Тренд - с 8:04 20.01.2010 до 8:04 21.01.2010;
И так далее….
В итоге получаем: в каналах HDA получены данные (причем все, за выбранный промежуток времени). Получены также значения границ в тренде. Но без прорисовки самого графика. Чтобы он прорисовался необходимо пошевелить скролл-баром. При этом иногда каналам (обоим или одному их них) присваивалась недостоверность(4 атрибут), при этом данные были получены полностью (атрибут 120 присваивалась 1))
Хотя количество тактов увеличивали с 10 до 20(30,40,50,60,70, и т.д.). Но результатов это не принесло никаких.

Эксп №3: Имеем два канала HDA. Программой отсылаем в оба канала HDA значения границ (с 8:00 20.01.2010 по 8:00 21.01.2010), с периодом «однократно», через 100 (если ставить кол-во тактов меньше 100, то см. Эксп №2) тактов после того как каналам были переданы значения границ, мы передаем значения границ в тренд. (с 8:00 20.01.2010 до 8:00 21.01.2010), и опять обновляем через 2 минуты:

HDA - с 8:00 20.01.2010 по 8:00 21.01.2010;
Тренд - с 8:00 20.01.2010 до 8:00 21.01.2010;
Через 2 минуты программа отсылает новые значения:
HDA - с 8:02 20.01.2010 по 8:02 21.01.2010;
Тренд - с 8:02 20.01.2010 до 8:02 21.01.2010;

Через 2 минуты опять программа отсылает новые значения:
HDA с 8:04 20.01.2010 по 8:04 21.01.2010;
Тренд с 8:04 20.01.2010 до 8:04 21.01.2010;
И так далее….

Также, при каждой 2-х минутной передачи значений границ в каналы мы их включали 3 атрибут.

В итоге: результаты схожи с эксп. №2. Причем очень часто каналу(ам) присваивалось недостоверность, при этом данные были получены (атрибут 120 = 1), но намного реже чем в эксп. 2.


Далее...
Вы нам писали что, цитирую: «В релизе 6.06.3 канал CALL_HDA должен иметь период "Однократно" и автоматически выключаться после отработки. Для того, чтобы он снова обратился к OPC-HDA-серверу, надо не только менять его временные границы, надо его включать.»

Как показал «Эксп. №1» - это не так.

Теперь вопросы:

Первое: почему в экп. 1 - все работает, а в эксп. 2 и эксп. 3 - не работает?

Второе: как нам все-таки сделать работоспособный СУТОЧНЫЙ график, с автоматической передачей значений границ и ПОЛНОЙ ПРОРИСОВКОЙ ЭКРАНА?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Тем не менее, Ваш ответ "Эксперименты прошли успешно" говорит о том, что предположение о рассинхронизации справедливо.

Пришлите нам, пожалуйста, Ваш тестовый проект, на котором Вы проводили все эти эксперименты.

Можете ли Вы прислать тот OPC-HDA-сервер (работающий в режиме эмуляции с накопленным архивом), с которым Вы работаете, и с подробными инструкциями, как его заставить работать у нас?
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2