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. Следовательно, у нас появляется возможность получать информацию от приборов АСУТП в реальном времени непосредственно в браузере (реальное время, конечно, с оговоркой на время задержки в сети).
Интерфейс Websocket-OPCUA шлюза (шлюз соединен с OPC сервером и с запущен web socket сервер)
Для наглядности я добавил функционал контроля узлов OPCUA сервера, контроля атрибутов этих узлов, контроля узлов находящихся в данный момент в мониторинге и контроля параметров WebSocket соединений.
Запуск шлюза выполняется достаточно просто. В поле «Url адрес» вводим имя хоста (или IP адрес) и порт, по которым буде выполнятся соединение. Если по данному адресу имеется активный «слушающий» OPCUA сервер то в текстовом поле «точки подключения» появится выпадающий список имеющихся точек подключения для данного сервера. Технология OPCUA поддерживает различные варианты обмена данными, в том числе и обмен шифрованными сообщениями по защищенному SSL каналу. Точки подключения являются доступными конфигурациями данного подключения для способов обмена данными между клиентом и сервером.
При успешном подключении к OPC серверу в левой верхней области рабочего окна Websocket-OPCUA шлюза появляется дерево объектов подключенных к серверу. Правее области дерева объектов расположена область просмотра значений атрибутов узлов.
После того как мы подключились к OPCUA серверу запускаем WebSocket сервер который и будет транслировать данные с узлов в браузер и обратно. Выбираем существующий или вводим свой хост и порт который сервер будет слушать. Запускаем WebSocket сервер кнопкой «старт».
Далее необходимо будет настроить работу веб-приложения. Это я планирую описать в следующей статье. Работа над веб-приложением еще не закончена. В шлюзе скорее всего тоже будут изменения, но суть его работы останется прежней.
Спасибо за внимание!
ссылка на оригинал статьи http://habrahabr.ru/post/229975/
Добавить комментарий