Документация

Архитектура системы

                Web-SCADA Pult.online построена на гибкой и масштабируемой клиент-серверной архитектуре. Основными логическими компонентами системы являются сервер и коммуникационные шлюзы. Шлюзы обеспечивают постоянное соединение с сервером, мониторинг аварий, трендов и выполнение задач по расписанию. Сервер предоставляет пользовательский интерфейс и обеспечивает хранение исторических данных. 
    
                

  
    
      
        image/svg+xml
        
        
      
    
  
  
  
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
        
        
        
        
        
        
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
    
      
    
  
  
  Сервер
  
    
      
    
    Шлюз
  
  
  
    
    Оборудование
  
  
    
      
    
    Узел
  
  
    
    Веб-интерфейс
  
  
  
  ПО Пульт.Онлайн
  
  
  
  
  HTTPS + WSS
  WSS
  OPC-UAMQTTModbus...
  WAN / LAN
  WAN / LAN
  LAN / WIRE
  



                Сервер и Шлюз представляют собой программные компоненты и могут быть запущены на широком спектре устройств, работающих под ОС 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).
            

Алгоритм работы

Запуск сервера

                
  1. На устройство, выбранное в качестве сервера, выполняется установка сервера (одной командой через SSH-терминал)
  2. Команда запуска ПО сервера автоматически добавляется в автозагрузку устройства
  3. Опционально, в интерфейсе настроек или через конфиги задаются первоначальные настройки сервера (порт веб-интерфейса, использование SSL и тп.)
  4. Веб-интерфейс сервера доступен на указанном в настройках порту (обычно 80 или 443)
  5. В веб-интерфейсе создается проект, добавляются пользователи, добавляются шлюзы, узлы, рисуются мнемосхемы
  6. Выполняется сборка проекта
  7. Сервер готов к обработке данных со шлюзов или с локальных узлов

Запуск шлюза

                При необходимости использования удаленных шлюзов выполняется их установка и подключение к серверу:
                
  1. На устройство, выбранное в качестве шлюза, выполняется установка шлюза (одной командой через SSH-терминал)
  2. Мастер установки запрашивает параметры подключения к серверу (хост, порт и тп)
  3. Команда запуска ПО шлюза автоматически добавляется в автозагрузку устройства
  4. Веб-интерфейс шлюза доступен на порту 8008 (если в настройках не задано иное значение)
  5. При необходимости, через интерфейс возможно выполнить дополнительную настройку шлюза (отключить ненужные сервисы, включить логирование, изменить пароль, настроить перезагрузку при отсутствии связи и тп.)
  6. Шлюз в бесконечном цикле начинает выполнять попытки подключения к серверу

Коммуникация Сервер-Шлюз

                
  1. Шлюз устанавливает исходящее соединение с сервером (не требуются белые IP)
  2. Сервер принимает подключение и подписывается на изменения переменных
  3. Шлюз загружает с сервера сборку (список переменных для мониторинга и управления, наборы скриптов и расписаний)
  4. Шлюз в фоновом режиме с помощью имеющихся драйверов выполняет опрос переменных, выполняет скрипты и расписания (независимо от наличия связи с сервером)
  5. Изменения значений переменных отправляются на сервер
  6. Сервер отображает изменения на мнемосхемах, записывает тренды, журналирует аварии и генерирует уведомления пользователям при возникновении актуальных для них событий (согласно настройкам групп)
  7. При отсутствии связи изменения сохраняются в кольцевом буфере для последующей отправки
  8. При получении от сервера команды на установку нового значения, шлюз адресует команду соответствующему драйверу и возвращает серверу в ответ результат выполнения команды (успех или код ошибки)
  9. При изменении проекта сервер автоматически формирует для шлюза новую сборку и отправляет шлюзу уведомление о необходимости загрузить новую сборку (см. п. 3)

Работа пользователей

                
  1. Пользователь, используя ПК, ноутбук или мобильное устройство, с помощью веб-браузера открывает веб-интерфейс сервера (см. Запуск сервера, п.3)
  2. Пользователь выполняет авторизацию и получает права доступа, соответствующие настройкам групп
  3. В соответствии с правами доступа пользователь получает доступ к проектам и их разделам (узлы, мнемосхемы, исторические данные, отчеты и тп.)
  4. С помощью мнемосхем и системных инструментов Пользователь выполняет мониторинг и управление элементами проектов (узлами и отдельными переменными)
  5. Сервер уведомляет пользователя об актуальных событиях (аварии, предупреждения и тп.) по доступным каналам (аудиовизуально через интерфейс, с помощью SMS-, Telegram- и Email-уведомлений)

Совместимость

                Программные компоненты Пульт.онлайн (Сервер и Шлюз) могут быть установлены на устройствах под управлением ОС Linux на следующих архитектурах:

                
ARM MIPS x86 x64 Эльбрус
Linux
Работа ПО протестирована на следующих ОС:
CentOS, Ubuntu, Debian, Fedora, OpenWRT, Аstra Linux, Alt Linux и др.
Со списком доступных дистрибутивов вы можете ознакомится в разделе Скачать. ПО Пульт.Онлайн компилируется статически (без включения внешних зависимостей) и не требует установки дополнительных библиотек, фреймворков или модулей. На работу Пульт.Онлайн так же не влияют обновления сторонних компонентов операционной системы.
Пользовательский интерфейс
Работа пользователей с системой Пульт.Онлайн осуществляется через браузер и может выполняться с помощью устройств на любой современной ОС: Windows, Linux, Android, iOS, MacOS и др. Windows Linux Android iOS MacOS

Драйверы полевых устройств

                В Пульт.Онлайн V3 работой с протоколами полевых устройств занимаются отдельные микросервисы (драйверы переменных). Список поддерживаемых протоколов будет расширяться.
                
                Доступные драйверы:

                               
                
                В разработке:
                
                
  • МЭК 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.