Ширинкин Андрей
Forum Member / Участник форума
Участник № / Member № 3320
отправлено / posted
Имеем OPC сервер, с которого получаем архивные значения по HDA, отображающиеся на тренде, с вводом начального и конечного времени (здесь все в порядке). Программа ТМ, сама, каждые две минуты подает новые значения границы (начальное и конечное время) в тренд, а также в первые два аргумента (T_FROM и T_TO) канала HDA. Проблема возникла с отображением графика, т.е. каждые две минуты получаем новое количество аргументов в канале HDA, также изменяются границы и в тренде, а сама линия графика не прорисовывается на тренде. Причем если через N-ое время самостоятельно изменить (начальное и конечное) время в тренде (через компоненты), то график дорисовывается.
Сообщения / Posts 41 | Из / From: Российская Федерация
| IP / IP: IP адрес / IP address |
отправлено / posted
Есть предположение, что у Вас данные поступают в каналы позже, чем границы передаются ГЭ "Тренд". Следовательно, тренд отрисовывается сначала без данных.
отправлено / posted
Например разбить программу на две. Первая будет получать данные в каналы и запускать вторую, а вторая будет передавать границы в тренд.
Поляков Илья
Active Forum Member / Активный участник форума
Участник № / Member № 3358
отправлено / posted
Испробовали оба варианта. Пошли оба, но с одним моментом - пока горизонтальным скролл-баром не пошевелишь, график не перерисовывается.
Сообщения / Posts 68 | Из / From: Россия
| IP / IP: IP адрес / IP address |
График перерисовывается в момент изменения границ тренда. Каким образом это делается, программно или вручную, неважно.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ширинкин Андрей
Forum Member / Участник форума
Участник № / Member № 3320
отправлено / posted
Вот что выявили: Как было сказано ранее программа ТМ, сама, каждые две минуты подает новые значения границы (начальное и конечное время) в тренд, а также в первые два аргумента (T_FROM и T_TO) канала HDA. Вы посоветовали нам разбить программу на две части или сделать это в разных тактах (см выше) Заработали оба варианта.
НО, С ОДНИМ НЮАНСОМ: если мы подаем границы в тренд за один час (например с 8:00 до 9:00), а в канале HDA имеем массив за сутки (с 0:00 до 23:59) то все в порядке, график перерисовывается без проблем. А если границу в тренде увеличим хотя бы на 30 минут (т.е. с 8:00 до 9:30) то график перестает перерисовываться, пока не пошевелишь скролл-баром.
Нам в итоге надо отобразить на трэнде весь массив из HDA, т.е. сутки, потому и запрашиваем в HDA сутки.
Также во всех перечисленных вариантах эксперимента иногда не получаем данные в канале HDA, хотя границы в канал были переданы. После перезагрузки МРВ, данные вновь получаем.
Сообщения / Posts 41 | Из / From: Российская Федерация
| IP / IP: IP адрес / IP address |
отправлено / posted
"А если границу в тренде увеличим хотя бы на 30 минут (т.е. с 8:00 до 9:30) то график перестает перерисовываться, пока не пошевелишь скролл-баром." Что значит "не перерисовывается"? Не изменяется временная шкала на тренде? Шкала устанавливается "с 8:00 до 9:30", но график прорисован только "с 8:00 до 9:00"?
Если Вы считываете массив за сутки, то зачем Вы повторяете считывание каждые 2 минуты?
В каком релизе Вы работаете?
В релизе 6.06.3 канал CALL_HDA должен иметь период "Однократно" и автоматически выключаться после отработки. Для того, чтобы он снова обратился к OPC-HDA-серверу, надо не только менять его временные границы, надо его включать.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ширинкин Андрей
Forum Member / Участник форума
Участник № / Member № 3320
отправлено / posted
>>Что значит "не перерисовывается"? >>Шкала устанавливается "с 8:00 до 9:30", но график прорисован только "с 8:00 до 9:00"?
Да
>>Если Вы считываете массив за сутки, то зачем Вы повторяете считывание каждые 2 минуты?
Так надо. На тренде показываем "окно" изменения параметра за сутки от текущего времени. БД обновляется раз в 2 минуты
>>В каком релизе Вы работаете?
6.06.3 + пакет исправлений IDE_BASE_20091118.RAR
>>В релизе 6.06.3 канал CALL_HDA должен иметь период "Однократно"...
Ширинкин Андрей
Forum Member / Участник форума
Участник № / Member № 3320
отправлено / posted
>>В релизе 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)
Сообщения / Posts 41 | Из / From: Российская Федерация
| IP / IP: IP адрес / IP address |
отправлено / posted
Проведите, пожалуйста, следующий эксперимент. Считайте суточный архив 2-минутных значений целиком и остановите считывание архива. Затем запустите Вашу программу изменения границ тренда с периодом 2 мин. - 8:00-10:00, 8:02-10:02, 8:04-10:04 и т.д. Я провел такой эксперимент на Вашем проекте (который Вы присылали нам). Никаких нарушений не обнаружил. При каждом смещении границ тренда подчитывался новый фрагмент архива.
Поэтому можно преположить, что, введенная задержка между подъемом архива и смещением тренда не достаточна - архив в канале обновляется позже, чем смещается тренд. В процедуре участвуют 3 потока: программы, чтение архива, отображение на тренде. Все 3 потока друг по отношению к другу асинхронны. И рассинхронизация вполне соизмерима с введенной задержкой (2 цикла основного потока). При этом надо учитывать также и то, что каналы в потоках обрабатываются в порядке своих ID, что также вводит дополнительную рассинхронизацию. Возможно, что Вам придется увеличивать задержку.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Ширинкин Андрей
Forum Member / Участник форума
Участник № / Member № 3320
отправлено / posted
Эксперименты прошли успешно. Вопрос: как узнать что данные в канале HDA получены полностью?
Сообщения / Posts 41 | Из / From: Российская Федерация
| IP / IP: IP адрес / IP address |
Поляков Илья
Active Forum Member / Активный участник форума
Участник № / Member № 3358
отправлено / posted
И еще вопрос: по каким критериям каналу HDA выставляется аппаратная недостоверность (004 атрибут)?
Сообщения / Posts 68 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Из документации: "Атрибут ASK (120) - – переменная DataReady, принимает значение 1, если запрошенные данные успешно считаны;" "1" запоминается, поэтому после того, как Вы проверили этот атрибут, сбросьте его.
Недостоверность выставляется, если OPC-сервер не отвечает или отвечает с передачей свойства "BAD" по любому из параметров.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Поляков Илья
Active Forum Member / Активный участник форума
Участник № / Member № 3358
отправлено / posted
>>или отвечает с передачей свойства >>"BAD" по любому из параметров.
Ширинкин Андрей
Forum Member / Участник форума
Участник № / Member № 3320
отправлено / posted
Провели вот такой эксперимент: Допустим, в данный момент реальное время 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 - не работает?
Второе: как нам все-таки сделать работоспособный СУТОЧНЫЙ график, с автоматической передачей значений границ и ПОЛНОЙ ПРОРИСОВКОЙ ЭКРАНА?
Сообщения / Posts 41 | Из / From: Российская Федерация
| IP / IP: IP адрес / IP address |
отправлено / posted
Тем не менее, Ваш ответ "Эксперименты прошли успешно" говорит о том, что предположение о рассинхронизации справедливо.
Пришлите нам, пожалуйста, Ваш тестовый проект, на котором Вы проводили все эти эксперименты.
Можете ли Вы прислать тот OPC-HDA-сервер (работающий в режиме эмуляции с накопленным архивом), с которым Вы работаете, и с подробными инструкциями, как его заставить работать у нас?
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |