SIEMENS, DF&PD

Предыдущее посещение: Чт июл 07, 2016 16:04 Текущее время: Чт июл 07, 2016 16:04

Часовой пояс: UTC + 3 часа




 [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Анимация - кто и как реализует?
СообщениеДобавлено: Ср дек 10, 2008 5:40 
Не в сети

Зарегистрирован: Вт дек 09, 2008 4:35
Сообщения: 7
Откуда: Krasnoyarsk
Привет всем.

WinCC 6. Надо на экранах делать анимацию. Видел реализацию, но не понравилось.

Хочется пока вот так:
сделать внутренний тэг stage4 и по таймеру менять его циклически от 0 до 4-х. А Index для Graphic object как раз и приравнивать значению этого тэга.

Но пока так и не понял, как завести такой вот глобальный триггер, который всегда во время работы рантайма будет менять stage4.
Как это сделать?

Но более широкий вопрос именно такой, как в теме - как вы осуществляете анимацию?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 10, 2008 8:21 
Не в сети
Это точно не человек

Зарегистрирован: Чт фев 16, 2006 12:27
Сообщения: 7512
Откуда: Украина
Лично я считаю, что анимация - далеко не самое главное в визуализации. Короче, оно - от лукавого.
Насчет таймера - добавляете канал System Info, в нем добавляете переменную типа Timer, пределы - от 0 до 4 и каждую секунду значение этой переменной будет автоматически меняться в рантайме.
Глобально - есть различные специализированные библиотеки технологических элементов для SCADA-систем. В некоторых из них можно включить анимацию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 10, 2008 9:27 
Не в сети

Зарегистрирован: Вт дек 09, 2008 4:35
Сообщения: 7
Откуда: Krasnoyarsk
Eugene1974 писал(а):
Лично я считаю, что анимация - далеко не самое главное в визуализации. Короче, оно - от лукавого.
Насчет таймера - добавляете канал System Info, в нем добавляете переменную типа Timer, пределы - от 0 до 4 и каждую секунду значение этой переменной будет автоматически меняться в рантайме.
Глобально - есть различные специализированные библиотеки технологических элементов для SCADA-систем. В некоторых из них можно включить анимацию.


Я придерживаюсь того же мнения по поводу анимации в операторских системах. Даже считаю, что это вредно для здоровья - смотреть один и тот же короткий мультик по 8 часов в день на протяжении, скажем, 10-ти лет :) Но есть старшие по должности товарищи в нашей партии, которым нравится иногда посмотреть на вращающиеся - на мониторе, на мониторе, конечно! - лопасти вентилятора. Так что - надо.

По таймерному каналу - уже попробовал. 1 секунда - много. надо 0.1 или 0.25. Буду мучать дальше. Хотя уже реализовал по-своему, по циклическому триггеру. Причём так, что если анимация отключается (сбросом соотв. тэга), то всё работает без анимации - показывает вск.-откл. и прочее.

По большому счёту в этом механизме мне не нравятся предупреждения WinCC о нежелательности использования циклических триггеров.
В остальном всё хорошо.

Кстати, какие есть бесплатные библиотеки элементов? Ссылки есть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 10, 2008 10:02 
Не в сети
Писатель со стажем

Зарегистрирован: Чт май 29, 2008 15:48
Сообщения: 985
Откуда: Минск
Анимация не нужна операторам в повседневной работе, но, как правило, производит очень положительное впечатление на высокоранговых представителей заказчика, так что вопрос нужна или нет не стоит :-)
Наиболее надежный с точки зрения производительности способ - сделать анимацию средствами WinCC. Например, рисовать простыми фигурами, линиями, закрашенными полигонами и потом динамизировать комбинацией свойств flash, blink и т.д. Так я делал всякие предупредительные пиктограммки. Преимущество - никогда не тормозит и не требует никаких триггеров.
Status Display на каждое значение индекса имеет свойство флеш, т.е. имея тег, принимающий 1 и 0 уже можно зацепить 4 кадра.
Можно сделать gif - картинку с любым количеством кадров, но придеться регистрировать в системе соотв. ocx.
Насчет циклических триггеров ответ однозначный - не использовать.
В WinCC 7.0 уже есть поддержка gifов. А также для анимации на VBS есть новый быстрый триггер 250 мс.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 12, 2008 5:13 
Не в сети

Зарегистрирован: Вт дек 09, 2008 4:35
Сообщения: 7
Откуда: Krasnoyarsk
Сорок Два писал(а):
Наиболее надежный с точки зрения производительности способ - сделать анимацию средствами WinCC. Например, рисовать простыми фигурами, линиями, закрашенными полигонами и потом динамизировать комбинацией свойств flash, blink и т.д. Так я делал всякие предупредительные пиктограммки.


Так и я делаю. Так все делают, я полагаю.

Сорок Два писал(а):
Status Display на каждое значение индекса имеет свойство флеш, т.е. имея тег, принимающий 1 и 0 уже можно зацепить 4 кадра.


Т.е. имея состояние "работа", например, равное 1, можно сделать кино из 2-х кадров. Из двух. Если из 4-х (или из 6-ти, 8-ми..), то нужно циклически менять значение какого-нибудь тэга.

Во! Только что возникла идея. Как объединение идеи номер раз из ответа про SYSTEM INFO/Timer и твоей, про flash.

1. Организуем таймер в систем инфо на 1, 2 или более секунд. Он меняется циклически, раз в секунду, но внутренними средствами wincc, так что производительность не падает.

2. Берём status display, и заполняем его кадрами по паре на каждый тик таймера (один - базовая картинка, следующий - флэш).

Таким образом имеем анимацию:
- два кадра в секунду;
- практически любой продолжительности (можно даже "ну, погоди" показать).

Минусы очевидны:
- мало кадров в секунду;
- чтобы включать-отключать анимацию, надо делать скрипт там же.

Короче, плохо с анимацией в WinCC. Совсем плохо.

Сорок Два писал(а):
Можно сделать gif - картинку с любым количеством кадров, но придеться регистрировать в системе соотв. ocx.
Насчет циклических триггеров ответ однозначный - не использовать.
В WinCC 7.0 уже есть поддержка gifов. А также для анимации на VBS есть новый быстрый триггер 250 мс.


Вот именно. Сейчас сделал так.

0. Завожу внутренние тэги:
- Stage4 (int);
- Animate (bool).

1. Для мульта надо хотя бы 4 кадра в сек. Поэтому на один из элементов одного из экранов (произвольный) вешаю скрипт, который читает тэг Stage4, инкременирует его, по превышению значения - обнуляет. Циклически, раз в 250 мс.

2. Делаю status display'и для каждого представления агрегата (моторы, флотомашины всякие и проч.). Набиваю их кадрами так (для 4-х-кадрового мультика, например):
- состояния 0..3 - кадры мульта;
- состояние 4 - состояние "останов" без анимации (серое что-то);
- состояние 5 - состояние "работа" без анимации (зелёное что-то).

К статус дисплею привязываю скрипт.
(Собственно от Stage4 мне надо только изменение 4 раза в секунду.)

Вот пример скрипта для Status Display, State, Current status:

Код:
Function Index_Trigger(ByVal Item)

   Dim di
   Set di = HMIRuntime.Tags("S7$Program(2)/DI_4_1.InState")
   di.Read()

   Item.Index = Animate4State(Item.Index, di.Value)

End Function


Скрипт вызывается по upon change тэга Stage4.
Всё просто, кажется.

Естественно, Animate4State - это скрипт глобальный, самописный.
Вот он:

Код:
Function Animate4State(Byval i, Byval di)

   Dim anim
   Set anim = HMIRuntime.Tags("Animate")
   anim.Read

   If anim.Value = False Then
      If di = False Then
         i = 4
      Else
         i = 5
      End If
   Else
      If di = False Then
         i = 0
      Else
         i = i + 1
         If i > 3 Then
            i = 0
         End If
      End If
   End If
   
   Animate4State = i
End Function


Всё. Здесь нет про Stage4, т.к. оно и не надо - как я уже говорил, достаточно его изменение получать 4 раза в секунду.

Таким образом есть у меня мульты и из 6-ти, и из 7-ми кадров. Ограничение - только фантазия и усидчивость..

(Для каждой продолжительности - свои глобальные скрипты. Хотя... Сделаю-ка я один универсальный скрипт!...)

Плюсы:
- циклический тэг только один (савсэм адын!);
- отработанность до совершенства :) (работает и с анимацией, и без неё - динамически можно включать и отключать).

Хотелось бы кадров 10 в секунду, конечно. Но и так пока прикольненько.


Последний раз редактировалось kostus_online Пт дек 12, 2008 5:31, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Универсальный глобальный скрипт для анимации
СообщениеДобавлено: Пт дек 12, 2008 5:30 
Не в сети

Зарегистрирован: Вт дек 09, 2008 4:35
Сообщения: 7
Откуда: Krasnoyarsk
Исправил свой скрипт. (Заменил множество скриптов одним.)

fn - количество кадров в последовательности мульта (4 кадра - значит "4";
aoi - animation off index - что показывать, если анимация разрешена, и сигнал = off (индекс кадра от нуля);
i - текущий индекс картинки в status display;
di - оцениваемый сигнал (в данном случае речь идёт только о дискретных состояниях: работа-простой, да-нет, вклю-откл.; аналоговые величины оценивать мультом не совсем хорошо)

Код:
Function AnimateXState(Byval fn, byval aoi, Byval i, Byval di)

   Dim anim
   Set anim = HMIRuntime.Tags("Animate")
   anim.Read

   If anim.Value = False Then
      If di = False Then
         i = fn+0
      Else
         i = fn+1
      End If
   Else
      If di = False Then
         i = aoi
      Else
         i = i + 1
         If i > (fn-1) Then
            i = 0
         End If
      End If
   End If
   
   AnimateXState = i

End Function


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 12, 2008 11:24 
Не в сети

Зарегистрирован: Чт мар 01, 2007 12:54
Сообщения: 5
Сорок Два писал(а):
Status Display на каждое значение индекса имеет свойство флеш, т.е. имея тег, принимающий 1 и 0 уже можно зацепить 4 кадра.
Можно сделать gif - картинку с любым количеством кадров, но придеться регистрировать в системе соотв. ocx.
Насчет циклических триггеров ответ однозначный - не использовать.

Здравствуйте, хотел поинтересоваться, у людей, которых есть опыт использования gif-анимации в WinCC 6. Насколько критично для производительности системы количество gif - картинок на одном кадре? По задумке в проекте будет 8-10 кадров, на каждом по 30-70 gif.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 10, 2009 12:00 
Не в сети
Писатель со стажем

Зарегистрирован: Чт май 29, 2008 15:48
Сообщения: 985
Откуда: Минск
В продолжении темы анимации...
Стандартный WinCC media control уже доказал свою несостоятельность в проигрывании видео....
В работе с gif картинками он тоже полный шит.
5 gif'ов на кадре уже зверски тормозят не только рантайм, но и график дизайнер.
Причем не зависимо от того, какие гифы - делал и 2 кадра с большим обновлением, и 10 кадров со сменой в 0.1 сек, и проч.
Очень хотелось анимировать техпроцесс с конвеерами и шнеками, красиво анимирровал, думал, только на ноуте тормозит, а на сервере, который помощнее, будет ок. Однако пришлось в итоге всю гифофню выкинуть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн окт 26, 2009 11:05 
Не в сети
Новый писатель

Зарегистрирован: Пн авг 04, 2008 15:16
Сообщения: 12
Я использую объект Status Display для анимации. В нём каждой битовой позиции назначается картинка для отображение. Всё что остается - это переключать бит. Я сделал переключение бита в контроллере (состояние RedConnect отображается через этот объект). Результат отличный:
- не грузит процессор (на Core 2 Duo 1733 МГц загрузка процессора по диспетчеру задач Windows с анимацией 100х100 точек - порядка 2..8%)
- при переключении картинок нет мигания

Результат меня очень устраивает. Единственное ограничение: картинок по количеству битов 32 + 1 (как основная, если тег равен 0).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Diemon и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group