Режим реального времени в WebScada на базе технологий OPC UA и WebSocket

в 6:48, , рубрики: scada, автоматизация, Анализ и проектирование систем, веб-сервисы, Программирование

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

WebSCADA системы давно разрабатываются компаниями разработчиками программного обеспечения систем автоматизации. Каждая из этих систем имеет недостатки, связанные со сложностью защиты передаваемой информации и своевременностью получения данных. Эти недостатки всегда сильно ограничивали промышленное внедрение таких систем. WebSCADA приложение вряд ли может конкурировать по безопасности с десктопным, а проблема своевременного получения информации в нем при использовании сети Интернет всегда существовала ввиду отсутствия полнодуплексных соединений (сервер не может отправить информацию клиенту по своей инициативе). Но последние разработки в области ПО автоматизации и веб-технологий позволяют вплотную приблизится к возможностям настольных SCADA систем.

Итак, что-же такого было разработано что мне захотелось создать собственную мини WebSCADA:

1. Корпорация OPC Foundation выпустила новый протокол OPC UA (ОРС Unified Architecture) взамен устаревшего OPC DA.
2. Появился протокол полнодуплесных соединений в Интернет — WebSocket.

Конечно, эти разработки появились не вчера, и на их основе уже много чего работает. Но попыток объединить эти технологии еще не было, и я решил попробовать.

OPCUA очень гибкий протокол с сервис-ориентированной архитектурой. Он поддерживает как веб-сервисы (SOAP), так и протокол обмена данными в двоичном виде.

Конечно, используя SOAP можно написать WebSCADA систему, напрямую взаимодействующую с OPC UA сервером, без всяких там «вебсокетов». Но в этом случае мы не можем получить полноценный механизм получения информации по подписке на события ввиду отсутствия полнодуплексного соединения. Да и накладные расходы велики по причине «жирности» XML и необходимости его парсинга. Поэтому мной решено было написать шлюз для перевода сообщений WebSocket в OPCUA двоичный протокол и обратно. Ну и конечно, необходимо написать веб-приложение непосредственно взаимодействующее со шлюзом.

Мой опыт программирования на C#, очень неплохая реализация стека OPCUA на .NET (видимо сказывается то что OPC протокол изначально разрабатывался исключительно под Windows) и быстро найденная на просторах Интернет нужная SDK определили мой выбор платформы для реализации шлюза.

Написание клиентской части шлюза (той, которая будет взаимодействовать с OPC серверами различных устройств автоматизации) производилось с использованием «.NET Based OPC UA Client & Server SDK» — библиотеки классов разработанной Немецкой компанией «Unified Automation GmbH». Для серверной части (реализующей WebSocket протокол) использовалась библиотека bauglir-websocket.

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

В итоге проделанной работы получился OPCUA-WebSocket шлюз в виде небольшого приложения, позволяющего соединятся с OPCUA сервером и производить обмен данными узлов системы автоматизации по протоколу WebSocket. Следовательно, у нас появляется возможность получать информацию от приборов АСУТП в реальном времени непосредственно в браузере (реальное время, конечно, с оговоркой на время задержки в сети).

image
Интерфейс Websocket-OPCUA шлюза (шлюз соединен с OPC сервером и с запущен web socket сервер)

Для наглядности я добавил функционал контроля узлов OPCUA сервера, контроля атрибутов этих узлов, контроля узлов находящихся в данный момент в мониторинге и контроля параметров WebSocket соединений.

Запуск шлюза выполняется достаточно просто. В поле «Url адрес» вводим имя хоста (или IP адрес) и порт, по которым буде выполнятся соединение. Если по данному адресу имеется активный «слушающий» OPCUA сервер то в текстовом поле «точки подключения» появится выпадающий список имеющихся точек подключения для данного сервера. Технология OPCUA поддерживает различные варианты обмена данными, в том числе и обмен шифрованными сообщениями по защищенному SSL каналу. Точки подключения являются доступными конфигурациями данного подключения для способов обмена данными между клиентом и сервером.

При успешном подключении к OPC серверу в левой верхней области рабочего окна Websocket-OPCUA шлюза появляется дерево объектов подключенных к серверу. Правее области дерева объектов расположена область просмотра значений атрибутов узлов.

После того как мы подключились к OPCUA серверу запускаем WebSocket сервер который и будет транслировать данные с узлов в браузер и обратно. Выбираем существующий или вводим свой хост и порт который сервер будет слушать. Запускаем WebSocket сервер кнопкой «старт».

Далее необходимо будет настроить работу веб-приложения. Это я планирую описать в следующей статье. Работа над веб-приложением еще не закончена. В шлюзе скорее всего тоже будут изменения, но суть его работы останется прежней.

Спасибо за внимание!

Автор: chers

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js