Как организовать flashing графического объекта на WinCC Unified

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Вышедшая в свет WinCC Unified зацепила сразу. Обладая, с точки зрения прикладного программиста, функционалом, близким к WinCC Professional, она продается за цену, сопоставимую с WinCC Advanced.

Полноценная работа со скриптами, полноценная подсистема алармов, клиент-серверная архитектура «из коробки», не требующая дополнительной лицензии, а так же многое другое — это прекрасно. Однако, как это часто бывает с абсолютно новым софтом, некоторые вещи поначалу вызывают легкое недоумение.

И как раз организация визуализации «мигания», при котором цвет графического объекта меняется с определенной частотой (например, с серого на зеленый при визуализации запуска двигателя) вызывает это самое недоумение. Дело в том, что цвет объекта можно динамизировать тэгом, скриптом или «миганием», но, несмотря на то, что Flashing относится с точки зрения редактора, к динамизации, оно задается статически.

В этой динамизации задается основной и «альтернативный» цвет, частота мигания и условия — «никогда», «всегда» и «нарушение диапазона» (range violation). Какое нарушение — непонятно. В общем, в настоящий момент имеется некоторое весьма досадное ограничение в системе, которое приходится обходить посредством старых-добрых костылей.

Для упрощения представим отображение состояния технологического агрегата в следующей цветовой гамме:

-отключен: серый (с контроллера приходит тэг StateRunning, если истина, то включен, если ложь, то отключен)

-включен: зеленый

-включается (тэг Starting с контроллера) или отключается (тэг Stopping): мигает серым и зеленым.

Да, я знаю, что надо еще добавить аварию и, возможно, неготовность и режим «обслуживание», да и состояние включен/отключен можно отображать двумя тэгами, но это учебный, а не боевой пример.

Для мнемознака насоса я применяю Dynamic Widget «Pumps → HeavyDutyPlasticCentrifugalPump» из штатной библиотеки, он мне очень нравится.

Объекты этого типа позволяют задавать основной цвет

Первый способ решить поставленную задачу — попроще в реализации и пришел в голову сразу. Необходимо создать несколько копий одного объекта, статикой задать его цвет или мигание, а показывать на мнемосхеме единомоментно только один, самый актуальный. Ну, к примеру, если мотор запускается, то мы должны отображать копию с настроенным BasicColor = flashing, а остальные прятать, играя свойством Visible.

Вот настроенные три объекта.

Далее свойство «видимость» (visibility) каждого объекта необходимо динамизировать посредством следующих скриптов.

Для каждого из скриптов не забываем указывать триггеры для срабатывания.

Разместить все три графических объекта друг над другом и можно запускать проверку:

https://vk.com/video183956096_456239051

Второй способ — менее очевидный, но мне кажется более красивым. Он заключается в использовании дополнительной переменной, значение которой меняется через равные промежутки времени (с истины на ложь и обратно). Планировщик задач (он же scheduler, он же «шедуллер») в WinCC Unified позволяет выполнять задачи с периодом от 100 миллисекунд, но нам подойдет и секундный цикл. Заводим внутреннюю переменную типа BOOL

Создаем скрипт, выполняющийся каждую секунду.

Берем один экземпляр SVG, применяемый в первом примере и динамизирвуем свойство BasicColor следующим скриптом.

Триггер этого скрипта следующий:

Данный способ имеет как достоинства, так и недостатки. К достоинствам относится, разумеется, использование всего лишь одного графического объекта вместо нескольких копий с разными статическими свойствами. Недостатки — лишняя вычислительная нагрузка. С учетом того, что «секундный» тэг является триггером для скрипта, весь скрипт будет исполняться каждую секунду вне зависимости от того, изменилось ли фактическое состояние оборудования или нет.

Источник: https://habr.com/ru/post/652071/


Интересные статьи

Интересные статьи

Привет, Хабр! Ранее в нашем блоге мы подробно разбирали особенности и возможности VMware SD-WAN, а также тестировали решение. Сегодня мы хотим поделиться реальным кейсом внедрения сервиса. Речь ...
Зимой в блоге RUVDS было несколько статей о написании загрузчиков для «классического» BIOS, в т.ч. симпатичная графическая демка, целиком помещающаяся в загрузочном секторе и работающая в VGA-режиме 3...
У тестировщика много возможностей повысить качество продукта и сделать работу команды комфортнее. Главное – обсуждать любые изменения с коллективом и внедрять только то, что удобно и ...
Эта статья — почти точный транскрипт моего мастер-класса, который я провёл в офисе Mail.ru Group для студентов наших образовательных проектов. Мне больше всего нравится такое определение ста...
Эта статья посвящена одному из способов сделать в 1с-Битрикс форму в всплывающем окне. Достоинства метода: - можно использовать любые формы 1с-Битрикс, которые выводятся компонентом. Например, добавле...