С овременные научные исследования в области физики высоких энергий, биофизики, микробиологии и медицины невозможны без крупномасштабных экспериментальных установок, состоящих из сотен различных устройств, генерирующих огромные потоки данных, передаваемых по множеству каналов. Для управления подобными конфигурациями требуется удобная и устойчивая в эксплуатации система, обеспечивающая управление параметрами элементов установки и контроль доступа к ним, оперативное выявление проблемных участков и создание резервных копий наиболее важных параметров установки. Для управления узлами и детекторами подобных комплексов, среди которых можно отметить Большой адронный коллайдер [1] и NICA (Nuclotron based Ion Collider fAcility, nica.jinr.ru), сейчас используются объектно-ориентированные системы управления Simatic WinCC OA (Windows Control Panel Open Architecture, www.winccoa.com) и Tango (TAco Next Generation Objects) Controls, www.tango-controls.org).

WinCC OA — проприетарное программное обеспечение архитектуры «клиент — сервер», предназначенное для управления нестандартными, сложными и часто специфическими конфигурациями, такими как группировка бюджетных серверов. Это ПО построено по модульному принципу — функционально разделено на структурные элементы (драйверы), обмен данными между которыми происходит по протоколу TCP/IP. WinCC в основном применяется в таких экспериментах, как ALICE и ATLAS [1]. Создание и управление проектами в среде WinCC осуществляется средствами объектно-ориентированного программирования. Объекты представляются в виде точек данных, определяющих образ конкретного физического устройства или процесса. Для написания пользовательских сценариев используется язык CONTROL++, синтаксис которого близок языку Си/С++. Данные сценарии могут быть использованы в качестве обработчиков событий и данных. В инструментальный набор входят клиентские приложения для персональных компьютеров и мобильных устройств, а также несколько пакетов расширений. Однако проприетарность и относительно бедный набор инструментария (например, отсутствие штатных инструментов отладки кода вынуждает пользователей использовать отладчик Microsoft Visual Studio) ограничивают применение WinCC специалистами в прикладной области, не обладающими глубокими навыками программирования.

Tango Controls — распределенная объектно-ориентированная среда с открытым исходным кодом, предназначенная для создания систем управления экспериментальными установками, ускорителями, а также различным программным обеспечением и оборудованием. Сейчас Tango используется для управления экспериментальными лазерными установками и аэродинамическими трубами, позволяя конфигурировать электронику, управлять питанием в стойках с оборудованием, контролировать системы мониторинга пучка, управлять магнитами, подготовкой и подачей газовых смесей. Для обмена данными между структурными элементами используется omniORB — высокопроизводительная реализация CORBA [2], признанная сегодня технологическим стандартом при создании распределенных приложений и обеспечивающая кроссплатформное взаимодействие систем управления аппаратными ресурсами. Модель Tango поддерживает атрибуты, методы и свойства.

Ключевое отличие Tango Controls от WinCC OA, которая рассматривает систему управления как набор сигналов, считывает и записывает значения процессов, — концепция структурных элементов: устройств (device) и классов устройств (device class). Устройства создаются серверами устройств (device server) — процессами, реализующими классы устройств, которые, в свою очередь, отвечают за преобразование аппаратных протоколов связи в протоколы связи Tango Controls.

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

Среда Tango Controls предоставляет большой выбор готовых драйверов для оборудования различной сложности, возможность создания единой системы управления оборудованием и программным обеспечением посредством описания сценариев их опроса, не требуя организации и построения баз данных вручную — вся система хранения данных автоматизирована. Однако штатная версия Tango Controls имеет посредственную систему визуализации данных. Кроме этого, в ней отсутствуют инструменты управления проектами через веб-интерфейс. Обычно подобные недостатки решаются пользователями путем интеграции сторонних программных продуктов, что требует от разработчика знаний программирования. Нужен единый механизм управления элементами аппаратно-программной конфигурации через веб-интерфейс распределенной системы управления. Такой интерфейс должен позволять интегрировать различные модули инфраструктуры для создания единого центра управления и визуализации данных. При этом не важно, под управлением какой операционной системы работают приложения и какие языки программирования использовались. Для реализации подобных задач на производстве, в промышленных масштабах, используется CORBA, например веб-интерфейс системы управления технологическим процессом, который включает в себя набор технических и программных средств, использующих распределенную архитектуру построения и распределенную систему ввода и вывода информации. Однако применительно к Tango подобных решений сегодня в открытом доступе нет.

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

В каждой системе Tango Controls должен быть хотя бы один работающий сервер устройств. Машина, на которой работает такой сервер, — Tango Host. Tango использует MariaDB или MySQL в качестве базы данных, работающей по принципам CMDB [3], и разрешает доступ к этой базе данных через определенный сервер устройств Tango. Сервер устройств предоставляет информацию о конфигурации всем остальным компонентам системы, а также каталог компонентов и устройств во время выполнения, что позволяет клиентским приложениям находить устройства в распределенной среде. Переменная среды Tango Host предоставляет информацию об IP-адресе и порте, на котором сервер устройств прослушивает соединения Tango.

Одна и та же система управления Tango может иметь несколько баз данных. Можно использовать несколько систем управления Tango, в каждой из которых будет собственная база данных с описанием собственной конфигурации серверов устройств.

Основной задачей сервера устройств является предоставление одной или нескольких услуг одному или нескольким клиентам. Сервер устройств проводит большую часть своего времени в ожидании подключения к нему клиентов. Для создания серверов устройств и клиентов в Tango используются языки программирования C++, Java и Python.

Для реализации в среде Tango единого механизма управления элементами аппаратно-программной конфигурации посредством веб-интерфейса был разработан алгоритм работы структурных элементов распределенной системы управления (рис. 1).

Управление распределенными аппаратными комплексами
Рис. 1. Алгоритм работы структурных элементов Tango Controls

Устройство (симулятор) представляет собой симулятор аппаратного оборудования, позволяющий имитировать различные режимы работы оборудования, используя массивы данных, полученные из различных источников или сгенерированных случайным образом в режиме реального времени. Сервер устройств осуществляет взаимодействие с устройством (симулятором) и клиентом, отправляя и получая данные между ними. Мониторинг потоков данных осуществляется через веб-интерфейс (рис. 2), в виде графиков, отображающих данные, полученные с сервера устройств клиентом. Имеется также конфигурационный файл в формате JSON, в котором хранятся имена атрибутов, необходимых для получения данных, а также адрес для подключения к серверу устройств.

Управление распределенными аппаратными комплексами
Рис. 2. Функциональная схема работы веб-интерфейса

После запуска симулятора, сервера устройств и клиента происходит попытка считать значения атрибутов, полученных из различных источников и сформированных в виде JSON-файла. Если по каким-либо причинам невозможно получить значения атрибутов, то они будут сгенерированы случайным образом. Далее сервер устройств Tango периодически запрашивает симулятор для считывания значений атрибутов. Затем клиентом выполняется считывание конфигурационного файла для получения адреса сервера устройств, имен атрибутов для считывания и имен машин (hostname), которым разрешен доступ к TCP-серверу. После этого клиент подключается к серверу устройств Tango и запрашивает значения атрибутов. Из считанных клиентом значений атрибутов формируется JSON-объект для последующей отправки на TCP-сервер, который функционирует параллельно процессу считывания и обработки значений атрибутов от сервера устройств, получает и обрабатывает запросы от веб-интерфейса, а также выполняет вызов метода отправки новых значений атрибутов на сервер устройств Tango. Веб-интерфейс, в результате общения с TCP-сервером, получает актуальные значения атрибутов в формате JSON.

С целью повышения безопасности TCP-сервер реализован при помощи интерфейса неблокирующего сокета, запускается в главном процессе и является серверной частью веб-интерфейса, созданного для управления структурными элементами.

Для организации управления структурными элементами, а также безопасной передачи данных клиента TCP-серверу при попытке подключения клиента к TCP-серверу и передачи запроса, выполняется проверка hostname операционной системы, в которой запущен клиент и которое содержится в заголовке запроса. Если hostname разрешает доступ к TCP-серверу, то клиент получает право на передачу ему данных, в противном случае соединение блокируется. Реализовано три типа запросов, которые обрабатывает TCP-сервер: запрос на получение актуальных данных; запрос на изменение значений атрибутов сервера устройств Tango; все остальные запросы. В случае если входящий запрос не является запросом на получение актуальных данных или запросом на изменение значений атрибутов, то TCP-сервер отправляет клиенту сообщение об ошибке.

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

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

Представленный алгоритм (рис. 1) позволил сформировать систему управления структурными элементами Tango, а также обеспечил возможность управления устройством (симулятором) посредством веб-интерфейса. Данная система управления работает сейчас в облачной инфраструктуре Лаборатории информационных технологий ОИЯИ.

***

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

Литература

1. Мария Григорьева, Марина Голосова, Евгений Рябинкин, Алексей Климентов. Экзабайтное хранилище научных данных // Открытые системы. СУБД. — 2015. — № 4. — С. 14–17. URL: https://www.osp.ru/os/2015/04/13047963 (дата обращения: 21.11.2022).

2. Мартин Шааф, Франк Маурер. Интеграция Java и CORBA: точка зрения программиста // Открытые системы. СУБД. — 2001. — № 10. — С. 46–49. URL: https://www.osp.ru/os/2001/10/180538 (дата обращения: 21.11.2022).

3. Александр Александров. CMDB: досье для управления ИТ // Открытые системы.СУБД. — 2006. — № 10. — С. 29–35. URL: https://www.osp.ru/os/2006/10/3910054 (дата обращения: 21.11.2022).

Алексей Бондяков (aleksey@jinr.ru), Андрей Кондратьев (konratyev@jinr.ru) – инженеры-программисты, Лаборатория информационных технологий, Объединенный институт ядерных исследований (Дубна).

DOI: 10.51793/OS.2022.17.39.005