Table of Contents
Состав системы
-

Среда разработки — это среда для создания прикладных SCADA-проектов и их развертывания на сервере.
-
Сервер — исполнительная система, обеспечивающая непрерывное выполнение загруженного проекта.
-

HMI-клиент — программный компонент, обеспечивающий визуализацию технологических данных.
-

Менеджер служб — ручное управление жизненным циклом процессов на сервере (запуск, остановка, перезапуск).
Лицензирование
Сравнение лицензий
Информация
Программное обеспечение "Симплайт 5" распространяется бесплатно. Лицензируется только компонент сервер. Лицензия предоставляется в виде электронного USB-ключа. Если он отсутствует и в проекте выбрана одна из трех лицензий — "Base", "Standard" или "Enterprise" — работа сервера в режиме исполнения ограничена по времени и составляет 60 минут. После этого служба сервера останавливается и наступает 5-ти минутный таймаут, в течение которого развертывание проекта недоступно.
При выборе лицензии "Free" cервер функционирует без ограничений по времени.
| Free | Base | Standard | Enterprise | |
|---|---|---|---|---|
| Максимальное количество тегов | 66 (физ/вирт — 33/33) | 2 000 (физ/вирт — 1 000/1 000) | 20 000 (физ/вирт — 10 000/10 000) | 1 000 000 (физ/вирт — 500 000/500 000) |
| Драйвер OPC UA/DA/HDA | клиент | клиент/OPC UA-сервер | клиент/OPC UA-сервер | клиент/OPC UA-сервер |
| Драйвер Modbus RTU/TCP/ASCII | клиент | клиент/Modbus-сервер | клиент/Modbus-сервер | клиент/Modbus-сервер |
| Драйвер Siemens S7 | нет | нет | да | да |
| Драйвер MQTT | нет | нет | клиент/MQTT-сервер | клиент/MQTT-сервер |
| Драйвер LDAP | нет | нет | да | да |
| Драйвер Ping | нет | да | да | да |
| Драйвер SNMP | нет | да | да | да |
| Драйвер Bus77 | да | да | да | да |
| REST API | нет | нет | да | да |
| Кросс-языковой публичный API (gRPC) | нет | нет | да | да |
| Поддержка оповещений E-mail, Max, Telegram | нет | да | да | да |
| Поддержка потокового видеонаблюдения (RTSP) | 1 поток | 2 потока | 16 потоков | до 256 потоков |
| Использование скриптов | да | да | да | да |
| Работа на Linux (ОС Astra, Ред ОС, Debian) | да | да | да | да |
| СУБД SQLite | да | да | да | да |
| СУБД PostgreSQL | нет | нет | да | да |
| СУБД TimescaleDB | нет | нет | да | да |
| СУБД Авадс СА | нет | нет | да | да |
| СУБД Tantor SE | нет | нет | да | да |
| Доступ к БД из скриптов | нет | нет | да | да |
| Архитектура клиент-сервер | локальное подключение | локальное подключение | да | да |
| Сетевые/WEB-клиенты (кол-во/макс. кол-во) | нет | нет | да (1/50) | да (2/500) |
| Распределенная архитектура сервер-сервер | нет | нет | да | да |
| Управление правами пользователей | нет | нет | да | да |
| Резервирование серверов (1+1, 1+N) | нет | нет | нет | да |
| Работа с отчетами | нет | нет | да | да |
| Время работы в режиме исполнения без USB-ключа | без ограничений | 1 час | 1 час | 1 час |
Электронный USB-ключ
Информация
Во время работы сервер выполняет проверку соответствия типа лицензии, указанного в проекте, и USB-ключа. Несовпадение лицензий может привести к формированию на сервере служебных предупреждений о несоответствии.
Установка ключа
Сведения о лицензии хранятся на электронном USB-ключе Guardant, который высылается вам после приобретения. Его необходимо подключить в USB-порт сервера системы. Нежелательно извлекать ключ во время работы системы исполнения.
После установки ключа в USB-порт светодиод внутри него должен непрерывно светиться.
В ОС Windows корректное распознавание ключа можно определить в диспетечере устройств по ID производителя. После установки ключа, выберите из списка устройство (HID-совместимое устройство, определенное поставщиком) и нажмите на нем правой кнопкой мыши. Далее вкладка "Сведения" → "ИД оборудования". Значение должно соответствовать записи VID_0A89.

Диагностика USB-ключа
- Нет индикации — попробуйте подключить ключ к другому USB-порту. Если светодиод не светится, проверьт работоспособность ключа на другом компьютере.
- Мигает 4 раза подряд без пауз — ключ не может установить соединение с драйвером. Если на компьютере установлены антивирусные программы, утилиты для контроля и мониторинга USB-портов или средства проактивной защиты, отключите их на время диагностики ключа.
- Мигает 2 раза подряд без пауз — ошибка памяти. Вероятной причиной является неисправность ключа. Проверьте его работоспособность на другом компьютере. Если на другом компьютере индикатор ведет себя так же, обратитесь в службу технической поддержки.
Изменение типа лицензии
Для внесения изменений в условия использования (например, изменение типа лицензии, количества тегов или клиентов) обратитесь в службу технической поддержки. После приобретения обновления мы отправим на ваш электронный адрес письмо со ссылкой на утилиту для обновления ключа GuardantUpdater.exe.
Внимание
Все шаги по обновлению описаны в главном окне утилиты. Необходимо тщательно соблюдать данную процедуру. Если обновление не требуется, не рекомендуется нажимать кнопки в утилите при подключенном USB-ключе, поскольку это переведет его в режим обновления; при этом основной рабочий функционал ключа утрачен не будет.

Установка и удаление
Системные требования
Операционная система
Windows: 10/11 (архитектура x64).
Linux:
- Astra Linux Special Edition 1.7 (архитектуры x64/ARM) и выше.
- РЕД ОС 8 (архитектуры x64/ARM) и выше.
- Debian 10 (архитектуры x64/ARM) и выше.
- Ubuntu 20 (архитектуры x64/ARM) и выше.
Внимание
Версия линукс Astra Linux Common Edition не поддерживается.
Информация
В ОС Linux поддерживается работа компонентов "Сервер", "HMI-клиент" и "Менеджер служб". Компонент "Среда разработки" доступен только в ОС Windows.
Минимальные требования
Процессор — многоядерный, с тактовой частотой не ниже 2 ГГц.
Видеокарта — интегрированная GPU.
Разрешение дисплея — 1920х1080 пикселей.
Память ОЗУ — не менее 6 Гб.
Свободное место на диске — не менее 10 Гб.
Подбор оборудования
Выбор характеристик ПК зависит от того, в какой роли он будет выступать – сервера или клиента. Необходимая производительность ПК-сервера напрямую зависит от требований разрабатываемого проекта:
- общего объема проекта (количества объектов проекта);
- количества опрашиваемых тегов и частоты их опроса;
- количества архивируемых тегов и частоты их архивации;
- количества и сложности скриптов, используемых в проекте;
- количества клиентов подключенных к серверу;
- количества, сложности и частоты построения отчетов.
Для сервера наиболее важными показателями являются объем оперативной памяти и производительность дисковой системы, в то время как процессор в меньшей степени влияет на быстродействие системы.
Клиент выполняет только задачи визуализации, поэтому для него могут быть использованы менее производительные конфигурации.
Установка на Windows
Загрузка инсталлятора
Загрузите установочный файл ПО "Симплайт 5"
После перехода по ссылке откроется окно с запросом контактных данных. Укажите имя, телефон, e-mail. В списке "Цель применения" выберите цель загрузки и cогласитесь с обработкой персональных данных, выбрав соответствующий флаг. Для начала загрузки необходимо, чтобы все поля формы были корректно заполнены.

Установка программы
Для установки "Симплайт 5" перейдите в каталог с установочным файлом setup_simplight_5.1.x.x (название может незначительно отличаться) и запустите его.

Чтобы продолжить процесс установки прочитайте условия лицензионного соглашения и согласитесь с ними.

На следующем этапе установщик предложит выбрать каталог для хранения проектов. Путь к каталогу можно указать, нажав кнопку "Обзор", либо оставить путь по умолчанию.
Внимание
Заранее определите подходящий каталог для хранения проектов, так как после установки системы изменить его имя и расположение будет невозможно. Если возникнет необходимость использовать другой каталог, полностью удалите программное обеспечение и при повторной установке укажите новый путь.

Далее выберите компоненты для установки. Ниже приведена наиболее распространенная конфигурация:
- Среда разработки — установка среды разработки проектов.
- Сервер:
- Установить сервер как службу — установка сервера как службы Windows.
- Установить менеджер служб — установка менеджера служб Симплайт.
- Файлы для Linux — копирование установочных файлов для Linux в каталог
C:\Users\Public\Documents\SimpLight_5.0\Linux files. Данный компонент можно установить сразу, либо при обновлении ПО. - HMI-клиент — установка клиента Симплайт.

После этого установщик предложит выбрать путь к системным файлам программы. Данный путь не рекомендуется изменять.

Укажите название каталога для хранения ссылок системных файлов меню "Пуск".

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

Далее откроется окно с прогрессом установки программы.

Для завершения работы мастера установки нажмите "Завершить".

После установки на рабочем столе и в меню "Пуск" появится каталог с ссылками. Можете использовать любой удобный метод доступа к компонентам программы.

Установка сервера
Введение
Сервер — это центральный узел "Симплайт 5", представляющий собой исполнительную систему. Он выполняет функции контейнера для развернутых прикладных проектов, а также является основной точкой сбора и обработки потоковых данных.
Особенности работы
- продолжает опрос тегов;
- производит обработку событий;
- выполняет основную логику ядра;
- продолжает архивировать данные в базу данных.
Сервер как служба
Сервер можно установить в паре с менеджером служб, либо выбрать раздельную установку.
Внимание
В случае установки компонентов по отдельности, недостающий компонент можно установить только после полного удаления программного обеспечения.
Для установки сервера в качестве службы ОС Windows выберите:
- Сервер
- Установить сервер как службу
- Менеджер служб Симплайт

Такой вариант установки приведет к тому, что ОС Windows будет автоматически загружать службу сервера при старте.

Если потребуется перезагрузить службу, воспользуйтесь командой services.msc ОС Windows. В списке процессов найдите Simplight Сервер и нажмите правой кнопкой мыши на нем. Из контекстного меню выберите "Остановить" и далее "Запустить".
Сервер как приложение
Если есть необходимость управлять сервером, используя отдельное приложение "Менеджер служб", в окне установщика "Выбор компонентов" выберите:
- Сервер
- Установить сервер как службу
- Менеджер служб Симплайт

После установки система поместит ссылку для запуска службы в меню "Пуск". При таком варианте установки запуск и остановка сервера осуществляются вручную с помощью менеджера.

Быстро вызвать менеджер можно из панели задач ОС.

Обновление
Чтобы обновить программу, не требуется удалять предыдущую версию — новая устанавливается поверх старой.
Загрузите последнюю версию ПО "Симплайт 5"
Запустите загруженный установочный файл с новой версией. В процессе обновления недоступно изменение каталога хранения проектов, а также нет возможности удалить уже установленный компонент системы.

Внимание
Чтобы изменить каталог хранения проектов или удалить один из компонентов, полностью удалите программу и установите её заново.
Все модули (кроме компонентов "Сервер"), которые не были установлены ранее, можно установить при обновлении.
Для установки недостающего модуля выберите его и нажмите "Далее".

Установка служб в Linux
Информация
В ОС Linux поддерживается работа компонентов "Сервер", "HMI-клиент" и "Менеджер служб". Компонент "Среда разработки" доступен только в ОС Windows.
Состав каталога "Файлы для Linux"
В процессе установки системы на ОС Windows установочные пакеты служб для Linux автоматически помещаются в каталог по умолчанию C:\Users\Public\Documents\SimpLight_5.0\Linux files. Перейдите в него, скопируйте необходимые файлы и перенесите их в ОС Linux.
Внимание
В случае отсутствия указанного каталога, повторно выполните установку программного обеспечения, выбрав флаг "Файлы для Linux" в окне "Выбор компонентов". После завершения установки каталог станет доступен.

Состав каталога:
simplight-hmi-client_5_amd64.deb— пакет HMI-клиента для Linux (архитектура amd64);simplight-hmi-client_5_arm64.deb— пакет HMI-клиента для Linux (архитектура arm64);simplight-hmi-client_5_x86_64.rpm— пакет HMI-клиента для Linux (RPM-пакет, архитектура x86_64);simplight-manager_5.deb— пакет менеджера служб;simplight-manager_5_arm64.deb— пакет менеджера служб для 64-битных ARM-систем;simplight-manager_5_x86_64.rpm— пакет менеджера служб (RPM-пакет, архитектура x86_64);simplight-server_5.x.x-xxxx_amd64.deb— пакет сервера (архитектура amd64);simplight-server_5.x.x-xxxx_arm64.deb— пакет сервера для 64-битных ARM-систем;simplight-server_5.x.x-xxxx_armhf.deb— пакет сервера для 32-битных ARM-систем (ARMv7);simplight-server_5.x.x-xxxx_red80.x86_64.rpm— пакет сервера для Red Hat-совместимых систем (RPM, архитектура x86_64).
Установка служб на Astra Linux
Для установки сервера запустите файл simplight-server_5.x.x-xxxx_amd64.deb.

Введите пароль суперпользователя.

Если указан верный пароль, программа-установщик приступит к установке службы сервера. В случае успешной установки система уведомит о запуске служб сервера в окне терминала. После этого окно установщика можно закрыть.

По тому же принципу установите пакеты simplight-hmi-client_5_amd64.deb и simplight-manager_5.deb. После установки всех необходимых пакетов в меню "Пуск" → "Утилиты" появятся две ссылки на файлы:

Видеопример установки служб Симплайт 5 на ОС Astra Linux можно посмотреть перейдя по ссылке.
Далее запустите менеджер служб. В окне менеджера отображается состояние служб Симплайт 5. В данный момент, поскольку проект на сервере ещё не развернут, сервер находится в состоянии "Остановлен". Сервис ресурсов и агент развертывания функционируют. После развертывания проекта на сервере статус изменится на "В работе".

Служебные файлы
Служебные файлы предназначены для мониторинга работы служб Симплайт 5.
Файл server.log содержит информацию обо всех событиях, происходящих в ядре сервера. Например, с его помощью можно определить по какой причине сервер не может запуститься после развертывания проекта. Данный файл часто требуется отправлять в службу технической поддержки для диагностики.
Файл deploy_agent.log помогает отслеживать успешность развертывания компонентов проекта.
Путь: C:\Users\Public\Documents\SimpLight_5.0
certs— каталог с сертификатами;figures— каталог с векторными объектами среды разработки;Linux files— каталог с установочными пакетами компонентов "Сервер", "Менеджер служб", "HMI-клиент" для ОС Linux.logs— каталог с логами генератора отчетов;modbus— каталог с шаблонами устройств, а также пользовательскими шаблонами;scripts— каталог с системными скриптами/библиотеками;deploy_agent.log— текстовый файл с логами агента развертывания;server.config.json— json-файл конфигурации сервера;server.log— текстовый файл с логами сервера;studio.config.json— json-файл конфигурации среды разработки.
Путь: /var/lib/simplight/common
certs— каталог с сертификатами;reportGenerator— каталог со служебными файлами "Генератора отчетов";scripts— каталог с системными скриптами/библиотеками;deploy_agent.log— текстовый файл с логами агента развертывания;server.config.json— json-файл конфигурации сервера;server.log— текстовый файл с логами сервера.
Удаление
Для удаления программы в ОС Windows перейдите в каталог "Симплайт 5" на рабочем столе и нажмите на "Удалить SimpLight ver.5".

Система запросит у вас подтверждение.

После нажатия кнопки "Да" запустится процедура удаления. В ходе процесса система предупредит о возможной потере данных.

Внимание
Перед тем как согласиться с удалением системных папок, сделайте резервную копию всех проектов, баз данных (если имеются), иначе все файлы будут удалены полностью без возможности восстановления. В случае выбора ответа "Нет", удаление не затронет каталог с проектами.
Для завершения деинсталляции нажмите "Ок".

Начало работы
Запуск среды разработки
Для запуска среды разработки откройте каталог "Симплайт 5" на рабочем столе и выберите "Среда разработки" из списка.

Список проектов
Список проектов — это стартовое окно со списком всех проектов, которые находятся в каталоге по умолчанию C:\SimpLight projects (если этот каталог не был изменен в процессе установки системы).

Для любого проекта из списка есть возможность активировать контекстное меню правой кнопкой мыши. В меню доступны функции:
- Переименовать — изменить имя выбранного проекта.
- Дублировать — создать копию выбранного проекта.
- Удалить — удалить выбранный проект.
- Экспортировать — выгрузить проект во внешний файл с раширением
.slzv5для резервного копирования или переноса. - Свойства — открыть окно с произвольными комментариями. В нем также доступна информация о дате/времени создания проекта и последнего изменения.
Создание нового проекта
Для создания нового проекта откройте меню "Файл" → "Новый проект".

В диалоговом окне "Создание проекта" введите его название, в полях "Лицензия" и "Количество тегов" оставьте значения по умолчанию и нажмите кнопку "Ок".
Информация
Лицензия распространяется только на компонент сервер. Если электронный USB-ключ отсутствует и в проекте выбрана одна из трех лицензий — "Base", "Standard" или "Enterprise" — работа сервера в режиме исполнения ограничена по времени и составляет 60 минут. После этого служба сервера останавливается и наступает 5-ти минутный таймаут, в течение которого развертывание проекта недоступно.
Информация
Тип лицензии и количество тегов можно изменить в процессе работы над проектом в меню "Лицензия".
Тест тегов
Инструмент "Тест тегов" позволяет отслеживать текущие значения активных тегов (физических и виртуальных) в режиме реального времени. Для быстрой демонстрации работы с инструментом выполните следующие действия:
- Перенесите каталог "Системные теги сервера" в окно "Проект". Это необходимо для того, чтобы система могла начать обрабатывать данные, полученные с перенесенных тегов.
- Нажмите кнопку "Сохранить" для сохранения изменений в проекте.
- Нажмите кнопку "Развернуть проект", чтобы отправить проект на сервер (в роли сервера в данном случае выступает инструментальный ПК, на котором установлена среда разработки).
- Нажмите кнопку "Тест тегов". После этого среда разработки перейдет в режим опроса технических тегов сервера, добавленных в качестве активных в проект.

Рядом с каждым системным тегом появится флаг для включения/выключения мониторинга. Можно выбирать теги по одному, либо включить отображение значений для всей группы. Для остановки режима тестирования нажмите кнопку 🟥 на панели инструментов.

Редактор мнемосхем
Для создания окна с визуализацией перейдите в "Редактор мнемосхем", нажав кнопку в панели редакторов, создайте новую мнемосхему и укажите имя.

Например, нам необходимо визуально отслеживать загрузку процессора сервера на мнемосхеме. Для этого выберите строку "Палитра компонентов" и перетащите компонент "Статический текст" в область редактирования. В свойствах элемента в поле "Текст" укажите "Загрузка процессора".

Для привязки значения используйте текстовый индикатор из "Общей галереи". Для выравнивания текста отредактируйте размер шрифта в свойствах. Индикатор можно перемещать в области редактирования с помощью мыши (с шагом 10 пикселей). Для позиционирования с точностью 1 пиксель используйте сочетание клавиш Ctrl + Left Right Up Down

Скрыть/показать галерею можно с помощью кнопки
на панели инструментов. После этого выполните привязку тега к индикатору: нажмите кнопку ... в поле "Привязки" и перетащите тег на аргумент. Сохраните и разверните проект на сервере.

Запуск HMI-клиента
Для запуска нативного клиента откройте каталог "Симплайт 5" на рабочем столе и выберите "HMI-клиент" из списка.

Выберите профиль по умолчанию localhost:8080.

Откроется мнемосхема с добавленным параметром загрузки процессора.

Чтобы увидеть значения тегов, необязательно запускать "Тест тегов". Достаточно в клиенте перейти в левое боковое меню и выбрать "Теги".

В данном режиме значения тегов указываются вместе с единицей измерения.

Удаление проекта
Если проект развернут на localhost, то при удалении система выдаст предупреждение:

Для удаления такого проекта необходимо:
- Развернуть на сервере другой проект.
- Вернуться к списку проектов.
- Повторить процедуру удаления.
Компоненты
Среда разработки
Редактор тегов
Редактор тегов
Режим "Редактор тегов" служит для настройки протоколов обмена и конфигурации тегов проекта.
Запуск редактора
Данный редактор открывается автоматически после выбора проекта из списка проектов, либо с помощью кнопки в панели редакторов.
Главное окно
Окно "Редактора тегов" включает в себя рабочие области:
- Панель редакторов — быстрое переключение редакторов.
- Меню — набор различных функций и параметров.
- Строка состояния — отображает информацию о состоянии. Набор состояний может различаться в зависимости от используемого редактора среды разработки.
- Источники — окно настройки протокола обмена данными с оборудованием и драйверов.
- Проект — окно, в которое переносят теги из числа всех имеющихся тегов окна "Источники". Теги, выбранные пользователем в окне "Источники" и перемещенные в область "Проект", называются активными. Данные активного тега считываются в базу данных и служат для контроля состояния технологического процесса.
- Свойства — окно свойств выбранного активного тега. Список свойств тегов зависит от его типа (физический или виртуальный), а также от типа данных, которые он получает (числовой, строковый, логический).

Панель редакторов
В среде разработки предусмотрены три режима работы:
- режим редактирования тегов и протоколов обмена данными;
- режим редактирования мнемосхем и графических объектов;
- режим редактирования отчетов.
После загрузки выбранного проекта переключение редакторов осуществляется с помощью кнопок в левом меню:
| Кнопка | Описание | Лицензия проекта |
|---|---|---|
![]() |
Редактор тегов |
Free, Base, Standard, Enterprise |
![]() |
Редактор мнемосхем |
Free, Base, Standard, Enterprise |
![]() |
Редактор отчетов |
Standard, Enterprise |
Строка состояния

В данной строке представлена информация о текущем проекте и режиме работы системы:
- Проект — название разрабатываемого проекта.
- Теги — суммарное количество тегов в проекте. В скобках указано соотношение тегов по количеству (физические : виртуальные).
- Профиль — название активного профиля.
- Сообщения — системные сообщения.
- Режим — режим работы редактора мнемосхем.
- Версия — версия ПО.
Источники
Введение
В системе используются следующие типы источников данных:
- Системные теги сервера — служебная информация о работе сервера.
- OPC DA — драйвер протокола из семейства OPC для обмена данными в реальном времени.
- OPC HDA — драйвер протокола из семейства OPC, предназначенный для доступа к историческим, архивированным данным.
- OPC UA — драйвер протокола OPC UA. Протокол обеспечивает независимую от платформы и производителя связь между оборудованием и системами.
- Modbus — драйвер открытого коммуникационного протокола Modbus TCP/RTU/ASCII.
- PING — драйвер мониторинга доступности сетевых устройств (хостов, серверов, контроллеров).
- SNMP — драйвер сбора данных с сетевых устройств (маршрутизаторов, коммутаторов, серверов, ИБП) по протоколу Simple Network Management Protocol (SNMP).
- MQTT — драйвер протокола MQTT (Message Queuing Telemetry Transport) для обмена данными в IoT и промышленных системах.
- Bus77 — драйвер протокола обмена данными с устройствами от компании iRidi.
- Siemens S7 — драйвер протокола обмена данными с устройствами Siemens.
| Кнопка | Описание |
|---|---|
Настройка драйвера Siemens S7 |
|
Настройка драйвера Bus77 |
|
Настройка драйвера MQTT |
|
Настройка драйвера SNMP |
|
Настройка драйвера PING |
|
Настройка драйвера MODBUS |
|
Добавить сервер OPC UA |
|
Редактировать OPC UA-сервер |
|
Удалить OPC UA-сервер |
Системные теги сервера
Системные теги сервера позволяют отслеживать ключевые параметры производительности рабочей станции, на которой работает сервер системы.
- Общая свободная оперативная память — процент свободной оперативной памяти ПК относительно общего объема ОЗУ.
- Потребляемая оперативная память — объем оперативной памяти (в МБ), занятой работой сервера.
- Скорость потребления оперативной памяти — динамика расхода ОЗУ (в МБ/мин), позволяющая оценить интенсивность использования памяти.
- Загрузка процессора — процент использования центрального процессора сервером системы.
- Свободное место на диске — процент доступного дискового пространства.
- Скорость наполнения диска — динамика заполнения диска (в МБ/мин); важная характеристика для прогнозирования нехватки рабочего пространства на диске.
- Лицензионный ключ — сведения об используемой лицензии проекта:
- Статус — текущий статус подключения лицензии.
- Тип лицензии — категория лицензии, определяющая набор доступных функций.
- Количество тегов лицензии — максимально допустимое количество тегов, которое может быть использовано в проекте.
- Количество клиентов лицензии — максимальное количество одновременных подключений клиентов.
- Версия сервера — номер и сборка программного обеспечения серверной части системы.
- Текущее время сервера — системное время, установленное на сервере.
- Время запуска сервера — дата и время последнего старта сервера.
- Смещение по UTC — разница во времени между локальным временем сервера и всемирным координированным временем в секундах.
- Количество подключенных клиентов — текущее число активных подключений рабочих мест к серверу.
OPC UA
Стандартный протокол для обмена данными в промышленных автоматизированных системах.
Окно настроек OPC UA-сервера содержит 2 вкладки:
- Подключение.
- Синхронизация.
На вкладке "Подключение" доступны параметры для настройки подключения к серверу:
- URL сервера — поле, в котором указывается IP-адрес и порт подключения к OPC UA-серверу.
- Отображаемое имя — имя сервера в системе.
- Basic128Rsa15 — устаревшая политика. Используется для совместимости со старыми системами.
- Basic256 — более надежная политика, но также устаревшая. Не рекомендуется использовать в новых проектах.
- Basic256Sha256 — современная политика.
- Aes128_Sha256_RsaOaep — современная политика, соответствующая актуальным криптографическим стандартам.
- Aes256_Sha256_RsaPss — самая строгая и рекомендуемая политика безопасности.
- Отсутствует — данные передаются в открытом виде. Используется только в защищенных сетях для тестирования и отладки.
- Подписать — цифровая подпись всех сообщений. Гарантия, что телеметрия и команды не были подменены.
- Подписать и шифровать — данные сначала подписываются, а затем шифруются.
- Анонимный — без указания данных аутентификации.
- Логин и пароль — после выбора этой опции становятся доступны для заполнения поля:
- Имя пользователя — имя пользователя для доступа.
- Пароль — пароль пользователя для доступа.
На вкладке "Синхронизация" доступны параметры для настройки режима работы Симплайт 5 в качестве OPC UA-сервера:

- История тегов — включение/отключение архивирования истории значений тегов в OPC UA.
- Время отсутствия связи — максимальное время недоступности данных до установки статуса "Плохое качество".
- Интервал разделения при загрузке — длительность сегментов истории при запросе данных от сервера для оптимизации загрузки.

| Тег OPC UA | Описание |
|---|---|
Для аналогового значения |
|
Для дискретного значения |
Modbus
Драйвер открытого коммуникационного протокола Modbus TCP/RTU/ASCII.
В левой части окна находится структура, которую вы создаете при настройке драйвера. В правой расположен набор свойств для каждого выбранного компонента структуры.

Определить тип доступа тега можно с помощью значков стрелочных индикаторов в драйвере.
| Тег Modbus | Тип доступа |
|---|---|
Чтение/запись |
|
Только чтение |
|
Только запись |
- Имя — уникальное название узла для обращения к нему в системе.
- Комментарий — дополнительная информация об узле для удобства сопровождения.
- Хост — IP-адрес или сетевое имя устройства.
-
Порт — номер TCP-порта для подключения (обычно 502).
-
Режимы:
- Прямой — стандартный режим для нативных устройств Modbus TCP.
- RTU поверх TCP — режим для устройств с последовательным портом, работающих через Ethernet-конвертер.
- ASCII поверх TCP — режим для редких устройств, использующих ASCII-кодировку поверх сети.
- Имя — уникальное название узла в системе.
- Комментарий — поясняющая информация об устройстве.
- COM-порт — номер последовательного порта для подключения (0-255).
- Порт-путь к файлу — путь к виртуальному COM-порту в системах типа Linux (/dev/ttyS0).
- Скорость — скорость обмена данными (75, 110, 134, 150, 300, 600, 1200, 1800, 2400, 4800, 7200, 9600, 14400, 19200, 38400, 57600, 115200, 128000).
- Бит данных — количество бит данных в кадре (5-8).
- Стоповых бит — количество бит, обозначающих конец кадра (1 или 2).
- Четность — способ проверки ошибок (Нет, Чет, Нечет).
- Управление портом — метод управления потоком (Нет, Аппаратное, Xon/Xoff).
- Протокол:
- RTU — Modbus RTU.
- ASCII — Modbus ASCII.
- Имя — уникальное название данного устройства внутри узла.
- Комментарий — дополнительная информация о подключаемом устройстве.
- Адрес — идентификатор устройства (Slave ID) в сети Modbus (1-255).
- Таймаут ожидания — время ожидания ответа от устройства в мс.
- Повторы при ошибке — количество повторных попыток запроса при неудаче (не более 100).
- Повторное соединение при ошибке — интервал перед попыткой переподключения после разрыва связи (не более 100000).
- Количество регистров в запросе — максимальное количество регистров, читаемых/записываемых за один запрос (2-125).
- Функции записи — разрешенные команды для записи данных:
05, 06— запись одиночных значений: функция05для одного бита (катушки), функция06для одного числа (регистра).15, 06— групповая запись битов и одиночная запись чисел: функция15для нескольких битов, функция06для одного регистра.05, 16— одиночная запись битов и групповая запись чисел: функция05для одного бита, функция16для нескольких регистров.15, 16— групповая запись для максимальной эффективности: функция15для нескольких битов, функция16для нескольких регистров.
- Оптимизатор — алгоритм объединения отдельных запросов в пакеты для повышения эффективности:
- Нет — оптимизация отключена, каждый тег запрашивается отдельным Modbus-запросом. Обязательно для устройств, не поддерживающих множественное чтение.
- Data — анализирует карту адресов и группирует логически смежные адреса в один пакет. При наличии разрывов в карте формируются отдельные пакеты (для адресов 1, 2, 5, 6 будут созданы два пакета:[1, 2] и [5, 6]).
- Full — полная оптимизация: логика работы аналогична Data, но разрывы в адресном пространстве могут быть включены в один пакет, если это снижает общее число транзакций (для адресов 1, 2, 5, 6 может быть отправлен один пакет [1…6]. Данные по адресам 3, 4 будут получены, но отброшены).
- Имя — уникальное имя тега в проекте.
- Комментарий — краткое пояснение.
- Адрес — адрес данных в устройстве (доступен ввод адреса в HEX-формате).
- Область памяти (Регион):
Coils (0x)— биты, доступные для чтения и записи (функции 01, 05, 15).Discrete Inputs (1x)— биты только для чтения (функция 02).Holding Registers (4x)— 16-битные регистры для чтения и записи (функции 03, 06, 16).Input Registers (3x)— 16-битные регистры только для чтения (функция 04).
- Тип значения:
Bool— логическое значение (true/false).Int16— целое число со знаком (-32 768 до 32 767).Int32— длинное целое со знаком (-2 147 483 648 до 2 147 483 647).Float32— число с плавающей запятой (±3.4 × 10³⁸).Uint16— целое число без знака (0 до 65 535).Float16— половина слова с плавающей запятой (±65 504).UInt32— длинное целое без знака (0 до 4 294 967 295).Int64— целое со знаком (±9.2×10¹⁸).UInt64— целое без знака (0 до 1.8×10¹⁹).Double (Float64)— число с двойной точностью (±1.7×10³⁰⁸).
- Тип доступа:
- Чтение/запись — разрешены и чтение значения, и запись.
- Только чтение — значение можно только читать из устройства.
- Только запись — значение можно только записывать в устройство.
- Порядок байт:
Default / BigEndian— стандартный для Modbus порядок: старший байт идет первым[1][2][3][4].LittleEndian— обратный порядок: младший байт идет первым[2][1][4][3].BigEndian 4_3_2_1— полная инверсия байт[4][3][2][1].BigEndian 3_4_1_2— перестановка слов и байт внутри них[3][4][1][2].LittleEndian 1_2_3_4— порядок слов Little-endian, байты в словах Big-endian (редко).LittleEndian 2_1_4_3— порядок слов Little-endian, байты в словах Little-endian.
- Принудительно писать с кодом 0х06 — при включении флага запись в регистр всегда выполняется функцией 06 (Write Single Register), даже для многобайтных данных.
- Использование бита — при включении флага читается не весь регистр, а только один конкретный бит внутри него.
- Номер бита — номер бита (0-15) в регистре, который будет использоваться, если включено "Использование бита".
Ping
Драйвер мониторинга доступности сетевых устройств (хостов, серверов, контроллеров).

- Активность — можно деактивировать опрос устройства на время ремонтных работ:
- 0 — Offline.
- 1 — Online.
- 2 — Disable.
- Статус — статус устройства (1 — Online; 0 — Offline).
- Качество — индикация качества сигнала в процентах (0 — 100%).
Изменять состояние тега "Активность" необходимо только воздействием с мнемосхемы. Т.е. если, к примеру, требуется вывести устройство из опроса, недостаточно отключить опрос в свойствах тега — выполните привязку и воздействуйте на него с мнемосхемы.
- Имя — уникальное сетевое имя устройства для идентификации в системе.
- Хост (IP-адрес) — сетевой адрес устройства в сети.
- Интервал пинга — периодичность проверки доступности устройства путем отправки ping-запросов.
SNMP
Драйвер сбора данных с сетевых устройств (маршрутизаторов, коммутаторов, серверов, ИБП) по протоколу Simple Network Management Protocol (SNMP).
Окно настройки драйвера протокола SNMP.

- Имя — уникальное имя устройства в системе.
- Комментарий — дополнительное описание устройства.
- Перехват ловушек — включение приема асинхронных уведомлений (trap) от устройства.
- Хост — IP-адрес или имя хоста SNMP-устройства.
- Порт — UDP-порт для запросов (обычно 161).
- Версия —версия протокола SNMP:
- SNMP v1 — первая и самая простая версия протокола, обеспечивающая базовые функции мониторинга, но не поддерживающая шифрование и использующая примитивную аутентификацию по сообществу (community string).
- SNMP v2c — улучшенная версия, которая добавила новые типы запросов (например, GetBulk для эффективного получения больших объемов данных). Использует небезопасную аутентификацию по сообществу.
- SNMP v3 — наиболее современная и безопасная версия протокола, которая поддерживает шифрование трафика и надежную аутентификацию пользователей.
- Сообщество — пароль для аутентификации в версиях 1 и 2c (например, "public").
- Таймаут — время ожидания ответа от устройства в миллисекундах.
- Повторы — количество повторных попыток запроса при таймауте.
- Имя — уникальное имя тега в проекте.
- Комментарий — дополнительное описание тега для удобства настройки.
- OID — идентификатор объекта, уникальный адрес параметра в MIB-базе устройства.
- Тип доступа — режим работы: "Только чтение", "Только запись" или "Чтение/запись".
- Тип значения — тип данных, возвращаемых или принимаемых по OID (
Int32,Int64,Uint32,Uint64,String). - Добавлять индекс экземпляра (.0) — флаг, определяющий необходимость автоматического добавления суффикса .0 к OID-адресу при опросе SNMP-агента:
- Вкл — к каждому OID добавляется индекс экземпляра .0 (например, .1.3.6.1.2.1.1.1.0). Используется для доступа к скалярным (единичным) объектам MIB-дерева.
- Выкл — OID используется без добавления .0. Применяется для доступа к табличным (индексированным) объектам или при ручном указании полного OID.
Для добавления в устройство OID (Object Identifier) контролируемого узла нажмите кнопку "Выбор OID". Откроется одноименное диалоговое окно.
➕ Загрузить MIB файл — позволяет добавить в программу новый MIB-файл, чтобы расширить список доступных OID.
❌ Выгрузить MIB — удаляет ранее загруженный MIB-файл из программы.

hrSystem (1.3.6.1.2.1.25.1)— общая информация о системе: аптайм, количество пользователей, параметры ОС.hrStorage (1.3.6.1.2.1.25.2)— сведения о хранилищах: диски, разделы, оперативная память, swap.hrDevice (1.3.6.1.2.1.25.3)— перечень устройств: процессоры, сетевые адаптеры, принтеры и прочие компоненты.hrSWRun (1.3.6.1.2.1.25.4)— информация о запущенных процессах/программах в системе.hrSWRunPerf (1.3.6.1.2.1.25.5)— производительность запущенного ПО: использование процессора и памяти.hrSWInstalled (1.3.6.1.2.1.25.6)— список установленного программного обеспечения.hrMIBAdminInfo (1.3.6.1.2.1.25.7)— административная информация о MIB (обычно мало используется, служебный раздел).
MQTT
Драйвер протокола для обмена данными в IoT и промышленных системах.
Окно настройки драйвера протокола MQTT.

- Имя — уникальное название подключения к брокеру в системе.
- Комментарий — дополнительная информация о подключении.
- Хост — адрес или доменное имя MQTT-брокера.
- Порт — сетевой порт для подключения (обычно 1883 или 8883 для SSL).
- Имя пользователя — логин для аутентификации на брокере.
- Пароль — пароль для аутентификации.
- Шифрование — флаг включения защищенного соединения (SSL/TLS).
- Доверять сертификату сервера — флаг игнорирования ошибок проверки сертификата (для самоподписанных).
- ID клиента — уникальный идентификатор клиента для брокера.
- KeepAlive Интервал — периодичность отправки служебных пакетов для поддержания соединения (в секундах).
- Чистая сессия — флаг, указывающий брокеру не хранить подписки и не доставлять пропущенные сообщения после переподключения.
- QoS подписки — уровень качества обслуживания (гарантии доставки) для получаемых сообщений.
- Максимально один раз (0) — брокер отправляет сообщение один раз без подтверждения. Возможна потеря данных.
- По крайней мере один раз (1) — брокер гарантирует доставку, повторяя отправку, пока не получит подтверждение. Возможны дубликаты.
- Точно один раз (2) — брокер гарантирует доставку ровно одного экземпляра сообщения, используя сложный механизм подтверждения. Наиболее надежный режим.
- QoS убликации — уровень качества обслуживания для отправляемых сообщений.
- Максимально один раз (0) — сообщение отправляется один раз без ожидания подтверждения от брокера.
- По крайней мере один раз (1) — клиент повторяет отправку, пока не получит подтверждение от брокера. Гарантирует доставку, но возможны дубликаты на стороне брокера.
- Точно один раз (2) — гарантирует, что сообщение будет обработано брокером ровно один раз.
- Retain публикации — флаг, указывающий брокеру сохранять последнее сообщение в топике и отправлять его новым подписчикам.
- Таймаут переподключения — время задержки перед попыткой переподключения к брокеру при обрыве связи.
- Имя — уникальное имя тега в проекте.
- Комментарий — дополнительное описание тега для удобства настройки.
- Тип доступа — режим работы тега: "Только чтение", "Только запись" или "Чтение/запись".
- Топик подписки — MQTT-топик, из которого тег будет получать данные.
Bus77
Драйвер протокола обмена данными с устройствами от компании iRidi.
Доступно два способа настройки драйвера:
- Ручная настройка устройств и тегов.
- Сканирование сети для получения всей структуры устройств. Сканирование выполняется с помощью соответствующей кнопки в окне настроек драйвера.

- Имя — уникальное название подключения в системе.
- Комментарий — дополнительная информация о подключении.
- Хост — сетевой адрес устройства в сети.
- Порт — сетевой порт для подключения (обычно 30464).
- Имя — уникальное имя тега в проекте.
- Комментарий — дополнительное описание тега для удобства настройки.
- ID глобальной переменной — уникальный идентификатор переменной.
- Тип значения:
Boolean— логический тип (true/false, 1/0).Int8— целое со знаком (-128 до 127).UInt8— целое без знака (0 до 255).Int16— целое со знаком (-32 768 до 32 767).UInt16— целое без знака (0 до 65 535).Int32— целое со знаком (-2 147 483 648 до 2 147 483 647).UInt32— целое без знака (0 до 4 294 967 295).Float— число с плавающей запятой (±3.4×10³⁸).Int64— целое со знаком (±9.2×10¹⁸).UInt64— целое без знака (0 до 1.8×10¹⁹).Double— число с двойной точностью (±1.7×10³⁰⁸).String— строковый тип данных.ByteArray— массив байтов (8-битных беззнаковых целых чисел).
Siemens S7
Драйвер протокола S7comm для работы с контроллерами Siemens S7-200/300/400/1200/1500.
Существует три метода настройки драйвера:
- импорт DB-файлов из TIA Portal (требуется сначала добавить устройство в драйвер);
- импорт конфигурации из InSAT Multi-Protocol MasterOPC Server;
- ручная настройка.
Внимание
Версия PLUS протокола драйвером не поддерживается. Для корректной работы драйвера с контроллерами S7-1200/1500 необходимо предварительно включить опцию "Разрешить доступ PUT/GET" в TIA Portal для этих ПЛК.

Кнопки инструментальной панели:
- ➕ Устройство — добавление нового устройства (контроллера) в дерево проекта.
- ➕ Группа — создание логической группы для организации тегов по функциональному признаку.
- ➕ Тег — добавление нового тега (переменной) в выбранную группу или устройство.
- Дублировать — создание копии выбранного элемента (тега, группы или устройства) с сохранением всех настроек.
- ❌ Удалить — удаление выбранного элемента из проекта.
- Импорт — загрузка структуры тегов из внешних источников:
- S7 DataBlock (Siemens S7 DB file) — импорт блоков данных или системных переменных из Tia Portal.
- Узел Multi-Protocol MasterOPC Server (Multi-Protocol Node export file) — импорт существующей конфигурации OPC-сервера Siemens.
- Имя — уникальное название данного устройства внутри узла.
- Комментарий — дополнительная информация о подключаемом устройстве.
- Хост — IP-адрес или сетевое имя устройства.
- Порт — номер TCP-порта для S7-соединения (стандартное значение: 102).
- Монтажная стойка — номер стойки (Rack) в конфигурации Siemens S7-300/400.
- Слот процессора — номер слота (Slot), в котором установлен процессорный модуль.
- Таймаут ожидания ответа (мс) — максимальное время ожидания ответа от контроллера в миллисекундах.
- Повторы при ошибке — количество повторных попыток запроса при возникновении ошибки связи.
- Повторное соединение при ошибке (мс) — интервал времени в миллисекундах между попытками восстановления соединения с контроллером после обнаружения ошибки связи.
- Имя — уникальное имя тега в проекте.
- Комментарий — краткое пояснение.
- Тип доступа:
- Чтение — значение можно только читать из устройства.
- Запись — значение можно только записывать в устройство.
- Чтение/запись — разрешены и чтение значения, и запись.
- Регион данных:
DB— Data Block (блок данных). Пользовательские блоки данных, содержащие переменные проекта.M— Merker (флаги). Глобальная битовая память для промежуточных данных.I— Inputs (входы). Область физических входов контроллера.Q— Outputs (выходы). Область физических выходов контроллера.C— Counters (счетчики). Область значений счетчиков.T— Timers (таймеры). Область значений таймеров.
- Тип значения:
Bool— логическое значение (true/false).Int— целое число со знаком (-32 768 до 32 767).DInt— длинное целое со знаком (-2 147 483 648 до 2 147 483 647).SInt— короткое целое со знаком (8 бит): диапазон -128 … +127.UDInt— двойное целое без знака (32 бит): диапазон 0 … 4 294 967 295.Uint— целое число без знака (0 до 65 535).USInt— короткое целое без знака (8 бит): диапазон 0 … 255.Real— число с плавающей точкой одинарной точности (32 бит) по стандарту IEEE 754.LReal— число с плавающей точкой двойной точности (64 бит) по стандарту IEEE 754.Date— дата (16 бит): количество дней с 01.01.1990.Time— интервал времени (32 бит): миллисекунды со знаком.TOD— время суток (32 бит): миллисекунды с полуночи.Byte— байт (8 бит): диапазон 0 … 255.Word— слово (16 бит): диапазон 0 … 65 535.DWord— двойное слово (32 бит): диапазон 0 … 4 294 967 295.Char— символ ASCII (8 бит).WChar— символ Unicode (16 бит).S7String— строка символов типа Char с максимальной длиной до 254 байт.WString— строка символов типа WChar (Unicode).
- Адрес байта — номер байта в выбранном регионе данных, с которого начинается чтение или запись значения тега.
- Использование бита — при включении флага читается не весь регистр, а только один конкретный бит внутри него.
- Номер бита — номер бита (0-7) в регистре, который будет использоваться, если включено "Использование бита".
Теги
Введение
Тег — канал ввода/вывода, который может быть как физическим, так и виртуальным. Тег содержит значение, полученное от различных устройств, либо получает уже сформированное с помощью программных скриптов.
- Физический тег получает значение в реальном времени на основе сигналов от оборудования;
- Виртуальный тег создается и вычисляется внутри SCADA. Его значение может быть результатом математических расчетов, логических операций или просто временным хранилищем данных. Например, средняя температура за час, флаг аварии (срабатывающий при превышении допустимого давления) или промежуточная переменная в скрипте;
- Невидимый тег — тег с отключенным свойством "Видимость" (данный флаг определяет, отображается ли тег в разделе "Теги" и "Просмотр графиков" HMI и веб-клиента);
- Неактивный тег — тег с отключенным свойством "Опрашивать". Драйвер не опрашивает данный тег, и его значения не сохраняются в базе данных.
Окно "Проект"
Чтобы сервер начал работу с тегами источника, перетащите их в соответствующее окно "Проект", удерживая левую кнопку мыши. После переноса тег становится активным, и его значения обрабатываются сервером.

| Тег | Описание |
|---|---|
Физический тег |
|
Виртуальный тег |
|
Невидимый тег |
|
Неактивный тег |
Панель инструментов
Для удобства в окне "Проект" предусмотрена панель инструментов.
| Кнопка | Описание |
|---|---|
Тест тегов |
|
Добавить виртуальные теги |
|
Добавить группу |
|
Удалить тег/группу |
|
Развернуть проект |
|
Сохранить проект |
Контекстное меню
В окне "Проект" также можно использовать контекстное меню, вызвав его нажатием правой кнопки мыши.

- Добавить группу — создать новый каталог для организации тегов.
- Добавить виртуальные теги — создать тег, значение которого вычисляется внутри SCADA.
- Дублировать группу — создать копию существующей группы тегов со всем её содержимым.
- Удалить — удалить выбранный тег или группу.
- Отвязать теги от источника — разорвать связь тегов с устройством, преобразовав их в виртуальные.
- Импорт тегов из v4 — загрузить теги из конфигурации старой версии системы Симплайт 4.
- Копировать свойства тега — скопировать настройки выбранного тега (тип данных, формат значения, шкала и т.д.) в буфер обмена.
- Вставить свойства тега — применить скопированные настройки к выбранному тегу.
- Копировать свойство группы — скопировать настройки группы.
- Вставить свойства группы — применить скопированные настройки группы к другой группе. После активации данной функции система отобразит окно со списком тегов, свойства которых необходимо изменить.
- Развернуть все — полное раскрытие древовидной структуры тегов для просмотра всех элементов.
- Свернуть все — полное сворачивание древовидной структуры тегов до корневого уровня.
- Экспорт:
- JSON: Дерево проекта — экспорт тегов проекта в формат JSON.
- PostgreSQL: теги — экспорт тегов в PostgreSQL (Таблица содержит тот же набор полей, что и при экспорте в формат JSON).
Свойства тегов
В окне "Свойства" производится настройка свойств тегов. Чтобы отредактировать свойства, выберите один или несколько активных тегов в окне "Проект". Набор основных характеристик может незначительно различаться в зависимости от типа тега (физический или виртуальный).

- Опрашивать — при установленном флаге, значения тега, поступающие от источника данных, обрабатываются системой в соответствии с выбранными настройками. Это включает в себя сохранение данных в базе, контроль связи, активацию сигнализации и другие действия.
- Интервал опроса — период (в мс) между чтениями значения тега из устройства.
- Сохранение в БД:
- Активность — включить/выключить архивацию значения тега.
- Сохранение только при хорошем качестве — записывать в архив только значения с валидным качеством.
- Сохранение только в пределах шкалы — записывать в архив только значения, находящиеся в диапазоне выбранной шкалы.
- Стратегия:
- по изменению — при изменении значения на величину, большую чем "Мертвая зона".
- по таймеру — через фиксированные интервалы времени.
- смешанная — запись по изменению и таймеру одновременно.
- Мертвая зона — минимальное изменение значения, при котором оно будет записано в архив (для стратегии "по изменению").
- Имя — уникальное имя тега в проекте.
- Комментарий — дополнительное описание.
- ID тега — уникальный числовой идентификатор тега в системе.
- Тип источника — тип драйвера, к которому привязан тег.
- Тег источник — ссылка на конкретный тег в драйвере, откуда берутся данные.
- Видимость — флаг определяет, отображается ли тег в разделе "Каналы" и "Просмотр графиков" HMI и веб-клиента.
- Шкала — выбор шкалы значений для тега, которая позволяет реализовать контроль параметров, выдачу сообщений и настройку отображения в окнах, графиках и отчетах.
- Категория событий — выбор категории событий из настроенных в окне "Редактор категорий событий"
- Произвольные сообщения — разрешить запись в журнал событий произвольных текстовых сообщений, связанных с тегом.
- Модификаторы — пользовательские преобразования значения тега перед использованием.
- Чтение — формула для преобразования "сырого" значения, полученного от устройства, перед использованием в системе (например, VALUE * 0.1).
- Запись — формула для преобразования задаваемого значения перед отправкой его в устройство (например, VALUE / 0.1).
- Тип значения (данных) — тип данных тега.
- Резервирование:
- Синхронизировать между узлами — включение синхронизации значения тега между серверами в резервированной конфигурации.
- Сохранение в БД:
- Активность — включить/выключить архивацию значения тега.
- Сохранение только при хорошем качестве — записывать в архив только значения с валидным качеством.
- Сохранение только в пределах шкалы — записывать в архив только значения, находящиеся в диапазоне выбранной шкалы.
- Стратегия:
- по изменению — при изменении значения на величину, большую чем "Мертвая зона".
- по таймеру — через фиксированные интервалы времени.
- мертвая зона — минимальное изменение значения, при котором оно будет записано в архив (для стратегии "по изменению").
- Имя — уникальное имя тега в проекте.
- Комментарий — дополнительное описание.
- ID тега — уникальный числовой идентификатор тега в системе.
- Тип источника — тип драйвера, к которому привязан тег.
- Тег источник — ссылка на конкретный тег в драйвере, откуда берутся данные.
- Видимость — флаг определяет, отображается ли тег в списках для выбора.
- Шкала — выбор шкалы значений для тега, которая позволяет реализовать контроль параметров, выдачу сообщений и настройку отображения в окнах, графиках и отчетах.
- Категория событий — выбор категории событий из настроенных в окне "Редактор категорий событий"
- Произвольные сообщения — разрешить запись в журнал событий произвольных текстовых сообщений, связанных с тегом.
- Значение по умолчанию:
- Активность — включить/выключить установку значения по умолчанию при инициализации тега.
- Значение:
- Сохранять между сессиями — сохранять текущее значение тега при перезапуске системы и восстанавливать его.
- Выражение — формула для расчёта значения тега на основе других тегов, переменных или функций (например, {Tag1} + {Tag2}).
- Тип значения (данных) — тип данных тега.
Boolean— логический тип (true/false, 1/0).Int8— целое со знаком (-128 до 127).UInt8— целое без знака (0 до 255).Int16— целое со знаком (-32 768 до 32 767).UInt16— целое без знака (0 до 65 535).Int32— целое со знаком (-2 147 483 648 до 2 147 483 647).UInt32— целое без знака (0 до 4 294 967 295).Int64— целое со знаком (±9.2×10¹⁸).UInt64— целое без знака (0 до 1.8×10¹⁹).Float (Float32)— число с плавающей запятой (±3.4×10³⁸).Double (Float64)— число с двойной точностью (±1.7×10³⁰⁸).String— строковый тип данных.DateTime— дата и время (представляет из себя временную метку unix timestamp в миллисекундах, отсчитываемой от начала эпохи Unix (1 января 1970 года, 00:00:00 UTC). Внутри системы преобразуется в более читаемый формат ДД.ММ.ГГГГ ЧЧ:ММ:СС).
Модификаторы
Данный инструмент позволяет определить процедуру обработки значений физического тега. Обработка заключается в производстве арифметических действий над значением. Общую схему модификации значений можно представить в виде следующей последовательности:
---
title:
---
flowchart LR
b1("`*Получение значения физического тега*`")
b2("`*Обработка значения в формуле*`")
b3("`*Модифицированное значение*`")
b1 ---> b2
b2 ---> b3
Чтобы добавить "Модификатор", нажмите кнопку ... в поле "Чтение" или "Запись" в зависимости от направления передачи: отправляется значение или принимается.

В диалоговом окне "Редактор модификаторов" введите формулу пересчета значения. Перед подтверждением рекомендуется проверить корректность введенной формулы, нажав кнопку "Проверить".

В случае отсутствия ошибок окно сформирует отчет об успешном прохождении теста.

После подтверждения поле, для которого готовился модификатор, изменит статус на "Да".

Редактор выражений
Запуск редактора
Данный инструмент доступен в свойствах виртуального тега. Чтобы добавить рассчетную формулу, нажмите на кнопку ... поля "Выражение". Появится диалоговое окно "Редактор выражений".

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

- Дерево проекта — перечень всех физических тегов проекта.
- Выражение — область редактирования исходного кода. Добавление тега в область осуществляется двойным нажатием левой кнопки мыши.
- Перечень часто используемых функций в выражениях.
- Область, в которой отображается подсказка по использованию выбранной функции.
- Кнопка "Проверить" — проверка правильности написания исходного выражения.
Видеопример работы с редактором выражений.
Функции
В данном разделе представлен полный перечень функций, применяемых в выражениях и модификаторах.
Внимание
- функции, обозначенные символом *, доступны только в выражениях для тегов и недоступны в модификаторах;
- функция
scaleScalarдоступна только в модификаторах; - имя тега передается в функцию в формате
${var_name}, за исключением модификаторов, где требуется использовать ключевое словоvalueвместо названия тега; - если в функцию передается аргумент, представленный в виде строки, то его необходимо заключить в одинарные кавычки
'some string'; - значения типа
numberне требуется заключать в кавычки.
| Оператор | Описание | Пример выражения |
|---|---|---|
abs |
Возвращает абсолютное значение | abs(${var}) |
arccos |
Вычисляет арккосинус значения в радианах | arccos(${var}) |
arcsin |
Вычисляет арксинус значения в радианах | arcsin(${var}) |
arctan |
Вычисляет арктангенс значения в радианах | arctan(${var}) |
arccotan* |
Вычисляет арккотангенс значения в радианах | arccotan(${var}) |
band |
Побитовое И над значениями тегов x и y |
band(${x}, ${y}) |
bnot |
Побитовое НЕ над значением тега x |
bnot(${x}) |
bor |
Побитовое ИЛИ над значениями тегов x и y |
bor(${x}, ${y}) |
blshift |
Побитовое смещение влево значения тега x на n бит |
blshift(${x}, n) |
brshift |
Побитовое смещение вправо значения тега x на n бит |
brshift(${x}, n) |
bxor |
Побитовое исключающее ИЛИ над значениями тегов x и y |
bxor(${x}, ${y}) |
ceil |
Округляет вверх до ближайшего целого значения | ceil(2.4) = 3 |
cos |
Вычисляет косинус значения в радианах | cos(${var}) |
cotan* |
Вычисляет котангенс значения в радианах | cos(${arg}) |
dateTimeToString* |
Преобразует время в формате строки ISO8601 | dateTimeToString('2025-12-16T05:40:05Z') |
exp |
Возводит значение тега x в натуральную степень e ~ 2.72 |
exp(${x}) |
fact* |
Вычисляет факториал значения | fact(${x}) |
floor |
Округляет вниз до ближайшего целого значения | floor(2.6) = 2 |
frac |
Извлекает дробную часть значения | frac(${var}) |
getBit |
Извлекает бит n из значения тега var |
getBit(${var}, n) |
if |
Условная функция: возвращает одно из двух значений: x — (true), y — (false) |
if(${var} > 100, x, y) |
ln |
Вычисляет натуральный логарифм значения | ln(${var}) |
max |
Возвращает максимальное из значений тегов x и y |
max(${x}, ${y}) |
min |
Возвращает минимальное из значений тегов x и y |
min(${x}, ${y}) |
power* |
Возводит значение тега var в степень n |
power(${var}, n) |
round |
Округляет значение до ближайшего целого | round(2.6) = 3 |
scaleScalar |
Масштабирование значения x из диапазона [inS, inE] в диапазон [outS, outE] |
scaleScalar(${x}, inS, inE, outS, outE) |
setBit |
Устанавливает бит n в значение state (0 или 1) тега var |
setBit(${var}, n, state) |
sin |
Вычисляет значение синуса в радианах | sin(${var}) |
sqr* |
Возводит значение в квадрат | sqr(${var}) |
sqrt |
Получает квадратный корень значения | sqrt(${var}) |
strInCommaText* |
Проверяет находится ли текст str в аргументе commaText |
strInCommaText('str', ${commaText}) |
trunc |
Извлекает целую часть значения тега var |
trunc(${var}) |
Примечание:
- ФункцияgetBit(значение, номер_бита)возвращает 1, если бит установлен, и 0 — если сброшен. Нумерация битов обычно начинается с 0 (младший бит).
Редактор мнемосхем
Редактор мнемосхем
Запуск редактора
Чтобы начать работу с "Редактором мнемосхем", нажмите соответствующую кнопку в панели редакторов.
Главное окно
Окно представляет из себя следующие рабочие области:

1. Мнемосхемы — дерево всех мнемосхем проекта для быстрой навигации.
2. Панель инструментов окна мнемосхемы — инструменты управления мнемосхемой (создание, группировка, сохранение и пр.).
3. Инспектор свойств — окно просмотра и редактирования свойств выбранного объекта.
4. Палитра компонентов — инструменты для создания графических объектов, а также готовые компоненты.
5. Область редактирования — основная область для проектирования и редактирования мнемосхемы.
6. Панель инструментов области редактирования — инструменты выравнивания, группировки и настройки отображения.
7. Общая галерея — библиотека стандартных и пользовательских графических объектов.
8. Галерея проекта — локальная библиотека графических элементов, специфичных для текущего проекта.
Окна 1, 3, 4, 7, 8 можно сворачивать и разворачивать. Значок в виде треугольника, расположенный в левом углу окна, может находиться в двух позициях:
- ▲ — раскрытое окно.
- ▼ — свернутое окно.
Чтобы свернуть/развернуть окно нажмите на шапке окна левой кнопкой мыши.
Мнемосхемы
Окно "Мнемосхемы" содержит список всех созданных мнемосхем в проекте, а также инструменты для редактирования этого списка.
Панель инструментов
Панель инструментов включает в себя 7 кнопок для редактирования дерева мнемосхем:
| Кнопка | Описание |
|---|---|
Добавить новую мнемосхему |
|
Добавить новую шаблонную мнемосхему |
|
Сохранить мнемосхему |
|
Сохранить мнемосхему как |
|
Создать каталог для группировки мнемосхем |
|
Удалить мнемосхему |
|
Переименовать мнемосхему |
Инспектор свойств
Введение
Инспектор свойств позволяет просматривать характеристики выбранного графического объекта в области редактирования. Например, для изменения свойств фона мнемосхемы нажмите левой кнопки мыши в пустом месте области редактирования. "Инспектор свойств" отразит все свойства фона мнемосхемы. Большинство свойств готовых объектов и фигур интуитивно понятны и не требуют пояснений.
Существует 2 метода настройки свойств графического объекта:
- статический — настройка свойств не изменяется в процессе выполнения проекта на сервере.
- динамический — управление свойствами фигуры производится путем их привязки к доступным тегам проекта.
Для применения статического метода выберите фигуру и измените цвет одного из элементов, который сохранит свои характеристики и не будет изменяться. Например, в поле "Цвет заливки" укажите код цвета в формате ARGB (Alpha-Red-Green-Blue), либо нажмите кнопку ... и выберите цвет из палитры:
Привязка
Свойство "Привязка" определяет динамический метод настройки свойства фигуры. Чтобы выполнить привязку, нажмите кнопку ... в соответствующем поле.
Откроется диалоговое окно "Связь аргументов и тегов". В левой части находится список аргументов, а в правой — доступные теги проекта. Привязку можно выполнить с помощью двойного нажатия мышью на необходимом теге проекта или перетащить тег на аргумент.
После привязки тега к графическому элементу нет необходимости закрывать окно "Связь аргументов и тегов". Достаточно выбрать следующий элемент в области редактирования и выполнить привязку в том же окне.

В процессе привязки доступен поиск активных тегов проекта.
Чтобы отвязать тег, нажмите правой кнопкой мыши на аргументе и выберите "Отвязать".
Тренд по клику
Для каждого элемента на мнемосхеме можно выбрать функцию вызова тренда, нажатием левой кнопкой мыши на соответствующий графический объект. Отслеживаемый тег указывается в свойстве "Теги" функции "Тренд по двойному клику".
После активирования функции, при двойном нажатии левой кнопки мыши на объект мнемосхемы, откроется окно с графиком. На тренде можно выбрать дату и временной интервал, за который нужно отобразить данные о работе.

Для построения нескольких графиков предусмотрена возможность группового добавления тегов в привязках.
Область редактирования
Введение
В режиме работы с графикой доступны три окна, из которых можно переносить графические объекты (фигуры) в область редактирования:
- Общая галерея;
- Галерея проекта;
- Палитра компонентов.
Справка
Галерея проекта доступна только если в настройках выбран режим Про .
Перенос элемента в область редактирования выполняется методом перетаскивания.

Сочетание клавиш
- Ctrl+колесо мыши — масштабирование области редактирования;
- Ctrl+левая кнопка мыши — перемещение области редактирования;
- Ctrl+Up+Down+Left+Right — перемещение выделенного объекта вверх (вниз, влево, вправо) на 1 пиксель;
- Shift+Up+Down+Left+Right — изменение размера выделенного объекта на 1 пиксель;
- Ctrl+Num 1 — уменьшить масштаб области редактирования;
- Ctrl+Num 2 — увеличить масштаб области редактирования;
- Ctrl+C — копировать объект;
- Ctrl+X — вырезать объект;
- Ctrl+V — вставить объект;
- Ctrl+Z — отменить действие;
- Ctrl+Y — повторить отмененное действие;
- Del — удалить выделенный объект из области редактирования.
Чтобы быстро скрыть/отобразить галереи проекта, нажмите кнопку
панели инструментов.
Чтобы показать привязку на выбранном графическом объекте, нажмите кнопку
панели инструментов.
Внимание
Элементы на мнемосхеме перемещаются мышью только с шагом 10 пикселей, независимо от настроек шага сетки. Если требуется позиционирование с точностью до 1 пикселя, сначала выберите нужный элемент мышью на мнемосхеме, затем, удерживая клавишу Ctrl, нажимайте клавиши Up, Down, Left, Right и перемещайте элемент. Также можно задать точные координаты с шагом 1 пиксель в инспекторе свойств элемента.
Панель инструментов
Панель инструментов в области редактирования позволяет быстро выравнивать и позиционировать группу объектов, а также сохранять и разворачивать проект на сервере.
| Кнопка | Описание |
|---|---|
Сохранить мнемосхему |
|
Развернуть проект |
|
Копировать объект |
|
Вставить объект |
|
Выровнять объекты по левому краю |
|
Выровнять объекты по правому краю |
|
Выровнять объекты по верхнему краю |
|
Выровнять объекты по нижнему краю |
|
Центрировать объекты по горизонтали |
|
Центрировать объекты по вертикали |
|
Установить интервал по горизонтали |
|
Установить интервал по вертикали |
|
Переместить на передний план |
|
Переместить на задний план |
|
Переместить на один шаг вперед |
|
Переместить на один шаг назад |
|
Заблокировать все эелементы |
|
Заблокировать выбранные элементы |
|
Отменить действие |
|
Повторить действие |
|
Увеличить масштаб области редактирования |
|
Уменьшить масштаб области редактирования |
|
Установить масштаб 100% |
|
Запустить симуляцию |
|
Показать/скрыть галерею графических объектов |
|
Показать/скрыть привязки тегов на объектах |
Палитра компонентов
Окно "Палитра компонентов" представляет собой набор графических инструментов для работы с мнемосхемой. На вкладках ниже приводится описание настроек каждого компонента.
Инструмент Изменение границ, который используется для выбора одного или нескольких объектов на мнемосхеме. С помощью него можно изменять размер и положение объекта на мнемосхеме, а также вызывать свойства выбранного объекта в окне "Инспектор свойств".
При работе с "Палитрой компонентов" может возникнуть ситуация, когда выбор элемента на мнемосхеме становится невозможным. В таком случае выберите инструмент "Изменение границ", после этого объект станет доступен для редактирования.
При переносе компонента Пустая фигура в область редактирования отображается контур, который будет служить основой для будущей фигуры, с заданными свойствами.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Подсказка:
- Состояние — включение или выключение функции подсказки при наведении курсора мыши на компонент.
- Подсказка — текст всплывающей подсказки.
- Привязки — связь свойств фигуры с активными тегами.
Компонент SVG-изображение позволяет размещать изображения из файла формата *.svg на мнемосхеме. Изображение копируется во внутреннее хранилище проекта, где ему присваивается уникальный идентификатор, который отражается в свойстве "Имя файла".
- Имя — идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Угол вращения — угол поворота компонента относительно точки привязки в градусах.
- Имя файла — абсолютный путь к файлу векторного (SVG) изображения. Для того чтобы указать путь к файлу активируйе данное поле, нажав кнопку ...
- Перекрашивание:
- Активность — флаг активации режима цветокоррекции SVG:
- Вкл — исходные цвета SVG смешиваются с целевым цветом по алгоритму нормализованного смешивания.
- Выкл — изображение отображается с оригинальной цветовой палитрой.
- Активность — флаг активации режима цветокоррекции SVG:
- Перекрашивание. Цвет — цвет для смешивания с оригинальной палитрой SVG-изображения.
Компонент Расписание позволяет создавать недельные или дневные расписания для управления включением/выключением различного оборудования. Расписание может включать любое количество интервалов в течение дня.
Несколько графических компонентов "Расписание" в проекте могут быть привязаны к одному расписанию. Например, на одной мнемосхеме, доступной инженеру, есть компонент "Расписание" с возможностью редактирования параметров расписания, а на другой, доступной обычному пользователю — компонент "Расписание" только для просмотра.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Редактирование — флаг, разрешающий или запрещающий интерактивное изменение временных диапазонов на компоненте.
- Показать текущее время — флаг, определяющий отображение метки текущего системного времени на компоненте.
- Рабочая область:
- Цвет фона — фон областей, не занятых диапазонами.
- Цвет текущего дня — фон, выделяющий текущие сутки.
- Цвет текущего времени — цвет вертикальной метки, указывающей на текущее время.
- Цвет диапазона — стандартный цвет неактивных временных диапазонов.
- Цвет активного диапазона — цвет диапазона, активного в текущий момент времени.
- Цвет сетки — цвет линий сетки, разделяющей временные интервалы.
- Линейка:
- Показать минуты — флаг формата подписей: Вкл — "09:00", Выкл — "09".
- Цвет фона — фон линейки.
- Цвет текста — цвет подписей времени.
- Цвет отметки — цвет делений на линейке.
- Поля:
- Цвет фона — фон полей.
- Цвет текста — цвет текста в полях.
- Панель инструментов:
- Цвет фона — фон панели.
- Цвет текста — цвет текста на панели.
- Расписание — отображает имя активного расписания и открывает диалоговое окно для его создания или редактирования.
Компонент Фрейм представляет собой визуальный контейнер, который может быть размещен на мнемосхеме. В свойствах компонента указывается адрес интернет-ресурса для отображения, а также можно выбрать файл или другую графическую информацию из каталога проекта.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- URL — адрес веб-страницы или ресурса, загружаемого во фрейм, либо относительный путь к загружаемому файлу.
Например, требуется загрузить на мнемосхему файл manual.pdf из каталога assets проекта ("название проекта"/assets). В данном случае достаточно указать адрес /assets/manual.pdf, чтобы загрузить файл в компонент "Фрейм" на мнемосхеме.
- Сквозной вход — флаг, разрешающий автоматическую передачу данных аутентификации текущего пользователя системы в загружаемый ресурс.
Компонент Контейнер мнемосхем позволяет интегрировать одну мнемосхему в другую.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Путь мнемосхемы — открывает диалоговое окно для выбора мнемосхемы.
Многостейтовый объект — это индикатор с широкими возможностями для визуализации реакции компонента на значения (или интервалы значений) тега.
Данный индикатор также можно добавить на мнемосхему в виде изображения (.jpg, .jpeg, .png, .bmp) из проводника Windows, используя метод drag and drop. Во время "перетаскивания" удерживайте клавишу Ctrl.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Угол вращения — угол поворота компонента относительно точки привязки в градусах.
- Тег — диалоговое окно выбора активного тега проекта.
- Переменные — свойство отражает количество реакций компонента и открывает диалоговое окно настройки реакций.
1.Список состояний.
2.Свойства выбранного состояния.
3.Превью изображения, добавленного в меню "Изображение".
- Текст:
- Цвет текста — определяет цвет текста компонента.
- Текст — строка, отображаемая в компоненте.
- Показать значение — флаг отображения значения привязанного тега вместе с текстом.
- Шрифт — Параметры шрифта текста (стиль, размер, начертание).
- Горизонтальное выравнивание — выравнивание текста по горизонтали (слева, по центру, справа).
- Вертикальное выравнивание — выравнивание текста по вертикали (сверху, по центру, снизу).
- Диапазон:
- Минимум — нижняя граница шкалы значений активного тега.
- Максимум — верхняя граница шкалы значений активного тега.
- Изображение
- Имя файла — путь к файлу изображения.
- Угол вращения картинки — угол поворота изображения в градусах.
- Растянуть — режим масштабирования:
- Нет.
- Заполнение (искажая пропорции).
- Пропорционально (сохраняя соотношения).
- Горизонтальное выравнивание — позиция изображения по горизонтали.
- Вертикальное выравнивание — позиция изображения по вертикали.
- Фигура — графическая форма компонента (выбирается из библиотеки).
- Заполнение фона — флаг активации заливки фона компонента.
- Цвет границы — цвет обрамления компонента.
- Ширина границы — толщина линии границы в пикселях.
- Режим мигания — флаг включения периодического мигания компонента.
Статический текст — компонент, который содержит текстовый элемент с неизменяемым содержимым.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Угол вращения — угол поворота компонента относительно точки привязки в градусах.
- Текст — текстовая строка, отображаемая в компоненте.
- Цвет текста — определяет цвет текста.
- Горизонтальное выравнивание — позиция изображения по горизонтали.
- Вертикальное выравнивание — позиция изображения по вертикали.
- Перенос строк — флаг управления переносом текста:
- Вкл — текст переносится на новую строку при достижении границы компонента.
- Выкл — текст отображается в одну строку (возможна обрезка).
Изображение — компонент для отображения растровой или векторной графики из файла.
Требуемое изображение (.jpg, .jpeg, .png, .bmp) также можно добавить на мнемосхему из проводника Windows, используя метод перетаскивания drag and drop.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Угол вращения — угол поворота компонента относительно точки привязки в градусах.
- Имя файла — путь к файлу изображения.
- Угол вращения картинки угол поворота изображения относительно центра.
- Растянуть — режим масштабирования:
- Нет.
- Заполнение (искажая пропорции).
- Пропорционально (сохраняя соотношения).
- Горизонтальное выравнивание — позиция изображения по горизонтали.
- Вертикальное выравнивание — позиция изображения по вертикали.
После выбора компонента Трубопровод, в области редактирования активируется режим построения, а курсор мыши изменяется на значок перекрестья. Каждое нажатие левой кнопки мыши на мнемосхеме фиксирует точку сегмента или излома под прямым углом. Создание трубопровода завершается при выборе любого другого компонента в палитре. Процесс можно прервать нажатием клавиши "Esc":
однократное нажатие отменяет текущий сегмент.
двойное нажатие полностью выходит из режима построения.
Данный компонент предоставляет возможность перемещения и редактирования (добавления/удаления) сегментов, из которых он состоит.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Цвет активный — цвет отображения трубопровода при логическом значении true с привязанного тега.
- Цвет неактивный — цвет отображения трубопровода при логическом значении false с привязанного тега.
- Толщина — толщина графического компонента в пикселях от 8.
- Начало линии — тип трубопровода в начальной точке:
- Нет — обычная линия.
- Фланец — фланцевое соединение.
- Разрыв — обрыв линии.
- Конец линии — тип трубопровода в начальной точке:
- Нет — обычная линия.
- Фланец — фланцевое соединение.
- Разрыв — обрыв линии.
- Тег — привязка тега для динамизации.
- Режим мигания — активирование мигания трубопровода при логическом значении true с привязанного тега.
Линия — инструмент для отображения прямого отрезка между двумя точками с возможностью динамизации.
Доступна возможность перемещения и редактирования (добавления/удаления) сегментов в пределах одного графического блока линии.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Цвет активный — цвет линии при значении привязанного тега
1(True). - Цвет неактивный — цвет линии при значении привязанного тега
0(False). - Размер линии — толщина линии в пикселях (от 2).
- Стиль линии:
- сплошная.
- пунктирная.
- Начало линии — тип маркера начала:
- Нет.
- Левая стрелка.
- Правая стрелка.
- Круг.
- Размер начала линии — размер законцовки линии в начале.
- Конец линии — тип маркера конца:
- Нет.
- Левая стрелка.
- Правая стрелка.
- Круг.
- Размер конца линии — размер законцовки линии в конце.
- Тег — дискретный тег, управляющий цветовой заливкой линии.
Таблица оперативных событий — компонент для отображения текущих аварийных и технологических событий в реальном времени.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Цвет фона — цвет фоновой области таблицы событий.
- Цвет границы — цвет рамки вокруг компонента.
- Цвет сетки — цвет линий, разделяющих строки и столбцы таблицы.
- Шрифт — шрифт, используемый для текста событий в таблице.
- Обязательное квитирование — режим обработки событий:
- Вкл — события остаются в таблице до ручного квитирования, даже если состояние нормализовалось.
- Выкл — события автоматически удаляются из таблицы при нормализации состояния.
- Заголовок:
- Цвет фона — цвет фона заголовка таблицы.
- Цвет текста — цвет текста заголовка таблицы.
- Шрифт — шрифт, используемый для текста заголовка таблицы.
- Фильтр тегов:
- Активность:
- Вкл — в таблицу событий попадают только выбранные теги в поле "Теги" раздела "Фильтр тегов".
- Выкл — в таблицу событий попадают все теги для которых настроены события.
- Теги — диалоговое окно выбора тегов для фильтра.
- Активность:
- События — набор флагов для фильтрации типов оперативных событий в таблице:
- Верх уставки (АВ) — события верхней аварийной уставки.
- Верх уставки (ПРЕД) — события верхней предупредительной уставки.
- Возврат в норму — события возврата параметра в нормальный диапазон.
- Низ уставки (ПРЕД) — события нижней предупредительной уставки.
- Низ уставки (АВ) — события нижней аварийной уставки.
- Включено — события включения оборудования/сигналов.
- Выключено — события выключения оборудования/сигналов.
- Предупреждение — события с уровнем важности "Предупреждение".
- Информационное — информационные события.
- Аварийное — аварийные события.
- Действие пользователя — события, вызванные действиями оператора.
- Плохое качество — события с невалидным или недостоверным качеством данных.
- Системные — системные события.
Последнее событие — компонент для отображения информации о самом свежем событии в системе. Представляет из себя строку с возможностью раскрытия списка событий.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Цвет фона — цвет фоновой области строки событий.
- Выпадающий список:
- Цвет фона — цвет фоновой области выпадающего списка.
- Кнопки:
- Квитировать: показать — отображать/скрывать кнопку ручного квитирования события.
- Квитировать все: показать — отображать/скрывать кнопку массового квитирования событий.
- Открыть события: показать — отображать/скрывать кнопку перехода к журналу событий.
- Цвет фона — цвет фона панели кнопок.
- Цвет иконок — цвет графических элементов на кнопках.
- Фильтр тегов:
- Активность:
- Вкл — в таблицу событий попадают только выбранные теги в поле "Теги" раздела "Фильтр тегов".
- Выкл — в таблицу событий попадают все теги для которых настроены события.
- Теги — диалоговое окно выбора тегов для фильтра.
- Активность:
- События — набор флагов для фильтрации типов оперативных событий в таблице:
- Верх уставки (АВ) — события верхней аварийной уставки.
- Верх уставки (ПРЕД) — события верхней предупредительной уставки.
- Возврат в норму — события возврата параметра в нормальный диапазон.
- Низ уставки (ПРЕД) — события нижней предупредительной уставки.
- Низ уставки (АВ) — события нижней аварийной уставки.
- Включено — события включения оборудования/сигналов.
- Выключено — события выключения оборудования/сигналов.
- Предупреждение — события с уровнем важности "Предупреждение".
- Информационное — информационные события.
- Аварийное — аварийные события.
- Действие пользователя — события, вызванные действиями оператора.
- Плохое качество — события с невалидным или недостоверным качеством данных.
- Системные — системные события.
- Макс. событий — максимальное количество одновременно отображаемых событий в компоненте.
Индикатор аварий — универсальный индикатор аварий с возможностью отображения количества активных аварий.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Угол вращения — угол поворота компонента относительно точки привязки в градусах.
- Шрифт — шрифт, используемый в компоненте.
- Активное состояние:
- Цвет фона — фон индикатора в активном состоянии.
- Цвет границы — цвет рамки индикатора.
- Ширина границы — толщина рамки.
- Фигура — вызов окна выбора фигуры из "Галереи проекта".
- Имя файла изображения — путь к пользовательской пиктограмме.
- Режим мигания — включение/отключение мигания при аварии.
- Текст — надпись в активном состоянии.
- Цвет текста — цвет текста.
- Видимость — отображение элементов в активном состоянии.
- Неактивное состояние:
- Цвет фона — фон индикатора в неактивном состоянии.
- Цвет границы — цвет рамки индикатора.
- Ширина границы — толщина рамки.
- Фигура — вызов окна выбора фигуры из "Галереи проекта".
- Имя файла изображения — путь к пользовательской пиктограмме.
- Режим мигания — включение/отключение мигания при аварии.
- Текст — надпись в неактивном состоянии.
- Цвет текста — цвет текста.
- Видимость — отображение элементов в неактивном состоянии.
- Показать количество аварий — отображать число активных аварий.
- Теги — привязанные теги для определения состояния аварии.
Для данного компонента предусмотрена возможность группового добавления тегов в привязках.
Таблица — универсальный компонент для структурированного отображения данных.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Угол вращения — угол поворота компонента относительно точки привязки в градусах.
- Цвет фона — цвет фона таблицы.
- Столбцы — количество столбцов в таблице. Чтобы добавить столбцы нажмите кнопку ... в данном поле.
- Заголовок:
- Цвет фона — цвет фона области заголовка таблицы.
- Текст — текст, отображаемый в заголовке таблицы.
- Цвет текста — цвет текста заголовка таблицы.
- Шрифт — шрифт текста заголовка таблицы.
- Горизонтальное выравнивание — выравнивание текста заголовка:
- Слева.
- По центру.
- Справа.
- Видимость — флаг отображения заголовка:
- Вкл — видим.
- Выкл — скрыт.
- Кол-во строк — количество строк в таблице (без учета заголовка).
- Высота строки — высота каждой строки в пикселях (мин. 20, макс. 100).
- Шрифт — шрифт текста в строках таблицы.
- Цвет сетки — цвет разделительных линий между ячейками.
- Цвет чередования — цвет фона нечетных строк для улучшения читаемости.
Чтобы выбрать свойства всего столбца, в диалоговом окне "Столбцы" выберите интересующий и перейдите в "Инспектор свойств".
- Текст — заголовок столбца таблицы.
- Номер— порядковый индекс столбца (начиная с 1).
- Значение шрифта — источник параметров шрифта:
- как у таблицы (наследование).
- своё (индивидуальные настройки).
- Шрифт — параметры шрифта для текста столбца.
- Выравнивание — позиция текста в ячейках столбца (9 вариантов: по горизонтали/вертикали).
- Цвет текста — цвет текстового содержимого столбца.
- Перенос строк — флаг переноса текста:
- Вкл (автоперенос).
- Выкл (одна строка).
- Редактирование — режим редактирования ячеек: разрешено или запрещено.
- Ширина — ширина столбца в пикселях (диапазон: 20–400).
Для изменения свойств отдельной ячейки в компоненте таблица, выберите нужную и перейдите в "Инспектор свойств".
- Цвет фона — цвет фона текущей ячейки.
- Значение шрифта — источник параметров шрифта:
- как у таблицы (наследование).
- своё (индивидуальные настройки).
- Шрифт — параметры шрифта для текста ячейки.
- Выравнивание — позиция текста в ячейке (9 вариантов: по горизонтали/вертикали).
- Значение цвета текста — источник цвета текста:
- как у таблицы (наследование).
- своё (индивидуальный цвет).
- Цвет текста — цвет текста ячейки.
- Значение переноса строк — источник правила переноса:
- как у столбца (наследование).
- своё (индивидуальные настройки).
- Перенос строк — флаг переноса текста в ячейке:
- Включен (автоперенос).
- Выключен (одна строка).
- Текст — содержимое ячейки (статический текст или выражение).
- Редактирование — режим редактирования:
- Разрешено.
- Запрещено.
- как у столбца (наследование от столбца).
- Тег — привязанный тег для динамического отображения данных в ячейке.
Архивный тренд — компонент для графического отображения исторических данных тега за выбранный период времени.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Шкала времени:
- Цвет — цвет оси времени (X).
- Цвет отметки — цвет делений и меток времени.
- Цвет фона — цвет фоновой области компонента "Тренд".
- Шкалы значений — настройка выбранной оси Y графика:
- Имя шкалы — уникальное имя оси Y тренда.
- Цвет — цвет линии и текстовых элементов шкалы.
- Авт. шкала — флаг автоматического определения границ диапазона оси:
- Вкл — границы рассчитываются автоматически на основе данных.
- Выкл — границы задаются вручную (поля минимум/максимум).
- Минимум — фиксированное минимальное значение шкалы.
- Максимум — фиксированное максимальное значение шкалы.
- Расположение — позиция оси Y на графике (слева/справа).
- Цвет отметки — цвет делений и подписей значений на шкале.
- Формат значения — шаблон отображения числовых делений шкалы.
- Шаг шкалы — интервал между основными делениями оси.
- Заголовок — набор свойств для заголовка.
- Видимость — флаг отображения шкалы на графике:
- Вкл — шкала отображается.
- Выкл — шкала скрыта.
- Ряды — параметры отображения временных рядов (графиков):
- Цвет — цвет линии графика для данного ряда.
- Тег — тег проекта, значение которого выводится на график.
- Ширина — толщина линии графика.
- Имя шкалы значений — выбор оси Y, к которой привязан ряд (при наличии нескольких шкал значений).
Для привязки активного тега проекта к компоненту "Архивный тренд" выполните следующие действия:


Тренд — компонент для визуализации изменения значений тега в реальном времени.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Цвет фона — цвет фоновой области компонента "Тренд".
- Заголовок:
- Текст — текст заголовка тренда.
- Видимость — флаг отображения заголовка:
- Вкл (видим).
- Выкл (скрыт).
- Область рядов:
- Цвет фона — цвет фона области графиков.
- Цвет границы — цвет рамки вокруг области графиков.
- Цвет сетки — цвет сетки в области графиков.
- Легенда:
- Цвет текста — цвет текста легенды тренда.
- Видимость — флаг отображения легенды:
- Вкл (видима).
- Выкл (скрыта).
- Шкала времени:
- Цвет — цвет оси времени (X).
- Интервал — шаг временных меток на оси X.
- Цвет отметки — цвет делений и меток времени.
- Видимость — флаг отображения временной шкалы:
- Вкл (видима).
- Выкл (скрыта).
- Интервал обновления — период обновления данных на тренде (мс).
- Шкалы значений — настройка выбранной оси Y графика:
- Имя шкалы — уникальное имя оси Y тренда.
- Цвет — цвет линии и текстовых элементов шкалы.
- Авт. шкала — флаг автоматического определения границ диапазона оси:
- Вкл — границы рассчитываются автоматически на основе данных.
- Выкл — границы задаются вручную (поля минимум/максимум).
- Минимум — фиксированное минимальное значение шкалы.
- Максимум — фиксированное максимальное значение шкалы.
- Расположение — позиция оси Y на графике (слева/справа).
- Цвет отметки — цвет делений и подписей значений на шкале.
- Формат значения — шаблон отображения числовых делений шкалы.
- Шаг шкалы — интервал между основными делениями оси.
- Заголовок — набор свойств для заголовка.
- Видимость — флаг отображения шкалы на графике:
- Вкл — шкала отображается.
- Выкл — шкала скрыта.
- Ряды — параметры отображения временных рядов (графиков):
- Цвет — цвет линии графика для данного ряда.
- Тег — тег проекта, значение которого выводится на график.
- Ширина — толщина линии графика.
- Имя шкалы значений — выбор оси Y, к которой привязан ряд (при наличии нескольких шкал значений).
Для привязки активного тега проекта к компоненту "Тренд" выполните следующие действия:


Дата и время — компонент для отображения текущих даты и времени системы в заданном формате.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Угол вращения — угол поворота компонента относительно точки привязки в градусах.
- Цвет — цвет текста даты и времени.
- Шрифт — шрифт для отображаемых значений.
- Показывать дату — флаг отображения даты:
- Вкл (видна).
- Выкл (скрыта).
- Формат даты — варианты отображения:
d.m— 5.9dd.mm— 05.09d.m.y— 5.9.24dd.mm.yyyy— 05.09.2024d mmm yyyy— 5 сен 2024d mmmm yyyy— 5 сентября 2024
- Показывать время — флаг отображения времени:
- Вкл (видно).
- Выкл (скрыто).
- Формат времени — варианты отображения:
h:m— 9:5hh:mm— 09:05h:m:s— 9:5:8h:mm:ss— 9:05:08hh:mm:ss— 09:05:08
IP-камера — компонент для отображения видеопотока с сетевой камеры в реальном времени.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Камера — поле выбора IP-камеры для отображение видеопотока в графическом компоненте.
Ввод даты и времени — компонент для выбора или ввода значения даты и времени с возможностью привязки к тегу.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Цвет границы — цвет обрамления компонента.
- Цвет текста — цвет текстового содержимого.
- Шрифт — параметры шрифта текста (стиль, размер, начертание).
- Стиль — вариант отображения компонента: «только поле» (ввод вручную) или «поле и кнопка» (с выпадающим календарем).
- Тег — привязанный тег для хранения и отображения значения даты и времени.
Галереи
Общая галерея
Общая галерея представляет собой окно в правой части среды разработки, содержащее библиотеку фигур, доступных для использования в любом проекте. Среда разработки включает базовый набор фигур, а также позволяет добавлять в галерею пользовательские фигуры для их последующего применения в других проектах. Для упорядочивания созданных фигур в общей галерее предусмотрена возможность создания каталогов.
Чтобы добавить каталог, нажмите правой кнопкой мыши в пустой области галереи и из контекстного меню выберите "Добавить папку".
Чтобы поместить фигуру в новый каталог, выберите её левой кнопкой мыши, перейдите в "Галерею проекта", выберите существующий компонент, нажмите на него правой кнопкой мыши и в контекстном меню выберите "Добавить в общую галерею".

Далее укажите имя фигуры.

Система создаст копию фигуры и поместит ее в выбранный каталог. Теперь данная фигура становится частью библиотеки и её можно использовать в других проектах.

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

Подробное описание настроек каждого действия:
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Угол вращения — угол поворота компонента относительно точки привязки в градусах.
- Подсказка:
- Состояние — флаг активации всплывающей подсказки:
- Вкл (отображается).
- Выкл (скрыта).
- Подсказка — текст всплывающей подсказки компонента.
- Состояние — флаг активации всплывающей подсказки:
- Привязки — количество связей свойств компонента с тегами проекта (открывает редактор привязок).
- Радиус скругления — радиус скругления углов компонента (диапазон: 0–50).
- Пароль доступа
- Шрифт
- Имя шрифта — гарнитура шрифта текста компонента.
- Размер — размер шрифта текста компонента.
- Текст:
- Текст на кнопке — надпись на компоненте.
- Отжата — стиль компонента в нормальном состоянии:
- Цвет заливки
- Цвет обводки
- Ширина обводки
- Цвет текста
- Наведена — стиль при наведении курсора.
- Нажата — стиль в нажатом состоянии.
- Действие: — описание действий приводится на вкладках выше.
- Мнемосхема — мнемосхема, открываемая при нажатии на компонент.
- Мнемосхема — мнемосхема, открываемая при нажатии на компонент.
- Переменные в строке — параметры для передачи в мнемосхему-шаблон в формате:
Имя1=%Значение1%,Имя2=%Значение2% - Окно/Источник положения — способ позиционирования окна: "под кнопкой" (контекстно) или "жесткое положение" (фиксированные координаты).
- Окно/Заголовок/Цвет фона — цвет фона заголовка окна.
- Окно/Заголовок/Цвет текста — цвет текста в заголовке окна.
- Окно/Заголовок/Текст — надпись в заголовке окна.
- Окно/Заголовок/Видимость — флаг отображения заголовка окна.
Работает только в нативном HMI-клиенте.
- Мнемосхема — мнемосхема, открываемая при нажатии на компонент.
- Окно/Рамка — режим отображения окна: с рамкой или без (полноэкранный/без границ).
- Окно/Номер монитора — номер монитора для отображения окна (в многомониторной конфигурации).
- Окно/Положение X — горизонтальная координата окна на экран.
- Окно/Положение Y — вертикальная координата окна на экране.
- Окно/Ширина — ширина окна в пикселях.
- Окно/Высота — высота окна в пикселях.
- Мнемосхема — мнемосхема, открываемая при нажатии на компонент.
- Имя контейнера — уникальный идентификатор контейнера для отображения мнемосхемы.
- Переменные в строке — параметры для передачи в мнемосхему-шаблон в формате:
Имя1=%Значение1%,Имя2=%Значение2%
При нажатии на кнопку происходит переход к журналу событий сервера.
- Имя компонента — уникальный идентификатор компонента iframe на мнемосхеме.
- URL — веб-адрес для загрузки в компонент iframe.
При нажатии на кнопку происходит переход к просмотру графиков.
- Канал — имя тега, в который производится запись значения.
- Значение — данные для записи в указанный тег.
- Подтверждение записи — флаг отображения диалога подтверждения:
- Вкл (показывать).
- Выкл (не показывать).
- Текст подтверждения — сообщение в диалоговом окне подтверждения операции записи.
- Запись бит — режим побитовой записи значения в тег (изменение только указанных битов).
- Канал — имя тега, в который производится запись значения.
- Значение — данные для записи в указанный тег.
- Значение, отжато — значение, записываемое в тег при отпускании кнопки (возвращении в отжатое состояние).
- Запись бит — режим побитовой записи значения в тег (изменение только указанных битов).
При нажатии на кнопку происходит закрытие клиента.
При нажатии на кнопку происходит выход из текущей учетной записи.
При нажатии на кнопку происходит закрытие активной мнемосхемы.
- Имя отчета — имя шаблона отчета, созданного в "Редакторе отчетов".
- Макро-настройки — открывает редактор макросов для настройки последовательности действий.

Галерея проекта
Все пользовательские фигуры, созданные в рамках проекта, а также копии фигур, перенесенных из "Общей галереи", сохраняются в окне "Галерея проекта".
Справка
Галерея проекта доступна только если в настройках выбран режим Про .
При создании и многократном редактировании объектов в "Галерее проекта" система формирует дубликаты. Чтобы удалить неиспользуемые копии, нажмите правую кнопку мыши на любом неиспользуемом элементе и в контекстном меню выберите "Удалить неиспользуемые".

Внимание
Если в "Галерее проекта" есть объекты, которые могут потребоваться в дальнейшем, то перед удалением их следует сохранить в Общей Галерее.
После подтверждения указанные объекты будут удалены без возможности восстановления.

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

На вкладках ниже находится описание настроек симуляции для разных типов принимаемых значений. После ввода значения в поле "Константа", либо в случае применения стратегии, в области редактирования можно визуально наблюдать изменение поведения объекта.
- Константа — запись в переменную фиксированного числового значения.
- Значение — поле для ввода фиксированного значения.
- Синусоида — генерация значения по синусоидальному закону в заданном диапазоне.
- Минимум — нижняя граница генерируемых значений.
- Максимум — верхняя граница генерируемых значений.
- Период — время полного цикла изменения значения (в секундах).
- Пила — генерация значения по линейно нарастающему закону (пилообразный сигнал).
- Минимум — нижняя граница генерируемых значений.
- Максимум — верхняя граница генерируемых значений.
- Период — время полного цикла изменения значения (в секундах).
- Константа — запись в переменную фиксированного числового значения.
- Значение — поле для ввода фиксированного значения переменной
- Включено/выключено
- Период — период в секундах между формированием сигнала
вклиоткл.
- Период — период в секундах между формированием сигнала

Кнопка "Задать всем" открывает диалоговое окно, которое позволяет назначить стратегию для группы аргументов.

Редактор фигур
Редактор фигур
Введение
Инструмент "Редактор фигур" предназначен для создания и редактирования векторных графических объектов в системе. С его помощью можно создавать уникальные элементы, а также применять различные сценарии анимации к ним. Основными преимуществами векторной графики являются:
- Масштабируемость — графика сохраняет четкость при увеличении или уменьшении масштаба;
- Гибкость настройки — параметры элементов (цвет, форма, прозрачность) могут динамически изменяться;
- Эффективность хранения — векторные объекты занимают меньше памяти по сравнению с растровыми аналогами;
- Адаптивность — элементы автоматически подстраиваются под разрешение экрана, что важно для проектов с разными устройствами визуализации.
Информация
Для работы с редактором фигур в настройках требуется активировать расширенный режим работы с графикой "Про".
Запуск редактора
Попасть в "Редактор фигур" можно тремя способами:
- Выбрав пункт контекстного меню "Редактировать копию" компонента "Пустая фигура" на мнемосхеме.
- Выбрав пункт контекстного меню "Редактировать копию" для любой фигуры из "Общей галереи" или "Галереи проекта", которая уже перенесена на мнемосхему. При этом система автоматически создаст копию этой фигуры в "Галерее проекта".
- Выбрав в "Галерее проекта"»" пункт контекстного меню "Редактировать" для родительской фигуры (без создания копии).
Новая фигура
Для создания новой фигуры разместите компонент "Пустая фигура" из "Палитры компонентов" в области редактирования мнемосхемы. Затем, используя правую кнопку мыши, вызовите контекстное меню и выберите пункт "Редактировать копию".

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

После этого откроется "Редактор фигур".
Редактирование
Для редактирования фигуры из "Общей галереи" сначала разместите её в области редактирования. Далее, используя правую кнопку мыши, вызовите контекстное меню и активируйте пункт "Редактировать копию". Система перейдет в режим редактирования готового графического объекта, создав его копию в галерее проекта.

Для редактирования фигуры-родителя нажмите на ней правой кнопкой мыши в "Галерее проекта" и из меню выберите "Редактировать".

Главное окно
В главном окне редактора фигур можно выделить следующие функциональные области:

Область редактирования представляет собой основное рабочее пространство для создания и редактирования графического объекта.
Сочетание клавиш
- Ctrl+колесо мыши — масштабирование области редактирования.
- Ctrl+левая кнопка мыши — перемещение области редактирования.
- Ctrl+Up+Down+Left+Right — перемещение выделенного объекта вверх (вниз, влево, вправо) на 1 пиксель.
- Shift+Up+Down+Left+Right — изменение размера выделенного объекта на 1 пиксель.
- Ctrl+Num 1 — уменьшить масштаб области редактирования.
- Ctrl+Num 2 — увеличить масштаб области редактирования.
- Ctrl+C — копировать объект.
- Ctrl+X — вырезать объект.
- Ctrl+V — вставить объект.
- Ctrl+Z — отменить действие.
- Ctrl+Y — повторить отмененное действие.
- Del — удалить выделенный объект из области редактирования.
Для быстрого изменения размера объекта выделите область редактирования и, удерживая левую кнопку мыши, переместите её в нужном направлении.

| Кнопка | Описание |
|---|---|
Копировать объект |
|
Вырезать объект |
|
Вставить объект |
|
Выровнять объекты по левому краю |
|
Выровнять объекты по правому краю |
|
Выровнять объекты по верхнему краю |
|
Выровнять объекты по нижнему краю |
|
Центрировать объекты по горизонтали |
|
Центрировать объекты по вертикали |
|
Установить интервал по горизонтали |
|
Установить интервал по вертикали |
|
Переместить на передний план |
|
Переместить на задний план |
|
Переместить на один шаг вперед |
|
Переместить на один шаг назад |
|
Группировать элементы |
|
Разгруппировать объект |
|
Отменить действие |
|
Повторить действие |
|
Увеличить масштаб области редактирования |
|
Уменьшить масштаб области редактирования |
|
Установить масштаб 100% |
Окно просмотра и редактирования свойств выбранного объекта. Ниже представлены свойства для всей выбранной фигуры:
- Ширина — ширина фигуры в пикселях.
- Высота — высота фигуры в пикселях.
-
Заливка:
- Цвет — цвет фоновой заливки фигуры.
- Тип — тип фоновой заливки фигуры.
- Нет — без заливки
- Сплошная — однородный цвет
- Градиент — вызов окна редактора градиента.

- Вид градиента:
- Линейный — плавный переход цвета по прямой линии между двумя или более точками.
- Радиальный — круговой переход цвета из центральной точки к краям фигуры.
- Центр (X, Y) — координаты центра градиента (для радиального типа).
- Радиус — радиус действия градиента (для радиального типа).
- Цвет — цветовые контрольные точки градиента.
- Прозрачность — уровень прозрачности для каждой точки градиента (0-100%).
- Полоса градиента — чтобы отредактировать цвет необходимо с помощью левой кнопки мыши установить точки на полосе градиента.
- Изображение — вызов окна редактора заливки изображением.

- Изображение — путь к изображению в системе.
- Растянуть:
- Нет — исходный размер.
- Заполнение — растяжение по всей области.
-
Область просмотра:
- Растянуть — режим масштабирования объекта на мнемосхеме:
- Нет — исходный размер.
- Масштаб — пропорциональное изменение.
- Заполнение — растяжение по всей области.
- Минимальная ширина — наименьшая допустимая ширина области.
- Минимальная высота — наименьшая допустимая высота области.
- Растянуть — режим масштабирования объекта на мнемосхеме:
Описание окна "Палитра компонентов" приведено ниже.
Набор различных функций и параметров редактора фигур:
Окно "Структура" представляет собой древовидный список векторных объектов, из которых состоит фигура. Если вам сложно выбрать элемент в области редактирования объекта, можете указать его в структуре, и он будет подсвечен в области редактирования. Это работает только для элементов, которые не входят в группу.
Палитра компонентов
Окно "Палитра компонентов" в "Редакторе фигур", аналогично одноименному окну в редакторе мнемосхем, является набором инструментов и готовых графических объектов. Ниже представлено описание настроек каждого компонента.

Инструмент для изменения размеров и положения графического элемента.
При работе с "Палитрой компонентов" может возникнуть ситуация, когда выбор элемента на мнемосхеме становится невозможным (например, если выбран другой инструмент в "Палитре компонентов"). В таком случае сначала выберите инструмент "Изменение границ", после чего вернитесь в область редактирования фигуры и нажмите на нужный элемент.

Инструмент, который используется для корректировки геометрии криволинейных компонентов Путь, Путь Безье, Дуга, Пирог, Дуговая шкала.

Базовая геометрическая фигура.
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
- Заливка:
- Цвет — основной цвет заливки.
- Тип — тип заливки (сплошная, градиент, изображение).
- Градиент — настройки градиентной заливки.
- Изображение — настройки заливки изображением.
- Уровень — включение индикации уровня.
- Процент уровня — значение уровня заполнения (0,0 — 0%, 0,5 — 50%, 1,0 — 100%).
- Обводка:
- Цвет — цвет контура фигуры.
- Ширина — толщина линии обводки.
- Стиль — стиль линии (сплошная, пунктир).
- Лимит скоса под угол — максимальное значение скоса углов.
- Радиус скругления X — радиус скругления по горизонтали.
- Радиус скругления Y — радиус скругления по вертикали.
Текстовый элемент с настраиваемым содержимым.
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
- Текст — строка, отображаемая в компоненте.
- Цвет — определяет цвет текста компонента.
- Шрифт — параметры шрифта текста (стиль, размер, начертание).
- Горизонтальное выравнивание — выравнивание текста по горизонтали (слева, по центру, справа).
- Вертикальное выравнивание — выравнивание текста по вертикали (сверху, по центру, снизу).
- Перенос строк — флаг управления переносом текста:
- Вкл — текст переносится на новую строку при достижении границы компонента.
- Выкл — текст отображается в одну строку (возможна обрезка).
Инструмент для создания векторного объекта из сегментов и опорных точек. После выбора инструмента в "Палитре компонентов", первое нажатие левой кнопки мыши в области редактирования служит для определения начала линии. Последующие нажатия определяют точки изменения направления линии. Чтобы прекратить использование инструмента, можно выбрать другой инструмент в палитре или нажать клавишу "Esc".
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
- Заливка:
- Цвет — основной цвет заливки.
- Тип — тип заливки (сплошная, градиент, изображение).
- Градиент — настройки градиентной заливки.
- Изображение — настройки заливки изображением.
- Уровень — включение индикации уровня.
- Процент уровня — значение уровня заполнения (0,0 — 0%, 0,5 — 50%, 1,0 — 100%).
- Обводка:
- Цвет — цвет контура фигуры.
- Ширина — толщина линии обводки.
- Стиль — стиль линии (сплошная, пунктир).
- Лимит скоса под угол — максимальное значение скоса углов.
- Начало линии — выбор символа для оформления начала линии (стрелка, круг и т.д.).
- Размер начала линии — размер символа в начале линии.
- Конец линии — выбор символа для оформления конца линии.
- Размер конца линии — размер символа в конце линии.
Инструмент создания "кривых Безье" для сложных векторных форм.
Построение кривой Безье:
1. Начальная точка — первым нажатием левой кнопки мыши фиксируется начальная точка кривой.
2. Направление и длина изгиба — вторым нажатием задается направление и длина будущего изгиба, визуально отображаемые в виде направляющего отрезка.
3. Формирование кривой — перемещение курсора мыши формирует изгиб кривой Безье, который динамически отображается на экране.
4. Завершение сегмента — третье нажатие фиксирует конечную точку первого сегмента кривой.
Данная конечная точка автоматически становится начальной для следующего сегмента, позволяя строить непрерывную кривую. Процесс повторяется с пункта 2.
Для завершения построения используется клавиша "Esc".
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
- Заливка:
- Цвет — основной цвет заливки.
- Тип — тип заливки (сплошная, градиент, изображение).
- Градиент — настройки градиентной заливки.
- Изображение — настройки заливки изображением.
- Уровень — включение индикации уровня.
- Процент уровня — значение уровня заполнения (0,0 — 0%, 0,5 — 50%, 1,0 — 100%).
- Обводка:
- Цвет — цвет контура фигуры.
- Ширина — толщина линии обводки.
- Стиль — стиль линии (сплошная, пунктир).
- Лимит скоса под угол — максимальное значение скоса углов.
Компонент для отображения растровой графики (*.png, *.jpeg, *.bmp).
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации объекта относительно базовой точки в градусах.
- Имя файла — абсолютный путь к файлу изображения.
- Угол вращения картинки — угол поворота изображения в градусах.
- Растянуть — режим масштабирования: - Нет. - Заполнение (искажая пропорции). - Пропорционально (сохраняя соотношения).
- Горизонтальное выравнивание — позиция изображения по горизонтали.
- Вертикальное выравнивание — позиция изображения по вертикали.
Инструмент для создания геометрической фигуры овальной или круглой формы.
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
- Заливка:
- Цвет — основной цвет заливки.
- Тип — тип заливки (сплошная, градиент, изображение).
- Градиент — настройки градиентной заливки.
- Изображение — настройки заливки изображением.
- Уровень — включение индикации уровня.
- Процент уровня — значение уровня заполнения (0,0 — 0%, 0,5 — 50%, 1,0 — 100%).
- Обводка:
- Цвет — цвет контура фигуры.
- Ширина — толщина линии обводки.
- Стиль — стиль линии (сплошная, пунктир).
- Лимит скоса под угол — максимальное значение скоса углов.
Инструмент для создания части окружности с заданными углами.
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
- Заливка:
- Цвет — основной цвет заливки.
- Тип — тип заливки (сплошная, градиент, изображение).
- Градиент — настройки градиентной заливки.
- Изображение — настройки заливки изображением.
- Уровень — включение индикации уровня.
- Процент уровня — значение уровня заполнения (0,0 — 0%, 0,5 — 50%, 1,0 — 100%).
- Обводка:
- Цвет — цвет контура фигуры.
- Ширина — толщина линии обводки.
- Стиль — стиль линии (сплошная, пунктир).
- Лимит скоса под угол — максимальное значение скоса углов.
- Закругление концов — сглаживание торцов дуги.
- Перемычка в центре — отображение линии, соединяющей концы дуги с центром.
- Угол начала — начальный угол дуги в градусах (0-360°).
- Угол качения — угловая длина дуги в градусах (0-360°).
Инструмент для создания секторной диаграммы.
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
- Заливка:
- Цвет — основной цвет заливки.
- Тип — тип заливки (сплошная, градиент, изображение).
- Градиент — настройки градиентной заливки.
- Изображение — настройки заливки изображением.
- Уровень — включение индикации уровня.
- Процент уровня — значение уровня заполнения (0,0 — 0%, 0,5 — 50%, 1,0 — 100%).
- Обводка:
- Цвет — цвет контура фигуры.
- Ширина — толщина линии обводки.
- Стиль — стиль линии (сплошная, пунктир).
- Лимит скоса под угол — максимальное значение скоса углов.
- Закругление концов — сглаживание торцов дуги.
- Перемычка в центре — отображение линии, соединяющей концы дуги с центром.
- Угол начала — начальный угол дуги в градусах (0-360°).
- Угол качения — угловая длина дуги в градусах (0-360°).
Компонент "Линейный индикатор" с метками.
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
- Обводка:
- Цвет — цвет контура фигуры.
- Шрифт — шрифт для подписей шкалы.
- Положение — расположение шкалы относительно индикатора.
- Формат значения — формат отображения чисел (например, "0.0").
- Начальное значение — минимальное значение шкалы.
- Конечное значение — максимальное значение шкалы.
- Количество меток — число делений на шкале.
- Сторона меток — расположение меток: исходная или противоположная сторона.
- Видимость линии — отображение оси шкалы.
- Видимость меток — отображение делений шкалы.
- Видимость подписей меток — отображение числовых значений у делений.
Компонент "Дуговой индикатор" с метками.
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
- Обводка:
- Цвет — цвет контура фигуры.
- Шрифт — шрифт для подписей шкалы.
- Формат значения — формат отображения чисел (например, "0.0").
- Начальное значение — минимальное значение шкалы.
- Конечное значение — максимальное значение шкалы.
- Угол начала — начальный угол дуговой шкалы в градусах.
- Угол качения — угловая длина шкалы в градусах.
- Количество меток — число делений на шкале.
- Видимость дуги — отображение оси шкалы.
- Видимость меток — отображение делений шкалы.
- Отступ подписей меток — расстояние от меток до шкалы.
- Видимость подписей меток — отображение числовых значений у делений.
Компонет "Поле ввода" для ввода текста и числовых значений.
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
- Цвет границы — цвет рамки поля ввода.
- Цвет текста — цвет вводимого текста.
- Цвет фона — цвет фона поля ввода.
- Текст — текст-подсказка или значение по умолчанию.
- Шрифт— шрифт текста в поле.
- Горизонтальное выравнивание — выравнивание текста (влево, по центру, вправо).
- Аргумент — переменная для отображения значения.
- Аргумент, запись — переменная для записи введенного значения.
- Пароль доступа — пароль для ограничения доступа к редактированию.
Компонент для отображения журнала событий.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Цвет фона — цвет фоновой области таблицы событий.
- Цвет границы — цвет рамки вокруг компонента.
- Цвет сетки — цвет линий, разделяющих строки и столбцы таблицы.
- Шрифт — шрифт, используемый для текста событий в таблице.
- Обязательное квитирование — режим обработки событий:
- Вкл — события остаются в таблице до ручного квитирования, даже если состояние нормализовалось.
- Выкл — события автоматически удаляются из таблицы при нормализации состояния.
- Заголовок:
- Цвет фона — цвет фона заголовка таблицы.
- Цвет текста — цвет текста заголовка таблицы.
- Шрифт — шрифт, используемый для текста заголовка таблицы.
Кнопка с настраиваемыми действиями и стилями.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Угол вращения — угол поворота компонента относительно точки привязки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
- Радиус скругления — радиус скругления.
- Шрифт — шрифт, используемый для надписи кнопки.
- Отжата — стиль компонента в нормальном состоянии:
- Цвет заливки.
- Цвет обводки.
- Ширина обводки.
- Цвет текста.
- Наведена — стиль при наведении курсора.
- Нажата — стиль в нажатом состоянии.
- Действие: — описание действий.
Элемент управления для плавного изменения значения.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса точки привязки (левый верхний угол) компонента в пикселях.
- Y — ордината точки привязки (левый верхний угол) компонента в пикселях.
- Ширина — габаритный размер компонента по горизонтали в пикселях.
- Высота — габаритный размер компонента по вертикали в пикселях.
- Положение — положение слайдера в пространстве (вертикальное, горизонтальное).
- Фон — настройки фона компонента.
- Уровень — настройка цвета заполнения при перемещении ползунка.
- Ползунок:
- Цвет фона — цвет фоновой заливки фигуры.
- Имя файла — абсолютный путь к файлу изображения
- Размер ширина — для горизонтального исполнения, высота — для вертикального.
- Цвет обводки.
- Ширина обводки.
- Минимум — минимальное значение диапазона ползунка.
- Максимум — максимальное значение диапазона ползунка.
- Аргумент — открывает редактор аргументов текущей фигуры.
- Подтверждение записи — флаг отображения диалога подтверждения:
- Вкл (показывать).
- Выкл (не показывать).
Компонент, позволяющий отобразить фигуру, заданную в формате .svg. Для создания изображения разместите код SVG-файла в окне свойства "Содержание".
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
Для вставки кода откройте редактор, нажав кнопку ... свойства "Содержание". Откроется окно "Редактирования текста".

В качестве примера можно скопировать код изображения из листинга ниже:
<svg width="102" height="115" viewBox="0 0 102 115" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M86.3352 16.4906L86.4528 16.7038C82.2613 17.1426 77.9401 17.9528 73.5753 19.1593C47.1995 26.4499 29.2181 45.4511 33.4126 61.5997C34.7551 66.7684 38.2068 71.0184 43.1449 74.1692C26. 661 78.5878 11.5794 75.2942 5.58542 64.5843C-2.50234 50.1334 9.01769 27.6524 31.3161 14.3717C53.6146 1.09101 78.2475 2.03967 86.3352 16.4906Z" fill="#0060D4"/>
<path d="M11.8128 96.7069L11.6924 96.4883C15.8818 96.049 20.2008 95.2387 24.5634 94.0324C50.9386 86.7395 68.9206 67.7361 64.7275 51.5872C63.3855 46.4188 59.9347 42.1692 54.9978 39.0187C71. 4815 34.5967 86.5629 37.8893 92.5559 48.601C100.642 63.0532 89.1214 85.5379 66.8248 98.8219C44.5282 112.106 19.8985 111.159 11.8128 96.7069Z" fill="#0060D4"/>
</svg>
Компонент, в который можно поместить стороннее векторное SVG-изображение. Изображение копируется во внутреннее хранилище изображений проекта.
- Анимации — настройка и количество анимаций компонента.
- Имя — уникальный идентификатор графического компонента.
- X — абсцисса базовой точки привязки (левый верхний угол) в пикселях.
- Y — ордината базовой точки привязки (левый верхний угол) в пикселях.
- Ширина — размер по горизонтальной оси в пикселях.
- Высота — размер по вертикальной оси в пикселях.
- Угол вращения — угол ориентации фигуры относительно базовой точки в градусах.
- Центр вращения X — горизонтальная координата точки вращения (0,0 — левая граница, 1,0 — правая граница, 0,5 — середина между левой и правой).
- Центр вращения Y — вертикальная координата точки вращения (0,0 — верхняя граница, 1,0 — нижняя граница, 0,5 — середина между верхней и нижней).
- Имя файла — абсолютный путь к файлу изображения.
- Перекрашивание:
- Активность:
- Вкл — цвет перекраски смешивается с основным цветом SVG-изображения.
- Выкл — перекраска выключена.
- Цвет — выбор цвета для перекраски.
- Активность:
Редактор привязок
Фигура > Привязки
Диалоговое окно "Редактор привязок" позволяет назначить определенные свойства созданным аргументам. Для каждой созданной привязки необходимо определить "Выражение" и "Цель". Эти настройки становятся доступными после выбора привязки в списке и нажатия кнопки ... в соответствующем поле редактора привязок.
➕ — создать новую привязку.
❌ — удалить выбранную привязку.
▲ — перемещение выбранной привязки выше по списку.
▼ — перемещение выбранной привязки ниже по списку.

Выражение:
- Нет — выражение не назначено.
- Есть — выражение назначено. Описание выражения привязки указано после символа $.
Выражение может представлять собой формулу:

или просто определять свойство, не выполняя вычислений:

Цели — может быть одна или несколько целей для каждой привязки. В поле указано общее количество определенных целей.
Редактор аргументов
Введение
Фигура > Аргументы
Окно "Редактор аргументов" позволяет добавить необходимое количество аргументов для создаваемого графического объекта. Аргументы можно группировать, настраивать их видимость и задавать тип значения.
Обзор окна редактора

1. Для редактирования аргументов используется панель инструментов:
➕ — добавить новый аргумент.
❌ — удалить выбранный аргумент.
✏️ — изменить имя выбранного аргумента.
▲ — перемещение выбранного аргумента на одну позицию вверх в списке.
▼ — перемещение выбранного аргумента на одну позицию вниз в списке.
2. Для каждого аргумента настройка осуществляется путем выбора соответствующего флага или значения в соответствующих столбцах таблицы. Ниже приведено описание настроек каждого столбца.
Группа
Для группировки создайте хотя бы один аргумент. После этого установите курсор в поле с названием группы, укажите имя и нажмите Enter.

После добавления еще одной группы в выпадающем списке появится возможность выбора групп.

Видимость в свойствах
Флаг, который позволяет для каждого аргумента определить видимость в "Инспекторе свойств". Например, уже создана следующая структура аргументов:

После завершения работы с фигурой вернитесь в "Редактор мнемосхем". В свойствах фигуры станут доступны группы и аргументы, для которых была установлена видимость. Их можно быстро изменять в режиме работы с мнемосхемой, не возвращаясь в редактор фигур.

Видимость в привязках
Флаг, который позволяет для каждого аргумента определить видимость в привязках.

После завершения работы с фигурой вернитесь в "Редактор мнемосхем". Для фигуры станет доступно поле "Привязки". С помощью кнопки ... этого поля вызовите окно "Связь аргументов и тегов". Теперь активные теги проекта можно привязать к аргументам фигуры.

Тип значения
В столбце "Тип значения" для каждого аргумента из выпадающего списка можно выбрать тип значения, которое будет принимать этот аргумент:

Number— числовое значение (целое или с плавающей точкой).String— текстовая строка.Boolean— логическое значение (True/False, 1/0).Color— выбор цвета в формате HEX или RGB.Action— действие, выполняемое компонентом.MnemoPath— путь к мнемосхеме в проекте.Tag— выбор аргумента.FontFamily— выбора шрифта.HorzAlign— горизонтальное выравнивание текста (слева/по центру/справа).VertAlign— вертикальное выравнивание текста (слева/по центру/справа).ImageFileName— указать путь к файлу изображения.MacroActions— последовательность макрокоманд.PositionSource— источник позиционирования окна (под кнопкой/жесткое положение).Integer— целое число.Password— пароль (отображается символами-заместителями).MultiString— многострочный текст.
Редактор выражений
Главное окно
Диалоговое окно "Редактор выражений" представляет собой список аргументов и рабочую область для описания вычислений над ними.

- Список аргументов — перечень всех аргументов фигуры.
- Область редактирования выражений над аргументами (добавление аргумента в область осуществляется двойным нажатием левой кнопки мыши).
- Перечень часто используемых функций в выражениях.
- Область, в которой отображается подсказка по использованию выбранной функции.
- Кнопка "Проверить" — проверка правильности написания исходного выражения.
Внимание
- имя аргумента передается в функцию в формате
${arg_name}; - если в функцию передается аргумент, представленный в виде строки, то его необходимо заключить в одинарные кавычки
'some string'; - значения типа
numberне требуется заключать в кавычки.
Функции
| Оператор | Описание | Пример выражения |
|---|---|---|
abs |
Возвращает абсолютное значение | abs(${arg}) |
arccos |
Вычисляет арккосинус значения в радианах | arccos(${arg}) |
arcsin |
Вычисляет арксинус значения в радианах | arcsin(${arg}) |
arctan |
Вычисляет арктангенс значения в радианах | arctan(${arg}) |
arccotan |
Вычисляет арккотангенс значения в радианах | arccotan(${arg}) |
band |
Побитовое И над значениями аргументов x и y |
band(${x}, ${y}) |
bnot |
Побитовое НЕ над значением аргумента x |
bnot(${x}) |
bor |
Побитовое ИЛИ над значениями аргумента x и y |
bor(${x}, ${y}) |
blshift |
Побитовое смещение влево значения аргумента x на n бит |
blshift(${x}, n) |
brshift |
Побитовое смещение вправо значения аргумента x на n бит |
brshift(${x}, n) |
bxor |
Побитовое исключающее ИЛИ над значениями аргументов x и y |
bxor(${x}, ${y}) |
cos |
Вычисляет косинус значения в радианах | cos(${arg}) |
cotan |
Вычисляет котангенс значения в радианах | cos(${arg}) |
ceil |
Округляет вверх до ближайшего целого значения | ceil(2.4) = 3 |
dateTimeToString |
Преобразует время в формате строки ISO8601 | dateTimeToString('2025-12-16T05:40:05Z') |
exp |
Возводит значение аргумента x в натуральную степень e ~ 2.72 |
exp(${x}) |
floor |
Округляет вниз до ближайшего целого значения | floor(2.6) = 2 |
frac |
Извлекает дробную часть значения | frac(${arg}) |
getBit |
Извлекает бит n из значения аргумента arg |
getBit(${arg}, n) |
getUserName |
Возвращает имя текущего пользователя | getUserName() |
getUserGroupName |
Возвращает название текущех группы пользователей | getUserGroupName() |
if |
Условная функция: возвращает одно из двух значений: x — (true), y — (false) |
if(${var} > 100, x, y) |
ln |
Вычисляет натуральный логарифм згачения | ln(${var}) |
max |
Возвращает максимальное из значений аргументов x и y |
max(${x}, ${y}) |
min |
Возвращает минимальное из значений аргументов x и y |
min(${x}, ${y}) |
power |
Возводит значение аргумента arg в степень n |
power(${arg}, n) |
round |
Округляет значение до ближайшего целого | round(2.6) = 3 |
setBit |
Устанавливает бит n в значение state (0 или 1) тега var |
setBit(${var}, n, state) |
sin |
Вычисляет значение синуса в радианах | sin(${arg}) |
sqr |
Возводит значение в квадрат | sqr(${arg}) |
sqrt |
Получает квадратный корень значения | sqrt(${arg}) |
strInCommaText |
Проверяет находится ли текст str в аргументе commaText |
strInCommaText('str', ${commaText}) |
trunc |
Извлекает целую часть значения | trunc(${arg}) |
Масштаб |
Масштабирует значение arg из входного диапазона [a, b] в выходной [x, y] |
(${arg} - a) / (b - a) * (y - x) + x |
| Название | Описание |
|---|---|
isBound |
1 - тег привязан, 0 - тег отвязан от аргумента |
value |
Значение аргумента. Если не указано свойство, используется именно это свойство |
viewValue |
Форматированное значение аргумента согласно настройкам привязанного тега |
quality |
Качество сигнала. 0xC0 (192) — хорошее качество сигнала. Все остальные значения указывают на низкое качество |
alarmStatus |
Значение статуса тревоги. |
loAlarm |
Нижняя предупредительная граница уставок (Lo) |
loLoAlarm |
Нижняя аварийная граница уставок (LoLo) |
hiAlarm |
Верхняя предупредительная граница уставок (Hi) |
hiHiAlarm |
Верхняя аварийная граница уставок (HiHi) |
lowScale |
Нижняя граница шкалы |
highScale |
Верхняя граница шкалы |
units |
Единицы измерения шкалы |
| Перечисление | Название | Описание |
|---|---|---|
0 |
Normal |
Значение находится в пределах уставок |
1 |
LoAlarm |
Нарушение нижней предупредительной границы уставок (Lo) |
2 |
HiAlarm |
Нарушение верхней предупредительной границы уставок (Hi) |
3 |
DiscreteOn |
Отслеживаемое дискретное значение Вкл |
4 |
DiscreteOff |
Отслеживаемое дискретное значение Выкл |
5 |
HiHiAlarm |
Нарушение верхней аварийной границы уставок (HiHi) |
6 |
LoLoAlarm |
Нарушение нижней аварийной границы уставок (LoLo) |
| Оператор | Описание |
|---|---|
| ... | Группировка |
| ^ | Возведение в степень |
| * | Умножение |
| / | Деление |
| + | Сложение |
| - | Вычитание |
| == | Равно |
| != | Не равно |
| > | Больше |
| >= | Больше или равно |
| < | Меньше |
| <= | Меньше или равно |
| not | Логическое отрицание |
| and | Логическое И |
| or | Логическое ИЛИ |
| if | Условное выражение |
Функция
strInCommaTextвозвращает значениеtrue, если проверка успешна, иfalse— в противном случае.
string— строковый тип данных для хранения текстовой информации.
Pi— число Пи (~ 3,14159...)
Статусы тревоги
В случае состояния тревоги Normal — выводится значение аргумента. В противном случае строка Авария.
Шаблонные строки
Строковые литералы, допускающие использование выражений внутри, называются шаблонными строками. С ними можно использовать строковую интерполяцию, что позволяет избежать необходимости конкатенации в выражениях. Такие строки заключены в обратные кавычки `` вместо одинарных. Они могут содержать подстановки, обозначенные знаком решетка и фигурными скобками #{выражение}.
Примеры выражений
Деление значения переменной на 100:
Условное выражение: если переменная привязана (isBound == true), возвращает её единицы измерения, иначе — строку 'A'
Извлекает значение из тега "Переменная" и добавляет к значению единицы измеренния шкалы.
Нормализует значение переменной к диапазону [lowScale, highScale], затем масштабирует результат до диапазона [0, 268]:
Редактор целей
Диалоговое окно "Редактор целей" позволяет установить цель для каждого графического элемента, из которых состоит фигура. Для каждого компонента из "Палитры компонентов" определён индивидуальный набор целей. Сначала требуется выбрать элемент в соответствующем поле, а далее из списка выбрать "Свойство".
➕ — создать новую цель.
❌ — удалить выбранную цель.
▲ — перемещение выбранной цели выше по списку.
▼ — перемещение выбранной цели ниже по списку.

| Свойство | Тип данных | Описание |
|---|---|---|
Fill.Color |
Color |
Цвет заливки элемента |
Fill.Gradient.CenterX |
Number |
Горизонтальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.CenterY |
Number |
Вертикальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.Radius |
Number |
Радиус радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Image.FileName |
String |
Путь к файлу изображения для заливки |
Fill.Leveling |
Boolean |
Включение/отключение режима отсечения заливки по уровню |
Fill.LevelProcent |
Number |
Уровень отсечения заливки по уровню от 0 до 1 |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
RadiusX |
Number |
Радиус скругления по горизонтали, в пикселях |
RadiusY |
Number |
Радиус скругления по вертикали, в пикселях |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
Stroke.Color |
Color |
Цвет обводки элемента |
Stroke.MiterLimit |
Number |
Предел скоса углов обводки |
Stroke.RoundCap |
Boolean |
Скругление концов линий обводки |
Stroke.Width |
Number |
Толщина обводки |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
Color |
Color |
Цвет текста |
Font.Family |
String |
Название семейства шрифтов |
Font.Size |
Number |
Размер шрифта |
Height |
Number |
Высота элемента |
HorzAlign |
HorzAlign |
Горизонтальное выравнивание текста (слева, по центру, справа). |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
Text |
String |
Строка текста, отображаемая в элементе |
Top |
Number |
Координата верхнего края элемента относительно родителя |
VertAlign |
VertAlign |
Вертикальное выравнивание текста (сверху, по центру, снизу) |
Width |
Number |
Ширина элемента |
Wrapping |
Boolean |
Флаг переноса текста на новую строку при достижении границ элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
CapsVisible |
Boolean |
Флаг отображения наконечников (окончаний) линии. |
EndCap.Size |
Number |
Размер конечного наконечника линии. |
Fill.Color |
Color |
Цвет заливки элемента |
Fill.Gradient.CenterX |
Number |
Горизонтальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.CenterY |
Number |
Вертикальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.Radius |
Number |
Радиус радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Image.FileName |
String |
Путь к файлу изображения для заливки |
Fill.Leveling |
Boolean |
Включение/отключение режима отсечения заливки по уровню |
Fill.LevelProcent |
Number |
Уровень отсечения заливки по уровню от 0 до 1 |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
StartCap.Size |
Number |
Размер начального наконечника линии. |
Stroke.Color |
Color |
Цвет обводки элемента |
Stroke.MiterLimit |
Number |
Предел скоса углов обводки |
Stroke.RoundCap |
Boolean |
Скругление концов линий обводки |
Stroke.Width |
Number |
Толщина обводки |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
Data |
String |
Содержит описание вершин векторного пути в специализированном строковом формате |
CapsVisible |
Boolean |
Флаг отображения наконечников (окончаний) линии. |
EndCap.Size |
Number |
Размер конечного наконечника линии. |
Fill.Color |
Color |
Цвет заливки элемента |
Fill.Gradient.CenterX |
Number |
Горизонтальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.CenterY |
Number |
Вертикальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.Radius |
Number |
Радиус радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Image.FileName |
String |
Путь к файлу изображения для заливки |
Fill.Leveling |
Boolean |
Включение/отключение режима отсечения заливки по уровню |
Fill.LevelProcent |
Number |
Уровень отсечения заливки по уровню от 0 до 1 |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
StartCap.Size |
Number |
Размер начального наконечника линии. |
Stroke.Color |
Color |
Цвет обводки элемента |
Stroke.MiterLimit |
Number |
Предел скоса углов обводки |
Stroke.RoundCap |
Boolean |
Скругление концов линий обводки |
Stroke.Width |
Number |
Толщина обводки |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
FileName |
String |
Путь и имя файла изображения, загружаемого в компонент |
Height |
Number |
Высота элемента |
HorzAlign |
HorzAlign |
Горизонтальное выравнивание текста (слева, по центру, справа). |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
PictureRotateAngle |
Number |
Угол поворота изображения относительно его центра (в градусах) |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
Top |
Number |
Координата верхнего края элемента относительно родителя |
VertAlign |
VertAlign |
Вертикальное выравнивание текста (сверху, по центру, снизу) |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
Fill.Color |
Color |
Цвет заливки элемента |
Fill.Gradient.CenterX |
Number |
Горизонтальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.CenterY |
Number |
Вертикальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.Radius |
Number |
Радиус радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Image.FileName |
String |
Путь к файлу изображения для заливки |
Fill.Leveling |
Boolean |
Включение/отключение режима отсечения заливки по уровню |
Fill.LevelProcent |
Number |
Уровень отсечения заливки по уровню от 0 до 1 |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
Stroke.Color |
Color |
Цвет обводки элемента |
Stroke.MiterLimit |
Number |
Предел скоса углов обводки |
Stroke.RoundCap |
Boolean |
Скругление концов линий обводки |
Stroke.Width |
Number |
Толщина обводки |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
ConnectCenter |
Boolean |
Соединять концы дуги линиями с её геометрическим центром |
Fill.Color |
Color |
Цвет заливки элемента |
Fill.Gradient.CenterX |
Number |
Горизонтальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.CenterY |
Number |
Вертикальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.Radius |
Number |
Радиус радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Image.FileName |
String |
Путь к файлу изображения для заливки |
Fill.Leveling |
Boolean |
Включение/отключение режима отсечения заливки по уровню |
Fill.LevelProcent |
Number |
Уровень отсечения заливки по уровню от 0 до 1 |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
StartAngle |
Number |
Угол начала дуги в градусах (0-360) |
Stroke.Color |
Color |
Цвет обводки элемента |
Stroke.MiterLimit |
Number |
Предел скоса углов обводки |
Stroke.RoundCap |
Boolean |
Скругление концов линий обводки |
Stroke.Width |
Number |
Толщина обводки |
SweepAngle |
Number |
Угловая длина дуги в градусах (0-360) |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
ConnectCenter |
Boolean |
Соединять концы дуги линиями с её геометрическим центром |
Fill.Color |
Color |
Цвет заливки элемента |
Fill.Gradient.CenterX |
Number |
Горизонтальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.CenterY |
Number |
Вертикальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.Radius |
Number |
Радиус радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Image.FileName |
String |
Путь к файлу изображения для заливки |
Fill.Leveling |
Boolean |
Включение/отключение режима отсечения заливки по уровню |
Fill.LevelProcent |
Number |
Уровень отсечения заливки по уровню от 0 до 1 |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
StartAngle |
Number |
Угол начала дуги в градусах (0-360) |
Stroke.Color |
Color |
Цвет обводки элемента |
Stroke.MiterLimit |
Number |
Предел скоса углов обводки |
Stroke.RoundCap |
Boolean |
Скругление концов линий обводки |
Stroke.Width |
Number |
Толщина обводки |
SweepAngle |
Number |
Угловая длина дуги в градусах (0-360) |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
DigitCommaCount |
Integer |
Количество десятичных знаков в подписях шкалы |
EndValue |
Number |
Максимальное значение шкалы |
Fill.Color |
Color |
Цвет заливки элемента |
Fill.Gradient.CenterX |
Number |
Горизонтальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.CenterY |
Number |
Вертикальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.Radius |
Number |
Радиус радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Image.FileName |
String |
Путь к файлу изображения для заливки |
Fill.Leveling |
Boolean |
Включение/отключение режима отсечения заливки по уровню |
Fill.LevelProcent |
Number |
Уровень отсечения заливки по уровню от 0 до 1 |
Font.Family |
String |
Название семейства шрифтов |
Font.Size |
Number |
Размер шрифта |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
LineVisible |
Boolean |
Отображение оси шкалы |
Name |
String |
Имя элемента |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
StartValue |
Number |
Минимальное значение шкалы |
Stroke.Color |
Color |
Цвет обводки элемента |
Stroke.MiterLimit |
Number |
Предел скоса углов обводки |
Stroke.RoundCap |
Boolean |
Скругление концов линий обводки |
Stroke.Width |
Number |
Толщина обводки |
TickCount |
Number |
Число меток (делений) на шкале |
Top |
Number |
Координата верхнего края элемента относительно родителя |
TickTipVisible |
Boolean |
Отображение числовых подписей у меток |
TickVisible |
Boolean |
Отображение самих меток (делений) |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
ArcVisible |
Boolean |
Отображение дуговой линии шкалы |
DigitCommaCount |
Integer |
Количество десятичных знаков в подписях шкалы |
EndValue |
Number |
Максимальное значение шкалы |
Fill.Color |
Color |
Цвет заливки элемента |
Fill.Gradient.CenterX |
Number |
Горизонтальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.CenterY |
Number |
Вертикальная позиция центра радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Gradient.Radius |
Number |
Радиус радиального градиента (0,0 — 0%, 0,5 — 50%, 1,0 — 100%) |
Fill.Image.FileName |
String |
Путь к файлу изображения для заливки |
Fill.Leveling |
Boolean |
Включение/отключение режима отсечения заливки по уровню |
Fill.LevelProcent |
Number |
Уровень отсечения заливки по уровню от 0 до 1 |
Font.Family |
String |
Название семейства шрифтов |
Font.Size |
Number |
Размер шрифта |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
StartAngle |
Number |
Угол начала дуги в градусах (0-360) |
StartValue |
Number |
Минимальное значение шкалы |
Stroke.Color |
Color |
Цвет обводки элемента |
Stroke.MiterLimit |
Number |
Предел скоса углов обводки |
Stroke.RoundCap |
Boolean |
Скругление концов линий обводки |
Stroke.Width |
Number |
Толщина обводки |
SweepAngle |
Number |
Угловая длина дуги в градусах (0-360) |
TickCount |
Number |
Число меток (делений) на шкале |
TickTipOffset |
Number |
Расстояние от подписей меток до шкалы |
TickTipVisible |
Boolean |
Отображение числовых подписей у меток |
TickVisible |
Boolean |
Отображение самих меток (делений) |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
AccessPassword |
String |
Пароль для разблокировки редактирования поля ввода |
BackgroundColor |
Color |
Цвет фона поля ввода |
BorderColor |
Color |
Цвет рамки поля |
BorderWidth |
Integer |
Толщина рамки поля ввода |
Color |
Color |
Цвет текста в поле |
Enabled |
Boolean |
Флаг доступности поля для редактирования |
Font.Family |
String |
Название семейства шрифтов |
Font.Size |
Number |
Размер шрифта |
Height |
Number |
Высота элемента |
HorzAlign |
HorzAlign |
Горизонтальное выравнивание текста (слева, по центру, справа). |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
Text |
String |
Строка текста, отображаемая в элементе |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
WriteConfirm |
Boolean |
Требование подтверждения перед записью значения |
WriteConfirmText |
String |
Текст диалога подтверждения записи |
| Свойство | Тип данных | Описание |
|---|---|---|
BackgroundColor |
Color |
Цвет фона элемента |
BorderColor |
Color |
Цвет рамки элемента |
Font.Family |
String |
Название семейства шрифтов |
Font.Size |
Number |
Размер шрифта |
GridLineColor |
Color |
Цвет линий сетки таблицы |
Header.BackgroundColor |
Color |
Цвет фона заголовка таблицы |
Header.Height |
Number |
Высота строки заголовка в пикселях |
Header.TextColor |
Color |
Цвет текста в заголовке |
Header.TextFont.Family |
String |
Шрифт текста заголовка |
Header.TextFont.Size |
Number |
Размер шрифта заголовка в пикселях |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
MandatoryAck |
Boolean |
Обязательное квитирование событий перед удалением из таблицы |
Name |
String |
Имя элемента |
RowHeight |
Number |
Высота строк данных в пикселях |
TagFilter.Enabled |
Boolean |
Включение фильтрации событий по тегам |
TagFilter.TagIDs |
String |
Список ID тегов для фильтрации (через запятую) |
TextColor |
Color |
Цвет текста в строках данных |
Text |
String |
Строка текста, отображаемая в элементе |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
AccessPassword |
String |
Пароль для разблокировки элемента |
Action |
Action |
Действие, выполняемое при нажатии кнопки |
ActionProps.ContainerName |
String |
Имя контейнера для открытия мнемосхемы |
ActionProps.ElementName |
String |
Имя элемента-iframe для действия "Открыть в iframe" |
ActionProps.MnemoPath |
String |
Путь к мнемосхеме для действий открытия |
ActionProps.PauseTimeout |
Integer |
Длительность паузы в действии макроса (мс) |
ActionProps.ReportTemplatePath |
String |
Путь к шаблону отчёта |
ActionProps.TagID |
Integer |
ID тега для записи значения |
ActionProps.URL |
String |
URL-адрес для загрузки в iframe |
ActionProps.Value |
UniValue |
Значение, записываемое в тег при нажатии |
ActionProps.ValueRelease |
UniValue |
Значение, записываемое в тег при отпускании |
ActionProps.VariableLine |
String |
Строка параметров в формате key=value (через ;) |
ActionProps.Window.Frame |
Boolean |
Отображение рамки окна |
ActionProps.Window.Header.BackgroundColor |
Color |
Цвет фона заголовка окна |
ActionProps.Window.Header.TextColor |
Color |
Цвет текста заголовка окна |
ActionProps.Window.Header.Visible |
Boolean |
Видимость заголовка окна |
ActionProps.Window.Height |
Number |
Высота окна |
ActionProps.Window.MonitorID |
Integer |
ID монитора (с 0) |
ActionProps.Window.MonitorNo |
Integer |
Номер монитора (с 1) |
ActionProps.Window.PositionSource |
PositionSource |
Источник позиции: Host (под кнопкой) или Value (жёсткие координаты) |
ActionProps.Window.PositionX |
Number |
Горизонтальная позиция окна |
ActionProps.Window.PositionY |
Number |
Вертикальная позиция окна |
ActionProps.Window.Width |
Number |
Ширина окна |
ActionProps.WindowTitle |
String |
Заголовок окна |
ActionProps.WriteBit.Enabled |
Boolean |
Включение побитовой записи |
ActionProps.WriteBit.Position |
Integer |
Позиция бита для записи |
ActionProps.WriteConfirm |
Boolean |
Подтверждение записи в тег |
ActionProps.WriteConfirmText |
String |
Текст подтверждения записи |
BorderRadius |
Number |
Радиус скругления углов кнопки |
Enabled |
Boolean |
Флаг доступности |
Font.Family |
String |
Название семейства шрифтов |
Font.Size |
Number |
Размер шрифта |
Height |
Number |
Высота элемента |
HoverBackgroundColor |
Color |
Цвет фона при наведении курсора |
HoverBorderColor |
Color |
Цвет границы при наведении |
HoverBorderWidth |
Number |
Ширина границы при наведении |
HoverText |
String |
Текст при наведении курсора |
HoverTextColor |
Color |
Цвет текста при наведении |
HoverURI |
String |
URI ресурса фигуры при наведении |
Left |
Number |
Координата левого края элемента относительно родителя |
MacroOptions |
String |
Настройки макроса в JSON-формате (для внутреннего использования) |
Name |
String |
Имя элемента |
NormalBackgroundColor |
Color |
Цвет фона в обычном состоянии |
NormalBorderColor |
Color |
Цвет границы в обычном состоянии |
NormalBorderWidth |
Number |
Ширина границы в обычном состоянии |
NormalText |
String |
Текст в обычном состоянии |
NormalTextColor |
Color |
Цвет текста в обычном состоянии |
NormalURI |
String |
URI ресурса фигуры в обычном состоянии |
PressedBackgroundColor |
Color |
Цвет фона при нажатии |
PressedBorderColor |
Color |
Цвет границы при нажатии |
PressedBorderWidth |
Number |
Ширина границы при нажатии |
PressedText |
String |
Текст при нажатии |
PressedTextColor |
Color |
Цвет текста при нажатии |
PressedURI |
String |
URI ресурса фигуры при нажатии |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
Text |
String |
Текст кнопки, применяемый ко всем состояниям |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
Background.FillColor |
Color |
Цвет заливки фона слайдера |
Background.ImageFileName |
Color |
Путь к файлу изображения фона слайдера |
Background.StrokeColor |
Color |
Цвет обводки фона слайдера |
Background.StrokeWidth |
Integer |
Толщина обводки фона слайдера |
Enabled |
Boolean |
Флаг доступности элемента |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Level.FillColore |
Color |
Цвет заполненной области шкалы |
Max |
Number |
Максимальное значение шкалы слайдера |
Min |
Number |
Минимальное значение шкалы слайдера |
Name |
String |
Имя элемента |
Thumb.FillColor |
Color |
Цвет заливки ползунка слайдера |
Thumb.ImageFileName |
String |
Путь к файлу изображения ползунка |
Thumb.MainSize |
Integer |
Основной размер ползунка слайдера |
Thumb.StrokeColor |
Color |
Цвет обводки (границы) ползунка слайдера |
Thumb.StrokeWidth |
Integer |
Толщина обводки ползунка слайдера |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
WriteConfirm |
Boolean |
Требование подтверждения перед записью значения |
WriteConfirmText |
String |
Текст диалога подтверждения записи |
WriteTimeout |
Integer |
Задержка в миллисекундах перед записью значения в тег после изменения положения слайдера |
| Свойство | Тип данных | Описание |
|---|---|---|
Data |
String |
Содержимое SVG-документа в формате XML, определяющее векторное изображение |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
ApplyRepaint |
Boolean |
Применять перекрашивание к SVG-изображению |
FileName |
String |
Путь к файлу SVG-изображения |
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
RepaintAlpha |
Number |
Коэффициент смешивания цветов (0–1): ближе к 0 – доминирует целевой цвет, ближе к 1 – сохраняются исходные цвета |
RepaintColor |
Color |
Целевой цвет для перекрашивания SVG |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
Height |
Number |
Высота элемента |
Left |
Number |
Координата левого края элемента относительно родителя |
Name |
String |
Имя элемента |
RotateAngle |
Number |
Угол поворота элемента, в градусах |
RotateCenterX |
Number |
Центр вращения по шкале X элемента от 0 до 1 |
RotateCenterY |
Number |
Центр вращения по шкале Y элемента от 0 до 1 |
Top |
Number |
Координата верхнего края элемента относительно родителя |
Visible |
Boolean |
Флаг видимости элемента |
Width |
Number |
Ширина элемента |
| Свойство | Тип данных | Описание |
|---|---|---|
AutoReserve |
Boolean |
После завершения цикла анимация проигрывается в обратном направлении |
Delay |
Number |
Задержка перед стартом анимации (в секундах) |
Duration |
Number |
Продолжительность анимации (в секундах) |
Enabled |
Boolean |
Активация анимации |
EndValue |
Color Number Boolean |
Конечное значение анимируемого параметра |
InitialFrameOnStop |
Boolean |
При остановке компонент возвращается в исходное состояние |
InitialFrameOnStopAnimated |
Boolean |
Анимированный возврат компонента в исходное состояние |
Loop |
Boolean |
Режим циклического воспроизведения |
PropertyName |
String |
Наименование анимируемого свойства компонента |
StartValue |
Color Number Boolean |
Исходное значение анимируемого параметра |
Редактор анимаций
Запуск редактора
Работая в "Редакторе фигур", выберите любой элемент в области редактирования, к которому требуется применить анимацию, и в поле "Анимация" нажмите кнопку ...

Станет доступно диалоговое окно "Редактор анимаций", в котором после нажатия кнопки ➕ можно выбрать один или несколько видов анимации для выбранного объекта:
Float-анимация
Boolean-анимация
Цветовая анимация

➕ — добавить новую анимацию.
❌ — удалить выбранную анимацию.
Float-анимация
Float-анимация управляет плавной трансформацией объектов через изменение позиции, масштаба и формы, включая сложные вращательные движения со статическим или динамическим центром вращения.

- Имя — уникальный идентификатор анимации.
- Задержка перед запуском — время задержки (в секундах) между выполнением условия активации и началом воспроизведения анимации.
- Продолжительность — длительность (в секундах) одного цикла анимации от начального до конечного состояния.
- Активность — флаг управления состоянием анимации:
- Вкл — анимация активна и выполняется при выполнении условий.
- Выкл — анимация приостановлена, независимо от условий срабатывания.
- Повторять по кругу — флаг управления цикличностью анимации:
- Вкл — анимация зациклена и повторяется непрерывно.
- Выкл — анимация воспроизводится однократно при каждом выполнении условия.
- Переворот после круга — флаг управления направлением циклического воспроизведения:
- Вкл — при зацикливании анимация проигрывается в прямом и обратном направлении (возврат к началу).
- Выкл — при зацикливании анимация каждый раз начинается с начального состояния.
- Интерполяция — Метод расчета промежуточных кадров анимации между начальным и конечным состоянием:
- Линейная — равномерное изменение значения свойства с постоянной скоростью на протяжении всей анимации.
- Квадратная — плавное ускорение движения от начальной точки с постепенным увеличением скорости.
- Кубическая — более выраженное ускорение по сравнению с квадратной интерполяцией.
- Квартическая — интенсивное ускорение в начале анимации.
- Квинтетная — максимально резкое ускорение в начальной фазе движения.
- Синусоидальная — плавное изменение скорости с точкой перегиба в конечной позиции.
- Экспоненциальная — экспоненциальный рост скорости от начальной точки.
- Круговая — движение по дуге окружности с вертикальным завершением в конечной точке.
- Упругая — затухающие колебания вокруг конечного значения с переменной амплитудой.
- Обратная — движение к целевому значению с последующим возвратом к исходному состоянию.
- Подпрыгивающая — серия отскоков с уменьшающейся амплитудой, имитирующая прыгающий мяч.
- Начальное значение при выключении — флаг управления состоянием компонента при остановке анимации:
- Вкл — компонент возвращается в начальное положение (первый кадр анимации).
- Выкл — компонент сохраняет текущее положение, достигнутое на момент остановки анимации.
- Начальное значение при выключении, Анимирование — флаг управления способом возврата в исходное состояние:
- Вкл — компонент плавно возвращается в начальное положение с анимацией.
- Выкл — компонент сохраняет позицию, достигнутую в момент остановки анимации.
- Свойство — тип анимации.
- Начальное значение — начальное состояние анимируемого свойства:
- При перемещении или изменении размеров — начальная координата или размер.
- При повороте — начальный угол в градусах.
- При работе с заливкой — начальный уровень в диапазоне 0,0 - 1,0.
- Конечное значение — конечное состояние анимируемого свойства:
- При перемещении или изменении размеров — конечная координата или размер.
- При повороте — конечный угол в градусах.
- При работе с заливкой — конечный уровень в диапазоне 0,0 - 1,0.
| Свойство | Описание |
|---|---|
EndValue |
Изменение конечного значения шкалы (линейная/дуговая шкалы) |
Left |
Горизонтальное перемещение компонента |
Height |
Изменение высоты компонента |
Fill.Gradient.CenterX |
Горизонтальное смещение центра радиального градиента заливки |
Fill.Gradient.CenterY |
Вертикальное смещение центра радиального градиента заливки |
Fill.Gradient.Radius |
Изменение радиуса градиентной заливки |
Fill.LevelProcent |
Изменение уровня заливки (при включенном свойстве "Заливка.Уровень") |
Font.Size |
Изменение размера шрифта текста |
RadiusX |
Скругление углов по оси X (используется вместе с RadiusY) |
RadiusY |
Скругление углов по оси Y (используется вместе с RadiusX) |
Rotate.Angle |
Вращение компонента вокруг заданного центра |
Rotate.CenterX |
Изменение X-координаты центра вращения |
Rotate.CenterY |
Изменение Y-координаты центра вращения |
StartAngle |
Изменение начального угла (компонент дуга/пирог) |
Start.Value |
Изменение начального значения шкалы (линейная/дуговая шкалы) |
Stroke.Width |
Изменение толщины обводки компонента |
SweepAngle |
Изменение угла развертки (компонент дуга/пирог) |
Top |
Вертикальное перемещение компонента |
Width |
Изменение ширины компонента |
Boolean-анимация
Boolean-анимация управляет видимостью и состоянием графических объектов, позволяя скрывать или показывать элементы, изменять их внешний вид (заливку, форму окончаний линий), а также активировать перенос текстового содержимого.

- Задержка перед запуском — время (в секундах) между выполнением условия активации и началом воспроизведения анимации.
- Продолжительность — длительность (в секундах) одного цикла анимации от начального до конечного состояния.
- Активность — флаг управления состоянием анимации:
- Вкл — анимация активна и выполняется при выполнении условий.
- Выкл — анимация приостановлена, независимо от условий срабатывания.
- Повторять по кругу — флаг управления цикличностью анимации:
- Вкл — анимация зациклена и повторяется непрерывно.
- Выкл — анимация воспроизводится однократно при каждом выполнении условия.
- Переворот после круга — флаг управления направлением циклического воспроизведения:
- Вкл — при зацикливании анимация проигрывается в прямом и обратном направлении (возврат к началу).
- Выкл — при зацикливании анимация каждый раз начинается с начального состояния.
- Свойство — тип анимации.
| Свойство | Описание |
|---|---|
ArcVisible |
Управление видимостью линии дуговой шкалы |
ConnectCenter |
Управление видимостью перемычки, соединяющей концы дуги |
Fill.Leveling |
Анимация уровня заливки от текущего значения до 100% |
HorzAlign |
Включение/отключение горизонтального выравнивания текста |
LineVisible |
Управление видимостью линии шкалы (линейной/дуговой) |
Stroke.RoundCap |
Включение/отключение закругления концов обводки |
TickVisible |
Управление видимостью штрихов шкалы |
TickTipVisible |
Управление видимостью числовых значений шкалы |
VertAlign |
Включение/отключение вертикального выравнивания текста |
Visible |
Периодическое включение/отключение видимости компонента |
Wrapping |
Управление переносом строк в текстовом содержимом |
Цветовая анимация
Цветовая анимация управляет цветовыми характеристиками графических объектов, позволяя динамически изменять цвет текста, заливки и окантовки компонентов в заданном диапазоне цветов.

- Имя — уникальный идентификатор анимации.
- Задержка перед запуском — время задержки (в секундах) между выполнением условия активации и началом воспроизведения анимации.
- Продолжительность — длительность (в секундах) одного цикла анимации от начального до конечного состояния.
- Активность — флаг управления состоянием анимации:
- Вкл — анимация активна и выполняется при выполнении условий.
- Выкл — анимация приостановлена, независимо от условий срабатывания.
- Повторять по кругу — флаг управления цикличностью анимации:
- Вкл — анимация зациклена и повторяется непрерывно.
- Выкл — анимация воспроизводится однократно при каждом выполнении условия.
- Переворот после круга — флаг управления направлением циклического воспроизведения:
- Вкл — при зацикливании анимация проигрывается в прямом и обратном направлении (возврат к началу).
- Выкл — при зацикливании анимация каждый раз начинается с начального состояния.
- Интерполяция — метод расчета промежуточных кадров анимации между начальным и конечным состоянием:
- Линейная — равномерное изменение значения свойства с постоянной скоростью на протяжении всей анимации.
- Квадратная — плавное ускорение движения от начальной точки с постепенным увеличением скорости.
- Кубическая — более выраженное ускорение по сравнению с квадратной интерполяцией.
- Квартическая — интенсивное ускорение в начале анимации.
- Квинтетная — максимально резкое ускорение в начальной фазе движения.
- Синусоидальная — плавное изменение скорости с точкой перегиба в конечной позиции.
- Экспоненциальная — экспоненциальный рост скорости от начальной точки.
- Круговая — движение по дуге окружности с вертикальным завершением в конечной точке.
- Упругая — затухающие колебания вокруг конечного значения с переменной амплитудой.
- Обратная — движение к целевому значению с последующим возвратом к исходному состоянию.
- Подпрыгивающая — серия отскоков с уменьшающейся амплитудой, имитирующая прыгающий мяч.
- Без интерполяции — отсутствие плавных переходов; значение свойства изменяется скачкообразно, мгновенно переключаясь между начальным и конечным состояниями в момент завершения анимации.
- Начальное значение при выключении — флаг управления состоянием компонента при остановке анимации:
- Вкл — компонент возвращается в начальное положение (первый кадр анимации).
- Выкл — компонент сохраняет текущее положение, достигнутое на момент остановки анимации.
- Начальное значение при выключении, Анимирование — флаг управления способом возврата в исходное состояние:
- Вкл — компонент плавно возвращается в начальное положение с анимацией.
- Выкл — компонент сохраняет позицию, достигнутую в момент остановки анимации.
- Свойство — тип анимации.
- Начальное значение — начальное значение цвета.
- Конечное значение — конечное значение цвета.
| Свойство | Описание |
|---|---|
Color |
Плавное изменение цвета текстового содержимого от начального до конечного цвета |
Fill.Color |
Плавное изменение цвета заливки компонента от начального до конечного цвета |
Stroke.Color |
Плавное изменение цвета окантовки компонента от начального до конечного |
Редактор отчетов
Введение
Отчет — это данные в структурированном виде. Данные передаются из хранилища данных, а структура создается в дизайнере отчетов в шаблоне отчета. Таким образом, на основе одной структуры можно создавать отчеты с различными данными. На основе одних и тех же данных, можно создавать разные отчеты по структуре.
В "Симплайт 5" можно формировать отчеты в режиме реального времени на основе данных из внутренней базы данных SQlite или других источников данных, таких как сторонние базы PostgreSQL, Авадс СА и т.д. Возможно создание периодических, итоговых отчетов, а также отчетов об изменении значений. В отчеты можно добавлять различные элементы, как простые (например, номера страниц, имя и фамилия пользователя, дата формирования отчета), так и более сложные (например, штрих-коды, QR-коды, диаграммы и т.д.).
В системе используется редактор отчетов от компании Стимулсофт.
Информация
Расширенная версия онлайн-документации генератора отчетов доступна на официальном портале Стимулсофт.
Базовым элементом при создании отчетов является бэнд (от англ. band - группа, диапазон, секция). Бэнд состоит из двух частей: заголовок бэнда и рабочая зона бэнда. На заголовке отображается наименование бэнда. Также на заголовке может отображаться различная системная информация. Каждый бэнд является контейнером и может содержать другие компоненты. Позиция компонентов на бэнде считается относительно позиции верхнего левого угла содержимого бэнда.

- Заголовок бэнда
- Рабочая зона бэнда
Бэнды не имеют никакого графического представления в построенном отчете. Свойства бэнда управляют только тем, каким образом бэнд будет расположен в построенном отчете. Обычно отчет состоит из множества бэндов с текстовыми и графическими компонентами, расположенными на этих бэндах. При построении отчета бэнды многократно копируются вместе с находящимися на них компонентами. К примеру, бэнд "Заголовок данных (Header)" выводится один раз в начале данных. А бэнд "Данные (Data)" выводится для каждой строки данных.
Редактор отчетов
Запуск редактора
Активировать "Редактор отчетов" среды разработки можно с помощью кнопки в панели редакторов.
Внимание
Переключение в режим работы с отчетами возможно только при выборе лицензии "Standard" или "Enterprise" в проекте.
Внимание
Для корректной работы генератора отчетов необходимо установить компонент Microsoft Edge WebView2 ( загрузить файл Evergreen Standalone Installer x64). Проверить наличие данного компонента в системе можно с помощью команды в PowerShell Get-Item "C:\Program Files (x86)\Microsoft\EdgeWebView\Application\*\msedgewebview2.exe"
Главное окно
Окно редактора включает в себя следующие функциональные области:

1. Список отчетов — перечень всех отчетов проекта. В данном окне доступна панель инструментов с кнопками:
- ➕ — создать новый отчет.
- 📁 — создать новый каталог.
- ❌ — удалить выбранный отчет или каталог.
- 🔳 — переименовать выбранный отчет или каталог.
- ⚙️ — открывает диалоговое окно "Свойство отчета". В выпадающем списке окна можно выбрать формат файла отчета: PDF, Excel 2007, Word 2007, HTML5, SVG, PowerPoint, XML или CSV.
2. Источники данных — перечень источников данных.
Источник данных (Data Source) - это структурное описание данных, используемых для построения отчета. Источник данных представляет собой программный компонент, который обеспечивает получение данных из базы данных, их преобразование и передачу в генератор отчетов. В сущности, "Источник данных" определяет способы, параметры и методы доступа к данным.
- ➕ — создать новый источник данных.
- 🔗 — открыть редактор ссылок.
- ❌ — удалить выбранный источник данных.
- ✏️ — редактировать выбранный источник данных.
3. Дерево проекта — перечень тегов проекта.
4. Рабочая зона отчета — рабочая область для редактирования визуальных элементов отчета.
5. Вкладки:
- Свойства — свойства выделенного компонента отчета или элемента панели индикаторов, а также события компонентов.
- Словарь — созданные источники данных, функции, переменные, бизнес-объекты, ресурсы.
- Дерево отчета — иерархия компонентов отчета или элементов панели индикаторов. Иерархия компонентов отчета отображает порядок их обработки при построении отчета, т.е. чем выше компонент находится в иерархии, тем ранее он будет обработан.
6. Панель инструментов — команды создания новой страницы, новой формы, компонентов отчета и т.д. Данная панель инструментов полностью дублирует меню "Вставить".
7. Панель форматирования — в зависимости от выбранного пункта меню предоставляет доступ к определенному набору инструментов.
Переменные в отчете
Создание переменной
Чтобы добавить тег в отчет, в окне "Дерево проекта" нажмите правую кнопку мыши на теге и в контекстном меню выберите пункт "Добавить переменную".

В диалоговом окне укажите название переменной отчета или оставьте название, которое система предложила по умолчанию.

После этого переменная станет доступна в разделе "Переменные" словаря отчета.

Также запись о создании переменной появится в "Редакторе ссылок". Данная запись указывает на то, что в отчете есть переменная "Температура_1", которая связана с активным тегом проекта "Температура 1".

Таким образом осуществляется автоматическое связывание активного тега с переменной отчета. В редакторе предусмотрена возможность создания переменной отчета в словаре путем нажатия правой кнопкой мыши на пункт "Переменные" и последующего самостоятельного связывания активного тега проекта с переменной отчета.
Для создания переменной отчета в меню "Словарь" нажмите правой кнопкой мыши на пункт "Переменные" и в контекстном меню выберите "Новая переменная".

В диалоговом окне "Новая переменная" укажите имя и псевдоним.

Для ручной привязки активного тега проекта к переменной отчета нажмите правой кнопкой мыши на теге "Температура 2" в "Дереве проекта" и в контекстном меню активируйте пункт "Связать с переменной".

Из списка выберите созданную на предыдущем этапе переменную отчета "Температура_2" и нажмите "Ок".

Затем перейдите в "Редактор ссылок" и убедитесь, что связь тега с переменной отчета установлена корректно.

Редактирование и удаление
В случае необходимости редактирования ссылки дважды нажмите на ней левой кнопкой мыши в "Редакторе ссылок" и внесите необходимые изменения в открывшемся диалоговом окне.

Для удаления переменной из отчета сначала удалите ссылку на эту переменную.

Затем удалите саму переменную из словаря отчета.

Источники данных
Типы источников
Источник данных — это хранилище, из которого "Редактор отчетов" получает информацию для формирования отчета. Источником данных может быть сервер системы, база данных, текстовый файл, таблица Excel и другие. Источники данных можно разделить на две категории:
-
Источники, генерируемые сервером:
-
Другие источники данных, такие как текстовый файл, таблица Excel, база данных и т. д.

Периодический
При создании периодического источника данных в отчете формируются три переменные: "Начало", "Конец" и "Интервал" (могут быть использованы и другие имена).
При построении, периодический источник данных извлекает из базы все архивные данные за период, указанный переменными "Начало" и "Конец", и разделяет их на равные "Интервалы", выраженные в секундах.
Для создания источника нажмите кнопку ➕ окна "Источники данных". В меню "Тип источника" выберите пункт "Периодический".

Далее укажите имя для переменной начала, переменной конца и переменной интервала. После создания источника эти переменные будут добавлены в словарь отчета. Также есть возможность выбрать уже существующие переменные из словаря отчета.
В источник данных попадут все архивные данные за период, указанный в переменной начала и переменной конца. Переменная интервала определяет, на какие интервалы (в секундах) будут разбиты данные. Если значение переменной интервала равно 0, то будет использован весь период отчета, указанный в переменной начала и переменной конца. Если значение переменной интервала равно -1, то данные будут разбиты по месяцам.
После создания источника данных, он будет отображаться в словаре отчета вместе с соответствующими переменными.

Чтобы добавить тег к источнику, нажмите правой кнопкой мыши на требуемый тег в "Дереве проекта" и выберите пункт "Добавить в источник".
Примечание
Источник данных "Периодический" работает с архивными данными тега. Перед добавлением тега в источник необходимо убедиться, что для него актвирована архивация.

В диалоговом окне "Добавить колонку" укажите имя, источник и тип обработки переменной:

- Имя — имя, с которым переменная будет добавлена в источник.
- Источник — позволяет выбрать источник данных, в который будет добавлена переменная.
- Тип обработки:
- Первое значение — первое зафиксированное значение в отчетном интервале.
- Последнее значение — последнее зафиксированное значение в отчетном интервале.
- Потребление — интегральное (накопленное) значение за отчетный интервал.
- Минимум — минимальное значение в отчетном интервале.
- Максимум — максимальное значение в отчетном интервале.
- Среднее — средневзвешенное по времени значение за отчетный интервал.
- Количество включений — число переходов значения переменной из состояния "0" в состояние "≠0" в отчетном интервале.
- Количество выключений — число переходов значения переменной из состояния "≠0" в состояние "0" в отчетном интервале.
- Разность — алгебраическая разница между последним и первым значением в отчетном интервале.
После добавления переменной, в источнике данных появится новая колонка.

Также в меню "Ссылки" будет добавлена новая ссылка.

По изменению
Источники данных, работающие по принципу "По изменению", не разделяют основной временной период на интервалы, как это происходит в периодических источниках. Вместо этого они выводят все архивные данные из базы данных (каждое изменение) по указанным переменным за указанный временной интервал.
Таким образом, формирование отчета является достаточно простым процессом. В отчете добавляется новая строка каждый раз, когда происходит изменение любой переменной. Поскольку переменные могут изменяться в разное время, отчет дополняется недостающими данными.
Для создания источника нажмите кнопку ➕ окна "Источники данных. В меню "Тип источника" выберите пункт "По изменению".

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

Чтобы добавить тег к источнику нажмите правой кнопкой мыши на требуемый тег в "Дереве проекта" и выберите пункт "Добавить в источник".
Замечание
Источник данных "По изменению" работает с архивными данными тега. Перед добавлением тега в источник необходимо убедиться, что для него актвирована архивация.

В диалоговом окне "Добавить колонку" укажите имя и источник переменной.

После добавления переменной в источнике данных появится новая колонка.

Также в меню "Ссылки" будет добавлена новая ссылка.

Редактирование и удаление источника
Изменить параметры ранее созданных источников данных можно с помощью кнопки ✏️ или двойного нажатия левой кнопки мыши на источнике.
Для удаления выберите источник в списке и нажмите кнопку ❌. После удаления источника в словаре отчета останутся переменные начала, конца и интервала, с которыми он был связан. Если эти переменные больше не требуются, их можно удалить.

Примеры отчетов
Отчет с текущими данными
Рассмотрим пример создания отчета с текущими значениями тегов. Создайте отчет и присвойте ему имя, например, "Текущие данные".

Чтобы добавить тег в отчет, нажмите правой кнопкой мыши на нем в "Дереве проекта" и в контекстном меню выберите пункт "Добавить переменную". Для того, чтобы добавить группу тегов рекомендуется их предварительно выделить в списке, используя клавишу Shift или клавишу Ctrl.

В словаре отчета будут определены соответствующие переменные.

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

Рядом с полем для отображения значения разместите текстовое описание тега. Перейдите в меню "Вставка", выберите инструмент "Текст" и перенесите его в область редактирования.

В диалоговом окне укажите текст, который будет отображаться в текстовом блоке и нажмите "Ок".

Для остальных переменных выполните аналогичные действия.

Для отображения даты и времени формирования отчета повторно вставьте текстовый блок в область редактирования. После ввода отображаемого текста перетащите системную переменную "time" в окно с выражением.

Для предварительного просмотра отчета нажмите "Просмотр".
Примечание
Чтобы получить актуальные значения тегов в режиме просмотра, генератор отчетов должен выполнить запрос к серверу. Для этого предварительно разверните проект на сервере, а затем вернитесь к просмотру.

После запуска процедуры предосмотра в "Редакторе отчетов" для каждого тега будет отображаться его текущее значение, а также дата и время создания отчета.

Чтобы сформировать полноценный отчет перейдите в "Редактор мнемосхем" и разместите компонент "Многофункциональная кнопка". Укажите действие "Сгенерировать отчет" для кнопки и название для отчета "Текущие данные".

Далее разверните проект на сервере и откройте мнемосхему, на которой ранее расположили кнопку для создания отчета.

После нажатия кнопки "Сформировать отчет" на мнемосхеме сервер отправит отчет клиенту, который, в свою очередь, откроет окно для его просмотра. Из этого окна можете сохранить отчет, а также распечатать его, выполнить поиск и т.д.

Периодический отчет
Рассмотрим пример создания периодического отчета. За основу возьмем часть технологического процесса подготовки воды в резервуаре. В качестве активных в проект добавьте следующие теги:
| Тег | Тип данных | Описание |
|---|---|---|
| Температура 1 | Double |
Температура жидкости в резервуаре |
| Уровень 1 | Int64 |
Уровень жидкости в резервуаре |
| Начало периода | DateTime |
Начало периода времени, за который требуется сформировать отчет |
| Конец периода | DateTime |
Конец периода времени, за который требуется сформировать отчет |
Примечание
Перед созданием отчета необходимо:
- Включить архивацию для тегов "Температура 1" и "Уровень 1", установив флаг "Активность" в свойстве "Сохранение в БД".
- Заблаговременно развернуть проект на сервере, чтобы обеспечить накопление архивных данных в базе.
Пример:
Составить отчет за определенный временной промежуток, ограниченный значениями тегов "Начало периода" и "Конец периода". Данный диапазон следует разбить на равные интервалы, например, по 60 секунд. Для каждого интервала необходимо сформировать отчет, включающий исторические данные тегов "Температура 1" и "Уровень 1". Для значений тега "Уровень 1" указать минимальное и максимальное значение.
Для составления отчета добавим мнемосхему в проект, в которой будем указывать начальный и конечный периоды в соответствующих полях, а также формировать отчет с помощью кнопки.
На мнемосхеме разместим фигуры "Вертикальная емкость", а для тегов "Начало периода" и "Конец периода" компонент "Ввод даты и времени" из "Палитры компонентов". Кроме того, перетащим "Многофункциональную кнопку" из "Общей галереи" и назначим ей действие "Сгенерировать отчет".

Далее создайте отчет в редакторе и добавьте "Источник данных".

В диалоговом окне "Создание источника данных" выберите тип "Периодический". Укажите имя источника и имя для всех переменных, соответствующих данному типу источника.

В словаре отчета добавится источник данных "Данные" с единственной колонкой "Время". Также будут определены три переменные: "Данные_Начало", "Данные_Конец" и "Данные_Интервал".
Теперь система будет передавать в этот источник только те данные из архива, которые находятся в интервале времени от значения переменной "Данные_Начало" до значения переменной "Данные_Конец". Все остальные данные, находящиеся вне этого временного промежутка, не будут включены в источник.

Далее свяжите теги проекта "Начало периода" и "Конец периода" с соответствующими переменными источника "Данные_Начало" и "Данные_Конец". В процессе формирования отчета значения переменных "Данные_Начало" и "Данные_Конец" будут автоматически заменены на значения тегов проекта "Начало периода" и "Конец периода" соответственно. Это позволит источнику "Данные" оперировать заданным временным периодом.


В источнике добавьте новые колонки, соответствующие поставленной задаче: минимальное и максимальное значения уровня и среднюю температуру.
Для начала добавьте максимальное значение уровня. Для этого нажмите правой кнопкой мыши на переменной "Уровень 1" и выберите пункт "Добавить в источник".

В диалоговом окне добавления новой колонки выберите источник "Данные", тип обработки "Максимум" и назовите новую колонку "Макс. уровень".

Далее выполните аналогичные действия для переменной "Уровень 1", присвоив ей имя "Мин. уровень" и выбрав тип обработки "Минимум". Также добавьте переменную "Температура 1" в источник с именем "Средняя_температура", выбрав тип обработки "Среднее". После выполнения всех действий структура словаря должна выглядеть следующим образом.

Чтобы изменить интервал, с которым генератор отчета будет извлекать значения из базы данных, внесите изменения в переменную "Данные_интервал" — дважды нажмите левой кнопкой мыши по данной переменной в словаре. В диалоговом окне "Изменение переменной" установите значение 60, что соответствует 60 секундам.
Примечание
Вы также можете связать переменную с целочисленным тегом проекта и отобразить ее на мнемосхеме, чтобы оператор мог выбирать не только время начала и окончания отчета, но и временной интервал.

Для начала подготовки шаблона выберите левой кнопкой мыши источник "Данные" и перетащите его в область редактирования. В шаблоне будет создан новый стандартный бэнд "Данные", который будет привязан к источнику данных отчета "Данные".
Бэнд "Данные" является одним из наиболее часто используемых бэндов. Он берет данные из источника, с которым связан, и выводится столько раз, сколько строк в источнике данных.

В диалоговом окне "Данные" установите флаги для всех колонок, а также активируйте флаг "Заголовок данных".

В результате в области редактирования будет сформирован шаблон отчета.

При активировании предварительного просмотра отчета в столбце "Средн_Температура" в значении переменной отображается избыточное количество знаков после запятой.


Чтобы изменить формат вывода значения, выберите левой кнопкой мыши столбец с значениями "Средней температуры", далее вкладку "Свойства" и в поле формат нажмите на кнопку ✏️.

В диалоговом окне "Формат" укажите количество знаков дробной части в соответствующем поле.

С помощью меню "Просмотр" еще раз выполните построение отчета, чтобы убедиться, что формат задан корректно и отображается нужное количество знаков после запятой.

На данном этапе необходимо добавить заголовок к отчету. Для этого воспользуйтесь кнопкой "Секции" панели инструментов, либо активируйте меню "Вставить". Заголовок выводится один раз в начале отчета, перед другими бэндами.

После переноса заголовка он автоматически расположится выше бэнда "Данные". Теперь в зоне бэнда "Заголовок отчета" разместите "Текст" заголовка.

Далее вызовите окно редактирования текста двойным нажатием левой кнопки мыши. В окно с текстом заголовка перетащите переменные "Данные_Начало" и "Данные_конец" и нажмите кнопку "Ок".

С помощью инструментальной панели определите требуемое форматирование для текста и всех ячеек отчета.

Ниже представлен один из возможных вариантов оформления.

Для окончательного формирования отчета откройте мнемосхему, задайте диапазон и нажмите кнопку "Отчет".

Отчет по изменению
Рассмотрим процесс подготовки отчета по изменению. За основу возьмем часть технологического процесса подготовки воды в резервуаре. Периодический отчет, рассмотренный в предыдущем примере, не подойдет, поскольку он предполагает разбиение заданного периода времени на равные интервалы и обработку каждого из них в соответствии с заданными параметрами.
Отчет по изменению позволит получить доступ к каждому архивному значению без разбиения на интервалы и без дополнительной обработки.
В качестве активных в проект необходимо добавить следующие теги:
| Тег | Тип данных | Описание |
|---|---|---|
| Температура 1 | Double |
Температура жидкости в трубопроводе |
| Расход 1 | Int64 |
Расход теплоносителя через клапан 1 |
| Расход 2 | Int64 |
Расход теплоносителя через клапан 2 |
| Начало периода | DateTime |
Начало периода времени, за который требуется сформировать отчет |
| Конец периода | DateTime |
Конец периода времени, за который требуется сформировать отчет |
Примечание
Перед созданием отчета необходимо:
- Включить архивацию для тегов "Температура 1", "Расход 1" и "Расход 2" установив флаг "Активность" в свойстве "Сохранение в БД".
- Заблаговременно развернуть проект на сервере, чтобы обеспечить накопление данных в базе.
Пример:
Сформировать отчет со всеми архивными значениями тегов "Температура 1", "Расход 1", "Расход 2" за указанный интервал времени. Интервал ограничен значениями тегов "Начало периода" и "Конец периода".
Для составления отчета добавим мнемосхему в проект, с помощью которой сможем указать начальный и конечный периоды, а также предусмотрим кнопку для формирования отчета по запросу.
На мнемосхеме разместите фигуры "Вертикальная емкость", а для тегов "Начало периода" и "Конец периода" компонент "Ввод даты и времени" из "Палитры компонентов". Кроме того, перетащите "Многофункциональную кнопку" из "Общей галереи" и назначьте ей действие "Сгенерировать отчет".

Далее создайте шаблон отчета в редакторе и добавьте "Источник данных". В диалоговом окне "Создание источника данных" выберите тип "По изменению". После этого укажите имя источника и имена для всех переменных, соответствующих данному типу источника. Также активируйте флаг "Дополнять моменты".
Дополнять моменты — флаг, при включении которого в отчете для каждого тега пропущенные временные метки заполняются последним известным значением, обеспечивая непрерывный ряд данных и единую временную шкалу для сравнения разных тегов. Этот инструмент необходим, чтобы создать видимость непрерывного ряда данных для каждого тега на протяжении всего выбранного интервала времени, даже если в базе данных в какие-то моменты времени значения этого конкретного тега не записывались (не изменялись).

В словаре отчета будет добавлен источник данных "Данные" с единственной колонкой "Время". Также будут определены 2 переменные: "Данные_Начало", "Данные_Конец".
Теперь система будет передавать в этот источник только те данные из архива, которые находятся в интервале времени от значения переменной "Данные_Начало" до значения переменной "Данные_Конец". Все остальные данные, находящиеся вне этого временного промежутка, не будут включены в источник.

Далее свяжите теги проекта "Начало периода" и "Конец периода" с соответствующими переменными источника "Данные_Начало" и "Данные_Конец". В процессе формирования отчета значения переменных "Данные_Начало" и "Данные_Конец" будут автоматически заменены на значения тегов проекта "Начало периода" и "Конец периода" соответственно. Это позволит источнику "Данные" оперировать заданным временным периодом.


В источнике добавьте новые колонки, соответствующие поставленной задаче.
Для начала добавьте значение тега "Температура 1" — нажмите правой кнопкой мыши на переменной "Температура 1" и выберите пункт "Добавить в источник".

В диалоговом окне добавления новой колонки выберите источник "Данные" и назовите новую колонку "Температура 1".

Выполните аналогичные действия для переменной "Расход 1" и "Расход 2". После выполнения всех действий структура словаря должна выглядеть следующим образом:

Для начала подготовки шаблона выберите левой кнопкой мыши источник "Данные" и перетащите его в область редактирования. В результате будет создан новый стандартный бэнд "Данные", который будет привязан к источнику данных отчета "Данные".
Бэнд "Данные" является одним из наиболее часто используемых бэндов. Он берет данные из источника, с которым связан, и выводится столько раз, сколько строк в источнике данных.

В диалоговом окне "Данные" установите флаги для всех колонок, а также активируйте флаг "Заголовок данных".

В результате будет сформирован шаблон отчета.

При активировании предварительного просмотра отчета в столбце "Температура 1" в значении переменной отображается избыточное количество знаков после запятой.


Чтобы изменить формат вывода значения, выберите левой кнопкой мыши столбец с значениями "Температура 1", активируйте вкладку "Свойства" и в поле формат нажмите на кнопку ✏️.

В диалоговом окне "Формат" укажите количество знаков дробной части в соответствующем поле.

С помощью меню "Просмотр" еще раз повторно выполните построение отчета, чтобы убедиться, что формат задан корректно и отображается нужное количество знаков после запятой.

На данном этапе добавим заголовок к отчету. Для этого воспользуйтесь кнопкой "Секции" "Панели инструментов", либо активируйте меню "Вставить". Заголовок выводится один раз в начале отчета, перед другими бэндами.

После переноса заголовка он автоматически расположится выше бэнда "Данные". Теперь в зоне бэнда "Заголовок отчета" разместите "Текст" заголовка.

Далее вызовите окно редактирования текста двойным нажатием левой кнопки мыши. В окно с текстом заголовка перетащите переменные "Данные_Начало" и "Данные_конец" и нажмите кнопку "Ок".

С помощью инструментальной панели определите требуемое форматирование для текста и всех ячеек отчета.

Ниже представлен один из возможных вариантов оформления.

Для окончательного формирования отчета откройте мнемосхему, задайте диапазон и нажмите кнопку "Отчет".

Подсветка значений отчета
Для привлечения внимания к показателям, значения которых выходят за установленные пределы, можно использовать инструмент "Условия". Доработаем отчет по изменению так, чтобы значения в ячейках подсвечивались определенным цветом.
В шаблоне отчета выберите ячейку переменной "Расход 1" левой кнопкой мыши и нажмите кнопку "Условия".

В диалоговом окне "Условия" выберите пункт "Условное выделение" из выпадающего списка "Добавить условие". Затем с помощью настроечных полей укажите тип данных, выберите колонку, условие "больше чем" и задайте число 50. После этого выберите границу "Со всех сторон" и установите цвет фона — желтый. После составления отчета все ячейки, содержащие значения больше 50, будут выделены желтым цветом.

Для проверки выполнения условия активируйте предварительный просмотр отчета с помощью меню "Просмотр".

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

Следующим этапом разместите бэнд "Итог данных". Перетащите его в шаблон. Данный бэнд размещается в самом конце при построении отчета. В него можно вывести максимальное итоговое значение переменной за весь отчет.

Чтобы передать значение в данный бэнд, перетащите компонент "Текст" и поместите его под колонку "Расход 1". В открывшемся окне перейдите на вкладку "Итог" и выберите функцию "Max". В качестве источника данных укажите "Данные" и колонку "Расход 1".
Для колонки "Расход 2" выполните аналогичные действия.

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

Отчет о наработке в моточасах
Для подготовки отчета о времени наработки агрегата рассмотрим пример части технологического процесса работы насосов. Тип создаваемого отчета — периодический.
В качестве активных в проект необходимо добавить следующие теги:
| Тег | Тип данных | Описание |
|---|---|---|
| Насос 1 | Boolean |
Работа насоса 1 |
| Насос 2 | Boolean |
Работа насоса 2 |
| Насос 3 | Boolean |
Работа насоса 3 |
| Начало периода | DateTime |
Начало периода времени, за который требуется сформировать отчет |
| Конец периода | DateTime |
Конец периода времени, за который требуется сформировать отчет |
| Время наработки Н1 | Double |
Время наработки насоса 1 (секунды) |
| Время наработки Н2 | Double |
Время наработки насоса 2 (секунды) |
| Время наработки Н3 | Double |
Время наработки насоса 3 (секунды) |
| Сброс времени наработки | Boolean |
Обнуление значения времени наработки |
Примечание
Перед созданием отчета необходимо:
- Включить архивацию для тегов "Время наработки Н1", "Время наработки Н2" и "Время наработки Н3", установив флаг "Активность" в свойстве "Сохранение в БД".
- Для каждого тега отключить флаг "Сохранить только в пределах шкалы".
В новом проекте по умолчанию шкала имеет максимальное значение диапазона, равное 100. Поскольку предполагается архивировать значения, превышающие этот предел, необходимо либо отключить опцию сохранения в пределах шкалы, либо установить для неё новое максимальное значение.
- Заблаговременно развернуть проект на сервере, чтобы обеспечить накопление исторических данных в базе.
Пример:
Составить отчет за временной промежуток не превышающий 24 часа, ограниченный значениями тегов "Начало периода" и "Конец периода". В отчет необходимо вывести исторические данные тегов "Время наработки Н1", "Время наработки Н2" и "Время наработки Н3".
Добавим новую мнемосхему в проект. С помощью полей для ввода будем указывать начальный и конечный периоды, а также формировать отчет и выполнять сброс времени наработки.
На мнемосхеме разместите анимированные фигуры насосов из "Общей галереи". Для тегов "Начало периода" и "Конец периода" используйте компонент "Ввод даты и времени" из "Палитры компонентов". Кроме того, добавьте две "Многофункциональные кнопки" из "Общей галереи" и определите им действие:
- "Сгенерировать отчет" для кнопки "Отчет".
- Записать значение в тег (без фиксации) для кнопки "Сброс часов наработки".

В примере расчет моточасов наработки производится внутри "Симплайт 5". Для этого потребуется написать скрипт, который будет вычислять время работы каждого насоса в секундах. В скрипте потребуется самостоятельно добавить библиотеку для работы с временем наработки тега.
-- Подключение модулей
local async = require("async")
local motoHours = require("lib.motoHours")
local tagApi = require("simplight.api.channels.sync")
-- Массив насосов
local pumps = {
{key = "p1", name = "Насос 1", desc = "Насос 1"},
{key = "p2", name = "Насос 2", desc = "Насос 2"},
{key = "p3", name = "Насос 3", desc = "Насос 3"}
}
-- Таблица для хранения моточасов
local pumpWatchers = {}
for _, pump in ipairs(pumps) do
pumpWatchers[pump.key] = motoHours.watch({
watchTagName = pump.name,
resetTagName = "Сброс времени наработки",
})
end
-- Вычисление времени наработки насосов в секундах
setInterval(function()
local t1 = math.floor(pumpWatchers.p1.getTotalWorkTime() / 1000)
local t2 = math.floor(pumpWatchers.p2.getTotalWorkTime() / 1000)
local t3 = math.floor(pumpWatchers.p3.getTotalWorkTime() / 1000)
-- Запись значений времени наработки в теги
tagApi.writeMany({
values={
{ name="Время наработки Н1", value = t1, quality = 0xC0 },
{ name="Время наработки Н2", value = t2, quality = 0xC0 },
{ name="Время наработки Н3", value = t3, quality = 0xC0 },
}})
end, 1000)

В диалоговом окне "Создание источника данных" выберите тип "Периодический". После этого укажите имя источника и имя для всех переменных, соответствующих данному типу источника.

В словаре отчета будет добавлен источник данных "Данные" с единственной колонкой "Время". Также будут определены три переменные: "Данные_Начало", "Данные_Конец" и "Данные_Интервал".
Теперь система будет передавать в этот источник только те данные из архива, которые находятся в интервале времени от значения переменной "Данные_Начало" до значения переменной "Данные_Конец". Все остальные данные, находящиеся вне этого временного промежутка, не будут включены в источник.

Далее свяжите теги проекта "Начало периода" и "Конец периода" с соответствующими переменными источника "Данные_Начало" и "Данные_Конец". В процессе формирования отчета значения переменных "Данные_Начало" и "Данные_Конец" будут автоматически заменены на значения тегов проекта "Начало периода" и "Конец периода" соответственно. Это позволит источнику "Данные" оперировать заданным временным периодом.


В источнике добавьте три колонки, соответствующие поставленной задаче: "Время наработки Н1", "Время наработки Н2", "Время наработки Н3".
На данном этапе добавьте в источник тег времени наработки насоса 1. Для этого нажмите правой кнопкой мыши на переменной "Время наработки Н1" и выберите пункт "Добавить в источник".

В диалоговом окне добавления новой колонки выберите источник "Данные", тип обработки "Последнее значение" и назовите новую колонку "Время наработки Н1". Для данного тега в отчет будет передано значение, которое было зафиксировано последним в указанном интервале.

Выполните аналогичные действия для тегов "Время наработки Н2" и "Время наработки Н3", присвоив им соответстующие имена и тип. После выполнения всех действий структура словаря должна выглядеть следующим образом.

Чтобы изменить интервал, с которым генератор отчета будет извлекать значения из базы данных, внесите изменения в переменную "Данные_интервал". Для этого дважды нажмите левой кнопкой мыши по данной переменной в словаре. В диалоговом окне "Изменение переменной" установите значение 86400 секунд, что соответствует 24 часам. Данный интервал выбран с целью формирования в отчете только одной строки с последними архивируемыми значениями.
Примечание
Существует возможность связать переменную с целочисленным тегом проекта и отобразить ее на мнемосхеме, чтобы оператор мог выбирать не только время начала и окончания отчета, но и временной интервал.

На данном этапе добавьте заголовок к отчету. Для этого воспользуйтесь кнопкой "Секции" "Панели инструментов", либо активируйте меню "Вставить". Заголовок выводится один раз в начале отчета, перед другими бэндами.

После переноса заголовка он автоматически расположится в верхней области отчета. Теперь в зоне бэнда "Заголовок отчета" требуется разместить элемент "Текст" заголовка.

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

Бэнд "Данные" является одним из наиболее часто используемых бэндов. Он берет данные из источника, с которым связан, и выводится столько раз, сколько строк в источнике данных. Перетащите источник "Данные" в шаблон отчета.

В диалоговом окне "Данные" установите флаги для всех колонок, а также активируйте флаг "Заголовок данных".

В колонке "Время" удалите переменную, добавленную по умолчанию и перенесите в данную ячейку переменную "Данные_Конец", чтобы выводить актуальное время для конца периода.

С помощью инструментальной панели определите требуемое форматирование для текста и всех ячеек отчета.

Если все настройки выполнены корректно, то при активировании предварительного просмотра отчета появятся значения о наработке в секундах.

Для пересчета в минуты выйдите из режима просмотра. Нажмите два раза левой кнопкой мыши на переменной "Время наработки Н1", перейдите на вкладку "Выражение" и добавьте арифметическое действие внутри фигурных скобок. Для остальных переменных проделайте аналогичные действия.

При активировании предварительного просмотра отчета после произведенного деления в значении переменной отображается избыточное количество знаков после запятой.

Чтобы изменить формат вывода значения, нажмите левой кнопкой мыши на переменной в столбце, выберите вкладку "Свойства" и в поле формат нажмите на кнопку ✏️.

В диалоговом окне "Формат" укажите количество знаков дробной части в соответствующем поле.

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

Редактор скриптов
Введение
В качестве скриптового языка в "Симплайт 5" используется язык программирования Lua версия 5.1.
Системой поддерживаются два основных подхода к реализации скриптов:
- асинхронный — основан на использовании блока
async/awaitи применяется для операций, требующих ожидания внешних событий — таких как запросы к оборудованию, ожидание значений тегов или работа с базами данных. Данный подход не блокирует основной поток выполнения системы. - синхронный — используется для определенных вычислений, обработки данных в реальном времени и критичных по времени операций, где выполнение скрипта должно быть завершено за минимальный промежуток времени.
Выбор подхода зависит от характера решаемой задачи: асинхронные функции рекомендуются для операций ввода-вывода и длительных процессов, тогда как синхронные — для вычислений с гарантированным временем выполнения и обработки данных в циклах управления.
Описание языка Lua
Преимущества
Основные преимущества языка — простота и эффективность.
Lua представляет собой простой и компактный язык программирования. Он характеризуется небольшим количеством концепций, что упрощает процесс изучения и способствует сохранению компактности языка. Язык отличается высокой эффективностью реализации. Независимые тесты подтверждают, что Lua является одним из самых быстрых скриптовых языков.
С помощью скрипта в "Симплайт 5" можно:
- Обрабатывать данные — реализовывать алгоритмы фильтрации, анализа и преобразования сигналов.
- Автоматизировать задачи — создавать сценарии для запуска процессов по расписанию или событию.
- Интегрироваться с внешними системами — взаимодействовать с базами данных, API или другими программами через Lua-библиотеки.
Ограничения движка
Неподдерживаемые функции:
Замечания: os.setenv(name, value) — позволяет установить переменную окружения. collectgarbage — не принимает аргументов и запускает сборщик мусора для всего приложения. file:setvbuf — не поддерживает буферизацию строки.
Синтаксис
Основным алфавитом языка является английский. Идентификаторы могут содержать буквы, цифры и символ подчеркивания, однако они не должны начинаться с цифры и не могут совпадать с ключевыми словами.
Замечание
Эти ограничения не распространяются на имена тегов внутри системы. Имена тегов в функцию передаются в виде строковых литералов.
Язык является регистрозависимым, то есть все ключевые слова должны быть написаны строчными буквами. Идентификаторы, которые отличаются только регистром букв, считаются различными.
Следующие 22 ключевых слова не могут быть использованы в качестве имен:
and break do else elseif
end false for function if
in local nil not or
repeat return then true until while
Комментарии
Простой однострочный комментарий в Lua начинается с двойного минуса и продолжается до конца строки.
dim = { "one", "two", "three" } -- Строчный комментарий не обязан начинаться с начала строки,
-- он может следовать за другими языковыми конструкциями,
-- поясняя их.
--[[Многострочный комментарий начинается с идущих подряд за двумя минусами двух открывающихся квадратных скобок
и продолжается до двух подряд закрывающихся квадратных скобок. Как здесь: ]]
Примечание
Редактор скриптов не осуществляет обработку подсветки синтаксиса в многострочном комментарии. Вся область в двойных квадратных скобках подсвечивается стандартным образом, но при компиляции этот фрагмент кода обрабатывается как комментарий.
Типы данных
Lua — это язык программирования с динамической типизацией, в котором отсутствуют определения типов. Каждое значение в языке Lua имеет свой собственный тип:
nil(неопределенный) — отсутствие конкретного значения.boolean(логический) — содержит значения false (ложь) или true (истина).number(числовой) — представляет вещественные числа, т.е. числа двойной точности с плавающей точкой (типdoubleв языке C).string(строковый) — последовательность символов.function(функция) — объект, который содержит выполняемый код.userdata(пользовательские данные) — блок произвольной памяти, обычно используется для взаимодействия с кодом на языке C.thread(асинхронный поток) — независимый поток выполнения (сопрограмму).table(таблица) — ассоциативный массив.
Переменные
Глобальные переменные
Глобальная переменная доступна в любой части кода после своего создания. Любая переменная, объявленная без использования ключевого слова local, считается глобальной. Обращение к неинициализированной переменной не является ошибкой. В этом случае результатом будет значение nil:
Локальные переменные
Хороший стиль программирования заключается в применении локальных переменных везде, где это возможно. Локальные переменные помогают избежать засорения глобального окружения ненужными именами. Более того, доступ к локальной переменной быстрее, чем к глобальной.
Локальные переменные объявляются при помощи оператора local.
В отличие от глобальных переменных, область видимости локальной переменной ограничена блоком, где она была объявлена. Записывать локальные объявления можно везде, где можно записать оператор. Область видимости объявленных переменных начинается сразу после объявления и длится до конца блока.
Блок — это тело управляющей структуры, тело функции или кусок кода (файл или строка, где переменная была объявлена).
x = 10
local i = 1 -- локальная для куска
while i <= x do
local x = i*2 -- локальная для тела while
print(x) --> 2, 4, 6, 8,...
i = i + 1
end
if i > 20 then
local x -- локальная для тела if
x = 20
print(x + 2) -- (напечатает 22, если условие выполнится)
else
print(x) --> 10 (глобальная переменная)
end
print(x) --> 10 (глобальная переменная)
Операторы
Операторы сравнения
< > <= >= == ~= (последние два означают, соответственно, сравнение на равенство и на неравенство). Сравнения на равенство и неравенство могут быть применены к любым типам данных, в то время как остальные сравнения применимы только к строкам и числам.
Логические операторы
and or not — логические и или и не, соответственно, могут применяться к значениям любых типов и возвращают true либо false.
Все логические операции трактуют false и nil как ложные, а все остальные — как истинные значения. Операция and возвращает свой первый аргумент, если он ложный, иначе она возвращает свой второй аргумент. Операция or возвращает свой первый аргумент, если он не ложный; иначе она возвращает свой второй аргумент.
Операция not всегда возвращает булево значение.
Арифметические операторы
+ - * / - (унарный минус), % (остаток от деления), ^ (возведение в степень).
Примеры:
x^0.5 — возвращает квадратный корень из x
x^(-1/3) — значение, обратное кубическому корню из x
Для усечения x до трёх знаков после запятой достаточно взять выражение x = x % 0.001
Строки (string)
Строки в Lua могут содержать любые 8-битные символы, включая ноль ('\0'). Также они являются неизменяемыми значениями. Строковые литералы могут записываться в одинарных или двойных кавычках, служебные символы помещаются в них в стандартной для C-нотации с ведущим обратным слэшем. Многострочные литералы ограничиваются двумя подряд открывающимися и двумя подряд закрывающимися квадратными скобками.
Строки в Lua могут содержать следующие C-образные экранированные последовательности:
\а — звонок
\b — возврат на одну позицию (backspace)
\f — перевод страницы
\n — перевод строки
\r — возврат каретки
\t — горизонтальная табуляция
\v — вертикальная табуляция
\\ — обратный слеш
\" — двойная кавычка
\' — одинарная кавычка
Циклы
Оператор for имеет две разновидности:
- числовой.
- общий.
FOR числовой
Данный цикл будет выполнять определенные действия для каждого значения переменной var в диапазоне от exp1 до exp2 с шагом exp3. Третье выражение является необязательным: если оно отсутствует, то Lua считает значение шага равным 1.
FOR общий
Этот пример используетpairs, удобную итерирующую функцию для перебора таблицы, предоставляемую базовой библиотекой Lua. На каждом шаге этого цикла k получает ключ, a v получает значение, связанное с этим ключом.
ipairsитерирует только по числовым индексам таблицы, начиная с 1 и до первого пропущенного индекса. Перебирает элементы в порядке 1, 2, 3, ... и останавливается, когда встречает nil.
pairsитерирует по всем ключам таблицы (включая нечисловые и пропущенные индексы). Подходит для любых таблиц, включая словари (key-value). Возвращает пары key, value.
Таблицы (table)
Таблица — представляет собой ассоциативный массив.
Ассоциативный массив — это массив, который может быть индексирован не только числами, но и строками или любым другим значением языка, кроме nil.
Таблицы используются для представления обычных массивов, множеств, записей и других структур данных простым, однородным и эффективным способом. Каждая таблица может хранить значения с разными типами индексов и растет по мере добавления новых записей. Таблицу можно рассматривать как динамически выделяемый объект; программа работает только со ссылками (указателями) на них.
Таблица общего вида
empty = {} -- Пустая таблица
empty[1] = "первый" -- Добавление элемента с целым индексом
empty[3] = "второй" -- Добавление элемента с целым индексом
empty["третий"] = "третий" -- Добавление элемента со строковым индексом
empty[1] = nil -- Удаление элемента из таблицы
Классический массив
Строки индексируются по умолчанию целыми числами, начиная с 1:
Массив с произвольной индексацией
days2 = {[0]="воскресенье", [1]="понедельник", [2]="вторник", [3]="среда", [4]="четверг", [5]="пятница"}
Запись (структура)
Значения различных типов индексируются литералами:
person = {tabnum = 123342, -- Табельный номер
fio = "Иванов Степан Васильевич", -- Ф.И.О.
post = "слесарь-инструментальщик", -- Должность
salary = 25800.45, -- Оклад
sdate = "23.10.2013", -- Дата приёма на работу
bdate = "08.08.1973"} -- Дата рождения
pfio = person.fio -- Обращение к элементу структуры.
В Lua person.fio означает индексировать таблицу person, используя строку fio в качестве ключа.
Множество
Индексы используются для хранения значений:
workDays = {["понедельник"]=true, ["вторник"]=true, ["среда"]=true, ["четверг"]=true, ["пятница"]=true}
workDays["суббота"] = true -- Добавление субботы в число рабочих дней
workDays["среда"] = nil -- По средам больше не работаем
Замыкания
Lua поддерживает концепцию замыканий.
function makeaddfunc(x)
-- Возвращает новую анонимную функцию, которая добавляет x к аргументу
return function(y)
-- Когда ссылаемся на переменную x, которая вне текущей области,
-- и время жизни которой меньше, чем этой анонимной функции,
-- Lua создаёт замыкание
return x + y
end
end
plustwo = makeaddfunc(2) -- т.е. plustwo = function(y) return 2 + y end
print(plustwo(5)) -- Выводит 7
Каждый раз, когда вызывается makeaddfunc, создаётся новое замыкание для переменной x, так что каждая возвращаемая анонимная функция будет ссылаться на свой параметр x. Как и у любого другого объекта Lua, временем жизни замыкания управляет сборщик мусора.
Объектно-ориентированное программирование
В основе объектно-ориентированного программирования в Lua лежат таблицы.
Таблица в Lua представляет собой объект, который может иметь поля, названные с помощью идентификаторов. В этих полях могут храниться произвольные значения (свойства объекта), а также функции, которые определяют поведение объекта (методы объекта).
Синтаксический сахар, предоставляемый Lua, делает работу с объектами более привычной для программистов, имеющих опыт работы с традиционными объектно-ориентированными языками.
Синтаксический сахар — это способы написания кода, которые делают его более удобным и кратким для программиста, но не влияют на работу программы
В Lua отсутствует понятие класса, поэтому описывается отдельный объект, и все поля и методы относятся к нему. Свойства описываются аналогично элементам таблицы с ключами-идентификаторами, а методы — как поля-функции.
Описание методов включает явное указание в первом параметре так называемого "получателя" — параметра, который при вызове метода ссылается на объект, для которого он вызван. Помимо стандартного обращения к полю таблицы через точку, которое требует явного указания получателя в вызове метода, Lua поддерживает дополнительный синтаксис. Если в вызове или описании метода заголовок записывается в виде "Объект:метод", то получатель не указывается. При этом в теле метода он всё равно доступен под именем self.
-- Объект
Account = { -- Объект "счёт"
id, name, balance=0, -- свойства объекта: номер, название, баланс
credit = function (self, v) -- метод "расход" - описание внутри объекта с явным указанием получателя
if self.balance < v then error "Недостаточно денег на счёте" end
self.balance = self.balance - v
end
}
function Account:debet(v) -- метод "приход" - внешнее сокращённое описание (self не указывается)
self.balance = self.balance + v
end
Account.debet(Account, 10000) -- вызов метода - полный вариант
Account:credit(5000) -- вызов метода - сокращённый вариант
В языке Lua наследование, в том числе множественное, реализуется с использованием мета-таблиц и мета-методов. Эти же методы позволяют реализовать сокрытие данных и контроль доступа к полям таблицы-объекта.
По сравнению с другими языками программирования, где аналогичные функции реализованы с помощью специальных языковых конструкций, подход Lua может показаться более сложным и требующим более тщательного кодирования. Однако он обеспечивает большую гибкость и упрощает работу интерпретатора.
Главное окно
Для запуска "Редактора скриптов" выберите соответствующий пункт меню среды разработки.

Окно редактора включает в себя следующие функциональные области:

- Файлы скриптов — область в которой можно создавать, группировать скрипты и модули проекта.
- Рабочая область — область для написания кода для выбранного скрипта на языке Lua.
- Примеры — примеры кусков кода наиболее востребованных операций, применяемых в контексте работы с системой. Быстро добавить кусок кода на рабочую область можно дважды нажав на нем левой кнопкой мыши, либо с помощью перетаскивания.
- Отладочная консоль — окно сообщений от компилятора.
- Компилировать — кнопка запуска сборки скрипта.
- Подключиться к серверу — кнопка подключения к серверу для отладки.
- Панель переключения режимов — кнопки переключения режимов разработки и отладки скрипта.
В верхней части окна "Список скриптов" доступна панель иснтрументов:
- ➕ — создать новый файл.
- ❌ — удалить выбранный файл.
- 📁 — добавить каталог для группировки файлов.
В области редактирования есть возможность использовать следующие сочетания клавиш:
- Ctrl+C — копировать выделенные символы.
- Ctrl+V — вставить данные из буфера обмена.
- Ctrl+A — выделить все символы в области редактирования.
- Ctrl+X — вырезать выделенные символы.
- Ctrl+Z — отменить последнее действие.
- Ctrl+Y — повторить отмененное действие.
Быстрый старт
Главный скрипт
Работа "Редактора скриптов" построена на модели, которая предполагает наличие файла скрипта main.lua и файлов с подключаемыми модулями.
Для создания скрипта нажмите на кнопку ➕ на панели инструментов. Откроется диалоговое окно "Создание файла" и система автоматически предложит создать новый файл с именем main.lua.
Внимание
Изменение имени файла скрипта main.lua не допускается.
При именовании последующих файлов проекта (модулей) необходимо обязательно указывать расширение .lua для каждого.
Файл main.lua является основным. Он предоставляет возможность вызова всех дополнительных модулей.

Компиляция
После создания скрипта необходимо произвести сборку кода с помощью кнопки "Компилировать". В случае успешной компиляции в отладочной консоли появится сообщение "Компиляция выполнена успешно". В противном случае будет представлен список ошибок с указанием строки, позиции и описанием ошибки.
Логические ошибки в скриптах, которые не могут быть обнаружены на этапе компиляции, сохраняются в журнале отладки.
Пользовательская библиотека
Чтобы добавить пользовательскую библиотеку, поместите модуль, написанный на языке Lua, в общий каталог модулей программы: C:\Users\Public\Documents\SimpLight_5.0\scripts\sdk. После этого вызовите соответствующим образом в скрипте. Такой подход рассмотрен в примере "Время наработки тега".
Печать сообщения
Рассмотрим пример вывода строки в журнал сообщений сервера. Для этого будем использовать функцию print. Передайте ей в качестве аргумента любую строку, например "Hello, World!". Затем нажмите кнопку "Компилировать". Если компиляция выполнена успешно, сохраните проект.

Чтобы увидеть данное сообщение в списке служебных, укажите уровень логирования "DEBUG" в настройках. Далее разверните проект на сервере. Как только откроется окно клиента, перейдите в "Панель управления" для доступа к служебным сообщениям. Среди всех сообщений должна появиться строка приветствия, которую сформировал скрипт main.lua на сервере.

Чтобы добавить дополнительный модуль, повторно нажмите ➕ на панели инструментов, укажите имя и активируйте флаг "Добавить вызов модуля в скрипт main.lua". Это позволит автоматически добавить вызов модуля в основной скрипт.
Для загрузки модуля в основном скрипте используется функция require. Система автоматически добавляет вызов этой функции, если выбран соответствующий флаг при создании модуля. Также вызов вы можете указать самостоятельно в основном скрипте в формате require(имя_модуля).
Справка
В "Симплайт 5" реализован механизм горячей перезагрузки скриптов, позволяющий применять изменения в коде модулей без полной перезагрузки ядра системы. После развертывания проекта, на сервере происходит перезагрузка только измененных модулей.
setInterval(function() -- объявление циклически выполняемой функции
print("cyclic message") -- печать сообщения "cyclic message"
end, 1000) -- с интервалом 1000 мс (1 секунда)
Модули
Начинать написание скрипта необходимо с объявления локальной переменной, которой присваивается вызов модуля.
Чтение и запись
Для чтения и записи значений тегов в скрипте необходимо вызвать модуль, соответствующий типу выполняемой функции.
local tagApi = require("simplight.api.channels") -- вызов модуля асинхронных функций чтения/записи
local async = require("async") -- вызов модуля асинхронного выполнения функций
local tagApiSync = require("simplight.api.channels.sync") -- вызов модуля синхронных функций чтения/записи (вызывать модуль async не требуется)
read
read(tagName: string): Channel
Принимает имя тега в виде строки и возвращает объект типа Channel, содержащий все основные данные о теге.
Объект Channel содержит следующие основные поля:
| Поле | Тип данных | Описание |
|---|---|---|
id |
int64 |
Уникальный идентификатор тега в системе |
name |
string |
Имя тега |
value |
any |
Текущее значение тега (может быть числом, булевым значением, строкой и т.д.) |
quality |
uint16 |
Код качества данных, указывающий на достоверность значения |
highScale |
float |
Максимальное значение диапазона шкалы тега |
lowScale |
float |
Минимальное значение диапазона шкалы тега |
loLoAlarm |
float |
Нижнее пороговое значение аварийного события |
loAlarm |
float |
Нижнее пороговое значение предупредительного события |
hiAlarm |
float |
Верхнее пороговое значение предупредительного события |
hiHiAlarm |
float |
Верхнее пороговое значение аварийного события |
alarmStatus |
enum AlarmStatus |
Текущий статус аварии для данного тега |
Пример:
Прочитать нижнее пороговое значение предупредительного события и текущее значение тега temp 1.
readValue
readValue(tagName: string): any
Возвращает текущее значение тега по его имени. Это упрощенная версия функции read, которая возвращает только значение, без других атрибутов тега.
Возвращаемое значение:
| Поле | Тип данных | Описание |
|---|---|---|
value |
any |
Текущее значение тега (может быть числом, булевым значением, строкой и т.д.) |
Пример:
Прочитать значение тега temp 2.
readMany
readMany(tagNames: string[]): Channel
Позволяет за один запрос получить данные (значение, качество, атрибуты тревог и т.д.) для списка тегов. Принимает массив имен тегов и возвращает объект типа Channel, содержащий все основные данные о теге.
Объект Channel содержит следующие основные поля:
| Поле | Тип данных | Описание |
|---|---|---|
id |
int64 |
Уникальный идентификатор тега в системе |
name |
string |
Имя тега |
value |
any |
Текущее значение тега (может быть числом, булевым значением, строкой и т.д.) |
quality |
uint16 |
Код качества данных, указывающий на достоверность значения |
highScale |
float |
Максимальное значение диапазона шкалы тега |
lowScale |
float |
Минимальное значение диапазона шкалы тега |
loLoAlarm |
float |
Нижнее пороговое значение аварийного события |
loAlarm |
float |
Нижнее пороговое значение предупредительного события |
hiAlarm |
float |
Верхнее пороговое значение предупредительного события |
hiHiAlarm |
float |
Верхнее пороговое значение аварийного события |
alarmStatus |
enum AlarmStatus |
Текущий статус аварии для данного тега |
Пример:
Прочитать значения тегов temp 1, temp 2, temp 3, temp 4.
write
write(tagName: string, value: any, quality: uint16)
Записывает данные в тег на сервере. Функция принимает имя целевого тега, значение и признак качества, которые необходимо записать.
Запись качества в физический тег можно опустить.
| Поле | Тип данных | Описание |
|---|---|---|
name |
string |
Имя тега |
value |
any |
Текущее значение тега (может быть числом, булевым значением, строкой и т.д.) |
quality |
uint16 |
Код качества данных, указывающий на достоверность значения |
Пример:
Записать значение (177) и признака качества (0xC0 — хорошее качество) в тег temp 3.
writeMany
writeMany(req: WriteChannelRequest)
Функция предназначена для массового обновления значений тегов. Если запись одного из тегов завершится ошибкой, функция продолжит попытки записать остальные теги из списка. После завершения итерации по всем тегам, если хотя бы одна операция записи не удалась, функция сгенерирует исключение, которое будет содержать информацию о том, какой конкретно тег вызвал ошибку.
В функцию передается аргумент в виде таблицы values со значениями нескольких тегов.
| Поле | Тип данных | Описание |
|---|---|---|
name |
string |
Имя тега |
value |
any |
Текущее значение тега (может быть числом, булевым значением, строкой и т.д.) |
quality |
uint16 |
Код качества данных, указывающий на достоверность значения |
Пример:
Записать значение и признака качества (0xC0 — хорошее качество) в теги temp 1, temp 2, temp 3, temp 4.
local async = require("async")
local tagApi = require("simplight.api.channels")
async(function()
await(tagApi.writeMany({
values={
{ name="temp 1", value=101, quality = 0xC0 },
{ name="temp 2", value=202, quality = 0xC0 },
{ name="temp 3", value=303, quality = 0xC0 },
{ name="temp 4", value=404, quality = 0xC0 },
}
}))
end)
Временные метки
Модуль time предоставляет функции для работы с временными значениями. Система использует Unix timestamp (временная метка) в миллисекундах, отсчитываемый от начала эпохи Unix (1 января 1970 года, 00:00:00 UTC). Все временные метки относятся к часовому поясу UTC (всемирное координированное время). Для работы с временными метками в скрипте, необходимо соответствующим образом оформить вызов:
from
from(tp: TimeParts): number
Конвертирует детализированное представление даты и времени в единую числовую временную метку в формате UTC. Возвращает число в виде Unix timestamp.
В качестве аргумента принимает таблицу TimeParts со следующими обязательными полями:
| Поле | Тип данных | Описание |
|---|---|---|
year |
number |
Год (четыре цифры) |
month |
number |
Месяц (1-12) |
day |
number |
День месяца (1-31) |
hour |
number |
Час (0-23) |
min |
number |
Минуты (0-59) |
sec |
number |
Секунды(0-59) |
msec |
number |
Миллисекунды(0-999) |
Пример:
Вернуть временную метку для даты 13.02.1981 и времени 04:30:45.500.
local time = require("time")
local timestamp = time.from({
year = 1981,
month = 02,
day = 13,
hour = 04,
min = 30,
sec = 45,
msec = 500
})
print("timestamp is:", timestamp)
now
now(): number
Возвращает временную метку, сформированную по текущим значениям времени системы в виде Unix timestamp.
Пример:
Вернуть текущую временную метку сервера.
toString
toString(timestamp: number): string
Преобразует временную метку в удобочитаемую строку с датой и временем.
Пример:
Вернуть текущую дату и время сервера в виде строки.
local time = require("time")
local nowStamp = time.now()
local nowString = time.toString(nowStamp)
print("current time is:", nowString)
toTable
toTable(timestamp: number): TimeParts
Выполняет обратное преобразование, разбирая единую временную метку на отдельные компоненты (год, месяц, день и т.д.).
Пример:
Вернуть значение текущего месяца и года сервера.
local time = require("time")
local nowStamp = time.now()
local nowTable = time.toTable(nowStamp)
print("current month and year:",nowTable.month, nowTable.year)
Архивные данные
Для работы с значениями тегов в базе данных необходимо вызвать соответствующий модуль:
getRange
getRange(options: GetOptions): []Moment
Получает архивные данные тега за указанный временной интервал.
В качестве аргумента передается таблица GetOptions:
| Поле | Тип данных | Описание |
|---|---|---|
channelName |
string |
Имя тега, для которого запрашивается история |
start |
timestamp |
Начальная временная метка |
ending |
timestamp |
Конечная временная метка |
Возвращаемое значение — массив Moment:
| Поле | Тип данных | Описание |
|---|---|---|
t |
timestamp |
Временная метка записи |
q |
quality |
Качество значения в момент записи |
v |
any |
Значение тега в момент записи |
Пример:
Необходимо выполнить анализ значений и признака качества тега "Напряжение" из базы данных за последние две минуты.
local momentApi = require("moments")
local async = require("async")
local time = require("time")
async(function()
local ending = time.now()
local start = ending - 2 * 60 * 1000
local ms = await(momentApi.getRange({
channelName = "Напряжение",
start = start,
ending = ending,
}))
for _, m in ipairs(ms) do
print(("{t: %d, v: %s, q: %d}"):format(m.t, m.v, m.q))
end
end)
getMin
getMin(options: GetOptions): number|nil
Вычисляет минимальное значение тега за указанный временной интервал на основе архивных данных. Если в указанном интервале нет архивных записей, функция возвращает nil.
В качестве аргумента передается таблица GetOptions:
| Поле | Тип данных | Описание |
|---|---|---|
channelName |
string |
Имя тега, для которого запрашивается история |
start |
timestamp |
Начальная временная метка |
ending |
timestamp |
Конечная временная метка |
getMax
getMax(options: GetOptions): number|nil
Вычисляет максимальное значение тега за указанный временной интервал на основе архивных данных. Если в указанном интервале нет архивных записей, функция возвращает nil.
В качестве аргумента передается таблица GetOptions:
| Поле | Тип данных | Описание |
|---|---|---|
channelName |
string |
Имя тега, для которого запрашивается история |
start |
timestamp |
Начальная временная метка |
ending |
timestamp |
Конечная временная метка |
getAverage
getAverage(options: GetOptions): number|nil
Вычисляет среднее арифметическое значение тега за указанный временной интервал на основе архивных данных. Если в указанном интервале нет архивных записей, функция возвращает nil.
В качестве аргумента передается таблица GetOptions:
| Поле | Тип данных | Описание |
|---|---|---|
channelName |
string |
Имя тега, для которого запрашивается история |
start |
timestamp |
Начальная временная метка |
ending |
timestamp |
Конечная временная метка |
save
save(ms: []TagMoment)
Сохраняет массив значений тегов в базу данных с текущей временной меткой.
В качестве аргумента передается массив TagMoment:
| Поле | Тип данных | Описание |
|---|---|---|
tagName |
string |
Имя тега, для которого сохраняется значение |
value |
any |
Значение для сохранения в архив (может быть числом, строкой, булевым значением) |
Пример:
Сохранить значения тегов в базе данных с указанием одинаковой метки времени. Этот подход может быть использован для формирования отчета на основе временной метки.
local async = require("async")
local momentApi = require("moments")
local tagApi = require("simplight.api.channels")
local events = require("simp-events")
local function doAction()
return async(function()
local currentTag = await(tagApi.read("Ток"))
local voltageTag = await(tagApi.read("Напряжение"))
local powerTag = await(tagApi.read("Мощность"))
await(momentApi.save({
{
tagName = "Ток",
value = currentTag.value,
},
{
tagName = "Напряжение",
value = voltageTag.value,
},
{
tagName = "Мощность",
value = powerTag.value,
}
}))
end):catch(function(err)
print("doAction: ", err)
end)
end
events.on("channelWrite", function(event)
for _, w in ipairs(event.writes) do
if w.name == "Действия.СделатьЗапись" then
doAction()
end
end
end)
Битовые операции
Для выполнения битовых операций в скрипте необходимо вызвать модуль:
| Функция | Описание |
|---|---|
| band(x: number; y: number): number | Побитовое И над числами x и y |
| bor(x: number; y: number): number | Побитовое ИЛИ над числами x и y |
| bxor(x: number; y: number): number | Побитовое исключающее ИЛИ над числами x и y |
| bnot(x: number): number | Побитовое НЕ над числом x |
| lshift(x: number; n: number): number | Побитовое смещение влево числа x на n бит |
| rshift(x: number; n: number): number | Побитовое логическое смещение вправо числа x на n бит |
| arshift(x: number; n: number): number | Побитовое арифметическое смещение вправо числа x на n бит |
| getBit(x: number; bit: number): number | Возвращает 0 либо 1 в зависимости установлен ли бит bit в числе x* |
| setOnBit(x: number; bit: number): number | Возвращает число с установленным битом bit полученным от числа x* |
| setOffBit(x: number; bit: number): number | Возвращает число со снятым битом bit полученным от числа x* |
*Нумерация битов осуществляется справа налево, начиная с 1
Пример:
Выполнить операцию побитового И числел x и y.
local bitop = require("bitop")
local x = 5
local y = 6
local bitAnd = bitop.band(x, y)
print(bitAnd)
Файловая система
Для работы с файловой системой на сервере необходимо вызвать модуль:
appendFile
appendFile(filename: string; content: string)
Функция предназначена для последовательной записи данных в файл. Она открывает указанный файл и добавляет переданный контент в его конец, не изменяя уже существующее содержимое. В случае отсутствия файла по указанному пути, он будет создан автоматически.
Пример:
Создать каталог fsData, разместить в нем файл file.txt и в файл добавить строку "init message".
local fs = require("fs")
local basePath = "C:/SimpLight projects/fsData/file.txt"
fs.appendFile(basePath, "test message")
readFile
readFile(filename: string, options: table)
Получает доступ к содержимому файла, расположенного по указанному пути.
Пример:
Вычитать из файла file.txt его содержимое.
local async = require("async")
local fs = require("fs")
local basePath = "C:/SimpLight projects/fsData/file.txt"
async(function()
local content = await(fs.readFile(basePath))
print(content)
end)
writeFile
writeFile(filename: string, content: string)
Перезаписывает содержимое файла, расположенного по указанному пути.
Пример:
Полностью перезаписать содержимое файла file.txt.
local fs = require("fs")
local basePath = "C:/SimpLight projects/fsData/file.txt"
fs.writeFile(basePath, "new message")
mkdir
mkdir(path: string, options: MkdirOptions)
Создаёт каталог по пути path. В качестве аргумента принимает путь каталога и таблицу MkdirOptions:
| Поле | Тип данных | Описание |
|---|---|---|
recursive |
bool |
Необходимо установить в true для создания вложенных каталогов |
local async = require("async")
local fs = require("fs")
local basePath = "C:/SimpLight projects/fsData"
async(function()
await(fs.mkdir(basePath .. "/new_folder/new_subfolder", { recursive = true }))
end)
copyFile
copyFile(srcFilename, newFileName: string; failIfExists: bool)
Копирует указанный файл в новое местоположение. Флаг failIfExists позволяет прервать операцию, если файл уже существует.
Возвращаемое значение:
- true — файл успешно создан и скопирован.
- false — файл с указанным именем уже существует.
local async = require("async")
local fs = require("fs")
local basePath = "C:/SimpLight projects/fsData"
async(function()
await(fs.copyFile(basePath .. "/file.txt", basePath .. "/new_folder/2.txt", true))
end)
existsFile
existsFile(path: string)
Проверяет наличие файла. Следует отметить, что данную функцию не следует использовать перед чтением или открытием файла, так как это может привести к состоянию гонок. В этом случае между проверкой наличия файла и его открытием могут быть выполнены другие операции, такие как удаление файла или его открытие другим приложением с исключительными правами доступа, что может вызвать ошибку.
Возвращаемое значение:
- true — файл существует.
- false — файл не существует.
Пример:
Проверить наличие файла file.txt по указанному пути.
local async = require("async")
local fs = require("fs")
async(function()
local file_exist = await(fs.existsFile("C:/SimpLight projects/fsData/file.txt" ))
print(file_exist)
end)
existsDir
existsDir(path: string)
Определяет наличие каталога по указанному пути.
Возвращаемое значение:
- true — каталог существует.
- false — каталог не существует.
Пример:
Проверить наличие каталога fsData по указанному пути.
local async = require("async")
local fs = require("fs")
async(function()
local dir_exist = await(fs.existsDir("C:/SimpLight projects/fsData" ))
print(dir_exist)
end)
Пути
Для работы с путями в файловой системе на сервере необходимо вызвать модуль:
dirname
dirname(path: string): string
Возвращает имя каталога по указанному пути.
local path = require("path")
local async = require("async")
async(function()
local dir = await(path.dirname("C:/SimpLight projects/fsData/"))
print("Имя каталога: ", dir)
end)
basename
basename(path: string; suffix: string): string
Возвращает последнюю часть указанного пути. Если указать suffix, то он будет удален с конца строки.
local async = require("async")
local path = require("path")
local basePath = "C:/SimpLight projects/fsData"
async(function()
local last_path = await(path.basename(basePath, "ta")) -- исключение суффикса "ta" из строки пути
print("Последняя часть пути: ", last_path) --> fsDa
end)
extname
extname(path: string): string
Возвращает расширение файла по указанному пути.
local path = require("path")
local async = require("async")
async(function()
local ext = await(path.extname("C:/SimpLight projects/fsData/file.txt"))
print("Расширение файла: ", ext)
end)
join
join(paths: []string): string
Корректно объединяет несколько сегментов в единый путь, учитывая особенности файловой системы платформы. После соединения функция выполняет нормализацию пути, удаляя лишние разделители. Пустые строки в массиве игнорируются.
local path = require("path")
local async = require("async")
local basePath = "C:/SimpLight projects/fsData"
async(function()
local conc_path = await(path.join({basePath, "file.txt"}))
print(conc_path)
end)
События
Модуль для обработки системных событий в реальном времени. Для работы с событиями в скрипте, необходимо сделать вызов модуля:
channelChanges
changes: ChannelChange[]
Получает уведомления об изменениях значений всех тегов в системе.
Поля ChannelChange:
| Поле | Тип данных | Описание |
|---|---|---|
channelID |
int64 |
Идентификатор тега |
name |
string |
Имя тега |
quality |
uint16 |
Код качества данных, указывающий на достоверность значения |
value |
any |
Новое значение тега |
alarmStatus |
enum alarmStatus |
Текущий статус аварии для данного тега |
Пример:
Необходимо производить расчет потребляемой мощности при каждом изменении значений тегов Ток и Напряжение.
local events = require("simp-events") -- вызов модуля для работы с событиями
local tagApi = require("simplight.api.channels") -- вызов модуля асинхронных функций чтения/записи
local async = require("async") -- вызов модуля асинхронного выполнения функций
local function doVoltageAmperageChange() -- объявление функции вычисления мощности
async(function()
local voltageTag = await(tagApi.read("Напряжение")) -- извлечение значения тега "Напряжение"
local amperageTag = await(tagApi.read("Ток")) -- извлечение значения тега "Ток"
local power = voltageTag.value * amperageTag.value -- рассчет значения тега "Мощность"
await(tagApi.write("Мощность", power, 0xC0)) -- запись рассчитанного значения в тег
end):catch(function(err) -- обработка возможных ошибок
print("ошибка", err)
end)
end
events.on("channelChanges", function(event) -- подпишемся на событие channelChanges
for _, c in ipairs(event.changes) do
if c.name == "Напряжение" or c.name == "Ток" then -- если произошли изменения значений в тегах "Напряжение" или "Ток"
doVoltageAmperageChange() -- вызываем функцию вычисления мощности
end
end
end)
channelWrite
ChannelWriteEvent
Получает уведомления о записях значений во все теги системы.
Структура события:
- caller: EventCaller — информация об инициаторе записи.
- writes: WriteValue[ ] — массив записываемых значений.
Поля EventCaller:
| Поле | Тип данных | Описание |
|---|---|---|
connID |
string |
Идентификатор соединения |
userName |
string |
Имя пользователя |
Поля WriteValue:
| Поле | Тип данных | Описание |
|---|---|---|
channelID |
int64 |
Уникальный идентификатор тега |
name |
string |
Имя тега |
quality |
uint16 |
Качество для записи |
value |
any |
Значение для записи |
Пример:
Необходимо установить новые значения мощности для насосов Pump1 и Pump2 в случае записи в тег Действия.ОбновитьПеременные.
local events = require("simp-events") -- вызов модуля для работы с событиями
local tagApi = require("simplight.api.channels") -- вызов модуля асинхронных функций чтения/записи
local async = require("async") -- вызов модуля асинхронного выполнения функций
local function doActionUpdateVarsWrite() -- объявление функции обновления значений тегов "Pump1.FeedPower" и "Pump2.FeedPower"
async(function()
await(tagApi.write("Pump1.FeedPower", 100, 0xC0)) -- запись значения 100 и признака качества в тег "Pump1.FeedPower"
await(tagApi.write("Pump2.FeedPower", 75, 0xC0)) -- запись значения 75 и признака качества в тег "Pump2.FeedPower"
end)
end
events.on("channelWrite", function(event) -- подпишемся на событие channelWrite, чтобы отслеживать запись в теги
for _, write in ipairs(event.writes) do
if write.name == "Действия.ОбновитьПеременные" then -- если произошла запись значения в тег "Действия.ОбновитьПеременные"
doActionUpdateVarsWrite() -- вызываем функцию обновления значений тегов
end
end
end)
Уведомления
Для отправки уведомлений необходимо вызвать модуль:
sendEmail
sendEmail(options: SendEmailOptions): Promise
Отправляет электронное письмо указанным получателям.
Примечание
Для отправки уведомлений по e-mail включите флаг "Оповещение" и укажите данные аутентификации почтового ящика отправителя в меню. Указывать получателей не нужно. Не рекомендуется изменять номер порта (587), установленный по умолчанию.
В качестве аргумента функция принимает таблицу SendEmailOptions:
| Поле | Тип данных | Описание |
|---|---|---|
from |
string |
Адрес отправителя письма |
subject |
string |
Тема письма |
body |
string |
Тело письма. Поддерживается HTML-разметка |
recipients |
string[] |
Список адресов электронной почты получателей |
Пример:
Необходимо отправить электронное письмо двум получателям, если значение тега "Отправить письмо" изменится.
local api = require("simplight.api") -- вызов модуля отправки уведомлений
local events = require("simp-events") -- вызов модуля для работы с событиями
local async = require("async") -- вызов модуля асинхронного выполнения функций
local emailOptions = {
from = "sender@yandex.ru", -- адрес отправителя письма
subject = "Тест", -- тема письма
body = "Это тестовое сообщение", -- тело письма (поддерживается HTML-разметка)
recipients = {
"recipient_1@gmail.com", -- список адресов электронной почты получателей через запятую
"recipient_2@gmail.com"
}
}
events.on("channelChanges", function(event) -- подпишемся на событие channelChanges, чтобы отслеживать изменение значения тега
for _, change in ipairs(event.changes) do
if change.name == "Отправить письмо" then -- если значение тега "Отправить письмо" изменилось
async(function()
await(api.sendEmail(emailOptions)) -- вызываем функцию sendMail и передаем ей аргумент emailOptions
end):catch(function(err)
print("Ошибка отправки письма:", err) -- если отправка не удалась, функция вернет ошибку
end)
end
end
end)
sendMax
sendMax(options: SendMaxOptions): Promise
Отправляет сообщение в мессенджер Макс указанным получателям.
Примечание
Для отправки уведомлений в мессенджер Макс включите флаг, активирующий отправку уведомлений, и укажите уникальный токен доступа к чат-боту в меню. Добавлять чаты не требуется.
В качестве аргумента функция принимает таблицу SendMaxOptions:
| Поле | Тип данных | Описание |
|---|---|---|
message |
string |
Отправляемое сообщение |
recipients |
string[] |
Список ID-чатов получатей |
Пример:
Необходимо отправить сообщение получателю в мессенджер Макс, если значение тега "Отправить сообщение" изменится.
local api = require("simplight.api") -- вызов модуля отправки уведомлений
local events = require("simp-events") -- вызов модуля для работы с событиями
local async = require("async") -- вызов модуля асинхронного выполнения функций
local maxOptions = {
message = "Это тестовое сообщение", -- отправляемое сообщение
recipients = {"ID получателя"} -- ID получателя
}
events.on("channelChanges", function(event) -- подпишемся на событие channelChanges, чтобы отслеживать изменение значения тега
for _, change in ipairs(event.changes) do
if change.name == "Отправить сообщение" then -- если значение тега "Отправить сообщение" изменилось
async(function()
await(api.sendMax(maxOptions)) -- вызываем функцию sendMax и передаем ей аргумент maxOptions
end):catch(function(err)
print("Ошибка отправки сообщения:", err) -- если отправка не удалась, функция вернет ошибку
end)
end
end
end)
Глобальные переменные
Предоставляет постоянное хранилище типа "ключ-значение" на локальном диске (HDD/SSD) для скриптов. Объект localStorage позволяет сохранять строковые данные между запусками скриптов и перезагрузками системы. Использование объекта не требует вызова модуля.
setItem
setItem(key: string, value: string)
Метод сохраняет строковое значение по указанному ключу.
getItem
getItem(key: string): (string | nil)
Метод получает значение по указанному ключу.
removeItem
removeItem(key: string)
Метод удаляет пару "ключ-значение" по указанному ключу.
clear
clear()
Метод clear() полностью очищает хранилище, удаляя все сохраненные пары "ключ-значение".
getNumberDef
getNumberDef(key: string, default: number): number
Возвращает числовое значение по указанному ключу key. Если значение отсутствует, то по умолчанию возвращается значение default.
Отчеты
reports
buildReport(options: ReportBuildOptions)
В качестве аргумента в функцию передается структура параметров:
ReportBuildOptions
templatePath: string— путь к файлу шаблона отчета в системе.variables: ReportBuildVariables— пользовательские переменные для подстановки в шаблон.dataSources: ReportBuildDataSources— настройки источников данных отчета.actions: ReportBuildActions— действия после формирования отчета.
Таблица пользовательских переменных (ключ-значение).
{[name: string]: any}
- Ключ — имя переменной (строка).
- Значение — любое значение (строка, число, дата и т.д.).
Настройки источников данных отчета.
{[dataSourceName: string]: ChangeDataSourceParams | PeriodDataSourceParams}
- Ключ — имя источника данных в шаблоне (строка).
- Значение — параметры для источника данных одного из двух типов.
ChangeDataSourceParams:
Параметры для источников данных, основанных на изменениях.
start: time— начало временного диапазона (опционально).end: time— конец временного диапазона (опционально).
PeriodDataSourceParams:
Параметры для источников данных с периодической выборкой.
start: time— начало временного диапазона (опционально).end: time— конец временного диапазона (опционально).interval: time— интервал между выборками в миллисекундах (опционально).
Действия, выполняемые после успешного формирования отчета.
print: PrintActionOptions— параметры для печати отчета (опционально).save: SaveActionOptions— параметры для сохранения отчета в файл (опционально).show: ShowActionOptions— параметры для показа отчета пользователям (опционально).
PrintActionOptions:
enabled: boolean— включить ли печать отчета.targetUsers: []string— массив имен пользователей, которым доступна печать.
SaveActionOptions:
filepath: string— путь для сохранения файла отчета.
ShowActionOptions:
enabled: boolean— включить ли показ отчета.targetUsers: []string— массив имен пользователей, которым будет показан отчет.
Отладка скриптов
Описание окна отладчика
Внимание
Перед началом работы с отладчиком скриптов активируйте уровень логирования DEBUG в настройках
В режиме отладки доступны следующие функциональные области:

1. Переменные — окно со списком переменных, а также их значениями или типами (string, number, userdata и т. д.) во время выполнения отладки. Это окно используется для анализа состояния программы в текущей точке выполнения.
2. Стек вызовов — окно с последовательностью вызванных функций в отлаживаемой строке. Каждая строка содержит название функции, номер строки и путь к файлу модуля.
3. Точки останова — окно со списком установленных точек останова. Для каждой точки указаны имя и путь к файлу, номер строки. Кнопка ❌ удаляет все точки останова из скрипта.
4. Панель инструментов:
- ▶ Продолжить F5 — возобновляет выполнение скрипта.
- ↷ Шаг вперед F10 — выполняет следующую строку без входа в функцию.
- ⬇ Шаг внутрь F11 — выполняет следующую строку, переходя внутрь вызываемой функции.
- ⬆ Шаг наружу Shift+F11 — выполняет выход из текущей функции.
- ■ Отключиться — разъединяет соединение с сервером.
Строка, выделенная желтым цветом — текущая строка выполнения при пошаговой отладке.
Строка, выделенная красным цветом — точка останова (breakpoint).
Точку останова необходимо указать самостоятельно, нажав левую кнопку мыши рядом с номером строки. При повторном нажатии на точку она будет удалена. Точек останова может быть несколько.
Во время исполнения скрипта после установки точки, рядом с ней появится желтый стрелочный индикатор, который свидетельствует о том, что выполнение скрипта остановлено на данной строке.
Пример работы
Для демонстрации примера работы с отладчиком рассмотрим простой скрипт, в котором происходит извлечение значения активного тега counter с помощью функции readValue. Данная функция входит в состав модуля simplight.api.channels.sync, вызываемого в первой строке.
В данном примере значение тега формируется в эмуляторе Modbus с использованием протокола Modbus TCP. Тип значения активного тега Uint16.
| readValue_sync.lua | |
|---|---|
Перед началом отладки разверните проект с данным скриптом на сервере. Затем нажмите кнопку "Отладчик" в левой панели окна "Редактор скриптов" и кнопку "Подключиться к серверу". После успешного подключения кнопка "Подключиться к серверу" изменит свое название на "Отключиться", что будет свидетельствовать о готовности отладчика.

После указания точки останова в строке 6, выполнение скрипта останавливается. Рядом с точкой останова появится желтый стрелочный индикатор. В окне "Переменные" отображается значение, полученное тегом во время остановки. В "Стеке вызовов" для данной строки указан только текущий скрипт. В окне "Точки останова" указано название скрипта и номер строки, в которой установлена точка останова.

Если после этого нажать кнопку "Продолжить", то выполнится фрагмент кода внутри модуля setInterval. Переменная получит новое значение, и отладчик снова остановится на строке 6.
Если точку останова удалить, то после активации кнопки "Продолжить" сервер будет выполнять скрипт в штатном режиме.

После нажатия кнопки "Шаг вперед" отладчик перейдет в режим пошаговой отладки и остановится на строке 4 — следующей выполняемой строке за точкой останова. В этой строке происходит извлечение значения тега.

Чтобы перейти к коду функции readValue 1 раз нажмите кнопку "Шаг внутрь",

После этого система автоматически выполнит следующие действия:
- Откроет исходный код модуля simplight.api.channels.sync в отдельной вкладке.
- Установит курсор на строке модуля, где происходит чтение значения тега функции
readValue. - Отобразит название тега в окне "Переменные".
- Добавит в стек информацию о новом вызове и местоположении файла модуля sync.lua.

После нажатия кнопки "Шаг вперед" курсор сначала переместится на строку 25, где происходит возврат значения функции, а следующее нажатие вернет отладчик в основной скрипт на строку 5.

Для завершения отладки нажмите кнопку "Остановиться" на панели инструментов или воспользуйтесь кнопкой "Отключиться", которая позволяет разорвать соединение с сервером и завершить работу отладчика.

Примеры скриптов
Чтение и запись значений в теги
Необходимо вычислить среднее значение тегов supplyWaterTemp и tankTemp, которые представляют собой температуру воды в подающем трубопроводе и температуру воды в баке-аккумуляторе соответственно, и присвоить значение тегу averageTemp.
local async = require("async") -- загрузка модуля для выполнения асинхронных функций
local tagApi = require("simplight.api.channels") -- загрузка модуля чтения/записи тегов через функции readMany и writeMany
setInterval(function() -- функция циклического выполнения
async(function() -- async принимает анонимную функцию
-- await приостанавливает выполнение async до получения функцией readMany значений тегов
local tags = await(tagApi.readMany({ "supplyWaterTemp", "tankTemp"}))
local supply = tags[1].value -- извлечение значения тега "supplyWaterTemp"
local tank = tags[2].value -- извлечение значения тега "tankTemp"
local average = (supply + tank)/2 -- вычисление среднего значения
-- запись в тег averageTemp значения переменной average и признака качества сигнала (0xC0 — хорошее качество)
await(tagApi.writeMany({values = {{ name="averageTemp", value=average, quality=0xC0 }}
}))
end):catch(function(err) -- обработка возможных ошибок
print("error", err)
end)
end, 1000) -- интервал выполнения функции setInterval (1000 мс)
Обработка сигнала с задержкой
Если значение температуры averageTemp, рассчитанное предыдущим скриптом, будет превышать 10 °C в течение 5 секунд, то будет считаться, что возникла аварийная ситуация (тег alarmTag будет установлен в значение true).
local async = require("async") -- загрузка модуля асинхронных операций
local tagApi = require("simplight.api.channels") -- загрузка модуля работы с тегами
local time = require('time') -- загрузка модуля работы со временем
local tempAlTime -- таймер аварии. Если аварии нет, то значение остаётся nil
setInterval(function()
async(function()
local tempAvg = (await(tagApi.readMany({"averageTemp"})))[1].value
if tempAvg > 10 then -- проверка условия превышения температуры
if not tempAlTime then
tempAlTime = time.now() + 5 * 1000 -- расчет времени задержки: текущее время + 5 секунд
elseif time.now() > tempAlTime then -- если текущее значение времени превышает время задержки
await(tagApi.writeMany({values = {{name = "alarmTag", value = true, quality = 0xC0}} -- в аварийный тег записывается true и пр.качества
}))
tempAlTime = nil -- и выполняется сброс переменной таймера для следующего цикла
end
else
tempAlTime = nil
-- если условие превышения температуры не выполнилось в аварийный тег записывается false
await(tagApi.writeMany({values = {{ name = "alarmTag", value = false, quality = 0xC0}}
}))
end
end):catch(function(err) -- обработка возможных ошибок
print("error", err)
end)
end, 1000)
Для проверки корректности перехода тега alarmTag в аварийное состояние после разворачивания проекта на сервере, необходимо выполнить проверку с использованием теста тегов проекта.
Пользовательские события
Необходимо сформировать 2 типа пользовательских событий:
- Аварийное событие — переход тега alarmTag из состояния false в состояние true.
- Информационное событие — переход тега alarmTag из состояния true в состояние false.
В зависимости от типа события на мнемосхеме оператора должно отображаться соответствующее сообщение. В окне "Редактор категорий событий" нет возможности отредактировать текст сообщения пользовательских событий — доступно только изменение цвета текста и фона сообщения. Все остальные параметры будут обрабатываться программно.
В данном скрипте отсутствует циклический опрос, который использовался в предыдущих примерах. Работа программы подразумевает программную реакцию на прошедшее событие в виде перехода значения тега tagAlarm из одного состояние в другое.
local async = require("async") -- загрузка модуля для выполнения асинхронных функций
local events = require("simp-events") -- загрузка модуля для работы с событиями
local funcs = require("funcs") -- загрузка модуля вспомогательных функций
local EventType = funcs.eventType -- переменная для работы с событиями
events.on("channelChanges", function(event) -- подписка на событие "channelChanges" (изменение тегов)
local changes = event.changes
if changes[1].name == "alarmTag" then -- проверка, если имя измененного канала "alarmTag"
Actions_LogEvents(changes[1].value) -- вызывается функция с новым значением тега
end
end)
function Actions_LogEvents(newValue)
async(function()
print("Actions.LogEvents")
if newValue == true then -- если новое значение TRUE формируется аварийное событие
funcs.logEvents({
type=EventType.alarm,
text="Авария средней температуры воды",
})
else -- если новое значение FALSE формируется информационное событие
funcs.logEvents({
type=EventType.info,
text="Средняя температура воды в норме",
})
end
end):catch(function(err) -- обработка возможных ошибок
print("error", err)
end)
end
Также система регистрирует данные о событии в журнале событий.
Время наработки тега
Рассмотрим пример добавления пользовательской библиотеки. Для этого поместим модуль, написанный на языке Lua, в рабочий каталог программы.
Например, для решения задачи подсчета времени наработки агрегата в системе требуется создать скрипт с именем motoHours.lua, а затем разместить его в специально созданном каталоге для пользовательских библиотек, например, с именем lib. Данный каталог должен быть расположен по пути: C:\Users\Public\Documents\SimpLight_5.0\scripts\sdk.
local async = require("async")
local tagApi = require("simplight.api.channels")
local time = require("time")
local promise = require("promise")
local function timeSince(t)
local elapsedTime = time.now() - t
return elapsedTime
end
local function localStorage_getNumberDef(key, default)
local v = localStorage:getItem(key, default)
if v == nil then
return default
end
return tonumber(v)
end
local function composeLabel(tagName)
return string.format('$simplight.motoHours.%s.totalWorkTime', tagName)
end
local M = {}
local watchByTagNameMap = {}
local function checkTag(tagName, tagValue)
local watch = watchByTagNameMap[tagName]
if watch == nil or watch.isCalcing then
return promise.resolve(true)
end
return async(function()
watch.isCalcing = true
local label = composeLabel(watch.watchTagName)
local totalWorkTime = localStorage_getNumberDef(label, 0)
local v = watch.valueGetter(tagValue)
if v == 1 or v == true then
if not watch.isRun then
watch.lastUpdateTime = time.now()
watch.isRun = true
end
totalWorkTime = totalWorkTime + timeSince(watch.lastUpdateTime)
watch.lastUpdateTime = time.now()
else
if watch.isRun then
totalWorkTime = totalWorkTime + timeSince(watch.lastUpdateTime)
watch.lastUpdateTime = 0
watch.isRun = false
end
end
if watch.resetTagName ~= '' then
local resetTag = await(tagApi.read(watch.resetTagName))
if resetTag.value then
totalWorkTime = 0
watch.lastUpdateTime = 0
watch.isRun = false
await(tagApi.write(watch.resetTagName, 0, 0xC0))
end
end
watch.totalWorkTime = totalWorkTime
localStorage:setItem(label, totalWorkTime)
end):catch(function(err)
print("MotoHours.checkTag:", err)
end):finally(function()
watch.isCalcing = false
end)
end
function M.watch(options)
local watchTagName = options.watchTagName
if type(watchTagName) ~= "string" then
error("motoHours.watch: watchTagName must be string")
end
local label = composeLabel(watchTagName)
local totalWorkTime = localStorage_getNumberDef(label, 0)
local lWatch = {
lastUpdateTime = 0,
isRun = false,
resetTagName = options.resetTagName,
valueGetter = options.valueGetter,
totalWorkTime = totalWorkTime,
watchTagName = watchTagName,
}
if valueGetter == nil then
lWatch.valueGetter = function(srcValue)
return srcValue
end
end
watchByTagNameMap[watchTagName] = lWatch
local intervalId = setInterval(function()
async(function()
local tag = await(tagApi.read(watchTagName))
await(checkTag(tag.name, tag.value))
end):catch(function(err)
print("motoHours.watch: interval:", err)
end)
end, 10000)
return {
cancel = function()
clearInterval(intervalId)
watchByTagNameMap[watchTagName] = nil
end,
getTotalWorkTime = function()
return lWatch.totalWorkTime or 0
end
}
end
return M
Чтобы подключить данный модуль в скрипте требуется оформить вызов:
Пример:
Необходимо выводить сообщение с временем наработки тега waterPump в служебных сообщениях сервера каждые 10 секунд.
local async = require("async")
local motoHours = require("lib.motoHours")
local watch = motoHours.watch({
watchTagName = "waterPump",
resetTagName = "resetHours",
})
setInterval(function()
local t = watch.getTotalWorkTime() / 1000
print(string.format("Время наработки тега: %d сек", t))
end, 10 * 1000)
Формирование отчета
Рассмотрим пример по формированию отчета напрямую из скрипта. Скрипты позволяют программно генерировать документы, извлекать данные, а также настраивать выходные форматы для последующего использования.
Пример:
Необходимо формировать отчет при записи значения в тег, а также в соответствии с расписанием в 7:00 и 21:00.
local async = require("async")
local time = require("time")
local reportApi = require("reports")
local events = require("simp-events")
local tagApi = require("simplight.api.channels")
local function build()
async(function()
print("build")
local lEnd = time.now() -- конечная временная точка
local lStart = lEnd - 60 * 60 * 1000 -- вычисление начальной точки (за час до текущего времени)
await(tagApi.write("Report.StartTime", lStart, 0xC0)) -- запись начальной временной точки
await(tagApi.write("Report.EndTime", lEnd, 0xC0)) -- запись конечной временной точки
await(reportApi.buildReport({ -- вызов функции построения отчета с указанием пути сохранения отчета
templatePath = "УтроВечер",
actions = {
save = {
filepath = "C:/Users/User/Desktop/moringEvening.pdf",
}
},
}))
end):catch(function(err)
print("error", err)
end)
end
events.on("channelWrite", function(event) -- формирование отчета по записи в тег СформироватьОтчет
for _, w in ipairs(event.writes) do
if w.name == "СформироватьОтчет" then
build()
end
end
end)
setInterval(function() -- планирование построение отчета в 7 утра и 21 час вечера.
local parts = time.toTable(time.now())
if (parts.hour == 7 and parts.min == 0)
or (parts.hour == 21 and parts.min == 0) then
build()
end
end, 60 * 1000)
Меню
Менеджер служб
Программный компонент "Менеджер служб" осуществляет управление состоянием модулей Сервер, Сервис ресурсов и Агент развертывания. Менеджер можно использовать при сбоях, применяя перезапуск служб, а также выполнять плановое обслуживание, безопасно останавливая и запуская отдельные компоненты системы.

Сервер обеспечивает непрерывное выполнение загруженного проекта. Службу можно останавливать, например, для проведения работ по установке обновлений или резервному копированию. Перезагрузка позволяет применить изменения конфигурации проекта и устранить временные сбои без полной остановки системы.
Сервис ресурсов отвечает за работу с историческими архивами и базами данных. Этот модуль необходимо останавливать для проведения регламентных работ с файлами архивов или их переноса. Перезапуск позволяет применить изменения в настройках архивов или восстановить связь с системными ресурсами.
Агент развертывания выполняет роль диспетчера, распределяющего обновления конфигурации по узлам сети. Его остановка блокирует возможность внесения изменений в развернутый проект. Перезагрузка службы может потребоваться, если процесс развертывания завершился с ошибкой.
В окне менеджера для каждой службы также доступна служебная информация:
- Состояние — текущий статус службы (работает/остановлена/перезапускается).
- Нагрузка на CPU — процент использования вычислительных ресурсов службой.
- Нагрузка на память — объем оперативной памяти, используемый службой.
В процессе развертывания проекта на сервере в окне HMI-клиента может сформироваться сообщение об ошибке:

Данное сообщение может указывать на сбой в работе сервиса. Для устранения ошибки попробуйте перезапустить сервис с помощью "Менеджера служб" или остановите его до выяснения причин.
В случае отказа "Агента развертывания" при развертывании проекта может быть сгенерировано аварийное сообщение. В данном случае попробуйте перезапустить агент.

HMI-клиент
HMI-клиент
Главное окно
Запуск HMI-клиента "Симплайт 5" можно осуществить принудительно, используя ссылку в меню "Пуск", либо используя автоматизацию после развертывания проекта на сервере. В случае использования автоматизации, экран с выбором профилей игнорируется и подключение к серверу, с загрузкой основной мнемосхемы, производится автоматически на основе данных из профиля развертывания.
Сочетание клавиш
- F8 — переключает видимость строки меню с кнопкой "Меню".
- F11 — включает/выключает полноэкранный режим окна HMI-клиента.
Меню
Меню клиента включает в себя пункты:
- Настройки — настройка режима работы клиента:
- Полноэкранный режим — активация полноэкранного режима работы клиента. При включении интерфейс будет занимать весь экран, скрывая элементы операционной системы.
- Масштаб — коэффициент масштабирования интерфейса клиента. Позволяет увеличивать или уменьшать размер всех графических элементов мнемосхем и панелей управления для адаптации к различным разрешениям экрана.
- Лицензия сервера — детальная информация о типе предоставляемой лицензии.
Настройки
Настройки полноэкранного режима вступают в силу только после перезагрузки клиента.
Изменение масштаба применится сразу после активации кнопки "Сохранить".
Оформление профилей подключения реализовано в виде карточек. При использовании автоматизации профили создаются автоматически. Профиль можно отредактировать и добавить новый с помощью кнопки "Добавить подключение".
Для редактирования профиля нажмите кнопку "Редактировать" в карточке профиля. В диалоговом окне измените требуемый параметр и нажмите кнопку "Сохранить". Также доступно удаление профиля.
- Описание — произвольное название профиля подключения для идентификации.
- Адрес хоста — IP-адрес или доменное имя сервера Симплайт 5.
- Номер порта — сетевой порт для подключения к серверу.
- Автоподключение — флаг автоматического соединения с сервером при запуске клиента.
- Логин — имя пользователя для аутентификации на сервере.
- Пароль — пароль для аутентификации на сервере.
- Удалить — кнопка удаления профиля.
Боковое меню
Мнемосхемы и теги
Мнемосхемы
Пункт меню "Мнемосхемы" позволяет перейти к списку мнемосхем проекта, развернутого на сервере.
Теги
Пункт меню "Теги" позволяет открыть окно, в котором можно отслеживать показания всех активных тегов, добавленных в проект. В таблице предусмотрена возможность фильтрации данных в столбцах "Название" и "Драйвер-источник". Для этого нажмите на названии столбца.
В столбце "Значение" указано фактическое значение, которое получает тег в режиме реального времени.
Журнал событий
Инструменты > Журнал событий
В "Журнале событий" фиксируются все значимые изменения состояния оборудования, события, действия операторов и системные сообщения в хронологическом порядке. Данные хранят время события, его тип, описание и статус. Для удобства навигации по событиям рекомендуется использовать фильтры.
- Выбор даты — с помощью даты можно отфильтровать события за конкретную дату.
- Виды событий — фильтр для флагов событий.
- Таблица событий — события с указанием приоритета, времени срабатывания и нормализации:
- Приоритет — числовой код, определяющий уровень серьезности события (чем выше число, тем выше важность).
- Время начала — метка времени выхода параметра за допустимые границы.
- Время нормализации — метка времени возврата параметра в нормальное состояние.
- Текст сообщения — описательная часть события для отображения в журнале.
Информация
После выбора даты и флагов событий нажмите кнопку "Обновить", чтобы применить все фильтры и произвести поиск.
При наведении курсора на каждый столбец появляется кнопка ︙. При активации данной кнопки становятся доступными инструменты для работы со столбцами, такие как скрытие, отображение, закрепление слева, закрепление справа.

- Скрыть — скрывает столбец для которого было открыто меню.
- Показать — открывает новое диалоговое окно в котором можно отразить/скрыть столбцы.
- Закрепить слева — переносит текущий столбец таблицы событий в позицию первого столбца.
- Закрепить справа — Переносит текущий столбец таблицы событий в позицию правого столбца.
При активации функции "Показать столбцы" доступны кнопки "Поиск", "Скрыть все" и "Показать все".
Значок жёлтого треугольника ⚠️, расположенный рядом с событием, означает, что событие квитировано. Для активации окна с подробной информацией о событии дважды нажмите левой кнопкой мыши на соответствующем событии.

- Имя тега — поле с названием тега.
- Время начала — дата и время, когда событие стало активным.
- Время окончания — дата и время, когда событие перестало быть активным.
- Приоритет — уровень важности события.
- Квитировано — статус подтверждения события оператором (Да/Нет).
- Время квитирования — дата и время, когда событие было квитировано.
- Комментарий квитирования — текст примечания, оставленного оператором при квитировании.
- Квитировал пользователь — имя и фамилия пользователя, который квитировал событие.
- Началось при пользователях — имя и фамилия пользователя при котором событие стало активным.
Просмотр графиков
Обзор главного окна
Инструменты > Просмотр графиков
Пункт меню "Просмотр графиков" позволяет перейти к визуализации данных, получаемых от активных тегов сервера.

Режим работы с графиками состоит из следующих областей:
- Перечень тегов проекта — список доступных тегов, значения которых могут быть визуализированы в виде графика.
- Область пользовательских групп — зона для управления сохраненными наборами тегов:
- ➕ — сохраняет выбранный набор тегов в пользовательскую группу для быстрого доступа к графикам группы.
- 🗑️ — удаляет выбранную пользовательскую группу.
- Тип масштабирования — режим управления масштабом графической области:
- Над шкалой — масштабирование осуществляется перетаскиванием области непосредственно над осью шкалы.
- Пропорциональное — масштабирование с сохранением пропорций осей X и Y.
- Таскание — режим панорамирования (перетаскивания) графика курсором.
- Временной диапазон — настройка отображаемого интервала времени на оси X графика.
- Режим отображения — переключение между графическим представлением и табличным видом данных. В режиме табличного вывода доступен экспорт данных в формат excel и csv.
- Кнопка "Отобразить" — кнопка запуска построения графиков для выбранных тегов в заданном временном диапазоне.
- Панель с кнопками "Перемотки" — кнопки управления для навигации по временной шкале графиков:
- ↗︎ — включение/отключение инструмента вертикального сканирования графика.
- ⏮︎ — смещение отображаемого временного интервала на 24 часа назад.
- ◀︎ — смещение отображаемого временного интервала на 1 час назад.
- ▶︎ — смещение отображаемого временного интервала на 1 час вперёд.
- ⏭︎ — смещение отображаемого временного интервала на 24 часа вперёд.
Начало работы с графиками
Для отображения графика следует выполнить действия:
- Указать начальную точку графика: дату, время и продолжительность, либо открыть календарь и выбрать временной интервал.
- В дереве тегов выбрать группу, в которой находится требуемый параметр для отображения графика.
- Поставить флаг рядом с требуемыми тегами из списка и нажать кнопку "Отобразить" для визуализации данных.
В результате система произведёт построение графиков. Для удобства работы с графиками в левой части области построения имеется возможность выбрать один из трех режимов масштабирования, доступных в списке "Масштабирование". Также в данной области можно включать или отключать отображение графиков с помощью левой кнопки мыши.

Режимы масштабирования
Для быстрого масштабирования выберите один из трех представленных режимов:

- Над шкалой — масштабирование графика с индивидуальной настройкой по каждой оси (X или Y):
- нажмите левую кнопку мыши на поле построения графика для включения режима масштабирования (при этом поле очерчивается красной рамкой);
- наведите указатель мыши на нужную ось (X или Y) и при помощи колеса мыши произведите масштабирование;
- перемещение области осуществляется с помощью зажатой левой кнопки мыши в любом месте области построения графиков.
- Пропорциональное — масштабирование с сохранением пропорций графика по обеим осям (X и Y):
- нажмите левую кнопку мыши на поле построения графика для включения режима масштабирования (при этом поле очерчивается красной рамкой);
- вращайте колесо мыши в любом месте области построения графиков для масштабирования по обеим осям;
- перемещение области осуществляется с помощью зажатой левой кнопки мыши в любом месте области построения графиков.
- Таскание — масштабирование с помощью выделения интервала на шкале дат (ось X) зажатой левой кнопкой мыши. Перемещение области в этом режиме недоступно.

Для каждого графика можно создать отдельную шкалу Y а также задать ширину и цвет пера. Для этого нажмите на цветную точку рядом с выбранным тегом, задайте требуемые параметры, нажмите кнопку "Ок" для подверждения, и кнопку "Отобразить".

Для перемещения графика по вертикали зажмите левую кнопку мыши на оси Y и перемещайте курсор вверх или вниз.

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

- Кнопки управления сервером:
- Включить сервер — запуск сервера, если остановлен.
- Перезапустить сервер — рестарт служб сервера.
- Перевыпустить сертификат — обновление TLS-сертификата:
- Да — перевыпуск TLS-сертификата.
- Отмена — отмена перевыпуска TLS-сертификата.
- Дополнительные IP-адреса — дополнительные IP-адреса, включаемые в сертификат при перевыпуске. Настройка необходима для того, чтобы клиенты смогли безопасно подключаться к серверу по любому из указанных адресов.
- Панель инструментов для просмотра и управление журналом отладки:
- Включить/выключить журнал — активация/деактивация записи данных в журнал.
- Источник — фильтр событий для включения/исключения из журнала источников данных.
- Очистить — удаление событий из отладочного журнала.
- Скачать полный журнал — экспорт подробного журнала событий.
- Область служебных сообщений сервера.
- Сведения о состоянии служб:
- Подключенные клиенты — список активных пользователей с отображением имен и сетевых IP-адресов.
- Состояние сервера — текущий статус сервера, время работы, количество активных тегов.
- Лицензия — информация о лицензировании системы.
Базы данных
Обзор
Введение
СУБД (система управления базами данных) представляет собой комплекс программ, предназначенных для создания и управления базой данных. С помощью СУБД можно выполнять различные операции с данными, такие как добавление, изменение, удаление и выборка.
Производительность СУБД зависит от нескольких факторов: аппаратных характеристик сервера, конфигурации СУБД, оптимизации структуры таблиц и индексов, а также объема и интенсивности операций записи и чтения архивных данных.
В Симплайт 5 протестирована работа со следующими СУБД:
- SQLite — компактная встраиваемая база данных.
- PostgreSQL — свободно распространяемая объектно-реляционная СУБД.
- TimescaleDB — СУБД для работы с временными рядами, реализованная как расширение к PostgreSQL.
- Tantor SE — российский форк PostgreSQL. Для систем подпадающих под требования регуляторов по использованию отечественного ПО.
- Авадс СА — компактная и высокоскоростная база данных временных рядов (TSDB) для архивирования в системах реального времени.
Рекомендации по выбору
По результатам внутренних тестов компании, производительность SQLite и PostgreSQL на малых и средних нагрузках может быть сопоставима. Однако для SQLite есть ограничение. Оно заключается в том, что база является встраиваемой и представляет собой единый файл, привязанный к файловой системе конкретного ПК. Это исключает возможность ее прямого переноса на другой сервер в работающем виде для распределенных или отказоустойчивых конфигураций. Поэтому SQLite рационально использовать только для небольших локальных проектов.
Для средних и крупных проектов рекомендуется выбирать между PostgreSQL (или его отечественным аналогом Tantor SE) и Авадс СА. Следует отметить, что классические реляционные СУБД, такие как PostgreSQL, Tantor SE могут демонстрировать деградацию производительности операций вставки и выборки данных по мере роста объема базы данных.
С этой точки зрения СУБД Авадс СА и TimescaleDB, изначально оптимизированные для работы с временными рядами, обладают преимуществом — их архитектура минимизирует деградацию производительности при росте объема данных и обеспечивает стабильно высокую скорость как записи текущих данных, так и выполнения запросов к историческому архиву. К недостаткам АвадсСА можно отнести только то, что данный продукт является коммерческим.
SQLite
База данных SQLite
Введение
SQLite — компактная реляционная база данных. Движок представляет собой библиотеку, которая интегрируется в ПО, а в качестве протокола обмена данными используются вызовы функций (API). Данный подход позволяет ускорить отклик и упростить программу. SQLite хранит всю базу данных (включая определения, таблицы, индексы и данные) в одном стандартном файле в каталоге проекта.
Информация
Реляционная СУБД — это программная система для создания и управления базами данных, которая организует информацию в виде набора взаимосвязанных таблиц, состоящих из строк и столбцов, и обеспечивает доступ к данным с помощью языка структурированных запросов (SQL).
Примечание
Для использования базы данных SQLite не требуется устанавливать дополнительное программное обеспечение. В "Симплайт 5" данная база подключается автоматически при создании нового проекта.
Структура данных
Файлы базы данных находятся в каталоге C:/SimpLight projects/---имя проекта---/data/. Ниже представлена структура файлов с комментариями:
data/
├─ storage.db ← служебный файл базы данных
└─ tags/ ← основное хранилище базы данных
└─ 2026/ ← год
└─ 1/ ← месяц
├─ 1.db ← файл с данными за 1.01.2026
├─ 2.db ← файл с данными за 2.01.2026
├─ 3.db ← файл с данными за 3.01.2026
├─ 3.db-shm ← служебный файл активно используемой базы (Shared Memory)
└─ 3.db-wal ← служебный файл активно используемой базы (Write-Ahead Log)
Служебные утилиты SQLite
Для выполнения внешних операций с файлами базы данных SQLite загрузите архив sqlite-tools-win-x64.zip с официального сайта.

После распаковки архива потребуется только утилита sqlite3.exe.

Каталог с этой утилитой необходимо добавить в список зарегистрированных в системной переменной Path ОС Windows.
Для этого необходимо:
- Нажать сочетание клавиш Win+R для вызова окна "Выполнить" в ОС Windows.
- Ввести команду
sysdm.cplдля вызова диалогового окна "Свойства системы". - В диалоговом окне "Система" на вкладке "Дополнительно" нажать кнопку "Переменные среды".
- Добавить в переменную
Pathпуть к каталогу с утилитами sqlite.

Для работы с файлами баз данных SQLite можно также использовать графический клиент. В рамках данного раздела работа с ним не рассматривается.
Работа с файлами базы данных
Пример работы
Пример:
В проекте counter организовано архивирование значений одного тега. С помощью консольной утилиты sqlite3.exe необходимо отразить архивные данные тега за 21.01.2026.
Для начала работы с утилитой перейдите в каталог C:\SimpLight projects\counter\data\tags\2026\1, в котором содержатся архивные данные проекта за январь 2026 года. В проводнике Windows укажите команду cmd, чтобы открыть окно командной строки для данного каталога.

В приглашении будет указан путь к каталогу с данными.

Для отображения данных за 21 января выполните команду sqlite3 21.db. Далее последовательно укажите еще 2 команды:
.tables — вывести список всех таблиц в текущей базе данных (в данном случае таблица только одна — moments);
.schema — показать схему базы данных (или отдельной таблицы, если указан необязательный аргумент с именем таблицы).
Примечание
При работе с утилитой существует вероятность случайно перейти в многострочный режим ввода команд (...>). Для выхода из этого режима введите символ ; и нажмите Enter. Для завершения работы с утилитой используйте команды .exit или .quit, а также комбинацию клавиш Ctrl+C.

В данной базе данных присутствует только таблица moments. Ниже представлено описание некоторых параметров этой таблицы:
moment_id— уникальный идентификатор записи;channel_id— уникальный идентификатор канала;add_time— временная метка;quality— признак качества;f64— архивируемое значение тега.
Следующие команды отвечают за вывод данных по шаблону в табличном режиме:
.mode box — включает формат табличного вывода;
select * from moments limit 10; — SQL запрос SELECT: отобразит первые 10 строк таблицы moments.

Например, если требуется вывести все значения поля f64 больше 90 по определенному шаблону, то используйте SQL-запрос SELECT.
select f64, datetime(add_time/1000,'unixepoch','localtime') from moments where f64 > 90;

Экспорт данных в CSV-файл
.header on — включить отображение заголовков столбцов;
.mode csv — установить режим работы с CSV-файлом;
.once с:/base/bd.csv — перенаправить вывод запроса в указанный файл. Файл и каталог должны существовать;
select datetime(add_time/1000,'unixepoch','localtime') as date, round(f64,2) as value from moments; — показать строки базы таблицы moments, отображая в таблице два отформатированных поля add_time и f64, имена которых заменяются соответственно на date и value;
.system "с:/base/bd.csv" — открыть файл в редакторе CSV-файлов по умолчанию.

Экспорт данных в Exсel-файл
.excel— открывает следующий SQL-запрос или команду непосредственно в Microsoft Excel;
select * from moments — SQL-запрос SELECT: показать все строки базы таблиц.

Восстановление
.recover --output recovered.db — восстанавливает максимально возможное количество данных из поврежденного или нечитаемого файла базы данных в новую базу recovered.db.
PostgreSQL
pgAdmin 4
pgAdmin 4 — это утилита для администрирования и настройки СУБД PostgreSQL.
Более подробная документацию по утилите находится на официальном портале PostgreSQL.

Структуру таблицы в текущей базе данных и её схему можно определить непосредственно в дереве объектов программы, не прибегая к использованию запросов. Для этого выберите пункт "Schemas", после чего раскройте список таблицы "moments".

Для получения данных выполните SQL-запрос. Для этого дважды нажмите левой кнопкой мыши на строке с названием базы данных на панели инструментов. Затем выберите "Query tool", напечатайте команду и нажмите "Execute script".
select * from moments limit 10; — SQL-запрос SELECT: отобразит первые 10 строк таблицы moments.

select f64 from moments where f64 > 90; — вывести только столбец со значениями поля f64 больше 90.

SQL-запрос для перенаправления вывода запроса в указанный файл.
Файл и каталог должны существовать.
COPY (SELECT * FROM moments)
TO 'C:/base/bd.csv'
WITH (FORMAT CSV, HEADER true, DELIMITER ';', ENCODING 'UTF8');

После этого откройте сформированный файл в редакторе Microsoft Excel.

База данных TimescaleDB
Введение
TimescaleDB — это специализированная СУБД для работы с временными рядами, реализованная как расширение к PostgreSQL. Она сочетает реляционную модель и SQL с оптимизациями для потоковых и исторических данных, привязанных ко времени.
Установка TimescaleDB
Примечание
Для работы с TimescaleDB необходимо предварительно установить СУБД PostgreSQL.
Перед началом установки необходимо проверить, что путь к файлам базы данных PostgreSQL указан в системной переменной PATH.
Для этого потребуется:
- Нажать сочетание клавиш Win+R для вызова окна "Выполнить" в ОС Windows.
- Ввести команду
sysdm.cplдля вызова диалогового окна "Свойства системы". - В диалоговом окне "Система" на вкладке "Дополнительно" нажать кнопку "Переменные среды".
- Добавить в системную переменную
Pathпуть к каталогу PostgreSQL в форматеC:\Program Files\PostgreSQL\<номер версии>\bin

Далее загрузите архив с установочным файлом TimescaleDB, соответствующий номеру установленной версии PostgreSQL, и распакуйте его.

Перед началом установки требуется остановить работу базы Postgre. Это можно сделать с помощью команды:

Для установки СУБД запустите файл setup.exe от имени администратора внутри распакованного архива.

В процессе установки система предложит указать путь к файлу конфигурации PostgreSQL. Путь следует ввести самостоятельно:

Необходимо принять все предложения установщика, нажав клавиши Y и Enter, и дождаться сообщения об успешной установке.

После завершения работы установщика восстановите работоспособность процесса PostgreSQL с помощью команды:

Tantor SE
Раздел в разработке
Авадс СА
Раздел в разработке
Справочник API
REST
Обзор
API (Application Programming Interface) — язык для взаимодействия приложений между собой. Описание правил такого языка называется спецификацией, а данные, которыми обмениваются приложения — сообщениями. Сообщения обычно идут парами запрос-ответ(request-response).
REST API
REST API (Representational State Transfer — передача репрезентативного состояния) также использует запросы и ответы, что мало чем отличается от посещения веб-страницы. Необходимо соответствующим образом выполнить запрос к ресурсу на сервере, и сервер ответит запрошенной информацией. Для доступа клиентских приложений к данным в REST API используются такие методы как POST, GET, PUT, PATCH и DELETE. Обмен данными осуществляется обычно по протоколу HTTP(S).
Из-за того, что приходится каждый раз заново передавать все данные для обработки запроса, объем сообщений увеличивается. Чтобы сохранить высокую скорость обмена, данные передаются в максимально сжатом формате. Чаще всего REST API использует формат JSON.
В "Симплайт 5" REST API может использоваться для интеграции с корпоративным уровнем (MES, ERP), внешними IoT-платформами, а также для разработки пользовательских приложений. С помощью HTTP-запросов можно считывать значения тегов проекта на сервере, исторические данные (моменты) и статусы оборудования, а также отправлять управляющие команды.

Методы
Как правило, для взаимодействия между клиентом и сервером достаточно пяти методов:
GET— получение информации об объекте (ресурсе).POST— создание нового объекта (ресурса).PUT— полная замена объекта (ресурса) на обновленную версию.PATCH— частичное изменение объекта (ресурса).DELETE— удаление информации об объекте (ресурсе).
Пример запроса
Ниже показан пример HTTP-запроса информации о статусе сервера "Симплайт 5" для REST-клиента. Предполагается, что проект развернут на машине с установленной средой разработки и используется порт по умолчанию (8080).
Аналогичный запрос можно выполнить в строке интернет-браузера:
Примечание
Использовать интернет-браузер можно только для простых запросов — в данном случае, чтобы быстро протестировать работу с API. Для выполнения сложных запросов, требующих авторизации, рекомендуется использовать внешний REST-клиент.
Ответ на запрос будет следующим:
Структура ответа
После выполнения запроса сервер возвращает клиентскому приложению ответ. Он включает код ответа, заголовки и тело ответа.
Заголовки в ответе определяют формат передаваемых данных, спецификацию и версию протокола обмена, и другие сведения. Тело ответа — это информация, которую запрашивал клиент. Ответ тоже чаще всего передается в формате JSON. Но тело ответа может быть и пустым.
Код ответа — это признак успешности выполнения запроса. Для унификации используются стандартные коды ответа. Они представляют собой трехзначные числа.
- Коды 1хх — информационные.
-
Коды 2хх говорят об успешном выполнении запроса:
- 200 OK – если клиентом были запрошены какие-либо данные, то они находятся в заголовке или теле сообщения.
- 201 OK – создан новый ресурс.
-
Коды 3xx обозначают перенаправление или необходимость уточнения:
- 300 — на отправленный запрос есть несколько вариантов ответа. Чтобы получить нужный вариант, клиент должен уточнить запрос.
- 301 — запрашиваемый адрес перемещен.
- 307 — запрашиваемый адрес временно перемещен.
-
Коды 4хх говорят о том, что при выполнении запроса возникла ошибка, и это ошибка на стороне клиента.
- 400 – Bad Request. Запрос некорректный.
- 401 – Unauthorized. Запрос требует аутентификации пользователя.
- 403 – Forbidden. Доступ к сервису запрещен.
- 404 – Not found. Ресурс не найден.
-
Коды 5хх говорят об ошибке на стороне сервера.
- 503 — сервис недоступен.
- 504 — таймаут (превышено допустимое время обработки запроса).
В ответе на запрос из предыдущего раздела при использовании REST-клиента помимо запрашиваемой информации будет содержаться служебная информация и код.
| GET /api/server/info | |
|---|---|
Расшифровка служебной информации ответа:
- Используется протокол HTTP/1.1. Запрос обработан успешно. В теле ответа содержится запрашиваемая информация.
- Разрешает кросс-доменные запросы с любого источника.
- Тело ответа представляет из себя JSON-документ.
- Момент генерации ответа сервером.
- Тело ответа (JSON-строка) занимает 35 байт.
- Сервер сообщает, что после отправки этого ответа TCP-соединение будет закрыто.
- Пустая строка.
- Ответ на запрос.
Расшифровка тела ответа:
"authRequired": false— требуется ли аутентификация на сервере. В данном случае ответ отрицательный."status": "ok"— статус работы сервера.
Авторизация
Для некоторых запросов к серверу требуется обязательная аутентификация. Механизм аутентификации основан на JWT‑токенах и выполняется в следующем порядке:
1. Получение токена
Если в проекте активирован модуль учетных записей пользователей, клиент должен инициировать сессию, отправив учетные данные (логин и пароль своей учетной записи) на конечную точку аутентификации с помощью запроса POST /api/login. В теле запроса передаются поля username и password.
После успешной проверки учетных данных система возвращает объект, содержащий поле token — строковый JWT с ограниченным временем жизни expire. Данный токен необходимо обновлять с помощью запроса GET /auth/token.
2. Использование токена в запросах
После получения токена клиент включает его в каждый последующий запрос к защищенным ресурсам в заголовке Authorization:
Конечные точки
Примечание
В данном разделе для описания примеров с HTTPS-запросами к конечным точкам API используется расширение REST Client для VSCode.
Сервер
Аутентификация
POST /api/login
Данный запрос требуется для получения токена.
Тело запроса:
| Параметр | Тип данных | Описание |
|---|---|---|
username |
string |
Имя пользователя учетной записи |
password |
string |
Пароль учетной записи |
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
code |
number |
Код ответа |
expire |
string |
Время действия токена в формате RFC3339 |
token |
string |
Токен доступа к системе |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Set-Cookie:token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Path=/; Max-Age=3600; Secure; SameSite=None
Date: Tue, 14 Jul 2026 11:12:18 GMT
Content-Length: 349
Connection: close
{
"code": 200,
"expire": "2026-07-14T15:12:18+03:00",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Обновление токена
GET /auth/token
Данный запрос необходимо выполнять периодически для обновления выданного токена.
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
code |
number |
Код ответа |
expire |
string |
Время действия токена в формате RFC3339 |
token |
string |
Токен доступа к системе |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Set-Cookie: token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Path=/; Max-Age=3600; Secure; SameSite=None
Date: Wed, 15 Jul 2026 17:17:58 GMT
Content-Length: 349
Connection: close
{
"code": 200,
"expire": "2026-07-15T21:17:58+03:00",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Служебная информация
GET /api/server/info
Получение данных о необходимости аутентификации на сервере и статусе его работы.
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
authRequired |
boolean |
Статус аутентификации (TRUE — требуется, FALSE — не требуется) |
status |
string |
Статус сервера |
Паспорта
Паспорта представляют собой структуру, содержащую свойства тега, которые были актуальны на момент запуска сервера.
Получение всех паспортов
GET /api/v2/passports
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
passport |
array |
Массив структур паспортов |
Структура passport:
| Параметр | Тип данных | Описание |
|---|---|---|
eventCatID |
int64 |
Уникальный идентификатор категории событий тега |
name |
string |
Имя тега |
ID |
string |
Уникальный идентификатор тега |
readable |
boolean |
Флаг возможности чтения тега |
saveDB |
boolean |
Флаг активности сохранения в базу данных |
saveStrategy |
enum SaveStrategy |
Стратегия сохранения значения в базе данных |
sourceType |
string |
Тип источника значения тега |
type |
enum ValueType |
Тип значения тега |
variableFormat |
int32 |
Количествово знаков после запятой |
visible |
boolean |
Флаг видимости тега в таблице тегов в меню клиента |
writable |
boolean |
Флаг доступа тега на запись |
scale |
Scale |
Шкала тега |
customMessages |
CustomMessages |
Шаблоны сообщений для различных видов событий |
Структура scale:
| Параметр | Тип данных | Описание |
|---|---|---|
alarmDelay |
int32 |
Задержка сигнала тревоги (в тактах опроса значение -1 означает отсутствие тревоги) |
highScale |
double |
Максимальное значение диапазона шкалы тега |
lowScale |
double |
Минимальное значение диапазона шкалы тега |
hiHiAlarm |
double |
Верхнее уставка аварийного события |
hiHiAlarmEnabled |
boolean |
Флаг активации аварийной сигнализации верхней уставки |
hiAlarm |
double |
Верхняя уставка предупредительного события |
hiAlarmEnabled |
boolean |
Флаг активации предупредительной сигнализации верхней уставки |
loAlarm |
double |
Нижнее уставка предупредительного события |
loAlarmEnabled |
boolean |
Флаг активации предупредительной сигнализации нижней уставки |
loLoAlarm |
double |
Нижнея уставка аварийного события |
loLoAlarmEnabled |
boolean |
Флаг активации аварийной сигнализации нижней уставки |
trackDiscreteOn |
boolean |
Контроль состояния "Вкл" |
trackDiscreteOff |
boolean |
Контроль состояния "Выкл" |
units |
string |
Единицы измерения |
Структура СustomMessages:
| Параметр | Тип данных | Описание |
|---|---|---|
enabled |
boolean |
Флаг активации механизма пользовательских сообщений для данного тега |
badQuality |
string |
Сообщение, выводимое при установлении статуса "Плохое качество" тега |
discreteOn |
string |
Сообщение, соответствующее состоянию "Вкл" |
discreteOff |
string |
Сообщение, соответствующее логическому состоянию "Выкл" |
hiHiAlarm |
string |
Сообщение о срабатывании аварийной верхней уставки |
hiAlarm |
string |
Сообщение о срабатывании предупредительной верхней уставки |
normal |
string |
Сообщение о возврате значения тега в нормальный диапазон |
loAlarm |
string |
Сообщение о срабатывании предупредительной нижней уставки |
loLoAlarm |
string |
Сообщение о срабатывании аварийной нижней уставки |
Перечисление ValueType:
| Значение | Описание |
|---|---|
int64 |
Знаковое целое число размером 64 бит |
uint64 |
Беззнаковое целое число размером 64 бит |
double |
Число с плавающей запятой двойной точности размером 64 бит |
datetime |
Момент времени, представленный в формате RFC3339 |
string |
Строка символов в кодировке UTF-8 |
boolean |
Логическое значение, принимающее одно из двух состояний: true или false |
float |
Число с плавающей запятой одинарной точности размером 32 бит |
int8 |
Знаковое целое число размером 8 бит |
int16 |
Знаковое целое число размером 16 бит |
int32 |
Знаковое целое число размером 32 бита |
uint8 |
Беззнаковое целое число размером 8 бит |
uint16 |
Беззнаковое целое число размером 16 бит |
uint32 |
Беззнаковое целое число размером 32 бит |
Перечисление SaveStrategy:
| Значение | Описание |
|---|---|
0 |
Запись по таймеру |
1 |
Запись по изменению |
2 |
Смешанная запись |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Wed, 15 Jul 2026 13:13:02 GMT
Content-Length: 1010
Connection: close
[
{
"eventCatID": 0,
"group": "",
"name": "Counter",
"persistByScript": false,
"readable": true,
"saveDB": true,
"saveStrategy": 1,
"sourceType": "virtual",
"type": "double",
"variableFormat": 2,
"visible": true,
"writable": true,
"ID": 1,
"scale": {
"alarmDelay": 0,
"highScale": 100,
"lowScale": 0,
"hiHiAlarm": 100,
"hiHiAlarmEnabled": true,
"hiAlarm": 80,
"hiAlarmEnabled": false,
"loAlarm": 20,
"loAlarmEnabled": false,
"loLoAlarm": 0,
"loLoAlarmEnabled": true,
"trackDiscreteOn": true,
"trackDiscreteOff": false,
"units": ""
},
"customMessages": {
"enabled": true,
"loLoAlarm": "Значение ниже нижней аварийной уставки",
"loAlarm": "Значение ниже нижней предупредительной уставки",
"normal": "Значение в нормальном диапазоне",
"hiAlarm": "Значение выше верхней предупредительной уставки",
"hiHiAlarm": "Значение выше верхней аварийной уставки",
"badQuality": "",
"discreteOn": "",
"discreteOff": ""
}
}
]
Получение паспортов по ID тегов
GET /api/v2/passports/{ids}
Запрос на получение паспортов по идентификатору тега ID. Идентификаторы тегов в запросе перечисляются через запятую.
При ответе содержит массив passport:
| Параметр | Тип данных | Описание |
|---|---|---|
results |
Passport[] |
Массив объектов типа Passport |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Wed, 15 Jul 2026 22:50:33 GMT
Content-Length: 1653
Connection: close
{
"results": [
{
"eventCatID": 0,
"group": "",
"name": "Counter",
"persistByScript": false,
"readable": true,
"saveDB": true,
"saveStrategy": 1,
"sourceType": "virtual",
"type": "double",
"variableFormat": 2,
"visible": true,
"writable": true,
"ID": 1,
"scale": {
"alarmDelay": 0,
"highScale": 100,
"lowScale": 0,
"hiHiAlarm": 100,
"hiHiAlarmEnabled": true,
"hiAlarm": 80,
"hiAlarmEnabled": false,
"loAlarm": 20,
"loAlarmEnabled": false,
"loLoAlarm": 0,
"loLoAlarmEnabled": true,
"trackDiscreteOn": true,
"trackDiscreteOff": false,
"units": ""
},
"customMessages": {
"enabled": true,
"loLoAlarm": "Значение ниже нижней аварийной уставки",
"loAlarm": "Значение ниже нижней предупредительной уставки",
"normal": "Значение в нормальном диапазоне",
"hiAlarm": "Значение выше верхней предупредительной уставки",
"hiHiAlarm": "Значение выше верхней аварийной уставки",
"badQuality": "",
"discreteOn": "",
"discreteOff": ""
}
},
{
"eventCatID": 0,
"group": "",
"name": "Counter_10",
"persistByScript": false,
"readable": true,
"saveDB": true,
"saveStrategy": 1,
"sourceType": "virtual",
"type": "double",
"variableFormat": 2,
"visible": true,
"writable": true,
"ID": 13,
"scale": {
"alarmDelay": 0,
"highScale": 100,
"lowScale": 0,
"hiHiAlarm": 100,
"hiHiAlarmEnabled": true,
"hiAlarm": 80,
"hiAlarmEnabled": false,
"loAlarm": 20,
"loAlarmEnabled": false,
"loLoAlarm": 0,
"loLoAlarmEnabled": true,
"trackDiscreteOn": true,
"trackDiscreteOff": false,
"units": ""
},
"customMessages": {
"enabled": false,
"loLoAlarm": "",
"loAlarm": "",
"normal": "",
"hiAlarm": "",
"hiHiAlarm": "",
"badQuality": "",
"discreteOn": "",
"discreteOff": ""
}
}
]
}
Теги
Получение тегов по ID
GET /api/channels/{ids}
Запрос на получение данных тегов по их идентификаторам. Идентификаторы тегов в запросе перечисляются через запятую.
Тело запроса:
| Параметр | Тип данных | Описание |
|---|---|---|
nullIfNotFound |
boolean |
TRUE — если тег не найден, заменить его значение на null. FALSE возвращает ошибку 404 |
reduceProps |
boolean |
Сокращение названия свойств для уменьшения нагрузки на сеть |
props |
string |
Свойства, которые нужно вернуть в ответе. Доступны: channelID, quality, value, valueType, viewValue, viewValueTag |
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
results |
TagProps[] |
Массив структур свойств тегов |
Структура TagProps:
| Название | Сокращение | Тип данных | Описание |
|---|---|---|---|
channelID |
id |
int64 |
Уникальный идентификатор тега |
quality |
q |
uint64 |
Качество тега |
value |
v |
any |
Значение тега |
valueType |
vt |
enum ValueType |
Тип значения тега |
viewValue |
vv |
string |
Форматированное значение тега |
viewValueTag |
vvt |
string |
Форматированное значение тега c единицами измерения |
Пример запроса значений тегов с ID 1, 13, 14.
@host = https://127.0.0.1:8080
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
@null = TRUE
@reduceProps = TRUE
@props = value
###
GET {{host}}/api/channels/1,13,14?nullIfNotFound={{null}}&reduceProps={{reduceProps}}&props={{props}}
Authorization: Bearer {{access_token}}
Изменение значения тега
PATCH /api/channels/{id}
Запрос на изменение значение тега.
Внимание
Данный запрос поддерживается только лицензией Base, Standard и Enterprise проекта. В случае использования лицензии Free запрос может быть выполнен только с инженерной станции, на которой развернут проект.
Параметры в теле запроса указываются в виде JSON-объекта. При положительном ответе сервер возвращает код 204 (No content).
| Параметр | Тип данных | Описание |
|---|---|---|
value |
any |
Новое значение тега |
Получение ID актуальных событий
GET /api/channels/actualEventIds
Для получения событий проекта сначала требуется получить их идентификаторы, а затем выполнить обмен на сами события, используя запрос к серверу ресурсов
GET /api/v1/events/resolveIds?ids={ids}
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
EventID |
array |
Массив идентификаторов событий в системе |
Bus77
Подключенные устройства
POST /api/bus77/browse
Запрос на получение дерева подключенных устройств и тегов по протоколу Bus77.
Тело запроса:
| Параметр | Тип данных | Описание |
|---|---|---|
address |
string |
Адрес нахождения IP-Hub в сети |
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
Bus77Node |
array |
Массив структур данных узла |
Структура Bus77Node:
| Параметр | Тип данных | Описание |
|---|---|---|
type |
enum Bus77NodeType |
Тип узла |
name |
string |
Имя узла |
tagID |
string |
UUID тега |
tagGlobalVariableID |
uint16 |
Уникальный ID глобальной переменной |
tagValueType |
enum Bus77ValueType |
Тип данных Bus77 |
Перечисление Bus77NodeType:
| Значение | Описание |
|---|---|
driver |
Драйвер |
group |
Группа |
tcpEndpoint |
TCP-узел |
tag |
Тег Bus77 |
Перечисление Bus77ValueType:
| Значение | Описание |
|---|---|
none |
Отсутствие типа |
bool |
Логическое значение |
s8 |
Знаковое целое число размером 8 бит |
u8 |
Беззнаковое целое число размером 8 бит |
s16 |
Знаковое целое число размером 16 бит |
u16 |
Беззнаковое целое число размером 16 бит |
s32 |
Знаковое целое число размером 32 бит |
u32 |
Беззнаковое целое число размером 32 бит |
f32 |
Число с плавающей запятой размером 32 бит |
s64 |
Знаковое целое число размером 64 бит |
u64 |
Беззнаковое целое число размером 64 бит |
string8 |
Строка |
time |
Дата и время |
arrayU8 |
Массив байт |
Проект
Название проекта
GET /api/project
Запрос на получение названия проекта, развернутого на сервере.
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
name |
string |
Наименование проекта |
Дерево проекта
POST /api/project-tree
Запрос на получение дерева подключенных устройств и тегов проекта.
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
ProjectNode |
array |
Массив структур дерева проекта |
Структура ProjectNode:
| Параметр | Тип данных | Описание |
|---|---|---|
type |
enum ProjectNodeType |
Тип узла |
passportID |
int64 |
ID тега |
name |
string |
Название узла (для тегов пропускается) |
children |
ProjectNode[] |
Дочерние узлы дерева проекта |
Перечисление ProjectNodeType:
| Значение | Описание |
|---|---|
tag |
Тег проекта |
group |
Группа проекта |
Сервис ресурсов
Внимание
При запросах к сервису ресурсов в поле хост должен быть указан порт сервиса (по умолчанию — 23501).
Моменты
GET /api/v1/channels/{id}/moments
Запрос на получение моментов проекта. Момент – это запись тега в архиве, состоящая из метки времени, значения и качества тега на момент метки времени.
Тело запроса:
| Параметр | Тип данных | Описание |
|---|---|---|
start_time |
string |
Начальное время выборки в ISO8601 |
end_time |
string |
Конечное время выборки в ISO8601 |
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
Moment |
array |
Массив структур моментов |
Структура Moment:
| Параметр | Тип данных | Описание |
|---|---|---|
q |
number |
Значение качества тега |
t |
string |
Время момента в ISO8601. Время указывается без смещения по Гринвичу |
v |
any |
Значение тега в моменте |
@host = https://127.0.0.1:23501
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
@start_time = 2026-07-17T09:34:00.000%2B03:00
@end_time = 2026-07-17T09:34:05.000%2B03:00
###
GET {{host}}/api/v1/channels/1/moments?start_time={{start_time}}&end_time={{end_time}}
Authorization: Bearer {{access_token}}
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 17 Jul 2026 09:37:53 GMT
Content-Length: 271
Connection: close
[
{
"q": 192,
"t": "2026-07-17T09:34:00.018+03:00",
"v": 523
},
{
"q": 192,
"t": "2026-07-17T09:34:01.018+03:00",
"v": 524
},
{
"q": 192,
"t": "2026-07-17T09:34:02.018+03:00",
"v": 525
},
{
"q": 192,
"t": "2026-07-17T09:34:03.018+03:00",
"v": 526
},
{
"q": 192,
"t": "2026-07-17T09:34:04.018+03:00",
"v": 527
}
]
Числовые моменты
GET /api/v1/channels/{id}/numeric-moments
Запрос на выполнение числовых моментов. Числовые моменты отличаются от обычных тем, что сервис ресурсов возвращает их именно для числовых тегов. Они предназначены для вывода на график. Сервис ресурсов дополняет моменты там, где это необходимо для графика.
Справка
Значения числовых моментов для тегов со сценарием записи в СУБД "по изменению" возвращаются с начала суток по всемирному координированному времени (UTC) независимо от временного запроса, указанного в запросе.
Тело запроса:
| Параметр | Тип данных | Описание |
|---|---|---|
start_time |
string |
Начальное время выборки в ISO8601 |
end_time |
string |
Конечное время выборки в ISO8601 |
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
NumericMoment |
array |
Массив структур числовых моментов |
Структура NumericMoment:
| Параметр | Тип данных | Описание |
|---|---|---|
q |
number |
Значение качества тега |
t |
string |
Время момента в ISO8601. Время указывается по Гринвичу (часовой пояс не учитывается) |
v |
any |
Значение тега в моменте |
@host = https://127.0.0.1:23501
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
@start_time = 2026-07-22T18:27:00.000%2B03:00
@end_time = 2026-07-22T18:27:05.000%2B03:00
###
GET {{host}}/api/v1/channels/1/numeric-moments?start_time={{start_time}}&end_time={{end_time}}
Authorization: Bearer {{access_token}}
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Wed, 22 Jul 2026 15:28:26 GMT
Connection: close
Transfer-Encoding: chunked
[
{
"q": 0,
"t": "2026-07-22T18:26:09.048+03:00",
"v": 0
},
{
"q": 192,
"t": "2026-07-22T18:26:10.136+03:00",
"v": 1
},
{
"q": 192,
"t": "2026-07-22T18:26:11.136+03:00",
"v": 2
},
{
"q": 192,
"t": "2026-07-22T18:26:12.136+03:00",
"v": 3
},
{
"q": 192,
"t": "2026-07-22T18:26:13.145+03:00",
"v": 4
},
{
"q": 192,
"t": "2026-07-22T18:26:14.145+03:00",
"v": 5
},
]
События
GET /api/v1/events/resolveIds?ids={ids}
Запрос на получение событий системы по их идентификатору ID.
Тело ответа:
| Параметр | Тип данных | Описание |
|---|---|---|
Event |
array |
Массив структур событий |
Структура Event:
| Параметр | Тип данных | Описание |
|---|---|---|
type |
string |
Тип события |
channelID |
number |
Уникальный идентификатор тега |
acked |
boolean |
Флаг подтверждения события оператором (FALSE — не подтверждено) |
ackTime |
string |
Время подтверждения события. "0001-01-01T00:00:00Z" — это "нулевая" дата, что означает "не подтверждено" |
ackComment |
string |
Комментарий оператора при подтверждении |
priority |
number |
Приоритет события |
ID |
number |
Уникальный числовой идентификатор события в системе |
startTime |
string |
Время возникновения события по ISO 8601 |
text |
string |
Текстовое описание события |
textOwn |
boolean |
Флаг, что событие имеет уже сформированный текст |
endTime |
string |
Время окончания события по ISO 8601 |
value |
number |
Значение тега в момент активности события |
userID |
number |
Идентификатор пользователя, который выполнил действие, вызвавшее событие |
userName |
string |
Имя пользователя, связанного с событием. Пустая строка — пользователь не назначен или событие системное |
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 17 Jul 2026 07:15:19 GMT
Content-Length: 490
Connection: close
[
{
"type": "hiHiAlarm",
"channelID": 13,
"acked": false,
"ackTime": "0001-01-01T00:00:00Z",
"ackComment": "",
"priority": 2,
"ID": 78,
"startTime": "2026-07-17T08:30:19.197+03:00",
"text": "",
"textOwn": false,
"endTime": null,
"value": 100,
"userID": null,
"userName": ""
},
{
"type": "hiHiAlarm",
"channelID": 1,
"acked": false,
"ackTime": "0001-01-01T00:00:00Z",
"ackComment": "",
"priority": 2,
"ID": 79,
"startTime": "2026-07-17T08:31:49.217+03:00",
"text": "",
"textOwn": false,
"endTime": null,
"value": 100,
"userID": null,
"userName": ""
}
]
gRPC
Введение
Кросс-языковой публичный API в "Симплайт 5" — это универсальный интерфейс взаимодействия со SCADA-сервером системы, построенный на основе gRPC. Он позволяет выполнять программные запросы из внешних приложений независимо от используемого языка программирования, а также решать задачи разработки драйверов, интеграции с внешними системами, анализа данных и применения моделей машинного обучения.
API доступен из различных сред разработки и поддерживает языки программирования C++, Python, C#, Java, JavaScript, Go и др. благодаря генерации клиентского кода на основе файлов .proto — единого контракта между сервером и клиентом.
Примечание
В настоящее время API поддерживает только язык программирования Python.
gRPC (Remote Procedure Call, удаленный вызов процедур) — это фреймворк удаленного вызова процедур, обеспечивающий коммуникацию между компонентами распределенных систем. Он использует HTTP/2 и буферы протоколов (protobuf) для сериализации данных. Как и любая RPC-система, gRPC включает сервер, определяющий доступные методы и их ответы, и клиент, вызывающий эти методы.
gRPC-взаимодействие позволяет обращаться к ядру сервера с высокой скоростью и предсказуемой задержкой, сопоставимой с выполнением кода внутри самого сервера.
Python
Установка Python
Для загрузки установочного пакета Python перейдите на официальный портал и нажмите на гиперссылку после слов "Or get the standalone installer for.."

После загрузки запустите установочный файл, активируйте флаг напротив пункта "Add python.exe to PATH" и нажмите "Install Now".

Для завершения установки нажмите "Close".

Пример работы
Создание окружения
Для выполнения произвольных скриптов откройте PowerShell в ОС Windows с правами администратора и выполните команду:
Службы ОС предупредят об изменении политики выполнения. Для подтверждения изменений нажмите Y и Enter.

Внимание
После выполнения данной команды в терминале не должно быть ошибок.
Далее создайте каталог для скриптов на языке Python. В данном примере каталог располагается в корне диска C:.

Откройте редактор исходного кода (в данном примере используется VS Code) и добавьте созданный каталог со скриптами в рабочую область редактора.

В меню управления терминалом редактора выберите пункт "New Terminal".
Примечание
Нет строгой необходимости использовать оболочку PowerShell в среде VS Code. Все операции также можно выполнять через классическое окно оболочки в ОС Windows.

Затем убедитесь, что в качестве оболочки используется именно PowerShell.

Если все выполнено правильно, то в начале строки приглашения должен быть указан префикс "PS". В окне терминала перейдите в созданный каталог для скриптов "python_scripts".

Выполните 3 команды:
Внимание
При каждом обращении к API необходимо активировать окружение. При работе из окружения в начале пригласительной строки должен быть указан префикс (.venv).

Запуск скрипта
Пример:
С помощью скрипта на языке Python необходимо получить значение Тег_1 с сервера, инкрементировать его и записать результат в Тег_2.
Для этого создайте новый проект, выберите лицензию "Standard" или "Enterprise" и добавьте 2 виртуальных тега в список активных:
- Тег_1 с значением по умолчанию, например, 12.
- Тег_2 с настройками по умолчанию.
Активируйте фреймворк gRPC в среде разработки и скопируйте "Токен доступа" в буфер обмена.

В каталоге со скриптами создайте файл main.py и скопируйте код из листинга ниже. В коде укажите IP-адрес или hostname сервера "Симплайт 5", порт и токен, который был скопирован на предыдущем шаге.
- hostname:
127.0.0.1 - port:
23505 - token: скопированный токен из настроек gRPC
import asyncio
from sl5api import Client, Config
cfg = Config("<hostname>:<port>", "<token>")
async def main():
c = Client(cfg)
# здесь вызываются методы, доступные в объекте переменной c
tag_value = await c.read_value("Тег_1") # tag_value получает значение Тег_1
await c.write_value("Тег_2", tag_value + 1, 0xC0) # запись рассчитанного значения в Тег_2 c хорошим качеством 0xC0
if __name__ == "__main__":
asyncio.run(main())
После развертывания проекта, в тесте тегов у Тег_2 значение будет с плохим качеством. Чтобы тег получил значение, выполните скрипт.

Команда для запуска скрипта:
После запуска Тег_2 получит инкрементированное значение с хорошим качеством.

Методы клиента
Информация
В этом разделе описаны методы, которые соответствуют версии библиотеки sl5api ver 1.0.2.
- узнать текущую установленную версию:
pip show sl5api - обновить библиотеку до последней версии:
pip install --upgrade sl5api
read_value
Запрашивает текущее значение тега и его тип данных по имени.
Параметры:
| Имя | Тип | Описание |
|---|---|---|
tag_name |
str |
Имя тега в системе |
Возвращаемое значение Any:
| Тип | Описание |
|---|---|
bool |
Логическое значение |
int |
Целочисленное значение (32 или 64 бита) |
float |
Значение с плавающей точкой (double) |
str |
Строковое значение |
datetime |
Значение времени (преобразуется в локальный часовой пояс) |
Исключения:
| Тип | Условие возникновения |
|---|---|
grpc.aio.AioRpcError |
Сервер недоступен, неверные учетные данные, тег не найден, превышен таймаут |
Пример:
Получение текущего значения тега "Температура 1".
import asyncio
from sl5api import Client, Config
cfg = Config("127.0.0.1:23505", "sxe92rd9slu74ol...")
async def main():
c = Client(cfg)
value = await c.read_value("Температура 1")
print(f"Текущее значение: {value}")
print(f"Тип значения: {type(value).__name__}")
if __name__ == "__main__":
asyncio.run(main())
read_many
Запрашивает данные нескольких тегов по их именам. Возвращает текущие значения, качество, настройки шкал и статусы аварий для каждого.
Параметры:
| Имя | Тип | Описание |
|---|---|---|
tag_names |
Iterable[str] |
Имена тегов в системе |
Возвращаемое значение Iterable[Tag]:
| Имя | Тип | Описание |
|---|---|---|
tag_id |
int |
Уникальный идентификатор тега |
name |
str |
Имя тега |
value |
Any |
Текущее значение тега (тип зависит от тега) |
quality |
int |
Статус качества текущего значения |
high_scale |
float |
Верхняя граница шкалы |
low_scale |
float |
Нижняя граница шкалы |
lo_lo_alarm |
float |
Нижнее пороговое значение аварийного события |
lo_alarm |
float |
Нижнее пороговое значение предупредительного события |
hi_alarm |
float |
Верхнее пороговое значение предупредительного события |
hi_hi_alarm |
float |
Верхнее пороговое значение аварийного события |
alarm_status |
int |
Текущий статус аварии |
Исключения:
| Тип | Условие возникновения |
|---|---|
grpc.aio.AioRpcError |
Сервер недоступен, неверные учетные данные, превышен таймаут |
Пример:
Получение данных тегов с именем "Температура 1", "Давление 2", "Уровень 3".
import asyncio
from sl5api import Client, Config
cfg = Config("127.0.0.1:23505", "sxe92rd9slu74ol...")
async def main():
c = Client(cfg)
tags = await c.read_many(["Температура 1", "Давление 2", "Уровень 3"])
for tag in tags:
print(f"{tag.name}: {tag.value} (качество={tag.quality})")
print(f" Шкала: {tag.low_scale} - {tag.high_scale}")
print(f" Алармы: lo={tag.lo_alarm}, hi={tag.hi_alarm}")
if __name__ == "__main__":
asyncio.run(main())
write_value
Производит запись нового значения в тег. Для физических тегов выполняется запись через драйвер устройства. Для виртуальных — значение устанавливается непосредственно на стороне сервера.
Параметры:
| Имя | Тип | Описание |
|---|---|---|
tag_name |
str |
Имя тега в системе |
new_value |
Any |
Новое значение тега. Поддерживаются типы: bool, int, float, str, datetime |
new_quality |
int |
Значение качества. Используется только для виртуальных тегов. Для физических тегов игнорируется. |
Возвращаемое значение: None
Исключения:
| Тип | Условие возникновения |
|---|---|
grpc.aio.AioRpcError |
Сервер недоступен, неверные учетные данные, тег не найден, превышен таймаут |
ValueError |
Неподдерживаемый тип значения new_value |
Пример:
Запись значений в теги (физические/виртуальные) с разными типами данных. Название тегов: "Уставка температуры", "Состояние", "Время события", "Флаг готовности".
import asyncio
from datetime import datetime
from sl5api import Client, Config
cfg = Config("127.0.0.1:23505", "sxe92rd9slu74olj0il...")
async def main():
c = Client(cfg)
# Запись числа в виртуальный тег (качество учитывается)
await c.write_value("Уставка температуры", 75, 192)
# Запись строки в физический тег (качество игнорируется)
await c.write_value("Состояние", False, 0)
# Запись времени
await c.write_value("Время события", datetime.now(), 192)
# Запись логического значения
await c.write_value("Флаг готовности", True, 192)
if __name__ == "__main__":
asyncio.run(main())
мoments_get_range
Запрашивает сохраненные значения (моменты) указанного тега за заданный временной интервал. Данные возвращаются в хронологическом порядке.
Параметры:
| Имя | Тип | Описание |
|---|---|---|
options |
MomentGetOptions |
Объект с параметрами запроса |
Структура MomentsGetOptions:
| Имя | Тип | Описание |
|---|---|---|
tag_name |
str |
Идентификатор тега в системе |
start |
datetime |
Начало интервала (должно быть указано в UTC) |
end |
datetime |
Конец интервала (должно быть указано в UTC) |
Возвращаемое значение Iterable[Moment]:
| Имя | Тип | Описание |
|---|---|---|
value |
any |
значение (тип зависит от тега) |
quality |
int |
статус качества |
time_dt |
datetime |
Временная метка, преобразованная в локальное время текущего устройства |
Исключения:
| Тип | Условие возникновения |
|---|---|
grpc.aio.AioRpcError |
Сервер недоступен, неверные учетные данные, тег не найден, превышен таймаут |
Пример:
Получение моментов тега "Температура 1" за сутки.
import asyncio
from datetime import datetime, timedelta, timezone
from sl5api import Client, Config, MomentGetOptions
cfg = Config("127.0.0.1:23505", "sxe92rd9slu74ol...")
async def main():
c = Client(cfg)
options = MomentGetOptions(
tag_name="Температура 1",
start=datetime.now(timezone.utc) - timedelta(minutes=30),
end=datetime.now(timezone.utc)
)
moments = await c.moments_get_range(options)
print("Moments:")
for moment in moments:
print(f"{moment.time_dt}: {moment.value} (quality={moment.quality})")
if __name__ == "__main__":
asyncio.run(main())
Резервирование
Обзор
Распределенная архитектура
При использовании распределенной архитектуры наиболее ресурсоемкие компоненты — SCADA-сервер и сервер архивирования, выносятся на отдельные физические компьютеры. Операторские станции также выделяются на отдельные хосты в диспетчерских с обеспечением доступа ко всем узлам по локальной сети. SCADA-серверы могут объединять в кластеры. Такой подход позволяет распределить нагрузку:
- SCADA-сервер проводит непрерывный опрос оборудования и обработку данных в реальном времени;
- сервер архивирования отвечает за хранение исторических данных.
Кластер
Кластер — это группа SCADA-серверов (основной и один или несколько резервных), объединенных каналами связи для обеспечения отказоустойчивости. В таком варианте использования серверы резервируют функции друг друга.
---
title:
---
flowchart LR
subgraph CLUSTER[<B>SCADA-кластер</B>]
direction TD
S1(Основной сервер)
S2(Резервный сервер)
S1 <---> S2
style S1 fill:#e5f9ed,stroke-width:1px
style S2 fill:#e5f9ed,stroke-width:1px,color:#fff
style CLUSTER fill:#ffffff,stroke-dasharray: 10 10
end
AR[(Сервер БД)]
CL(Операторская станция)
S1 ---> AR
S2 ---> AR
CL <---> S1
CL <-.-> S2
Резервирование
Основные конфигурации
В "Симплайт 5" поддерживаются следующие конфигурации резервирования серверов:
1+1(Основной + Резервный);1+N(Основной + N резервных).
Принцип работы
Штатная работа — основной сервер кластера ведет опрос данных и запись истории в базу данных. Драйвер опроса резервного сервера выключен. При включенном флаге синхронизации между узлами, основной сервер синхронизирует значение тега с резервным сервером.
Переключение — при выходе из строя основного сервера (сбой питания, критическая ошибка ОС) резервный сервер фиксирует это, активирует опрос драйвера и перехватывает управление каналами связи с ПЛК. Перезапуск мнемосхем происходит автоматически.
Восстановление — когда резервный сервер вновь установит связь с основным, происходит обратное переключение, и резервный сервер снова перейдет в режим ожидания.
Особенности синхронизации баз данных
Архитектура предполагает два подхода к хранению исторических данных, от которых зависит логика синхронизации:
Общая база данных — оба сервера в кластере работают с одним массивом исторических данных. В этом случае синхронизация данных при переключении не требуется, поскольку база данных одна.
Индивидуальная база данных — каждый сервер кластера имеет собственную базу данных. После восстановления работы основного сервера резервный сервер, который был активен во время сбоя, производит автоматическую синхронизацию истории событий и архивов тегов с базой данных основного сервера, тем самым заполняя пробел в регистрации данных за период бездействия основного сервера.
Настройка проекта
В качестве примера настройки работы серверов в кластере рассмотрим три возможных варианта конфигурации:
1+1(основной + резервный) с общей базой данных для обоих.1+1(основной + резервный) с индивидуальной базой данных для каждого сервера в кластере.1+N(основной + N резервных).
Общая база данных
Пример конфигурации с общей базой данных:
flowchart LR
subgraph CLUSTER[<B>SCADA-кластер</B>]
direction TD
S1(Основной сервер <br>IP-адрес: 10.0.0.10</br>)
S2(Резервный сервер <br>IP-адрес: 10.0.0.20</br>)
S1 <---> S2
style S1 fill:#e5f9ed,stroke-width:1px
style S2 fill:#e5f9ed,stroke-width:1px,color:#fff
style CLUSTER fill:#ffffff,stroke-dasharray: 10 10
end
AR[(Сервер БД <br>IP-адрес: 10.0.0.30</br>)]
S1 ---> AR
S2 ---> AR
Сначала настроим параметры связи с общей базой в проекте. Предположим, это СУБД PostgreSQL, которая работает на узле с IP-адресом 10.0.0.30.
Информация
Создание новой базы данных PostgreSQL рассматривается в соотвествующем разделе документации.

Чтобы настроить работу SCADA-кластера, откройте меню "Резервирование" проекта и выполните следующие действия:
- Включите флаг "Статус" для активации резервирования в проекте.
- Укажите IP-адрес основного сервера кластера 10.0.0.10.
- Добавьте резервный сервер и укажите для него IP-адрес 10.0.0.20.
- Выберите базу данных, настроенную на предыдущем шаге, в поле "База данных".

Далее следует настроить синхронизацию значений для активных тегов проекта. Это делается с помощью флага синхронизации в свойствах тега.

Включение этого флага позволит резервному серверу подписаться и получать обновления тегов, чтобы он обладал актуальным значением в дежурном режиме. Если данный флаг для тега не установлен, его значение не синхронизируется. Актуальное значение появится на резервном сервере только после запуска на нём драйвера опроса устройств. Таким образом, в случае аварии, часть значений может быть утеряна. Также этот флаг влияет на синхронизацию значения в базе данных: после простоя основной сервер выполнит запрос к резервному для получения актуальных значений тегов за период своего бездействия.
Чтобы активировать резервирование в кластере, необходимо развернуть один и тот же проект на каждом из двух серверов. Для этого настройте два профиля в "Профилях развертывания":
- Основной сервер с IP-адресом 10.0.0.10.
- Резервный сервер с IP-адресом 10.0.0.20.
Сначала сделайте активным профиль основного сервера и разверните проект.

Для развертывания на резервном сервере сделайте его профиль активным, а затем также нажмите кнопку "Развернуть".

Для проверки ротации принудительно отключите основной сервер в "Менеджере служб". Резервный сервер запустит опрос драйвера и продолжит выполнение развернутого проекта. После восстановления связи с основным сервером резервный автоматически передаст управление ему.
Индивидуальная база данных
Пример конфигурации с индивидуальной базой данных для каждого сервера в кластере:
flowchart LR
subgraph CLUSTER[<B>SCADA-кластер</B>]
direction TD
S1(Основной сервер <br>IP-адрес: 10.0.0.10</br>)
S2(Резервный сервер <br>IP-адрес: 10.0.0.20</br>)
S1 <---> S2
style S1 fill:#e5f9ed,stroke-width:1px
style S2 fill:#e5f9ed,stroke-width:1px,color:#fff
style CLUSTER fill:#ffffff,stroke-dasharray: 10 10
end
AR1[(Сервер БД <br>IP-адрес: 10.0.0.30</br>)]
AR2[(Сервер БД <br>IP-адрес: 10.0.0.40</br>)]
S1 ---> AR1
S2 ---> AR2
Настройте доступ к базе данных основного сервера (10.0.0.30) и к резервному узлу кластера (10.0.0.20), выполнив действия из предыдущего шага. Чтобы подключить базу данных резервного сервера (10.0.0.40), нажмите кнопку ... в поле "База данных".

Откроется окно "Настройка баз данных". Добавьте в нем новый узел с IP-адресом базы данных резервного сервера 10.0.0.40.

Настройте синхронизацию значений для активных тегов проекта. Это делается с помощью флага синхронизации в свойствах тега.

Включение этого флага позволит резервному серверу подписаться и получать обновления тегов, чтобы он обладал самым актуальным значением в дежурном режиме. Если данный флаг для тега не установлен, его значение не синхронизируется. Актуальное значение появится на резервном сервере только после запуска на нём драйвера опроса устройств. Таким образом, в случае аварии, часть значений может быть утеряна. Также этот флаг влияет на синхронизацию значения в базе данных: после простоя основной сервер выполнит запрос к резервному для получения актуальных значений тегов за период своего бездействия.
Далее разверните проект сначала на основном сервере, затем на резервном.

Для проверки ротации принудительно отключите основной сервер в "Менеджере служб". Резервный сервер запустит опрос драйвера и продолжит выполнение развернутого проекта. После восстановления связи с основным сервером резервный автоматически передаст управление ему.
Несколько резервных серверов
Если в конфигурации проекта указано несколько резервных серверов, переключение выполняется по правилам очереди: сначала управление передается серверу с порядковым номером 1 в списке, если он не отвечает — серверу 2, затем 3 и так далее.
Внимание
При использовании больше двух резервных серверов в проекте база данных должна быть указана либо общая (одна и та же) для всех серверов, либо индивидуальная для каждого, включая основной сервер.

Безопасность
TLS-сертификат
Введение
Чтобы обеспечить безопасность соединения между клиентом и SCADA-сервером, передаваемые данные шифруются. В случае перехвата пакетов в локальной сети, злоумышленник не сможет прочитать содержимое или подменить данные, так как для расшифровки сеанса требуются ключи, которыми располагают только участники соединения. Для шифрования данных используется протокол TLS, а для подтверждения подлинности узла — TLS-сертификат.
Термины и сокращения
TLS (англ. transport layer security — протокол защиты транспортного уровня) — криптографический протокол шифрования и аутентификации, обеспечивающий защищенную передачу данных между клиентом и сервером.
TLS-сертификат — электронный документ, связывающий идентификатор сервера (например, доменное имя или IP-адрес) с его публичным ключом. Сертификат позволяет клиенту проверить подлинность сервера в процессе установления TLS-соединения.
Информация
В некторых источниках TLS-сертификаты иногда называют SSL-сертификатами. Это название сложилось исторически: SSL и TLS относятся к одному семейству протоколов, однако SSL на сегодняшний день устарел и не используется.
TLS-рукопожатие — это процесс, который запускает защищенное TLS-соединение. Во время TLS-рукопожатия две взаимодействующие стороны обмениваются сообщениями, чтобы проверить друг друга, установить алгоритмы шифрования, которые они будут использовать, и согласовать ключи сеанса.
Сертификаты подписываются центрами сертификации (CA — Certificate Authority). Если сертификат подписан центром сертификации, которому клиент доверяет, клиент может проверить цепочку доверия от сертификата сервера до доверенного корневого сертификата.
Расположение
Служебные файлы сертификата в "Симплайт 5" формируется автоматически при установке системы и находятся в каталоге:
- ОС Windows:
C:\Users\Public\Documents\SimpLight_5.0\certs - ОС Linux:
/var/lib/simplight/common/certs
"Симплайт 5" обычно выпускает сертификат на 6 лет.
Состав каталога
rootCA.crt — корневой сертификат CA
cert.crt — сертификат сервера
- публичный ключ сервера;
- идентификаторы, для которых выдан сертификат (например, IP-адреса или доменные имена);
- срок действия;
- сведения о центре сертификации, выдавшем сертификат;
- цифровую подпись центра сертификации.
priv.key — приватный ключ сервера
cert.crt.
Приватный ключ используется сервером при установлении TLS-соединения для подтверждения владения соответствующей ключевой парой и выполнения криптографических операций.
Пользовательский трафик при установленном TLS-соединении шифруется с помощью симметричных сеансовых ключей.
Файл priv.key необходимо защищать:
- он не должен быть доступен неавторизованным пользователям или третьим лицам;
- доступ к нему должна иметь только служба сервера "Симплайт 5" и необходимые системные компоненты;
- резервные копии, содержащие
priv.key, должны храниться с ограничением доступа, поскольку компрометация приватного ключа может поставить под угрозу безопасность TLS-соединений.
Принцип работы
Внимание
Для установки TLS-соединения клиента с сервером, помимо валидного сертификата и приватного ключа, необходимо, чтобы на обоих устройствах были правильно настроены время и часовой пояс.
Упрощенно установление TLS-соединения происходит следующим образом:
- Клиент инициирует подключение к серверу.
- В процессе TLS-рукопожатия сервер предъявляет клиенту сертификат
cert.crt. - Клиент проверяет сертификат: срок его действия, соответствие имени или IP-адреса сервера и цепочку доверия до доверенного CA.
- Если сертификат не прошел проверку, TLS-соединение не устанавливается. Клиент отображает предупреждение или сообщение об ошибке.
- Если сертификат прошел проверку, клиент и сервер продолжают TLS-рукопожатие, согласовывают параметры соединения и устанавливают сеансовые ключи.
- После завершения TLS-рукопожатия передаваемые данные защищаются с помощью установленных сеансовых ключей.
Перевыпуск сертификата
Перевыпуск может потребоваться, например, в следующих случаях:
- срок действия текущего сертификата истек либо еще не начался;
- изменился IP-адрес сервера;
- необходимо добавить дополнительные IP-адреса или доменные имена;
- изменилось сетевое окружение сервера;
- есть подозрение на компрометацию приватного ключа;
- сервер был восстановлен из резервной копии и сертификат не соответствует текущей конфигурации.
Перевыпустить TLS-сертификат сервера можно с помощью соответствующей кнопки в панели управления HMI-клиента.
При перевыпуске система генерирует новую ключевую пару (priv.key и публичный ключ), формирует новый сертификат (cert.crt) и подписывает его существующим корневым сертификатом (rootCA.crt).
Дополнительные IP-адреса
При перевыпуске сертификата появляется диалоговое окно "Дополнительные IP-адреса". Оно предназначено для указания дополнительных IP-адресов сервера, по которым клиенты могут устанавливать TLS-соединение. Например, сервер может иметь несколько сетевых интерфейсов или быть доступен одновременно из локальной сети и через VPN. Указанные адреса включаются в сертификат сервера и позволяют клиенту проверить соответствие адреса подключения сертификату.
Если вам не нужно указывать дополнительные адреса, а необходимо просто обновить сертификат, просто оставьте это поле пустым и нажмите "Ок".
Компрометация приватного ключа
Если есть основания полагать, что файл priv.key стал доступен злоумышленникам (например, резервная копия была скомпрометирована или сервер подвергся хакерской атаке), необходимо как можно скорее перевыпустить сертификат.
Сертификат внешнего CA
В случаях, когда используются сертификаты, выданные внешним центром сертификации, необходимо добавить служебные файлы сертификата самостоятельно.
Разместите служебные файлы в каталоге certs с именами:
cert.crt— сертификат сервера;priv.key— соответствующий ему приватный ключ.
При замене сертификата убедитесь, что публичный ключ в cert.crt соответствует priv.key, а сертификат содержит все необходимые имена и IP-адреса, по которым клиенты подключаются к серверу.
После того как вы заменили файлы, обязательно перезапустите сервер.
Диагностика сертификатов
Информация
Команды в этом подразделе приведены для PowerShell (Windows) и Bash (Linux). Для их выполнения в системе должен быть установлен OpenSSL — утилита командной строки, входящая в состав одноименного криптографического пакета. Команды идентичны для обеих оболочек.
Установка OpenSSL в ОС Windows
winget install ShiningLight.OpenSSL
02. Определите путь к исполняемому файлу openssl.exe:
Get-ChildItem "C:\Program Files" -Filter openssl.exe -Recurse -ErrorAction SilentlyContinue
03. Убедитесь, что путь есть в переменной окружения Path.
04. Для проверки версии установленной службы выполните команду:
openssl version
Чтобы получить более подробную информацию о центре сертификации, сроке действия сертификата, доверенных IP-адресах и других важных деталях, перейдите в каталог certs и выполните следующую команду:
cert.crt:
Затем для файла приватного ключа priv.key
Команда покажет публичный ключ в терминале:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Rr3EYTDu6tFJy+H5wtp
Yfl7+f6JhXAbUoUN3EGrGDC4INKMt0PNlo1jjT3fhJA6LSwsA+rDKTGswE6GpZXB
6ZhjYFsQudS/Qsl7mDUZtVu/osGPxPi/AXsdots8sPBtZzetr+NjcAX4SHDq6vSs
YEaSllMEJ+TgSEDICjYBMccajpTfwqbOfiZyiN1d3CQkSaxjrEFdmJBTLqbdpju7
kx59WC1wF77mJSErZa3jH99o3rn7AMk9w/Fcui5kij8vi91gHGj7IuePYBRWrayT
uVYY5/WX7tvSlM/nXfrvnrMio0r5mlu1vGcoBh0MW+2zIHwqdTjecZMoCrrTy6HI
uwIDAQAB
-----END PUBLIC KEY-----
Если для обоих файлов он совпадает, значит сертификат и приватный ключ образуют одну пару.
Иногда публичный ключ может занимать несколько строк или десятки строк. Сравнивать такие ключи не очень удобно. В таких случаях можно сравнить отпечатки ключей. Такие отпечатки занимают всего одну строку.
Получить отпечаток ключа сертификата cert.crt:
openssl x509 -in cert.crt -pubkey -noout | openssl pkey -pubin -outform DER | openssl sha256
priv.key:
Результат представляет собой уникальный отпечаток хеш-функции, рассчитанной по стандарту SHA-256:
Этот отпечаток должен совпадать для обоих файлов.
LDAP-аутентификация
Введение
LDAP (англ. Lightweight Directory Access Protocol) — это протокол доступа к каталогам, спроектированный для чтения, записи и поиска в службе каталогов.
Аутентификация через LDAP относится к той части протокола (операции bind), где определяется, кто вы такой, и какие права доступа имеете к информации каталога. Обычно LDAP-сервер принимает входящие соединения на порт 389 по протоколам TCP или UDP. Для защищенных LDAP-сеансов используется порт 636 (требуется установка сертификата).
Запись в каталоге LDAP состоит из одного или нескольких атрибутов и обладает уникальным именем (DN — англ. Distinguished Name). Уникальное имя может выглядеть, например, следующим образом:
Уникальное имя состоит из одного или нескольких относительных уникальных имен (RDN — англ. Relative Distinguished Name), разделенных запятой. Относительное уникальное имя имеет вид:
Окно настроек
Чтобы показать окно настройки LDAP, выберите пункт "Настройки" → "Учетные записи" → "Отключено". После включения пункт "LDAP" станет доступен. Далее активируйте доступ к LDAP-серверу, и произведите настройку параметров доступа. Это необходимо, чтобы система могла сверять данные аутентификации пользователя при входе с данными LDAP-сервера.
Внимание
В полях "Имя пользователя" и "Пароль" необходимо ввести данные пользователя, который имеет доступ к группам на LDAP-сервере. Также, для корректной работы аутентификации важно, чтобы названия групп в разделе "Учетные записи" и на LDAP-сервере полностью совпадали.
Диалоговое окно конфигурации параметров связи с внешним LDAP-сервером.
- Включено — флаг активации LDAP-аутентификации.
- Тип сервера — выбор типа LDAP-сервера:
- Active Directory (Windows) — Microsoft Active Directory.
- Free IPA — сервер FreeIPA (Red Hat).
- Другой LDAP-сервер — универсальный сервер (OpenLDAP и др.).
- Путь до групп — базовый DN (Distinguished Name), где расположены группы пользователей в LDAP-дереве.
- Фильтр групп — фильтр для поиска групп (например, (objectClass=group)).
- Путь до пользователей — базовый DN, где расположены учетные записи пользователей.
- Фильтр пользователей — фильтр для поиска пользователей (например, (objectClass=person)).
- Атрибут поиска пользователя — атрибут, используемый для идентификации пользователя:
- cn — Common Name (полное имя) .
- uid — User ID (уникальный идентификатор).
- Пользователь для подключения к LDAP — учетные данные для аутентификации при подключении к LDAP-серверу:
- Имя пользователя — DN или имя пользователя для входа.
- Пароль — пароль для подключения к LDAP-серверу.
Кнопка "Тест соединения" служит для проверки связи с сервером.
Сквозная аутентификация
Если в инфраструктуре предприятия используется несколько равнодоступных серверов, настройка связи с ними может быть неудобной: увеличивается количество промежуточных программных узлов, а также возрастает нагрузка при передаче больших объемов данных. Для решения этой задачи можно применять компонент "Фрейм" на мнемосхеме — это позволяет открывать мнемосхемы в отдельном контейнере для каждого объекта и получать данные изолированно.
Если в проектах (на диспетчерском компьютере и удаленном сервере) включен модуль "Учетные записи", оператору потребуется сначала пройти аутентификацию на диспетчерском ПК, а затем повторно — при переходе в "Фрейм". Чтобы сократить количество шагов, рекомендуется использовать механизм сквозной аутентификации.
Для этого разместите компонент "Фрейм" в области редактирования, настройте его на получение данных с удаленного сервера и включите флаг "Сквозной вход".

Далее откройте "Настройки" → "Учётные записи" → "Настройка" и в окне "Учётные записи пользователей" нажмите кнопку ⚙️. Откроется дополнительное поле с токеном "Секрет". Скопируйте его, добавьте в проект на удаленном сервере и выполните развертывание с новым токеном.

Внимание
Если произошла утечка и токен стал известен третьим лицам, его необходимо сформировать заново.
Примечание
Чтобы использовать сквозную аутентификацию, на обоих серверах необходимо иметь одинаковые токен и имя учетной записи. При этом пароль учетной записи может быть разным.
После этого при входе через "Фрейм" на мнемосхему другого объекта система не будет запрашивать учетные данные повторно — аутентификация выполняется только один раз, в одной точке входа.
Изменение ПИН-кода сервера
Для предотвращения несанкционированного развертывания проектов в "Симплайт 5" реализована защита сервера ПИН-кодом.
Система по умолчанию назначает ПИН-код для любого сервера 000000. Если возникает необходимость изменить данный ПИН-код на свой, то сначала выберите из списка необходимый профиль, для которого будет производиться смена кода, назначьте его активным и убедитесь, что в профиле указан ПИН-код по умолчанию 000000.
Далее нажмите на кнопку с значком ✳|✳ на панели инструментов, в открывшемся окне укажите новый ПИН-код и подтвердите изменение нажатием кнопки "Изменить".
Внимание
ПИН должен содержать только цифры (не менее 6). Другие символы не допускаются.

Среда разработки автоматически установит соединение с сервером, используя пароль по умолчанию, и выполнит обновление пароля.

При попытке разворачивания проекта с неверным ПИН-кодом в профиле система предупредит вас об этом. Далее потребуется указать верный ПИН-код и повторить процедуру развертывания.

Вики-справочник
Описание протокола Modbus
Описание стандарта OPC
Типовые архитектуры SCADA-систем
Типы данных Симплайт 5 и МЭК 61131-3
Битовая маска
Подходы при работе с данными внутри SCADA
Пошаговые инструкции
Общие
Настройка драйвера в Симплайт 5
Миграция проекта из Симплайт 4
Изменение ПИН-кода сервера
Настройка резервирования серверов в кластере
Настройка оповещений в мессенджере Telegram
Настройка оповещений в мессенджере Макс
Проверка типа лицензии USB-ключа на удаленном ПК
Запуск проекта без установки среды разработки
Сквозная аутентификация при работе с разными серверами
Диагностика проблем с электронным сертификатом
Мнемосхемы
Пример создания фигуры
Пример создания анимации
Подготовка шаблонов мнемосхем
Распаковка битовой маски
Теги
Групповые операции с тегами
Импорт/экспорт конфигураций тегов
Изменение источника данных
Расчет объема архивируемых данных
Отчеты
Отчет с текущими данными
Периодический отчет
Отчет по изменению
Подсветка значений в отчете
Наработка моточасов
Скрипты
Быстрый старт
Чтение и запись значений
Обработка сигнала с задержкой
Пользовательские события
Время наработки тега
Формирование отчета
История версий
Версия 5.2.1.1625
Дата: 17.07.2026
Среда разработки, Сервер — Добавлено:
- драйвер работы с протоколом S7comm (Siemens);
- поддержка протокола LDAP (протокол управления учетными записями).
Среда разработки — Добавлено:
- возможность перемещать шкалы в списке в "Редакторе шкал";
- возможность перемещать категории событий в списке между собой и по каталогам;
- возможность перемещения области просмотра колесом мыши в "Редакторе фигур";
- системный тег "Текущее время сервера";
- системный тег "Смещение по UTC";
- подстановки для возможности вывода в сообщения уставок и единиц измерения;
- смешанная стратегия записи в БД — по изменению и таймеру одновременно;
- доработан механизм создания нового проекта. После создания проект сразу открывается для редактирования;
- доработан механизм "мягкого" перезапуска сервера при развертывании проекта;
- доработан инструмент "Просмотр графиков" — добавлены кнопки перемотки;
- доработан инструмент "Просмотр графиков" — добавлена возможность для тега указать цвет и ширину пера;
- возможность настройки цветов области построения рядов и цвета подписи в легенде;
- возможность изменения размера законцовок для компонента "Линия";
- возможность указания имени при экспорте проекта;
- редактор ModBus: добавлена возможность перемещать узлы (TCP/IP, COM) для сортировки;
- Редактор фигур: добавлена возможность редактировать элементы в группе без необходимости разгруппировки;
- в инсталлятор добавлены пакеты для Linux: сервер для RedOS, HMI для ARM и RedOS, а также менеджер служб для ARM и RedOS.
Сервер — Добавлено:
- доработан механизм, при котором сервер возвращает причину отсутствия прав на тег при записи в него.
Среда разработки — Исправлено:
- ошибка сохранения значения ширины обводки равное 4 для инструмента "Путь Безье";
- ошибка при скроллинге в "Общей галерее";
- ошибка при удалении пустой привязки;
- ошибка некорректного отображения текста при размере шрифта 20.
Клиент — Исправлено:
- ошибка поведения кнопки с действием "Закрыть мнемосхему" для шаблонных мнемосхем в открытых окнах.
Версия 5.2.0.1577
Дата: 27.05.2026
Сервер — Исправлено:
- ошибка невозможности записи в теги значений типов "Cтрока" и "Дата/время";
- ошибка некорректного отображения значения после записи в тег в Modbus-драйвере.
Среда разработки — Исправлено:
- ошибка некорректной работы диалога выбора контейнера на мнемосхеме, если контейнеров больше одного;
- ошибка при настройке диалога резервирования.
Клиент — Исправлено:
- ошибка открытия шаблонной мнемосхемы в контейнере на другой шаблонной мнемосхеме;
- ошибка обработки "AlarmStatus.BadQuality" у фигуры.
Клиент — Добавлено:
- текстовое сообщение об ошибке, что фигура не найдена.
Версия 5.2.0.1565
Дата: 23.04.2026
Клиент — Добавлено:
- переработан инструмент "Просмотр графиков". Добавлен:
- режим просмотра в табличном виде;
- возможность экспорта в CSV;
- возможность экспорта в XLSX.
Сервер — Добавлено:
- оптимизированы механизмы доступа к БД.
Среда разработки, Сервер — Добавлено:
- поддержка типов int64, uint64, double в Modbus-драйвере;
- возможность динамизации компонента "Трубопровод" (привязка тега с активным цветом и миганием);
- поддержка оповещений в мессенджере MAX;
- поддержка работы с БД (PostgreSQL + TimescaleDB);
- возможность работы с OPC HDA;
- поддержка табличных типов данных в SNMP-драйвер;
- поле "alarmStatus" в событие "channelChanges" для скриптов;
- обновлен драйвер для БД Авадс.
Среда разработки — Добавлено:
- инструмент импорта/экспорта, переименования, дублирования проекта и добавления комментариев;
- возможность импорта конфигурации из Симплайт 4 с поддержкой OPC UA-тегов;
- возможность в "Произвольных сообщениях" тега задать текст для уведомления о "Плохом качестве";
- возможность отключения анимации в "Общей галерее" и "Галерее проекта" для экономии ресурсов на слабых ПК;
- новые шаблоны для устройств Овен в Modbus-драйвер.
Среда разработки, Клиент — Добавлено:
- в "Тесте тегов" и на странице "Каналы" клиента вместе с "Качеством" выводится код ошибки при его наличии;
- настройка автоматического масштабирования шкал в трендах на мнемосхемах;
- возможность масштабирования шкалы Y на "живом" тренде мнемосхемы.
Среда разработки — Исправлено:
- исправлена ошибка при копировании/вставке фигур "LinePlot" и "PipePlot" в "Редакторе фигур";
- ошибка, возникающая при копировании/вставке в "Инспекторе свойств";
- ошибка открытия "Редактора отчетов";
- ошибка при дублировании групп в "Редакторе тегов".
Версия 5.1.2.1502
Дата: 30.01.2026
Среда разработки, Сервер — Добавлено:
- системный тег "Статус" — отображает наличие или отсутствие установленного ключа лицензии.
Клиент — Исправлено:
- ошибка неработоспособности полноэкранного режима и отсутствия реакции на клавишу F11
Версия 5.1.2.1499
Дата: 28.01.2026
Среда разработки — Добавлено:
- возможность группового редактирования свойств тега "Формат переменной" и "Модификаторы";
- в "Редактор анимаций" добавлен режим "Без интерполяции".
Среда разработки, Сервер — Добавлено:
- системные теги сервера:
- "Тип лицензии";
- "Количество тегов лицензии";
- "Количество сетевых клиентов";
- "Версия сервера";
- "Время запуска сервера";
- "Количество подключенных клиентов".
Клиент — Добавлено:
- возможность масштабирования окна (настройка в меню параметров).
Среда разработки — Исправлено:
- редактор свойств тега — исправлено отображение знаков после запятой в настройке шкалы;
- исправлена доступность свойства "Пароль" для кнопки с действием "Без фиксации";
- ошибка в редакторе драйвера SNMP;
- исправлена возможность перемещения родительских групп внутрь дочерних в "Редакторе тегов".
Сервис ресурсов — Исправлено:
- устранена ошибка разрыва на тренде (по текущему времени) при открытии мнемосхемы.
Инсталлятор — Добавлено:
- настроены права доступа к каталогам в соответствии с рекомендациями компании Kaspersky.
2025
Версия 5.1.2.1485
Дата: 26.12.2025
Среда разработки — Добавлено:
- экспорт тегов в PostgreSQL — таблица содержит такой же набор полей, как и при экспорте в JSON.
Версия 5.1.2.1484
Дата: 25.12.2025
Среда разработки — Добавлено:
- экспорт тегов проекта в формате JSON;
- экспорт тегов в PostgreSQL — таблица содержит поля: ID и имя тега;
- возможность отключать штатную отрисовку предупреждения "Плохое качество тега" для элемента "Поле ввода";
- возможность изменять порядок привязок и целей в "Редакторе фигур" — в диалогах появилась функция перемещения элементов вверх и вниз по списку.
Среда разработки, Генератор отчетов — Исправлено:
- поведение генератора при отключенной опции "Дополнять моменты" при создании отчета "По изменению".
Версия 5.1.2.1476
Дата: 23.12.2025
Среда разработки — Добавлено:
- возможность добавлять изображения на мнемосхему через drag & drop из проводника;
- возможность добавлять многостейтовые объекты с изображениями на мнемосхему через drag & drop из проводника с зажатой клавишей Ctrl;
- возможность редактировать сегменты (удалять и добавлять) в компонентах "Линия" и "Трубопровод";
- инструмент блокировки перемещения и изменения размера компонентов на мнемосхеме — можно заблокировать как все компоненты, так и выбранные.
Среда разработки, Сервер, Генератор отчетов — Добавлено:
- оптимизирована работа с БД — скорость построения отчетов увеличена до 100 раз в некоторых случаях, также улучшен доступ к встроенной БД.
Среда разработки — Исправлено:
- некорректное отображение списка неиспользуемых объектов при их удалении;
- ошибка, из-за которой выбранный элемент в "Галерее проекта" не отображался корректно;
- ошибка при отрисовке "Пути Безье" в "Редакторе фигур" — после редактирования вершин не происходил сдвиг линии по оси Y.
Среда разработки, Редактор отчетов — Исправлено:
- удалена функция кэширования в отчетах из-за чрезмерного потребления оперативной памяти (после оптимизации работы с БД она стала избыточной).
Версия 5.1.1.1395
Дата: 30.10.2025
Среда разработки — Исправлено:
- некорректное отображение выпадающего списка редактора законцовок линий пути в "Редакторе фигур";
- некорректная локализация интерфейса;
- вывод ошибок при сканировании в редакторе драйвера Bus77;
- ошибка при редактировании категорий событий;
- вывод ошибок при разворачивании проекта;
- некорректное поведение "Инспектора свойств" при масштабе экрана выше 100%.
Версия 5.1.1.1390
Дата: 24.10.2025
Среда разработки, Сервер — Добавлено:
- возможность работы "Генератора отчетов" для разрешенных лицензий в режиме разработчика (генерация отчета с "водяным знаком").
Среда разработки — Исправлено:
- корректировка режима добавления тега в редакторе драйвера Modbus;
- ошибка при редактировании фигуры в "Редакторе фигур".
Генератор отчетов — Исправлено:
- ошибка вывода лишней строки в отчет.
Клиент — Исправлено:
- некорректное поведение HMI при открытии мнемосхем (если указанный монитор не найден, мнемосхема откроется на основном мониторе).
Установщик — Исправлено:
- внесены изменения в установщик в связи с переходом на 64-битную версию.
Версия 5.1.1.1387
Дата: 22.10.2025
Среда разработки, Сервер — Добавлено:
- драйвер для работы с протоколом Bus77 (альфа-версия);
- поддержка IP-камер (H264).
Среда разработки — Добавлено:
- поиск в диалоге "Привязки аргументов";
- поиск по тегам в диалоге выбора тегов;
- действия для дерева проекта ("Свернуть/развернуть все");
- кнопки на панель для ввода часто используемых функций в диалоге редактора выражений;
- кнопки для часто используемых функций в диалоге "Редактор выражений" в "Редакторе фигур";
- возможность ввода адреса тега в драйвере Modbus в HEX-формате через диалог ввода адреса;
- функция "save" в скриптах (позволяет сохранять переданные теги в базу данных с текущей меткой времени).
Среда разработки, Редактор отчетов — Добавлено:
- возможность настройки кэша для периодических отчетов (ускоряет построение отчетов);
- в редактировании источника данных добавлен флаг "Дополнять моменты" (настройка позволяет строить отчет только по данным в БД, без дополнения данных до соседней метки времени);
- возможность работы со строковыми тегами в отчетах.
Клиент — Добавлено:
- возможность перегенерации сертификата с указанием дополнительных IP-адресов.
Среда разработки — Исправлено:
- номера мониторов теперь указываются с 1, а не с 0 (для указания, на каком мониторе открывать мнемосхему);
- кнопка: отображается рамка в режиме редактирования при нулевом альфа-канале;
- ошибка импорта данных из CSV в драйвере Modbus (неверное количество импортированных тегов);
- ошибка импорта из CoDeSys в драйвере Modbus (наличие нечитаемых символов в тексте для импорта);
- ошибка запроса на удаление пользователя при нажатии кнопки открытия нижнего меню;
- ошибка невозможности редактировать значение по умолчанию для типа Integer в редакторе аргументов.
Среда разработки, Сервер — Исправлено:
- поведение драйверов после применения записи (в некоторых случаях ответ об успешной записи доставлялс через интервал опроса).
Версия 5.1.1.1359
Дата: 01.10.2025
Среда разработки, Сервер — Добавлено:
- действие для многофункциональной кнопки "Открыть мнемосхему в окне ОС" (поддержка только в HMI-клиенте; позволяет открыть мнемосхему в новом окне на нужном мониторе);
- новый компонент "Последнее событие" — для вывода последних событий в системе в виде выпадающего списка.
Среда разработки, Клиент — Добавлено:
- улучшен вывод информации о качестве переменной в тесте тегов и в HMI-клиенте;
- добавлена возможность показа тренда по двойному клику на элементе (с возможностью выбора, какие теги выводить в тренд).
Установщик — Добавлено:
- поддержка только 64-битных версий операционных систем.
Версия 5.1.1.1351
Дата: 19.09.2025
Среда разработки — Добавлено:
- переход на 64-битную версию приложения;
- диалог выбора тегов теперь поддерживает выбор целых групп и отображает выбранные теги внутри групп;
- функции "Round" и "getBit" в "Редактор выражений".
Среда разработки, Клиент — Добавлено:
- новый компонент — "Индикатор аварий" с возможностью отображения количества аварий;
- возможность получения информации о лицензии из HMI-клиента и среды разработки.
Клиент — Исправлено:
- ошибка автозапуска мнемосхемы при открытии в iFrame.
- ошибка масштабирования.
Среда разработки — Исправлено:
- ошибка при копировании/вставке многостейтового объекта;
- ошибка при сохранении конфигурации драйверов (Ping, SNMP).
- ошибка, приводившая к неработоспособности кнопки с макросом в шаблонной мнемосхеме;
- ошибка поля ввода даты/времени — нет возможности изменить размер шрифта;
- удалено ограничение на минимальный размер таблицы;
- добавлена возможность пропорционального растяжения изображений в компонент "Изображение";
- возможность использования виртуальных тегов в Modbus-сервере и UA-сервере;
- автодобавление шкалы после создания компонента в компонент "Архивный тренд";
- исправлено отображение ошибок в диалоге настройки OPC UA;
- добавлены три уровня вложенности мнемосхем в контейнерах.
Версия 5.1.1.1348
Дата: 04.08.2025
Сервер — Исправлено:
- ошибка вывода кастомного текста сообщений в "Журнал событий".
Установщик — Исправлено:
- ошибка обновления "Генератора отчетов".
Версия 5.1.1.1347
Дата: 29.07.2025
Среда разработки — Добавлено:
- новый элемент мнемосхем — "Архивный тренд";
- элемент мнемосхемы "Поле ввода": теперь доступно указание отдельно тега записи и тега чтения;
- поддержка длинных имен в скриптах и выражениях;
- возможность копирования/вставки свойств тегов в "Редакторе тегов";
- возможность копирования/вставки свойств групп в "Редакторе тегов";
- возможность задания глубины хранения журналов событий.
Клиент — Исправлено:
- вывод пользовательских сообщений из скрипта, не привязанных к тегу (теперь оформление берется из основной категории событий).
Среда разработки, Сервер — Добавлено:
- интеграция с AVADS Historian.
Редактор отчетов — Добавлено:
- новый тип отчетов — "Периодический".
Версия 5.1.1.1336
Дата: 16.07.2025
Среда разработки — Добавлено:
- агент развертывания: возможность выбора клиента, который будет открыт сразу после развертывания проекта на сервере;
- возможность импорта тегов и их настроек из проекта Симплайт 4.
Клиент — Исправлено:
- ошибка отображения имени пользователя, квитировавшего событие в "Таблице событий".
Версия 5.1.1.1328
Дата: 09.07.2025
Сервер — Добавлено:
- поддержка аппаратных ключей для платформы ARM.
Среда разработки, Клиент — Добавлено:
- новый компонент "Ввод даты и времени";
- возможность установки пароля доступа для компонента "Многофункциональной кнопки";
- возможность установки пароля доступа для компонента "Поле ввода".
Среда разработки, Сервер — Добавлено:
- возможность принудительной записи команды с кодом 06;
- возможность записи в конкретный бит при помощи компонента "Многофункциональная кнопка";
- возможность переноса текста внутри компонента "Многофункциональная кнопка";
- режим работы в качестве MQTT-сервера;
- поддержка сквозной авторизации при обращении к серверу кластера через компонент iFrame.
Среда разработки — Добавлено:
- для элементов "Линия", "Трубопровод" возможность свободного перемещения сегментов при удержании клавиши Shift;
- возможность поиска тегов в дереве проекта c помощью комбинации клавиш Ctrl+F;
- Modbus-сервер: автоматическая расстановка адресов в адресном пространстве;
- возможность импорта и экспорта настроек битовых категорий в "Редакторе категорий событий;
- Modbus-драйвер: поддержка импорта данных из Симплайт 4.
Клиент — Исправлено:
- ошибка циклической загрузки одного и того же экрана;
- ошибка запуска экранной клавиатуры в окне авторизации.
Среда разработки — Исправлено:
- ошибка удаления "Категорий событий";
- Modbus-сервер: ошибка, которая в некоторых случаях приводила к сбоям при импорте/экспорте.
Сервер — Исправлено:
- агент развертывания: ошибка перезапуска службы на Windows;
- MQTT-драйвер: ошибка при записи дискретного тега.
Инсталлятор — Добавлено:
- deb-пакеты для платформы ARM (32/64).
Версия 5.1.0.1289
Дата: 22.05.2025
Среда разработки, Клиент — Добавлено:
- возможность фильтрации событий по тегам (компонент "Таблица событий").
Сервер, Клиент — Добавлено:
- возможность перевыпускать сертификат из панели управления.
Версия 5.1.0.1287
Дата: 22.05.2025
Сервер — Исправлено:
- работа MQTT-драйвера (неверно отслеживалась потеря связи);
- работа PING-драйвера (неверно определялась доступность устройства).
Среда разработки — Исправлено:
- работа второго уровня вкладок (ошибка приводила к отрисовке вкладок на одном уровне);
- ошибка, которая не позволяла при множественном выборе включать Modbus-сервер у тегов.
Клиент — Исправлено:
- ошибка выхода в диалог подключений, если была включена опция автозапуска подключения.
Версия 5.1.0.1285
Дата: 16.05.2025
Среда разработки, Сервер — Добавлено:
- драйвер работы с протоколом MQTT;
- режим отладки для скриптов.
Среда разработки — Добавлено:
- возможность добавлять комментарии к тегам;
- инструмент для отображения названий привязанных тегов на фигурах в "Редакторе мнемосхем".
Среда разработки — Исправлено:
- некорректное отображение некоторых диалоговых окон при включенном увеличении более 100%.
Версия 5.1.0.1201
Дата: 08.04.2025
Сервер — Добавлено:
- OPC UA сервер.
Среда разработки — Добавлено:
- импорт настроек Modbus из Codesys;
- возможность сортировки в списке мнемосхем с помощью drag and drop.
Версия 5.0.4.1189
Дата: 20.03.2025
Среда разработки, Сервер — Добавлено:
- драйвер работы с утилитой PING;
- драйвер работы с протоколом SNMP;
- режим работы в качестве MODBUS-сервера.
Среда разработки, Клиент — Добавлено:
- поддержка второго уровня вкладок на мнемосхемах.
Среда разработки — Исправлено:
- журнал отладки: AV при удалении записей;
- добавлено предупреждение, если разворачивается проект с лицензией Free, Base и хост не локальный;
- ошибка, приводящая к отрицательному количеству попыток записи в настройках расписания;
- редактор Modbus: ошибка с заданием отрицательного номера бита.
Инсталлятор — Добавлено:
- исключено множественное добавление в исключения брандмауэра при установке.
Версия 5.0.4.1158
Дата: 20.02.2025
Среда разработки — Добавлено:
- функционал для теста тегов.
Сервер — Исправлено:
- ошибка записи в драйвер Modbus (несоответствие типов тегов).
Версия 5.0.4.1131
Дата: 23.01.2025
Сервер — Добавлено:
- загрузка последних 100 отладочных сообщений при старте сервера;
- скрипты: функция "appendFile" для дополнения содержимого файла;
- скрипты: модуль "io" для Lua;
- скрипты: функции "readMany", "writeMany".
Среда разработки — Добавлено:
- возможность отключать видимость сетки в редакторе;
- сессионное сохранение настроек линий и труб при редактировании мнемосхемы;
- компонент "Линия": тип "пунктир";
- возможность редактирования компонента "Труба" после окончания построения;
- возможность редактирования компонента "Линия" после окончания построения;
- компонент "IFrame";
- многофункциональная кнопка: действие "Открыть в iframe";
- многофункциональная кнопка: при выборе действия "Открыть мнемосхему в окне" можно указать цвет заголовка, цвет текста заголовка, позиции окна, а также показать или скрыть заголовок;
- отображение ID тега в свойствах;
- позиционирование на элементе в "Галерее проекта" при выборе элемента на мнемосхеме;
- предупреждение о необходимости подключения лицензионного ключа при генерации отчета.
Сервер — Исправлено:
- драйвер OPC UA:
- ошибка некорректного получения адресного пространства;
- ошибка нестабильного соединения с сервером;
- ошибка невозможности записи значения из-за несоответствия типов;
- ошибка невозможности получения текущих значений;
- скрипты: ошибка применения формулы к значению при записи в тег;
- ошибка получения сообщений отладки;
- ошибка перемещения элементов "Труба" и "Линия";
- компонент "Изображение": ошибка некорректного отображения при повороте.




















































