Документация
Архитектура системы
Web-SCADA Pult.online построена на гибкой и масштабируемой клиент-серверной архитектуре. Основными логическими компонентами системы являются сервер и коммуникационные шлюзы. Шлюзы обеспечивают постоянное соединение с сервером, мониторинг аварий, трендов и выполнение задач по расписанию. Сервер предоставляет пользовательский интерфейс и обеспечивает хранение исторических данных. Сервер и Шлюз представляют собой программные компоненты и могут быть запущены на широком спектре устройств, работающих под ОС Linux. Сервер системы может быть размещен в интернете или в локальной сети объекта. При необходимости, Сервер и Шлюз могут быть установлены вместе, на одном устройстве. Например, на контроллере, работающем под ОС Linux. К одному серверу допускается подключение неограниченного* количества узлов и шлюзов. К одному шлюзу допускается подключение неограниченного* количества узлов и каскадных шлюзов. * - ограничение обусловлено только производительностью устройств и количеством доступных переменных по лицензии.
Функции сервера
- Предоставление пользовательского web-интерфейса
- Коммуникация со шлюзами
- Хранение исторических данных
- Рассылка уведомлений пользователям
Функции шлюза
- Коммуникация с сервером
- Опрос полевых устройств (узлов)
- Выполнение скриптов и задач по расписанию
- Буферизация данных при разрыве связи
- Отправка данных на сервер
Полезная информация
- Сервер и шлюзы "из коробки" поддерживают SSL
- Для сервера доступна автоматическая генерация сертификатов LetsEncrypt
- Возможен защищенный интернет-доступ к "локальным" серверам (не требуется белый IP)
- Язык скриптов - ограниченный JS
- Тренды хранятся в бинарных файлах в виде записей фиксированной длинны (16 байт)
- Журнал событий (аварии, пользовательские действия и тп.) хранится в БД SQLITE
- Взаимодействие между сервисами выполняется через UNIX-сокеты или TCP-сокеты по JSONRPC2.0/WS
- Все компоненты системы устанавливаются в одну папку (обычно /pult) - легко организовать полное резервное копирование
Работа пользователей с системой осуществляется через веб-интерфейс сервера с помощью компьютеров и мобильных устройств на любой ОС (Windows, MacOS, Android, iOS, Linux и т.д.). Не требуется установки дополнительного ПО и приложений - работа с системой осуществляется через обычный браузер. Все функции системы доступны онлайн, включая редактор проектов с графическим редактором мнемосхем. Дистрибутивы Сервера и Шлюза полностью устанавливаются в одну папку (обычно /pult) и представляют из себя наборы исполняемых файлов, размещенных в папке services, которые взаимодействуют по протоколу JSONRPC2.0 и по сути являются микросервисами. Каждый микросервис выполняет свою задачу (например, отправку уведомлений по SMS или мониторинг MQTT-переменных). Настройки микросервисов определяются конфигурационными файлами config.cfg в папке микросервиса. Запуск и остановка системы осуществляется скриптами start, stop и restart, размещенными в корне папки установки. При перезагрузке устройства ПО Пульт.Онлайн запускается автоматически, веб-интерфейс сразу становится доступен на заданных портах (обычно 80, 443 или 8008).
Алгоритм работы
Запуск сервера
- На устройство, выбранное в качестве сервера, выполняется установка сервера (одной командой через SSH-терминал)
- Команда запуска ПО сервера автоматически добавляется в автозагрузку устройства
- Опционально, в интерфейсе настроек или через конфиги задаются первоначальные настройки сервера (порт веб-интерфейса, использование SSL и тп.)
- Веб-интерфейс сервера доступен на указанном в настройках порту (обычно 80 или 443)
- В веб-интерфейсе создается проект, добавляются пользователи, добавляются шлюзы, узлы, рисуются мнемосхемы
- Выполняется сборка проекта
- Сервер готов к обработке данных со шлюзов или с локальных узлов
Запуск шлюза
При необходимости использования удаленных шлюзов выполняется их установка и подключение к серверу:
- На устройство, выбранное в качестве шлюза, выполняется установка шлюза (одной командой через SSH-терминал)
- Мастер установки запрашивает параметры подключения к серверу (хост, порт и тп)
- Команда запуска ПО шлюза автоматически добавляется в автозагрузку устройства
- Веб-интерфейс шлюза доступен на порту 8008 (если в настройках не задано иное значение)
- При необходимости, через интерфейс возможно выполнить дополнительную настройку шлюза (отключить ненужные сервисы, включить логирование, изменить пароль, настроить перезагрузку при отсутствии связи и тп.)
- Шлюз в бесконечном цикле начинает выполнять попытки подключения к серверу
Коммуникация Сервер-Шлюз
- Шлюз устанавливает исходящее соединение с сервером (не требуются белые IP)
- Сервер принимает подключение и подписывается на изменения переменных
- Шлюз загружает с сервера сборку (список переменных для мониторинга и управления, наборы скриптов и расписаний)
- Шлюз в фоновом режиме с помощью имеющихся драйверов выполняет опрос переменных, выполняет скрипты и расписания (независимо от наличия связи с сервером)
- Изменения значений переменных отправляются на сервер
- Сервер отображает изменения на мнемосхемах, записывает тренды, журналирует аварии и генерирует уведомления пользователям при возникновении актуальных для них событий (согласно настройкам групп)
- При отсутствии связи изменения сохраняются в кольцевом буфере для последующей отправки
- При получении от сервера команды на установку нового значения, шлюз адресует команду соответствующему драйверу и возвращает серверу в ответ результат выполнения команды (успех или код ошибки)
- При изменении проекта сервер автоматически формирует для шлюза новую сборку и отправляет шлюзу уведомление о необходимости загрузить новую сборку (см. п. 3)
Работа пользователей
- Пользователь, используя ПК, ноутбук или мобильное устройство, с помощью веб-браузера открывает веб-интерфейс сервера (см. Запуск сервера, п.3)
- Пользователь выполняет авторизацию и получает права доступа, соответствующие настройкам групп
- В соответствии с правами доступа пользователь получает доступ к проектам и их разделам (узлы, мнемосхемы, исторические данные, отчеты и тп.)
- С помощью мнемосхем и системных инструментов Пользователь выполняет мониторинг и управление элементами проектов (узлами и отдельными переменными)
- Сервер уведомляет пользователя об актуальных событиях (аварии, предупреждения и тп.) по доступным каналам (аудиовизуально через интерфейс, с помощью SMS-, Telegram- и Email-уведомлений)
Совместимость
Программные компоненты Пульт.онлайн (Сервер и Шлюз) могут быть установлены на устройствах под управлением ОС Linux на следующих архитектурах:ARM MIPS x86 x64 ЭльбрусСо списком доступных дистрибутивов вы можете ознакомится в разделе Скачать. ПО Пульт.Онлайн компилируется статически (без включения внешних зависимостей) и не требует установки дополнительных библиотек, фреймворков или модулей. На работу Пульт.Онлайн так же не влияют обновления сторонних компонентов операционной системы.Работа ПО протестирована на следующих ОС:
CentOS, Ubuntu, Debian, Fedora, OpenWRT, Аstra Linux, Alt Linux и др.Пользовательский интерфейс
Работа пользователей с системой Пульт.Онлайн осуществляется через браузер и может выполняться с помощью устройств на любой современной ОС: Windows, Linux, Android, iOS, MacOS и др.
Драйверы полевых устройств
В Пульт.Онлайн V3 работой с протоколами полевых устройств занимаются отдельные микросервисы (драйверы переменных). Список поддерживаемых протоколов будет расширяться. Доступные драйверы:
- Modbus-TCP
- Modbus-RTU
- OPC UA
- MQTT
- HTTP
- ICMP (Ping)
- GPSD (спутниковые координаты)
- GPIO (через командную строку)
- SNMP (через командную строку)
- МЭК 60870-5-101
- МЭК 60870-5-104
- Modbus-RTU-Over-TCP
- Драйвер виртуальных переменных (с поддержкой математических выражений для агрегации и пост-обработки значений физических переменных)
- Драйвер аварийных переменных (наблюдение других переменных и генерация аварийных сообщений при выполнении указанных условий)
- Драйвер видеокамер (для вывода видеопотока на мнемосхемах)
Интеграционные возможности
- При создании пользователя с API-ключом возможен доступ ко всем функциям сервера через API по протоколу JSONRPC2.0/WebSocket. Доступ выполняется с правами и от имени указанного пользователя. Через API можно получить исторические данные, текущие значения переменных, подписаться на мониторинг переменных и тд.
- Доступ к API любого сервиса (включая Сервер и Ядро) через интерфейс командной строки (CLI)
- При указании переменным параметров вывода в modbus-карту, возможен доступ к значениям переменных по Modbus-TCP (как на стороне сервера, так и/или на стороне шлюза)
- При указании переменным параметров вывода в командную строку, возможен экспорт значений и изменений в файлы, сторонние скрипты и базы данных (через CLI)
- В скриптах возможно выполнение http-запросов к сторонним сервисам по заданной логике
- В скриптах возможна отправка Telegram-, SMS- и Email-уведомлений по заданной логике
- С помощью драйвера командной строки (drv_cmd) возможно чтение/запись значений в переменные из результатов команд командной строки. Данный способ подходит для работы с GPIO устройств.
- С помощью драйвера HTTP (drv_http) возможно чтение/запись значений в переменные через произвольные http-запросы (как входящие, так и исходящие)
- Журнал событий доступен в формате БД SQLITE
Безопасность
При размещении сервера в интернете взаимодействие всех компонентов системы осуществляется через защищенное соединение по протоколам HTTPS и WSS. Безопасность соединения подтверждается SSL-сертификатом, установленном на сервере. Авторизованные пользователи получают привилегии в соответствии с установленными разрешениями. Дополнительный уровень безопасности обеспечивает режим двухфакторной аутентификации с помощью SMS и ограничение входа по маске IP-адресов. Автоматически выполняется полное резервное копирование системы и логирование всех действий пользователей.
Производительность
Серверная часть ПО Пульт.онлайн разрабатывается на языке C в парадигме Zero-copy (минимизация операций копирования и выделений памяти). Сетевой уровень приложений реализован по однопоточной схеме. Такая схема более эффективна, поскольку исключает накладные расходы на переключение контекста, создание потоков и синхронизацию. Взаимодействие между микросервисами осуществляется через UNIX-сокеты. Обмен данными с помощью UNIX-сокетов выполняется быстрее TCP-сокетов, так как они работают полностью внутри ядра. Это позволяет избежать накладных расходов на обработку протокола TCP/IP, уменьшаются задержки на переключение контекста и минимизируется использование процессора. Эти и другие решения позволили добиться высокой производительности и существенно снизить требования к ресурсам. Так, для мониторинга 1.000.0000 переменных с частотой изменения каждой переменной 1 раз в секунду (1M сигналов в секунду) требуется всего 2 потока на процессоре 4GHz и менее 4GB оперативной памяти.
Использование нового шлюза
с текущей версией сервера
Новую версию шлюза можно использовать с текущей версией сервера через modbus-карту.
Новый шлюз может отображать значения своих переменных, полученные от разных драйверов, на указанных портах, как обычное modbus-устройство (Modbus-slave). Примеры можно найти в шаблонах сборки (см. вкладку "Сборка" в интерфейсе нового шлюза), например map_mbtcp.json.