Как стать автором
Обновить

Анимация схем в SCADA

Время на прочтение 4 мин
Количество просмотров 9.6K
При создании HMI довольно часто встречается задача построить отображение сложной схемы связанных элементов. Это могут быть разветвленные трубопроводные схемы, электроснабжение и т.п.

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

image

В этой заметке рассказывается о раскраске элементов подобных схем, приводится описание способа решения для Simatic WinCC v7 и реализации в Simargl SCADA. Если Вам не приходится работать с WinCC, то можно смотреть сразу в конец статьи — там есть любопытное видео.

Для более наглядного представления, зачем всё это надо, возьмем небольшую простую схему.

image

Теперь представим, что будет при наличии операции. Как много времени потребуется, чтобы проследить путь продукта по трубопроводной системе? Вооружимся секундомером.

Готовы? Поехали!
image


По моим наблюдениям, надо 10 – 15 секунд.

А теперь вспомним, что (внезапно) операций может быть несколько одновременно. Это “слегка” усложнит задачу. Готовы проверить себя еще раз?

Поехали!
image


Переводя на приличный язык слова моего коллеги: “Вот ведь оказия какая! Пока отследишь второй маршрут, про первый очень сильно забудешь. Какая чудесная и удобная схема!”

А ведь схема действительно простая – на ней даже нет показаний приборов и различных подписей (отдельный привет любителям рисовать “трехмерные” трубы). На практике все может быть хуже. Мне доводилось встречаться со значительно большими схемами (более 400 задвижек).

Что может сделать оператор на такой мнемосхеме? В лучшем случае не спеша открыть задвижки по маршруту и надеяться, что не ошибся. Но что если переключение надо сделать быстро, а цена ошибки велика?

Выход из этой ситуации очевиден – надо раскрашивать линии по ходу маршрута, причем желательно делать это еще до управляющего воздействия. Как ни странно, мне не встречалось готовое решение из коробки даже у дорогих пакетов SCADA. Попытка настраивать подкраску вручную для каждой линии грозит затягиванием наладки почти до бесконечности.

Решение для WinCC v7


Я решал такую задачу на базе WinCC v7. К сожалению, по условиям контракта я не имею права выложить готовое решение, но зато могу описать возможный путь решения. Вдруг кому-то будет полезно.

Сразу отмечу, что речь пойдет именно о семействе продуктов WinCC версии 7, поскольку там присутствует возможность использовать VBA. Необходимо предупредить, все описанное ниже является скорее хаком, используется от безысходности и подходит не во всех случаях.

Дальнейшее рассуждение буду вести в терминах труб и задвижек, хотя, понятно, для схем электроснабжения будет всё то же самое.

Мысленно разобьем схему на участки так, чтобы с каждой стороны был только один вход/выход. Т.е. если в трубу врезан отвод, придется сделать три участка: до отвода, после и сам отвод.
Для создания схемы придется использовать два типа стандартных графических объектов:
Connector (для отрисовки линий) и Circle (для создания опорных точек схемы). Connector необходим, поскольку он позволяет определить, с какими объектами на схеме связан, в отличие от обычной линии. Стандартный Circle стоит переделать в CustomObject – это позволит избежать путаницы при переборе элементов мнемосхемы и дать удобные названия свойствам.

Часть опорных точек будет соответствовать местам соединений трубопроводов, а часть – задвижкам. Для последних выберем любое неиспользуемое свойство и назначим VBS-action, где заведём константу и присвоим ей строковое значение с наименованием задвижки:

image

Далее пишем скрипт на VBA, который будет проходить по всем элементам экрана и для каждого Connector формировать список опосредованно связанных задвижек, позволяя в итоге создавать текст VBS для свойства BorderColor. Этого можно достичь благодаря наличию у Connector двух свойств – TopConnectedObjectName и BottomConnectedObjectName, доступных в VBA.

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

image

D1 и D2 — массивы с именами задвижек; TubeColor — функция, возвращающая цвет и стиль линии в зависимости от состояния задвижек.

Важный момент: при записи VBS-скрипта в элемент необходимо также изменить триггеры.

В функции TubeColor будет необходимо задать все правила раскраски в зависимости от технологической ситуации. Разумеется, TubeColor необходимо вынести в Global script.

Далее начнется борьба за производительность, оптимизация VBS и т.п., поскольку WinCC с трудом переносит большие мнемосхемы. Но надо отдать должное коллегам из Siemens, скорость работы VBS заметно возросла, если я не ошибаюсь, с версии 7.3, что существенно облегчило жизнь разработчикам прикладных проектов.

Описание реализации в Simargl SCADA


Для отрисовки анимированных схем в Simargl SCADA входят два виджета:
SPipeScene – сцена для отрисовки линий и задания правил раскраски;
SPipe – для задания узловых точек и отображения изменения состояний полевого оборудования.

По сути, процесс сводится к простому размещению узловых точек схемы, привязке свойств к значениям тегов и размещению поверх сцены виджетов, отображающих состояние оборудования. Выглядит все это примерно так:


Любопытно, что для создания собственно схемы не пришлось вообще писать код.

Взять демо-версию Simargl SCADA, документацию и исходники проекта из видео можно со страницы в facebook.
Теги:
Хабы:
+5
Комментарии 37
Комментарии Комментарии 37

Публикации

Истории

Работа

QT разработчик
6 вакансий

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн