Документы/Релиз 0.9 - OpenSCADAWiki

# Документы/Релиз 0.9

This page is a translated version of the page Documents/Release 0.9 and the translation is 100% complete.

English • ‎mRussian • ‎Українська

## 1 Введение

Релиз OpenSCADA, открытой SCADA(Supervisory control and data acquisition) системы, версии 0.9 является стабильным промышленным релизом продолжительной поддержки (LTS).

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

Релиз является следующей версией стабильной ветви для которого, в течении продолжительного времени, предоставляется техническая поддержка от разработчиков и обеспечивается выпуск исправлений в виде публичных сборок для основных и стабильных окружений Linux, а также оперативных сборок для владельцев пакетов технической поддержки. Жизненный цикл предыдущего релизу 0.8.0 LTS прекращается его последним обновлением, непосредственно перед первыми сборками пакетов 0.9 LTS.

Именно на этой версии осуществляется окончательный переход на схему разработки Work/LTS, т.е., разработка осуществляется в рамках рабочей версии и на её основе периодически выпускаются стабильные релизы, которые, в свою очередь и параллельно разработке, обновляются путём обратного портирования совместимых изменений из рабочей версии. Инициирующий переход произошёл в 2013 году, когда текущей стабильной версией определено 0.8.0 LTS, а рабочей 0.9 Work. На данный момент, стабильной версией становится анонсированная 0.9 LTS, а рабочей 1 Work.

В целом, новая стабильная версия является результатом шести лет работы с разработки, внедрения в различные решения, стабилизации и эксплуатации OpenSCADA в её рабочей ветви, которая на данный момент выпускается текущей стабильной. Всё это время обновления для 0.8.0 LTS продолжали выпускаться и что будет осуществляться для анонсированной 0.9 LTS.

Этот документ является обобщение протокола изменений (ChangeLog), начиная с нулевой ревизии предыдущей LTS версии, через её обновления и заканчивая текущей. Документ призван коротко и наглядно осветить новые возможности OpenSCADA. Детально ознакомиться с изменениями можно в файле "ChangeLog" дистрибутивных пакетов или из первоисточника: http://oscada.org/svn/tags/openscada_0.9/ChangeLog.

### 1.1 Общая информация

Проект OpenSCADA основан Савоченко Романом в 2003 году как свободную реализация Системы Диспетчерского Контроля и Сбора Данных (SCADA) или Человеко Машинный Интерфейс (HMI), на основе её фундаментального проектирования в течении 2002 года и опыта использования и разработки коммерческой SCADA-системы до этого.

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

На время анонса 0.9 LTS, OpenSCADA является развитой SCADA/HMI системой, которая довольно широко используется как по прямому назначению, так, благодаря своей гибкости, и во многих смежных областях, и которая с уверенностью может называться более обобщённо — динамическая система работы с данными реального времени.

Номер стабильной версии OpenSCADA меньше единицы только из-за того, что её целью была заявлена многоплатформенность, достичь которой в запланированном объёме планируется следующим стабильным релизом с номером 1. В целом, целями OpenSCADA являются:

- открытость — в основном GPLv2;
- масштабируемость, гибкость, расширяемость — модульность и внутренняя динамичность;
- исполняемая избыточность — резервирование;
- доступность — открытые исходные тексты; автоматическая сборка архивов, пакетов, живых дисков, ...; многоязычность; динамическая многоязычность; сборка и исполнение на Linux окружениях широкого возрастного диапазона, от 2002 года (2009-ALTLinux 6, LP8x81, Fedora 12; 2012-Debian 7) по современные;
- надёжность — практическое применение, быстрое решение проблем;
- безопасность — распределение прав, SSL;
- многоплатформенность — x86_32, x86_64, ARM, Web, Android, QNX (предадаптировано), MS Windows (запланировано);
- единый, унифицированных, удобный и развитый интерфейс пользователя — Qt, Web, прозрачное и многоуровневое удалённое управление;
- широкий спектр источников данных — универсальные, платы DAQ и низкоуровневые шины, созданные в окружении OpenSCADA.

### 1.2 Применение

Роли OpenSCADA.

К актуальным отраслям применения, где известно хотя-бы одно внедрение и с коротким перечнем которых от участников проекта можно ознакомиться по этой ссылке, относятся:

- АСУ ТП (SCADA/HMI) или системы телемеханики — основное направление и тут существует множество внедрений;
- динамические модели, имитаторы и тренажеры технологических процессов в реальном времени;
- станки и промышленные роботы;
- системы сельско-хозяйственной диспетчеризации и управления, птичники;
- встроенные и мобильные системы — окружение исполнения Программируемого Логического Контролера (ПЛК), роботы, ...;
- мониторинг оборудования серверов;
- умные дома и автоматика зданий.

С некоторыми ограничениями и доработками, в основном во внутреннем окружении пользователя, OpenSCADA может использоваться и в таких отраслях:

- управление ресурсами предприятия (ERP);
- Geo-локация и отслеживание положения;
- торговые системы;
- медицинские диагностические системы;
- бухгалтерский учёт;
- билинговые системы.

## 2 Результаты предыдущего релизу 0.8.0 LTS

Релиз 0.8.0 LTS выпущен в апреле 2012 года и в течении этих шести лет он претерпел 20 обновлений, которыми, в целом, исправлено более 500 ошибок и добавлено множество усовершенствований, которые не нарушают совместимости библиотечных БД и конфигурации.

Конфигурация и библиотечные БД 0.8.0 LTS были в целом заморожены, ввиду больших несовместимых изменений в 0.9 Work, для методов запуска OpenSCADA, и несовершенство распространение библиотечных БД на момент выпуска 0.8.0 LTS. Поэтому, обновление и переход на версию 0.9 LTS будет нетривиальным, хотя в 0.9 LTS предусмотрено всё возможное для упрощения этой процедуры. Обновление-же 0.9 LTS до запланированной в будущем 1 LTS уже не будет таким сложным и фактически может превратиться исключительно в формальное изменение версии рабочей ветви, поскольку теперь планируется обновление всего, включая и библиотечные БД.

## 3 Плановые задачи релиза

Развитие OpenSCADA, после предыдущей LTS версии и в рамках рабочей ветви, в основном осуществлялось путём глубокой стабилизации и через практическую адаптацию с элементами расширения существующего функционала, нацеленные на предоставление стабильного и надёжного окружения автоматизации промышленных и смежных задач, а соответственно и не существовало чётко определённого плана. Но за три года до этого релиза такой план появился и составил следующие задачи, что видно из общего плана развития:

- Полная ревизия основной документации и подготовка анонса этого релиза.
- Адаптация к работе на программной платформе "Android".
- Перенос базы знаний OpenSCADA и Wiki-ресурса документирования на новый движок с унификацией структуры под многоязычность с приоритетом: Английский, Украинский, mRussian; и генерация автономной документации по её изменению.
- Ревизия, актуализация и некоторое расширение Web-модулей OpenSCADA.
- Расширение и адаптация OpenSCADA к прямой работе с низкоуровневыми шинами и устройствами вроде 1Wire, I2C и реализация проекта умного дома в собственной квартире.
- Формальное создание и документирование проекта дистрибутива Linux автоматизации с OpenSCADA.
- Создание автоматизированной системы сборки пакетов OpenSCADA.
- Перенос серверной инфраструктуры OpenSCADA на собственное оборудование и канал интернета.
- DAQ.OPC_UA: Упрощение, увеличение функциональности и перенос протокольного кода в отдельную LGPL v3 библиотеку.

Эти задачи выполнены и некоторые детали около них приведены далее.

## 4 Общесистемные свойства

Новая стабильная версия OpenSCADA получила заметные общесистемные расширения, приобрела большей стабильности в работе и увеличение продуктивности, а также получила заметные усовершенствования графического интерфейса и окружения около неё, вроде: расширенной настройки, документации, доступной прямо из программы (offline и online), и которая значительным образом пересмотрена и актуализирована.

Основная часть документации проекта перенесена на новую Wiki, на основе MediaWiki, и значительный объём этой части был отревизирован и переведен на три языка — Английский, Украинский, mRussian. Для переноса была создана процедура конвертации статей из диалекта движка WackoWiki на MediaWiki, которая была полностью написана на внутреннем языке программирования OpenSCADA и которую многократно использовано для переноса большого объёма старой Wiki. Формат автономной (offline) документации был изменён со статичных PDF-файлов, которые не обновлялись после предыдущей LTS версии, на HTML-файлы, которые динамически генерируются из актуальной базы знаний проекта (Wiki), а также имеют актуальные крос-ссылки между страницами и ссылки на online-документацию, для исключительно внешних материалов. Генерация offline-документации также производится специально написанной процедурой на внутреннем языке OpenSCADA, что, вместе с процедурой конвертации Wiki-диалекта и комплексного тестирования релиза OpenSCADA, является ярким показателем мощности и текущего уровня развитости внутреннего языка OpenSCADA.

В рамках старой Wiki, после выпуска 0.8.0 LTS были добавлены и обновлены некоторые документы, а с переносом на новую Wiki, кроме ревизии и перевода основной части документации, была осуществлена общая унификацию её структуры из соображений: многоязычности (Английского как первичного языка), логичности организации, удобства перевода и возможности убрать дублирование статей с официальным сайтом, которые сейчас просто используются из Wiki. Отдельно отметим значительно-расширенные главные документы:

- Быстрый старт;
- Руководство по программе;
- API пользователя OpenSCADA;
- ЧаВо и Как сделать ...;
- Создание модуля OpenSCADA.

Первичный язык (Английский) был полностью отревизирован в оригинальных сообщениях программы и во многом для основных статей документации-Wiki OpenSCADA, что на данное время делает OpenSCADA адекватно воспринимаемой для аудитории, которая не понимает исходных языков — Украинского или mRussian. И, вместе с реализацией в полном объёме механизма динамического перевода, делает возможным построение на основе OpenSCADA динамично многоязыковых интерфейсов пользователя, что Вы можете кроме всего прочего посмотреть на публично доступном Web-интерфейсе динамических моделей ТП: АГЛКС, Котёл.

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

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

Живые диски дистрибутива Linux автоматизации проекта OpenSCADA.

В процессе осуществления работ над рабочей ветвью, в основе этой стабильной, было внедрено формирование репозиториев пакетов дистрибутивов Linux со сборками OpenSCADA, которые до этого предоставлялись только как отдельные пакеты. Что заметно упростило развёртывание OpenSCADA и содержание её актуальной. Затем был создан автоматических сборщик этих пакетов, который на данный момент насчитывает до 100 целей, и что значительно упростило выпуск обновлений как для рабочей ветви так и для этой стабильной. Соответственно, к этой LTS версии предоставляются сборки пакетов для основных окружений Linux и вся историю публичных обновлений будет сохранена.

К пакетам сборок OpenSCADA предоставляются также и сборки живых дисков быстрого ознакомления и развёртывания OpenSCADA вместе с системным окружением. Которые до этого момента получили формальное основание в виде Linux дистрибутива автоматизации проекта OpenSCADA.

Основной сервер OpenSCADA.

Сборки и пакеты OpenSCADA сопровождаются рядом открытого и свободного материала внутреннего окружения программы, а именно, это: наработки слоя сбора и обработки данных, элементы графического представления и целые-комплексные проекты моделей ТП. Эти материалы предоставляются в виде файлов БД SQLite и включают:

- Библиотеки функций (OscadaLibs), "LibsDB/OscadaLibs.db" — содержит все наработки проекта OpenSCADA в слое сбора и обработки данных включая элементы источников данных пользовательского протокола.
- СВУ: Главные библиотеки (vcaBase), "LibsDB/vcaBase.db" — содержит основные элементы графического представления и элементы мнемосхем проекта OpenSCADA.
- СВУ: Тесты (vcaTest), "LibsDB/vcaTest.db" — содержит элементы тестов примитивов графического представления.
- СВУ: Библиотека электро-элементов мнемосхем пользовательского интерфейса (vcaElectroEls), "LibsDB/vcaElectroEls.db" — содержит элементы графического представления компонентов электрических схем.

Хостинг проекта в целом и материалов 0.9 LTS в частности, был перенесен на собственный сервер проекта, где дополнительно были развёрнуты: демонстрационные Web-интерфейсы моделей OpenSCADA, проект мониторинга сервера и умного дома на основе OpenSCADA и сборщик пакетов репозиториев OpenSCADA.

### 4.1 Внутренние

Разрешающая способность внутренних данных целого типа окружения OpenSCADA увеличена до 64 разрядов. В целом-же, внутренние данные OpenSCADA, с резервированием значения ошибки (EVAL) для каждого, унифицированы общими типами: логическое, целое, реальное, строка и объект. Что в первую очередь касается источников данных.

В ядро OpenSCADA, собственный протокол и все узлы что работают с удалёнными станциями OpenSCADA; добавлена возможность "поднятия" узлов OpenSCADA, которые находятся за другими узлами и, как правило, в другой сети. Что в целом позволяет централизовано управлять сетью станций OpenSCADA на любом уровне иерархии.

### 4.2 Усовершенствования и адаптация для различных платформ

OpenSCADA на Android.

Эта версия OpenSCADA получила углублённую поддержку и способность к адаптации для различных платформ. Что в основном случилось благодаря адаптации для работы на программной платформе Android и восстановления сборки и работы с ucLibC, и что планируется использовать в дальнейшей адаптации для работы на программных платформах QNX и MS Windows.

Raspberry Pi.
Orange Pi.

Работа на одноплатных ПК была расширена платами Raspberry Pi и Orange Pi.

Nokia N9.

Поддержка Linux смартфорнов Nokia дополнена последним, основанным на MeeGo 1.2, это — Nokia N9. Или это было обновление поддержки Nokia N950.

Кроме непосредственной работы (нативно) на различных платформах, был значительно расширен Web-интерфейс, который сейчас реализует все общие возможности концепции среды визуализации и управления (СВУ).

### 4.3 Оптимизация, стабилизация и продуктивность

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

- общим включением-выключением отладки и целевым контролем узлов отладки;
- особенной отладкой объектов контролеров источников данных;
- особенной отладкой исполнения проектов СВУ;
- формированием углублённой статистики исполнения динамических объектов OpenSCADA, таких как: объекты контроллеров источников данных и их параметров, входных и выходных транспортов, сеансов СВУ с детализацией до виджетов;
- протоколирование входного и выходного трафика транспортов.

Глубокой и всесторонней стабилизации претерпели почти все модули OpenSCADA и многие были оптимизированы, из которых особенно нужно отметить:

- Все модули БД — добавлена обработка и проверка ошибок БД или СУБД, а также выдача сообщений про эти ошибки в случае пользовательской загрузки и записи; увеличена производительность (до порядка) БД поддерживающих SQL, через реализацию режима предзагрузки сканирующего запроса;
- Вычислитель на основе Java-подобного языка (DAQ.JavaLikeCalc) — увеличена производительность через: сохранение контекста исполнения функции, предзагрузку постоянных и прямой доступ к строке.
- Архиватор на БД (Archive.DBArch) — значительно оптимизирована запись и чтение БД, а именно это: групповая запись нескольких архивов в одну таблицу и чтение блоками (кратными десяти) в одном запросе.
- Все транспорты — в целом увеличена производительность.
- Рабочий пользовательский интерфейс (WEB) (UI.WebVision) — увеличена чувствительность интерфейса использованием асинхронных запросов в общем цикле обновления.

Резервирование OpenSCADA станций.

Надёжность резервируемой станции в масштабе комплексного решения, точнее сохранение данных истории, была усовершенствована расширением механизма резервирования, который потенциально предусматривает резервирование любой подсистемы и реализует сейчас резервирование подсистем "Сбор данных" и "Архивы-История".

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

### 4.4 Сбор данных

Пользовательская объектная модель ядра OpenSCADA.

Учитывая ключевую роль сбора данных в программах такого роду, эта функция, в лице подсистемы "Сбор данных" и её модулей, получила значительные усовершенствования, из которых особенно нужно отметить: смещение акцента в расширении поддерживаемых источников данных из реализации отдельных модулей подсистемы "Сбор данных" на системном языке "C/C++", на их реализацию в окружении OpenSCADA и на её внутреннем языке — логический уровень OpenSCADA. Т.е., на логическом уровне OpenSCADA, может и реализуется все, что: для доступа к данным использует сеть, не требует использования специфических библиотек и функций и не является очень сложным. На данный момент, таким образом реализовано:

Низкоуровневые устройства подключенный к Raspberry Pi.
OpenSCADA на LCD экране Raspberry Pi.

- Отправка SMS сообщений (SMS) и электронных писем (SMTP).
- Источник Бесперебойного Питания (UPS), как объект данных с атрибутами и значениями.
- Простые сенсоры и датчики:
  - Елемер TM510x;
  - EDWARDS TURBOMOLECULAR PUMPS (SCU750);
  - Sycon Multi Drop Protocol (SMDP);
  - Блок питания турбо-молекулярного насоса (TMP-xx03);
  - Измерение температуры IT-3 (IT3);
  - IVE-452HS-02;
  - OPTRIS CT/CTL;
  - CTR 100, 101.
- Компьютер теплового счётчика VKT7.
- IEC-60870-104.
- Тестовые реализации и примеры: DCON, OWEN.
- Шина "One Wire" с помощью {DS9097,DS9097U} (1W_{DS9097,DS9097}) для чипов: DS1820, DS1820/DS18S20/DS1920, DS1822, DS2413, DS2408, DS2450, DS2438.
- Шина I2C: PCF8591, PCF8574, BMP180, DS3231, AT24C{32|64}.
- Общие порты ВВ (GPIO): DHT11,22 (AM23XX). GPIO|I2C: 1602A(HD44780).

Учитывая рост роли логического уровня OpenSCADA, выросли и требования к гибкости модели данных источников данных и в целом, что было удовлетворено:

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

Внутренний язык программирования OpenSCADA приобрёл значительные усовершенствования и, сейчас, удовлетворяет всем требования отраслей применения OpenSCADA. Многие из этих усовершенствований попали в предыдущую версию 0.8.0 LTS, а ряд из них не мог туда попасть из-за нарушения обратной совместимости или недостаточной стабильности на то время. Из этих, существенных усовершенствований, нужно ещё раз отметить: увеличение разрешающей способности данных внутреннего окружения OpenSCADA целого типа до 64 разрядов и сохранение контекста исполнения внутренних процедур.

### 4.5 Графическое окружение

Диалог выбора проектов OpenSCADA.
Пользовательский контроль вида интерфейса Qt.

В целом, графическое окружение получило значительное развитие и главным из них стало расширение модуля запуска Qt-интерфейса, как основы для остальных локальных. В первую очередь, этот модуль и ядро OpenSCADA адаптированы для возможности запуска библиотеки графической среды Qt в основном потоке программы, что исключило много проблем, связанных с исполнением в неглавном потоке, а также обеспечена работа с версией 5 этой библиотеки. Во вторых, этот модуль взял на себя роль интерфейса выбора проектов OpenSCADA при её запуске и переключении, а также создание новых. И в третьих, ввиду его первичности к запуску Qt, он получил функцию управления видом программы независимо от графического окружения и возможность его запуска-закрытия в системный лоток. Что в целом сделало возможным настройку OpenSCADA под персональные требования пользователя и адаптировать её к очень специфическим окружениям вроде Android.

Заметных усовершенствований получили модули конфигурации Qt и Web, где особенно нужно отметить:

- Конфигуратор-Qt (UI.QTCfg): осуществление запросов к удалённым станциям в отдельном потоке от потока Qt, что сделало его удобнее и более прогнозируемым и что даже, вместе с одним из обновлений, попало в предыдущую стабильную версию 0.8.0 LTS.
- Конфигуратор-WEB (UI.WebCfgD): в целом, был полностью обновлен на предмет интерфейса, который сейчас является более динамическим, удобным и может быть расширен темами.

OpenSCADA на Web.

Заметных усовершенствований также получила среда визуализации и управления (СВУ), в составе всех её модулей:

- Движок СВУ и модули визуализаторов вообще (UI.VCAEngine):
  - позволяет осуществлять полноценную-горячую разработку, т.е. — редактирование проекту СВУ на момент его исполнения сеансами;
  - оригинальные сообщения интерфейса являются полностью откорректированными, грамматически и орфографически корректными для Английского языка;
  - предоставлено ряд дополнительных видов примитива "Элементы формы", "Диаграмма" и расширено примитив "Text" отображением "HTML";
  - предоставлено механизм специфических для визуализатора атрибутов виджетов, что позволило раскрыть и использовать их индивидуальные свойства;
  - новый-гибкий механизм сообщений пользователя про внештатные события в контролируемом системой процессе, который предусматривает возможность свободного формирования пользовательских извещателей с нужными свойствами, как: моно-тонный сигнал, синтез речи.
- Визуализатор-Qt (UI.Vision):
  - заметно улучшена работа исполнения удалённых интерфейсов и обеспечено осуществление запросов к удалённой станции в отдельном потоке от потока Qt, что упростило удалённую разработку с параллельным исполнением проекта;
  - формирование примитива "Документ" может осуществляться с помощью WebKit.
- Визуализатор-WEB (UI.WebVision):
  - унифицирован, оптимизирован и расширен использованием CSS3;
  - предоставлена реализацию всех элементов-примитивов унифицированного интерфейса;
  - осуществляется масштабирование до доступного пространства окна браузера;
  - увеличена производительность работы и чувствительность интерфейса, через использование исключительно асинхронного механизма при обновлении.

Все Web-модули, в целом, получили возможность изменения вида посредством тем, через общесистемные интерфейсы модуля протокола HTTP и его механизмы обработки запросов и формирования ответов. Также, все они получили поддержку динамического перевода интерфейса, что особенно актуально для многопользовательских Web-интерфейсов и с чем Вы можете ознакомиться на демонстрационных Web-интерфейсах моделей OpenSCADA: АГЛКС, Котел. Добавлен также механизм разделения доступа по страницам, который, кроме всего прочего, позволяет разграничить доступ к Web-модулям вообще.

## 5 Новые и значительно обновленные модули

В новой версии были добавлены новые модули и значительным образом обновлен ряд существующих:

- Добавлены новые модули:
  - MMS(IEC-9506) (DAQ.MMS) — модуль поддержки обмена данных по протоколу "Manufacturing Message Specification (MMS, IEC-9506)".
  - Comedi (DAQ.Comedi) — модуль поддержки источников данных реального времени (библиотека "Comedi"), которые основаны на платах сбора данных различных производителей и устанавливаются на шинах: ISA, PCI, PCMCIA и USB.
  - SMH2Gi (DAQ.SMH2Gi) — модуль реализации доступа к аппаратным модулям источников данных ПЛК Segnetics SMH2Gi,SMH4 для "MC", "MR", а также взаимодействия с оригинальным окружением "SMLogix".
  - Fastwel IO (DAQ.Fastwel) — модуль обмена данными с аппаратными модулями Fastwel IO.
  - FT3 (АПСТМ) (DAQ.FT3) — модуль обмена данными с контроллерами АПСТМ, АСДКУ, СУАП.
  - GPIO (DAQ.GPIO) — модуль доступа к GPIO одноплатных ПК вроде Raspberry Pi, Orange Pi и другие.
- Вычислитель на основе Java-подобного языка (DAQ.JavaLikeCalc) расширен: поддержкой внутренних функций, динамическим переводом сообщений и многими другими функциями интерфейса пользовательского программирования в целом.
- Шлюз источников данных (DAQ.DAQGate) расширен шлюзованием сообщений, связанных с выбранным источником данных.
- Сбор данных ОС (DAQ.System) расширен источниками данных: "Файловая Система", "ИБП", "QSensor" и возможностью отделения медленных источников от быстрых.
- ModBus ({DAQ,Protocol}.ModBus) расширен поддержкой строки, как последовательности значений регистров.
- Клиент DCON (DAQ.DCON) значительно расширен поддержкой специфических модулей.
- Роли OpenSCADA как OPC-UA сервер.
  OPC-UA (DAQ.OPC_UA) значительно расширен публикацией и поддержкой "кусков" в клиентской части сервиса, специфический код протокола выделен в библиотеку.
- Оборудование ICP_DAS (DAQ.ICP_DAS) значительно расширен, а фактически полностью переписан, поддержкой всех присутствующих плат сбора данных от фирмы ICP_DAS для серии I8k, I-87k, на шине ISA и унифицированные типы для стандартных модулей серии I7k.
- Siemens S7 ПЛК (DAQ.Siemens) значительно расширен собственной реализацией ISO-TSAP.
- Diamond платы сбора данных (DAQ.DiamondBoards) значительно расширен, а фактически полностью переписан, поддержкой всех присутствующих плат сбора данных от фирмы Diamond Systems.
- Устройства АСКУ (DAQ.AMRDevs) реализована поддержка счётчика Контар (МЗТА).
- Все модули БД значительно расширены динамическим переводом.
- Архиватор на БД (Archive.DBArch) расширен архивацией нескольких архивов в одну таблицу и восстановлением перечня архивов из информации в БД.
- Архиватор на ФС (Archive.FSArch) добавлена поддержка промежуточных типов "Int16", "Int32", "Int64", "Float", "Double" и дополнен абсолютным ограничением размера архива на диске.
- Все модули транспортов расширены режимом пулинга входных транспортов и протоколов.
- Сокеты (DAQ.Sockets) расширен поддержкой шины RAWCAN и инициативным подключением входного транспорта.
- Последовательный интерфейс (Transport.Serial) расширен поддержкой низкоуровневой шины I2C; специальными пользовательскими функциями последовательного интерфейса: "sendbreak", "TS", "DR", "DCD", "RI"; расширенным управлением RTS для RS-485.
- Слой безопасных сокетов (Transport.SSL) расширен поддержкой: TLSv1.1, TLSv1.2, DTLSv1.
- Собственный протокол программы (Protocol.SelfSystem) расширен иерархическим и многоуровневым направлением запросов на внешние хосты.
- HTTP (Protocol.HTTP) расширен адаптивностью к интерфейсам пользователя в системных диалогах и предоставлением общего API построения HTTP-интерфейсов как для пользователя, так и модулям за ним.
- Программный конфигуратор (Qt) (UI.QTCfg) запросы интерфейса управления OpenSCADA вынесены в отдельный поток и улучшена реализация элементов контроля.
- Программный конфигуратор (Динамический WEB) (UI.WebCfgD) расширен новым дизайном с использованием CSS3 и возможностей современных WEB-браузеров.
- Концепция и движок среды визуализации и управления (UI.VCAEngine) расширен: поддержкой специфических для визуализатора атрибутов виджетов, реализацией нового-гибкого механизма уведомления пользователя, фоновым (в отдельном потоке) исполнением задачи формирования документов, увеличением количества трендов на одном кадре до 100 и поддержкой логарифмической шкалы примитива "Диаграмма".
- Рабочий пользовательский интерфейс (Qt) (UI.Vision) расширен: для работы в сети через сервер визуализации; реализацией группы специфических этого визуализатора атрибутов; реализацией видов "Дерево", "Таблица" и расширением вида "Кнопка", примитива "Элементы формы"; реализацией вида "XY" примитива "Диаграмма"; значительным рефакторингом кода примитива "Элементарная фигура".
- Рабочий пользовательский интерфейс (WEB) (UI.WebVision) расширен использованием CSS3 и возможностей современных браузеров, а именно: добавлено масштабирование к доступному пространству окна браузера, реализованы все примитивы унифицированного интерфейса.
- Библиотека функций системного API среды пользовательского программирования (Special.FLibSYS) расширен функциями и объектами: "floatExtract", "md5", "tmSleep", объект "IO"; значительно расширены существующие функции и объекты: "dbReqSQL", "FFT", "strParse", "strDec4Bin".

## 6 Выводы

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

LTS версии OpenSCADA не являются пустым звуком, они реально поддерживаются всё время, до следующей LTS версии, и поддержка этой версии ещё будет расширена сервисными обновлениями. Также, будет осуществлёно смещение акцента и политики внедрения LTS версии, которая до этого рекомендовалась к обновлению конфигураций с замороженными библиотечными БД, на приоритет в использовании на широком спектре новых решений.

Предадаптация OpenSCADA к работе на QNX.

В появлении новой промышленной версии OpenSCADA 0.9 LTS приняли участие:

- Роман Савоченко: основной объём работ по разработке, тестированию, сборке, документированию и переводу программы и документации тремя языками.
- Максим Кочетков: реализация модулей DAQ.Fastwel, DAQ.FT3; расширение модуля Transport.Sockets поддержкой RAWCAN и модуля Transport.Serial расширенным управлением RTS для RS-485.
- Арсен Закоян: реализация поддержки счётчиков электроэнергии "Меркурий 200" и "Меркурий 230".
- Руслан Ярмолюк: реализация поддержки счётчика электроэнергии NIK 2303.
- Алмаз Каримов: расширение модуля реализации протокола DCON.
- Аркадий Кисель: реализация поддержки I2C сенсора температуры, барометрического давления и влажности BME280.
- Константин (IrmIngeneer): поддержка сборки OpenSCADA на дистрибутиве Linux Gentoo.
- Сергей Дорошка: предварительная адаптация OpenSCADA к работе на QNX.
- Организации, которые содействовали наиболее значительному усовершенствованию OpenSCADA через её интеграцию в собственные системы управления:
  - Proviron Holding NV: приобретение пакетов технической поддержки для общей поддержки, исправления и улучшения реализации протокола Siemens ISO-TSAP(ProfiNet), некоторых наработок около Raspberry Pi, 2014, 2016-2018.
  - Лаборатория вакуумных технологий: "Вакуумная технологическая установка", 2011-2018, и финансирование оборудования сервера OpenSCADA, 2014.
  - Оптима: "Система Автоматизации Метрополитена", 2016.
  - Вектор: приобретение пакетов технической поддержки для исправления и улучшения реализации OPC-UA в работе с разными OPC-UA клиентами и серверами, 2015-2016.
  - Краматорсктеплоэнерго+ДІЯ: "САУ шаровых барабанных мельниц ШБМ 287\410 котлоагрегата №8 БКЗ 160–100 ПТ", 2015, та "САУ Фосфатирования, Амминирования и Гидразина котлоагрегатов БКЗ 160–100 ПТ", 2014. В качестве ПЛК использован ICP-DAS LP-8781 с OpenSCADA в роли среды исполнения ПЛК.
  - Хартрон: "Система Контроля Реактивности (СКР) Ядерной Подкритической Установки (ЯПУ)", 2013-2015.
- Много других организаций и отдельных пользователей, которые пожелали остаться анонимными, через приобретение технической поддержки и услуг, конструктивные отзывы внедрения и эксплуатации.

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

- Завершение ревизии основной документации, в основном по модулям и библиотекам.
- Чёткое определение и обновление политики предоставления коммерческих услуг вокруг проекта OpenSCADA:
  - пересмотр и обновление условий пакетов технической поддержки;
  - политика и организация сборок обновлений к стабильной ветви: сохранение истории всех публичных обновлений и организация сервисных;
  - дистрибуция исключительно коммерческих сборок с публичными демонстрационными на примере пакетов для Android — разработка и формирование механизма контроля за сроком пакета технической поддержки и демонстрационного режиму.
- Освоение и адаптацию к отрасли "Управление ресурсами предприятия (ERP)" с направленностью на:
  - создание интерфейса управления ресурсами на сервере проекта;
  - создание общего интерфейса контроля задач и их финансирования, с организацией разработчиков к привлечению исполнения этих задач и технической поддержки.
- Расширение функций применения в отраслях "Умный дом", "Домовая автоматика" и "Бытовые роботы".
- Адаптацию к работе в окружении операционных систем QNX и MS Windows.

## 7 Обновления

### 7.1 [01.01.7534/01.03.2026] ДЕВЯТОЕ обновление

Это обновление релиза 0.9 LTS исправляет около 70 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.

Automation Linux distributive of the project OpenSCADA

- adaptation of work the hosting server under constant DDoS in ~3 million unique IPs and with short time under power net by economy the batteries, and under OpenSCADA control;
- appending Debian 13 as the distributive base;
- moving back to the OpenSCADA server of building the Debian 9 base;
- moving of building the Debian 12,11,10 base to the Debian 13 environment with enabling back support SHA-1 here;
- switching the building conception to use sshfs in working remotely with the repositories;
- updating TDE to 14.1.4, 14.1.5 and next to 14.1.6;
- TDE > krusader-trinity > RAR: Loading the builtin TDEIO RAR library.
- TDE > tdebase-trinity > TDEIO > media: Translation the FS options in the "propsdlg" plugin.
- TDE > tde-i18n-trinity > uk: Adding messages translation in patched packages to the Ukrainian part.
- TDE > tdebase-trinity > KControl > Locale: Clearing the language settings to system ones.
- TDE > tdelibs-trinity > TDELocale: Adding of obtaining country from environment.
- TDE > tdelibs-trinity > TDEIO > SwitchLanguageDialog: Clearing all language setting.
- TDE > tdeutils-trinity > ARK: Adding "unrar-free" using.
- TDE > krusader-trinity > RAR: Adding "unrar-free" using.
- TDE > tdegraphics-trinity > kghostview: Represent PDF on Ghostscript 10.05.
- TDE > tdebase-trinity: KDesktop > Lock: Restoring the locking code to one in version 14.1.4 with extending for the lock dialog itself.
- TDE > tdepim-trinity > holiday_ua > HoliDays: Replacing by actual Holi Days and Memorial Days of Ukraine.
- TDE > kaffeine-trinity > xine-part: Adding translation the message "Impossible to obtain image!" to Ukrainian.
- TDE > tdebase-trinity: Preventing-oppressing double icons in the system tray from programs with equal window ID like to blueman and with an option of disabling that function, with fixing of using readBoolEntry().
- TDE > tqt3-trinity > Plugins > XIM: Calls XCloseIM() to prevent memory leaking.
- TDE > tdelibs-trinity > TDEIO > KFileView: Processes file extensions with patterns at saving and doesn't reset the dialog size.
- TDE > kaffeine-trinity > xine-part: Allows to screenshot in any supported image-file format.
- TDE > tdesvn-trinity: Fixing of conflicts resolving in KDiff3, preventing of crashes at conflicts resolving, updating parent of changed item with all expandings.
- TDE > tdebase-trinity > TDEIO > media: Restoring of using fuser.
- TDE > tdebase-trinity > ksysguard: Removing the processes loading limit in 100%.
- TDE > tdelibs-trinity > TDEIO > CopyJob: Don't rename directories and files overwrite for old, lesser and in different size.
- TDE > tdebase-trinity > TDEIO > SMB: Prevents double result() signal generation through errors.
- TDE > tdepim-trinity > knote: Adding the find only local per selected note.
- TDE > tdelibs-trinity: Complete disabling of processing for the unclassified devices due to it is very CPU intensive, especially on slow HW.

Main WWW-resources, documentation of the project and subprojects, and localisation

- appending the Main elements library of the user interface by description the new element-frame "Dynamic frame";
- updating information of the subproject Automatic Builder of OpenSCADA;
- adding Portuguese translation from Diego Eckhard for parts: SYS, DAQ.ModBus, Transport.{Sockets,SSL,Serial}, UI.{QTStarter,QTCfg,VCAEngine,Vision}.

New and significantly updated parts

- OpenSCADA Core: 3:15:0 => 3:16:0

  (Implementing initiative connections — fixes and expandings of the conceptual changes of the previous updates, Messages Translation — fixes of the conceptual changes of the previous updates)

- OpenSCADA "DAQ" subsystem: 15 => 16
- OpenSCADA "Archives" subsystem: 14 => 15
- DAQ.Siemens: 4.5 => 4.8

  (Common stabilization in the ISO_TCP connection, Direct value getting and setting at the source-specific address, Storing values of the user's dynamic attributes)

- DAQ.System: 3.3 => 3.5

  (Reading the NVMe Log with moving on parsing by RE and reading string fields)

- DAQ.LogicLev: 2.9 => 2.11

  (Improving the parameter reflection mode, Storing values of the user's dynamic attributes)

- DAQ.OPC_UA: 2.8 => 2.10

  (Direct value getting and setting at the source-specific address, Storing values of the user's dynamic attributes)

- DAQ.ModBus: 3.9 => 3.11

  (Direct value getting and setting at the source-specific address, Storing values of the user's dynamic attributes)

- DAQ.DAQGate: 2.14 => 2.15
- Protocol.HTTP: 3.9 => 3.11
- UI.WebCfgD: 2.8 => 3.0

  (Syntax highlight in the textareas)

- UI.VCAEngine: 7.17 => 7.19
- UI.WebVision: 6.13 => 6.16
- UI.QTStarter: 6.0 => 6.1
- UI.QTCfg: 6.1 => 6.2
- UI.WebCfgD: 3.0 => 3.1
- LibsDB.OscadaLibs:

  - JavaLikeCalc.flb_Json: 0.3
  - base:
    - UPS: 1.3 => 2.2
      (Implementing devices directly, attributes definition in "Elements definition (defs)")
    - DiskSMART: 1.0 => 1.1
      (Input processing procedure)
    - initRemCntr: 1.1 => 1.2
  - DevLib.mbBase: 1.3 => 1.6
    (Input processing procedure, additional types and flexible attributes update)
  - LowDevLib:
    - IEC62056: 1.1 => 2.0
      (Support 21 part and many improvements)
    - S1BP: 1.0 => 1.1

- LibsDB.vcaBase.Main: 2.2 => 2.3

  - dynFrame: 1.2
  - storeHouse: 2.1 => 2.3
    (Significant extending and fixing)
  - TextLab: 1.2 => 1.3
    (States extending)
  - ImgLab: 1.2 => 1.3
    (States extending)
  - cntrPaspExt: 1.2 => 1.3

CONCEPTUAL > Concentration the different OpenSCADA-hosts on the common server, both for IoT on OpenSCADA and other (fixes of the conceptual changes of the previous updates)

- LibsDB.vcaBase.wlb_Main.dynFrame: Advancing the frame implementation up to the possibility of items real placing, linking, generic control, saving and restoring.
- LibsDB.OscadaLibs:
  - FIX:tmplib_base.initRemCntr: Fixing of saving the table of the remote OpenSCADA hosts after removing old ones.
    - Adding of direct freeing data of requests.
    - The key changed to force two symbols in HEX.
    - Allowed of updating the remote logical source objects for new sources.
    - The protection time of the execution increased to 60 seconds.
    - Checking and removing logical parameters with missing sources.
    - Setting the field "Allow the automatic removal of parameters and attributes" and "Synchronization time with the remote station, seconds" of the DAQGate module.
  - Security_user,Transport_in.{Sockets,SSL}::RemCntr: Appending detailed description of the objects target and using.
- data/{oscada_plc.xml,oscada_server.xml}: Simplifying the station name for short remote identifiers.

CONCEPTUAL > Messages Translation (fixes of the conceptual changes of the previous updates)

- LibsDB.vcaBase:
  - FIX:wlb_Main.ElViewGraph: The attribute "Dimension (ed)" set to the type "String (translate)" to restore the transitive translation of the DAQ-Source messages at the links in the DYNAMIC-MULTILANGUAGE mode.
- FIX:DAQ.TDAQS,Archive.TArchives: Fixing dynamic translation of names of the redundant objects.
- FIX:SYS,DAQ.{.,JavaLikeCalc}: TFunction::IO: Fixing-finishing of the default value translation in the constructor and for the DAQ-Templates with its implementations.
- SYS:
  - The Translation Manager is appended by an information into the last line about achieving an limit time.
  - FIX:TMess: Adding of processing prestored I18N messages in the long TMess::translGet() variant, which is called from objFuncCall(), instead the translation loss here.
- FIX:DB: Preventing the warnings "Some messages completely cleaned for the base ..." for items with no translation fields.
- FIX:DAQ: Fixing dynamic translation the select items from the default field in addLinksAttrs().
- FIX:UI.VCAEngine: The configuration value fixed in translation on the tab "Links" and processing the field translation for values with the prefix "val:" and switching to its.

OpenSCADA libraries and projects

- LibsDB.OscadaLibs:
  - Adding the new library "Json" of support JSON from Arkadii Kysil.
  - FIX:{tmplib_base,tmplib_DevLib}.UPS: Fixing of writing to the writable attributes.
  - tmplib_base:
    - digAlarm,anUnif,anUnifSt,codeState: The input processing procedure added by a parameter "args" as a link to arguments of the main procedure.
    - UPS: Expanding by implementing devices directly in this template starting from Must EP2X. Appending of attributes transferring in parameters on the template base with their definition in the new attribute "Elements definition (defs)". Adding the alarm() function for true control of borders with hysteresis.
    - FIX:manInUnif: Preventing of setting stored value to PLC at start, so overwriting actual one, also at the signal out the scale.
    - FIX:DiskSMART: Adding the input processing procedure for processing specific fields and adding new derivative fields. The "Item definitions" field added a default list of specific interpretation the SMART fields. Improving some original messages.
    - anUnif: The alarm message of signal exceeding hardware border added by this wrong value.
  - tmplib_DevLib:
    - mbBase,ergomera625: Improving the syntax highlight rules for types like to "u4".
    - IEC62056: Expanding by support part 21 (direct local data exchange) and improvements:
      - adding input procedure for processing read OBISes;
      - list of OBISes appeded by description and the syntax higflight;
      - adding an option of control bytes LE order of integers;
      - ID of the attribute of representing OBIS appended by "ClassId" and "a";
      - "ClassId" of OBIS expanded up to two bytes;
      - trimming the visible strings up to first zero byte;
      - adding preset devices with known main OBISes;
      - address field expanded for support single digit like to SN;
      - the "tr" and "ctx" attributes moved from IO.
    - mbBase: Expanded by an input procedure for customizing without changing the template. Expanding in support by the types "Int8 (i8)" and "Double (d)", also as by recreation attributes with changed type and removing attributes are missing in the items list. Allowing to specify address of the register in HEX and OCTAL. Adding by applying entries of the register syntax of the module DAQ.ModBus.
- LibsDB.vcaBase:
  - wlb_Main: The library appended by the frame "Dynamic frame (dynFrame)" with documenting.
    - The library appended by an extra icon 'weath13n' for the widget "Weather (weather)".
    - FIX:TextLab,ImgLab: Expanding for processing conflict states "false && false" and "true && true" taking the parameters from item [2] and [3].
      - Adding alarms generation from the "Error (err)" attribute.
      - FIX: Renaming the states name "Enable" to "Enabled" and "Disable" to "Disabled".
      - FIX: Unifying the alarms blinking with just changing work color to alarm one in the second cycle.
    - alarmsAct,alarmsSt: Adaptation to human-readable names in messages.
    - FIX:storeHouse: Moving the Control Panel formation and updating to the table updating code.
      - FIX: Separating data preparing part from formation the visual data for early preparing the lists and with limiting time of processed items.
      - Appending to processing the event ws_TableEdit of checking validity row and column.
      - The retry cycles and updating rewrote for specifying time in "toCalcCycles" in seconds and updating after its elapsing.
      - FIX: Preventing of show second filter field in the item form after change the user.
      - FIX: Fixing the images overview at selecting in the file combobox.
      - Specifying the transaction mode in all SQLReq() calls.
      - The control panel appended by the selection fields.
      - Rewrote in preparing the column list for filters with using redefined names of the standard fields "NAME", "DSCR", and with true sorting.
      - In file sizes used new function SYS.cpct2str().
    - FIX:ImgLab: Taking the background color even empty from images list at its presence.
      - FIX: Setting width of the border to 2 when it is zero at the selection blinking, that is for active elements.
      - Format of the attribute "Images (imgs)" moved to the help, that is to the second line.
    - FIX:objProps: Appending of tracing the user changing, appending for support real properties.
    - ElCadr: Adding the attribute "Parameter: Force disable PID (prmNotPID)" for disabling PID show at presence SP.
    - cntrPaspExt: Hide attributes in EVAL. Generating for user action messages at changing the editable properties.
    - TextLab: Adapted to use the default background at its missing in "st_text".
  - wlb_doc:
    - FIX:docRepYear: Fixing of processing the last value in year for data from archives.
    - docUsersSet: Expanding by a possibility to specify-configure of used archivers.
- Model.AGLKS.Model.DAQ_BlockCalc.gen_cnt: Appending the description by the field "MessName: {Name}".

API
!!!!:Changes:

- SYS.ResString: getVal() set to constant.
- Archives,DAQ.*: Enumeration items of the source modes added by the "SRC_" prefix and "ActiveAttr" renamed to "DAQAttrAct"; items of the combination modes added by the "CMB_" prefix and an item "FromArchiver"; items of the data mode added by the "DM_" prefix instead "DM".
- DAQ.TFunction: Switching the method "mStor" to ResString.

Appends:

- SYS.CntrNode,Protocol.HTTP: Adding the service requests "select:/db/list" by an option "nostor" for the empty item.
- SYS,UI.VCAEngine: Appending the definition "starts_with" as link to the STL::String function "compare(0,strlen(str),str) == 0" to replace compare() and find() in this role.
- Archives,DAQ.DAQGate: The TMArchivator object appended by a reimplementation TMess::SRec with a container of storing double messages in one second.
- SYS: The file's User API functions appended by fileRotate() for files rotation mostly the logging type.
  - TCntrNode: new function nodeMessSnthHgl().
  - XMLNode: The function load() appended of parsing pure HTML with an option LD_HTML. The function save() appended by an option HoldEmptyAttr of holding empty attributes.
  - XMLNodeObj: Added by the User API and API function childDel( AutoHD<XMLNodeObj> nd ). The User API function setAttr() added by a synonym attrSet().
- DAQ:
  - TController,TParamContr: Adding a function justCreated() of detection the just creation.
  - TParamContr: Added by a virtual function loadVal() of reloading all or one stored values.
  - TPrmTempl.Impl.archAttrs(): Appended by a timestamp argument for using common timestamp in archiving.
  - ModBus,OPC_UA,Siemens: The Controller Object added by a User API function value() of direct value getting and setting at the source-specific address and through the address registering for getting-setting in the generic pooling cycle of the source.
- Archives: The TVArchivator object is added by the functions combMode() and setCombMode().
- JavaLikeCalc: The User API functions to string appended by sep2path().

SYS

- Building:
  - configure.ac: Core library version risen to 3:16:0 and the program version risen to 0.9.9. The module version of the subsystem "DAQ" risen to 16 and the subsystem "Archives" risen to 15.
  - Appended for building to Debian 13 and Ubuntu 26.04 LTS.
  - .,DAQ.Siemens: Generic adaptation for building on Debian 13, adaptation for support PCRE2 since missing old PCRE libraries on Debian 13 with moving the variable "vSz" to a definition TRegExp_vSz for old libraries.
  - DB.MySQL: Adaption to build with headers without definition the "my_bool" type on Ubuntu 26.04 LTS.
- XMLNode: The function load() appended of parsing pure HTML with: tags without closing, attributes without a value, attribute values without quoting, closing tags switching.

DAQ

- Templates: Enabling the selectable fields in the "Template configuration" tab for constants.
- FIX:{ModBus,OPC_UA,Siemens}.LogicLev: Preventing of wrong writing to PLC at RO links, when the value changed in the procedure.
- LogicLev,ModBus,OPC_UA,Siemens: The User API functions attrAdd() and attrDel() of managing user attributes moved from LogicLev, ModBus, OPC_UA, Siemens to the core parameter object and for all dynamic parameters at dynElCntr(). Adding of storing values of the user's dynamic attributes.
- FIX:Siemens: Moving the SELF_ISO_TCP mode to the generic outAt() function. Debugging the connection errors for the modes SELF_ISO_TCP and ISO_TCP on the actual S7-1500 connection.
- System: Adding the data acquisition of the slow sources per some cycle by the new configuration field "In cycle call for slow sources".
  - DA_SMART: Adding for support reading the NVMe Log with moving on parsing by RE and reading string fields, like to temperature.
  - DA_PROC: Appended by obtaining the field "User loading (%)" and "System loading (%)" from the file "/proc/{PID}/stat" also with the value concatenation for group selection.
- FIX:JavaLikeCalc: Fixing permission to the Function node after moving under ACL.
- FIX:LogicLev: Improving the parameter reflection mode by a possibility to connect later the missing at the start sources, also as unlinking-unlocking disabled sources.
- FIX:DAQGate: Fixing messSet() by taking parameter whole ID from the first line of the argument "prm" and with its normalization by the prefix "prm_" removing. Set for writing to remote stations without checking the value at equality, due to the previous value can be not actual at situative reading.
- ModBus: Unified in registering values at the ModBus-specific address in other variant of the function regVal().

Archives-History

- FIX:Value: Prevented of crashing at zero period in TVArchEl::getVals().
  - Added by a configuration field "Data combining mode (CombMode)", as in the archive object, for specifying the data combination in the archiver, and the field in archive added by an item "From Archiver" by default.
  - The "Active DAQ Attribute (DEPRECATED)" item of the archive source renamed to "DAQ Attribute actively" and unmarked deprecated due to it is the single way of creation multiple archives to single source.

Transports

- FIX: The generic Control Interface requesting function cntrIfCmd() is prevented from any local-direct-custom authentication at reforwarding to intermediate OpenSCADA nodes, that is especially actual for remote connections of UI.Vision for different users.
- The traffic logging in the file appended by rotation the files.

User Interface

- FIX:Vision,WebVision: Fixing of compensation debries of the real numbers in position and size for true aligning the internal content of widgets with different size, when the scale greater of 1. Preventing of crashing in the VCADiagram::TrendObj::loadTrendsData() function at zero in "wantPer".
- QTCfg,Vision: The tab distance of the TextArea set dynamic and calculated from the font metric for standard eight symbols "00000000".
- WebCfgD: Implemented for syntax highlight in the textareas.
- FIX:WebVision: Restoring a function of user changing after previous preventing the connection messages flooding with connection to the same session from other host or other agent. Adding the user of last request for preventing from new sessions opening after changing the user from original.
- FIX:VCAEngine: Moving setting the flag Attr::VizerSpec for attributes with the prefix "vs_" to the attributes inheritance and only for session widgets. Unification the Attribute's self flags by separation to storing and operative ones.
- FIX:QTStarter.lib_qtgen: The syntax highlight algorithm in SnthHgl::rule() cleaned from spare containers and unified.
- FIX:Vision: Preventing of crashing in the ShapeFormEl event handler at not finished initialisation, that is the "addrWdg" variable is missing. Preventing of the user changing for reforwarding connections.

### 7.2 [01.01.7533/01.03.2025] ВОСЬМОЕ обновление

Это обновление релиза 0.9 LTS исправляет около 70 ошибок и добавляет МНОГО улучшений с несколькими значительными-концептуальными, с которыми целиком можно ознакомиться в протоколе изменений обновления.

Automation Linux distributive of the project OpenSCADA

- the actual (Debian) TDE-repository was mirrored completely in used parts by the project with resigning all those packages by the OpenSCADA key, and that was performed in folders TDE14.1 for versions >= 9 and TDE14.0 for < 9. That is together with patched packages, which were moved to TDE14.0 for old Debian versions;
- formalisation the partial TDE forking under the subproject — the Automation Linux distributive of the project OpenSCADA;
- updating TDE to 14.1.3 and next to 14.1.4 with building patched packages also for Debian 8,10 ARMHF;
- restoring of starting nm-applet in the system tray and removing the "raspi-firmware" package from Debian 12 installations;
- TDE > tdebase-trinity > KXKB-KLayouts: Restoring of loading default XKb parameters, that is key combination of switching the keyboard layout;
- TDE > Digikam: Restoring of building by AutoTools in 14.1.4;
- ghostscript: Preventing of cleaning the transparent background setting in pdfi_create_DeviceRGB() by pdfi_setrgbfill(ctx) before, for true transparent backgrounds;
- TDE > tdegraphics-trinity > KSVG: Preventing of cycling the SVG-thumbnailer at NAN variable "th_arc" of some arcs;
- TDE > tdegraphics-trinity > KPDF: Updating the local copy of Poppler in KPDF for restoring loaded originally fill and stroke color, for true transparent backgrounds;
- TDE > tqt3-trinity: Preventing QTextEdit crash at paste RTE with paragraphs to the begin, by updating the variable "lastFormatted";
- TDE > tdepowersave-trinity: Preventing of locking-sticking the sign "blacklisted_running" after running one blacklisted program;
- TDE > basket-trinity: Fixing of no replacing selected blocks into note at pasting RTE, just appending before the block;
- TDE > tdepim-trinity > KOrganizer: Preventing of appearing two dialogues of item editing and new item at double clicking on cell with items in the month view;
- TDE > krusader-trinity: Fixing of refreshing source panel at moving operations;
- TDE > tdebase-trinity > Konqueror: Preventing of items sometime doubling in the tab item "System (system:/)" through doubly call setOpen(true);
- TDE > tdebase-trinity > QuickLauncher: Completing of fixing of appearance in QuickLauncher of empty-zero items after removing some item, what related with inserting already missing desktop-file (after uninstalling the application) from the popularity;
- TDE > krusader-trinity: Preventing of force locking mounted media-folders after changing local directory to remote-virtual one, in a way of changing the local folder to Home. Also preventing the memory leakage on call the function getcwd(0, 0) without freeing its result;
- TDE > krusader-trinity: Preventing of cleaning the panel with item list of a SMB share after item renaming through receiving second or third result() event from IO-Slave, that is the panel refresh is lagged now at 0.5 seconds after renaming;
- TDE > tdebase-trinity > KDesktop: Preventing of complete freezing KDesktop on waiting the Saver Engine during about one minute after wake up, by not use sigsuspend() for waiting "mSaverProcessReady" where enough to call tqApp->processEvents();
- TDE > tdelibs-trinity > DCOP: Switching internal interval timers on the modern "timespec" structure and the Monotonic clock in the base, that is made DCOP insensitivity to jumps of the real time, especially at waking up;
- TDE > tqt3-trinity: Complete switching Qt3 interval timers (QTimer) on the modern "timespec" structure and the Monotonic clock in the base, that is made Qt3 insensitivity to jumps of the real time, especially at waking up;
- TDE > kaffeine-trinity: Appending support the WEBM media format;
- TDE > tdelibs-trinity > MIME: Appending support the WEBM media format;
- xine-lib: Switching "display_queue.mutex" in Video out to the recursive mode for preventing hangs in xine_new_framegrab_video_port();
- TDE > tdemultimedia-trinity > XineThumbnails: Audio Disabled by xine_new_framegrab_audio_port() and HUE corrected. In addition to preventing dead locks in Xine;
- TDE > tdelibs-trinity > TDE IO: Setting the slave connection timeout of SLAVE_CONNECTION_TIMEOUT_MIN from 2 to 10 and SLAVE_CONNECTION_TIMEOUT_MAX from 10 to 30 for preventing errors of the FILE-slave missing on generally slow hardware and HDD/SSD with slow sectors;
- TDE > tdeadmin-trinity > KPackage: Adding the menu "APT Specials" by items: "Clean (apt-get clean)", "Autoremove (apt-get autoremove)";
- TDE > tqt3-trinity: Preventing hangs on rendering wrong char shapes in TQTextEngine, it was noticed in KCharSelect on page 15;
- TDE > tdelibs-trinity: Fixing of substitution correct year in the kdatepicker corresponding to the selected Calendar System;
- TDE > kdiff3-trinity: Switching URLs in the plugin's menu to the pretty view instead encoding UTF-8 chars of native locales;
- TDE > tqt3-trinity: Softening an effect of high-whole CPU loading at flooding Pending events from the GLib interface to the X11 server, what is brightly appeared on digikam-showfoto, or qtwaittimer, what detected on kdesktop-screensaver at wake up, by appending short waiting on 1ms after processing the events;
- TDE > amarok-trinity: Preventing of flooding with high CPU loading especially on old-slow systems during execution in the system tray and before opening the PlayList window, due to the analysers are wrongly started in the background at changing the animation period;
- TDE > tdebase-trinity > MediaManager: Appending of switching the /etc/fstab using whether by a util of mounting like to udisks or the generic mount program. And that is suitable both for FD and CD/DVD/BLURAY due to udisks[2] doesn't mount them without an entry in /etc/fstab;
- TDE > tdebase-trinity > MediaManager: Fixing nonconformity in icon names for CD-R and CD-RW in tdeioslave (14.0.10 on Debian 7);
- TDE > kaffeine-trinity: Fixing of playing DVD with XINE versions which misunderstand URM "dvd://", only "dvd:/";
- TDE > tdebase-trinity > Kate: Reverting broken sessions from 14.0.

Main WWW-resources, documentation of the project and subprojects

- appending the Industrial devices library page by description new templates;
- appending the Low level sensors and chips library page by description new templates;
- appending the Main library page by description new templates;
- appending the How to Create module by a chapter "Creating new Internal Elements and Libraries with them".

New and significantly updated parts

- OpenSCADA Core: 3:14:0 => 3:15:0

  (Implementing properties of the Control Objects, Implementing the custom ACLs to the control nodes, Implementing initiative connections, Expanding the project management, Messages Translation — fixes of the conceptual changes of the previous updates)

- OpenSCADA "Transports" subsystem: 20 => 21
- DAQ.JavaLikeCalc: 5.6 => 5.8
- DAQ.DAQGate: 2.13 => 2.14
- DAQ.ModBus: 3.8 => 3.9
- Archive.FSArch: 3.8 => 3.9
- Transport.SSL: 4.5 => 5.2

  (Fixing finally the non reentrability effect, unification and overriding the address resolving in different ways)

- Transport.Sockets: 4.8 => 5.1

  (Fixing finally the non reentrability effect, unification and overriding the address resolving in different ways)

- Protocol.OPC_UA: 2.2 => 2.3

  (True authentication with control the permission)

- Protocol.HTTP: 3.8 => 3.9
- Protocol.ModBus: 2.10 => 2.11
- UI.QTCfg: 6.0 => 6.1
- UI.VCAEngine: 7.13 => 7.17
- UI.Vision: 9.1 => 9.5
- UI.WebUser: 1.6 => 2.0

  (Expanding for support direct writing)

- UI.WebVision: 6.9 => 6.13
- UI.WebCfgD: 2.6 => 2.8
- LibsDB.OscadaLibs.base: 2.2 => 2.3

  - initRemCntr: 1.1
  - fileServerHTTP: 1.0 => 1.2

- LibsDB.OscadaLibs.LowDevLib: 1.5 => 1.6

  - 1W: 2.1
  - S1BP: 1.0
  - UC96: 1.0 => 1.2

- LibsDB.OscadaLibs.DevLib: 3.0 => 3.1

  - ergomera125: 0.5
  - mbBase: 1.2 => 1.3

- LibsDB.vcaBase.Main

  - storeHouse: 1.4 => 2.1
    (Added file inclusion and image preview)
  - grph_panel: 1.5 => 1.6
  - doc_panel: 1.2 => 1.3
  - userManager: 1.6 => 1.7

- LibsDB.vcaTest.test.docTestGasNodeDayRep: 1.0 => 1.1

CONCEPTUAL > Implementing properties of the Control Objects

- SYS: TCntrNode:
  - Appending of the object properties in groups by prefixes for different parts of OpenSCADA: system (sys), user (usr), connection (con), security (sec), ... .
  - Adding a User API function property() of accessing the object properties from user context in additional to the direct-natural way.
- Transports: Moving the connection parameters to the object properties in group "con".
- DAQ: Moving the TValue flags resB1() and resB2() to the object properties in group "DAQ", that is removing such functions.

CONCEPTUAL > Implementing the custom ACLs to the control nodes

- SYS:
  - TCntrNode:
    - new functions nodeAccess(), nodeLoadACL(), nodeLoadACLSnthHgl();
    - moving from static with some improving and adaption to ACL with compatibility of the direct rules for the functions of the control interface: ctrMkNode(), ctrChkNode();
    - new definition-macros of the control interface for ACL: ctrMkNode3() as link to ctrMkNode() with automatic NULL termination argument, ctrChkNode2() and ctrChkNode3() as link to ctrChkNode();
    - ctrMkNode() switched to no exception at missing container nodes, just don't create and return NULL.
  - TFld: cntrCmdMake() added by an argument cntrO for linking with the Control Node, and all code adapted to that.
  - TConfig: cntrCmdMake() and cntrCmdProc() added by an argument cntrO for linking with the Control Node, and all code adapted to that.
- Transports: TTransportS: cntrCmdPrm() added by an argument cntrO for linking with the Control Node, and all code adapted to that.
- DAQ: Adaptation to ACLs in the description fields of the Controller and Parameter Objects, DAQ-Templates, JavaLikeCalc Functions and most DAQ-Modules. Default owner-permition for the DAQ subsystem set to "root:DAQ"-0775.
- Protocol.OPC_UA: Using ACL in checking the access.

CONCEPTUAL > Concentration the different OpenSCADA-hosts on the common server, both for IoT on OpenSCADA and other

- LibsDB.OscadaLibs:
  - tmplib_base: Appended by a template "Control the remote initiative connections (initRemCntr)", with documenting and completed translation to Ukrainian.
  - Appended of the user "RemCntr" with password "RemCntr" and in the group DAQ for use in the initiative remote connections to the OpenSCADA server.
  - Appended of the disabled transports "RemCntr" to Transport.Sockets and Transport.SSL, that is when you want to provide data of your station, you just enable one of them.
- ModelsDB/{AGLKS/oscada_AGLKS.xml,Boiler/oscada_Boiler.xml}: Removing system groups without users, than allow the groups specify in libraries.
- FIX:Transports: TTransportOut appended by the function isFromInput() to detect automatically created objects from the input transport. The external initiative connections of the OpenSCADA hosts prevented from stop.

CONCEPTUAL > Expanding the project management

- data/openscada-proj.in: Expanding by the commands snapshot, crash, cores with unification of preparing the crash reports also for the crashing processes from itself. Appending the crash-reports by "info thread" and "info sharedlibrary".
  - Refactoring the algorithm of processing the projects in the System and User directory, that is fixing of creation the project directory in the System directory at presence the System configuration file.
- SYS: Enabled in processing the signals SIGFPE and SIGSEGV with call openscada-proj crash {ProjID} to prepare the crash report immediately for SIGFPE, SIGABRT and SIGSEGV.
  - The process return-exit result for success is forced to EXIT_SUCCESS and for fail to EXIT_FAILURE.

CONCEPTUAL > Messages Translation (fixes of the conceptual changes of the previous updates)

- LibsDB.OscadaLibs: Automatic updating some translation.
- LibsDB.vcaBase.wlb_Main:
  - Appended of the dynamic messages with Ukrainian translation for main ones of DiskSMART and UPS during representing by "Object properties (objProps)".
  - FIX:ElCadr,ImgLab: The attribute "Parameter: code (prmShifr)", "Parameter: description (prmDescr)" and "Parameter: commands (digComs)", "Parameter: statuses (digStts)" set to the type "String (translate)".
  - anShow,anShow1: Appended of translation dynamic messages from parameter attributes NAME and DESCR.
  - FIX:RootPgSo: The attribute "Procedure of the Demo play (demoPlayProc)" set to the type "Text (translate)".
- SYS,DAQ,UI.VCAEngine: Implementing of disabling translation of string configuration fields, DAQ attributes, UI attributes at changing in the dynamic execution:
  - SYS,DAQ,DB.{FireBird,MySQL,ODBC,PostgreSQL,SQLite}: appending the unified method {TCfg,TVal}::isTransl() of checking translation the element, and moving on its everywhere;
  - TVal: appending the "mNoTransl" flag and functions of its treating: noTransl(), setNoTransl(), TValue::setNoTransl();
  - UI.VCAEngine::Attr: appending the "NoTransl" flag and its treating in isTransl();
  - translation is disabled:
    - at writing through links of implementation the templates in TPrmTempl::Impl::lnkOutput();
    - at the User API call TVal::set();
    - UI.VCAEngine: at Widget attribute change in the Session context for widgets in processing and at writing to DAQ attribute by links.
  - the DAQ Parameters added of restoring the translation of dynamically changed configuration fields at load.
- FIX:SYS: TMess: Adding messages to the table "Trs" is enabled only in the messages level "Debug" for preventing flooding to the table of any translated messages and not.
  - FIX: Preventing to show the Translation Manager in the SINGLE-LANGUAGE mode.
  - TMess::translDyn() forced to FALSE and the flag set to FALSE with switching to the SINGLE-LANGUAGE mode.
  - Configuration field of setting the program locale expanded by its cleaning at setting empty value.
  - The generic translation functions translGet() and translSet() expanded to use the user "root" at missing the translation context, that is you can set the default language in the DYNAMIC-MULTILANGUAGE mode just changing language of this user.
- DB: fieldSQLSet() appended of warning some messages completely cleaning at saving not the dynamic set fields but a copy. Appended of registering new message for translation with warning the registering and ready for translation in the Translation Manager after setting new base messages to empty fields.
- FIX:DAQ.OPC_UA,Protocol.HTTP,UI.{QTCfg,Vision}: Fixing and improving some original messages.
- FIX:DAQ: Fixing-finishing the dynamic translation for title of the controller and parameter object.
  - FIX: Templates fixed-adapted to the dynamic translation in using the IO names.
  - FIX: Fixing-finishing the dynamic translation of values requesting in the Control Request TValue::"get:/serv/attr" for non archiving elements.
  - FIX: messSet(),alarmSet() rewrote for dynamic translation.
  - Parameter templates allowed in setting empty names for their translation clearing in the dynamic translation mode.
  - LogicLev,ModBus,OPC_UA,Siemens: Appending of translation the configuration fields "NAME" and "DESCR" at loading to the calculation context.
  - FIX:DAQGate: Some fixed in Ukrainian translation.
  - FIX:JavaLikeCalk: Some improved in the translation.
- FIX:Protocol.OPC_UA: Adaption to the dynamic translation in data requests.
- FIX:UI.{QTCfg,Vision}: The messages "Load from DB" and "Save to DB" renamed to "Load" and "Save" and with "storage" instead "DB" in full messages.
- FIX:UI.VCAEngine: The session User API function this.attr() fixed in checking the translation flag TFld::TransltText.
  - FIX: Templates fixed-adapted to the dynamic translation in using the configuration template of the attributes.

OpenSCADA libraries and projects

- FIX:LibsDB.OscadaLibs:
  - tmplib_DevLib: Appended by the template "Ergomera 125 (ergomera125)" with initial implementation the own protocol and documenting.
    - mbBase: Expanded for support Input Registers by function 4.
    - FIX:VSE002: Rewrote in the packages sequential reading mode, that is detection all packages with notifying unknown.
    - FIX:Incubator: Fixing value of the 'Transport (transport)' field.
  - tmplib_LowDevLib: Appended by the template "BT: ATORCH S1BP (S1BP)" with documenting and completed translation to Ukrainian.
    - Appended by the template "1-Wire (1W)", which merged from 1W_DS9097 and 1W_DS9097U before appending I2C Drivers and expanded by an option "Only add attributes at scan", with documenting and completed translation to Ukrainian. Adding of support the I2C Driver DS2482-100 and some improving with fixing.
    - UC96: Expanded for support ATORCH UD24. Expanded by reading: "Volts maximum (Vup)", "Volts minimum (Vdwn)", "Data+, V (Dplus)", "Data-, V (Dminus)".
  - FIX:tmplib_base.fileServerHTTP: Expanded of big data transferring in chunks by the direct writing function writeTo(). For that appended by the attributes: "Transport (tr)", "Protocol (prt)" and "Sender (sender)".
  - FIX:flb_doc.diagram: Adding of drawing non periodic direct data like months. Implementing of rounding big interval points by the Besier Cubic Curves.
- LibsDB.vcaBase:
  - wlb_Main:
    - grph_panel,doc_panel: Adding of checking for activity the controlled trend or document, and closing at its inactivity. Moving in the size-depth field to the editable combobox with the digital number and human text multiplier, based on the new User API function time2str() and str2time(), that is removing the type field here.
    - docRepDay,docRepMonth,docUsersSet,docRepInstVals,docDin,docRep2WorkSh,docAlarmsRep,docMessRep: Adaptation to opening the document control panel after several seconds of starting-opening, that is for allowing the document control at displaying by QtWebengine.
    - grpGraph,grpCadr,doc_panel,grph_panel,prescrEdit,prescrRun,prescrRunSimple,accept,treeSelect,calendar,userManager,alarmsStReport,docRepDay,docRepMonth,docRepYear},wlb_prescr.{prescrEdit,prescrRun,prescrRunSimple: The variable ev_cur renamed to evCur.
    - storeHouse: Expanded by support of including files both to the MySQL LONGTEXT field and to FS. Appending preview the loaded images in the form and the item report. Appending dynamic control panel to the selected items in the table for fast control and accessing data of the complex fields.
    - FIX:grpGraph10: Fixed in the "geomZ" attribute for the included widgets "el9" and "el10".
    - FIX:RootPgSo: Improved by pause the demo-procedure's execution at no requests on WEB, so preventing of opening all pages before real close. The direct pages list append by checking the pages permission.
    - FIX:grpGraph: Fixed in the "geomZ" attribute for the "trnd1" and "arh" included widgets.
    - FIX:weather: Appending by icons of representing different states. Fixed in guaranty receiving the hourly data at the connection problems.
    - treeSelect: Updating icon of the frame with improving the name.
    - userManager: Moving to the Control Interface commands to work in redundant systems.
  - wlb_doc.docRepYear: Switching the direct data drawing on the diagram to the non periodic mode.
- LibsDB.vcaTest.wlb_test.docTestGasNodeDayRep: Adaptation to opening the document control panel at setting the "pgOpen" attribute and not setting the "pgOpen" attribute in the panel, due to the document is archiving, that is for allowing the document control at displaying by QtWebengine.
- ModelsDB.AGLKS:
  - wlb_doc.{docRepMonth,docRepDay}: Set to no process periodically.
  - wlb_test.docTestGasNodeDayRep: Set to process with period 10 seconds.

API
!!!!:Changes:

- SYS: Type of the limit variables "limUserFile_SZ", "limUserIts_N" changed to unsigned.
  - TCntrNode: Moving from static with renaming some arguments: ctrMkNode(), ctrChkNode(). Moving ctrMkNode2() to the definition-macros with automatic NULL termination argument. Merging _ctrMkNode() to ctrMkNode(). Changing prototype of the objPropSet() function in the "val" argument.
  - TVal: Moving to constant for fld().
  - TFld: cntrCmdMake() added by an argument "cntrO" with renaming some arguments.
  - TConfig: cntrCmdMake() and cntrCmdProc() added by an argument "cntrO" with renaming some arguments.
  - TMess: UTF symbol type in getUTF8() and setUTF8() changed from int32_t to uint32_t.
- Security: Renaming the function TSecurity::access() argument "access" to "perm", also for User API.
- Transports: TTransportS::cntrCmdPrm() added by an argument "cntrO".
- DAQ: Moving the TValue flags resB1() and resB2() to the object properties in group "DAQ", that is removing such functions.

Appends:

- SYS: Appending the sysTmJmp() function as a variant of sysTm().
  - Appended by the "DEF_HTaskPer" definition.
  - TError: New errors: Tr_ErrUnknown, Prt_Unknown, Prt_ErrCommon, Prt_ErrParams.
  - TCfg,TVal: New unified method isTransl().
  - TVal: New functions: noTransl(), setNoTransl().
  - TValue: New function setNoTransl().
  - TCntrNode: New functions: nodeAccess(), nodeLoadACL(), nodeLoadACLSnthHgl(), nodeMessSnthHgl(), nodeDocSnthHgl(), property(), propertyClrGrp(); and new definitions: ctrMkNode3(), ctrChkNode2(), ctrChkNode3(). Adding a User API function property().
  - Appended by the limiting option "limObjDscr_SZ" for the description configuration fields (DESCR).
  - Adding function str2time() with parsing the human time from time2str(), which added also by the "inParts" argument.
  - Adding new User API functions with representing the system ones in the user space: time2str(), cpct2str(), str2time().
  - XMLNodeObj: getElementsBy() and its User API variant expanded by arguments "limit" and "from".
  - Mess: Adding the global label functions labTime(), labTimeSel().
- Transports: TTransportOut appended by the function isFromInput().

SYS

- Building:
  - configure.ac: Core library version risen to 3:15:0 and the program version risen to 0.9.8. The module version of the subsystem "Transports" risen to 21.
  - acinclude.m4: The autoconf macro AX_LIB_MYSQL added of using PKG_CONFIG when presence the configuration file, to build together MySQL in cross-compiling environments with binary mysql_config or mariadb_config. Removing the spare macroses: AX_LIB_SQLITE3, BNV_HAVE_QT. Some improving the macro AX_LIB_POSTGRESQL.
  - data/{debian,debian_mod}: Appending "openscada-server.service" and "openscada-plc.service", also as a commented entry "dh_installsystemd" in "rules", and that switched to use in Debian 12,11,10 and Ubuntu 24.04,22.04,20.04. Appending MySQL default dependency as "default-libmysqlclient-dev".
- FIX:Security,ModSchedul,DAQ.{Function,Templates,BFN,JavaLikeCalc,OPC_UA,Siemens},Archive.{.,FSArch},Protocol.{ModBus,OPC_UA,HTTP,UserProtocol},UI.VCAEngine: Adding permission to column-list fields of the Table control elements of the Control Interface to work not only from root-root.
- FIX:LibsDB.OscadaLibs.tmplib_base.fileServerHTTP,UI.WebVision: Unified in processing the data transferring in the sequence: ranges of media in the head, big data by chunks, simple single package for small data.
- Archive.{MessArchive,MessArchiver,ValArchive},DAQ: Moving in the size-depth field of the Control Interface to the editable combobox with the digital number and human text multiplier, based on the new function time2str() and str2time().
- .,DAQ.{BlockCalc,JavaLikeCalc},Protocol.{ModBus,OPC_UA,UserProtocol},UI.{VCAEngine,WebUser}: Appended by the limiting option "limObjDscr_SZ" for the description configuration fields (DESCR) with default value 1000 and range [300...1000000].
- DAQ.{LogicLev,ModBus,OPC_UA,Siemens},UI.{QTCfg,WebCfgD}: Implementing of ordering value of the updating time of the configuration interface of the calculated objects, to update after the object processing.
- FIX:Transports,Protocols: Unification of errors generation in calls messProtIO() and its User API variant messIO(XMLNodeObj req, string prt) in accordance the documentation, that is obligatory with the error code.
- The commandline options appended by getting default value from the environment variable "OSCADA_{cmd}", what is enabled itself by the environment variable "OSCADA_CMD_EN".

DB

- FIX:SQLite: The error code SQLITE_CORRUPT added for reconnection the DB file, since this error can be appeared with changing the DB-file structure from an external source.

DAQ

- FIX: Fixed in remote archives detection for temporarily empty ones, that is no source.
- JavaLikeCalc: Implementing the "var" statement for true scope processing, that is defining new variables in functions with the statement and using global ones without.
- DAQGate: Improving algorithm of the archives detection with providing an information field with list of the archieving attributes.
- FIX:ModBus: Fixed in complete processing strings with encoding, that is registering all registers. The data requesting improved in the TCP variant for waiting tail to any first package size, that is not only the MBAP header in 7 bytes size.

Archives-History

- The value archives appended of detection the doubly links and their all removing.
- FSArch: The archives unpacking function appended by the error message unification and a possibility to remove error archives, currently only at checking the value archive files.

Transports

- The IO log items appended by whole package (or aggregation) size and the aggregation default time set to 1 second. Using the variables "ReqTm", "ReqMode", "ToTmOut", "InBufSz", "ReqAnsw" moved to the individual space of the transport object.
- FIX:Sockets,SSL: Fixed finally in the non reenterability effect with many connections.
  - TTransSock::getAddr() renamed to TTransSock::addrGet() and the address resolving moved to a new function TTransSock::addrResolve() with direct resolving the static addresses and dynamic resolving by gethostbyname(), also appended a commandline option "--getaddrinfo" to enable it for yourself (enabled by default).
- FIX:SSL: Fixed in processing responses of the output transports from initiative connections, especially for no response.
  - Appended of implementation TTransportIn::writeTo() with moving to map in holding the SSockIn structure.
  - Input part of the transports switched to use unified TTransSock::addrResolve() for precursory resolving all dynamic addresses and pass ready static addresses to BIO_new_accept().

Transport Protocols

- OPC_UA: Implementing the true authentication with checking permission to the DAQ-Nodes for the user:
  - libOPC_UA: implementing the authentication through UA::Server::EP::sessActivate() and the property "identTkn", from which there is taken the user in the attribute "userAuthenticated" and that is written to "UA::Server::Sess::{user,idPolicyId}";
  - libOPC_UA: all data requests by reqData() appended in "req" by an attribute "sesTokId" with session identifier here and for accessing the user;
  - appending a configuration field "Anonymous user" for representing the anonymous authentication.
- HTTP: Appended by the generic function of transition any method to WEB-modules — HTTP().

User Interface

- FIX:Vision,WebVision: Implementing of rounding big interval points by the Besier Cubic Curves. Fixing of calculating bottom border for vertical scale.
- VCAEngine,Vision,WebVision: The type Image of the primitive Media appended by the attribute "Keep aspect ratio at fitting (keepAspect)".
- FIX:VCAEngine,Vision: Adding an option in the "Styles" tab of the projects with control the writing to styles in the execution context. And the writing to the styles disabled on the project side.
- FIX:WebVision: Requesting data of the resources added by support chunks for big data and conversion only for small images. The Save type of the buttons appended by support the media ranges with storing the data in WebVision context for retries.
- WebUser: Switched to the generic function HTTP() of transition from Protocol.HTTP. Appended by an optional attribute "Transport (tr)" of the processing procedures and templates, taken from the protocol object. The attribute "Result (rez)" allowed in empty value to prevent sending any response, that is meaning direct writing by TTransportIn::writeTo().
- QTCfg: The Back and Forward buttons expanded by a menu of the direct items accessing.
- FIX:Vision: Preventing fullscreen mode fault in some XOrg conditions, when the fullscreen Qt-flag occasionally cleared, that is the flag was doubled internally. Reproduced often with Qt6 on Debian 12.
- VCAEngine: Appending of the not processed events sending to a page who opened the source page.
- WebCfgD: Implementing of selection the group nodes with holding Control or Shift in the navigation tree and the group operations for deletion and setting. Expanding of call pageRefresh() by integrating the lag time.

#### 7.2.1 Service updates

- the fifth (5) at 06.01.2026.
- the fourth (4) at 31.10.2025.
- the third (3) at 29.10.2025.
- the second (2) at 27.08.2025.
- the first (1) at 09.07.2025.

### 7.3 [01.01.7532/01.03.2024] СЕДЬМОЕ обновление

Это обновление релиза 0.9 LTS исправляет около 60 ошибок и добавляет ОЧЕНЬ МНОГО улучшений с несколькими значительными-концептуальными, с которыми целиком можно ознакомиться в протоколе изменений обновления.

User significant actions on the update

- DAQ.System: ID of the automaticly generated DA parameters changed to: CPU - "CPU[{N}]", fs - "FS{MP}", hddstat - "DiskSt_{dev}", MEM - "MEM", netstat - "Net_{IF}", sensors - "Sensors", hddsmart - "DiskSMART", ups - "UPS", uptime - "UpTm_{U}".

  => manually relink all the automatically created sources which changed, when you use the Automatic creation mode

- FIX:UI.VCAEngine: Prevented from connection the attribute "focus" of any included widget to the calculation IOs and appended by processing the exceptions of accessing those IOs for missing included widgets.

  => manually replace all static using the "focus" attribute like to if(alarms_focus) alUnSel = 10; in LibsDB.vcaBase.wlb_Main.alarmsSt to the code if(this.alarms.attr("focus")) alUnSel = 10;

Automation Linux distributive of the project OpenSCADA

- appending Debian 12 as the distributive base;
- moving of building the Debian 11,10,9 base to the Debian 12 environment;
- updating TDE to 14.1.1 and next to 14.1.2, with stabilising up to the level of 14.0.13;
- preventing optionally the system tray from show program icons with different WMID but equal names like to BlueMan;
- preventing the very flooding in "~/.xsession-errors" by the debug messages like to "[FIXME] UNCLASSIFIED DEVICE name: ...";
- disabling of using Security Cards for authentication in the kdesktop lock dialog, due to it became unusable;
- HWLib: using in calculation Ah from Wh of the Designed Voltage instead the Current Voltage for accordance with the capacity information on the battery; prevented from freezing in the Hardware Manager;
- KRDC, KRFB: restoring the normal functioning from 14.0.13;
- KXKB-KLayouts: Fixing regressions in loss-clean the system keyboard layouts;
- TDESVN: preventing crashes at accessing DB from KPart;
- Krusader: fixing of unpacking *.tar.xz and *.txz, so completing of implementation the XZ support there;
- KMix: adaption the mixers dynamic;
- KMilo: restoring the brightness control after its breakage;
- QuickLauncher: it is just ignore empty items, so they will be removed after the configuration updating;
- TDM: disabling the authentication by a Security Card to prevent hangs at the exit;
- KOrganizer: improving the attachments dialogue for pointing only file with naming the attachment item from the file name and inline by default; improving the categories editing dialogue for notifying the underlying selecting dialogue about categories changing;
- TDEPowerSave: prevents of resetting the widget of displaying values the batteries since their become to show empty bar and -1; commented the SLOT slotHelpContents() due to its missing; prevents appearing the false inactivity dialogue to suspend just after awakening, which is appeared especially often on notebooks in work from the battery;
- KPackage: optimisation of the memory consumption in way of reading "apt-cache dumpavail" result through an temporary file but not through memory, that is the memory consumption on Debian 12 decreased from ~900MB to ~450MB;
- TDEPrint: fixing of translation of names of groups of the printing properties;
- translation to Ukrainian: knmap, knutclient, konversation, tdenetworkmanager.

Main WWW-resources, documentation of the project and subprojects

- the "Quick start" manual completely revised and actualized for the last LTS changes;
- appending the Industrial devices library page by description new templates;
- appending the Low level sensors and chips library page by description new templates;
- appending the Main library page by description new templates;
- appending the Main elements library of the user interface page by description new widgets;
- complete revision and actualising to the last LTS changes for pages of the modules: DAQ.System, Transport.SSL;
- started the new subproject NETGEAR R6220 with OpenSCADA building and adaption to MIPS.

New and significantly updated parts

- OpenSCADA Core: 3:13:0 => 3:14:0

  (Unification the building with adaption ..., Refactoring and unifying the Transports subsystem ..., Control for big memory consumption, Messages Translation — fixes of the conceptual changes of the previous updates)

- OpenSCADA "Transport" subsystem: 19 => 20

  (Refactoring and unifying the Transports subsystem ...)

- OpenSCADA "DAQ" subsystem: 14 => 15

  (Unification of conception the parameter types)

- DAQ.System: 2.4 => 3.3

  (Complete refactoring and expanding for ...)

- DAQ.LogicLev: 2.7 => 2.9
- DAQ.DAQGate: 2.11 => 2.13
- DAQ.ModBus: 3.6 => 3.8
- DAQ.OPC_UA: 2.6 => 2.8
- DAQ.JavaLikeCalc: 5.5 => 5.6
- DAQ.Siemens: 4.4 => 4.5
- DAQ.AMRDevs: 0.7 => 0.8
- Transport.SSL: 3.4 => 4.5

  (Expanding by support of the initiative connections, adaption to OpenSSL 1.1 and more)

- Transport.Sockets: 4.5 => 4.8
- Transport.Serial: 2.6 => 2.7
- Protocol.SelfSystem: 1.10 => 2.0

  (Significant reviewing and fixing in the external connections implementation and more)

- UI.QTCfg: 5.12 => 6.0

  (Unification the building with adaption to Qt6, QtWebEngine, QtMultimediaEngine, ...)

- UI.QTStarter: 5.14 => 6.0

  (Unification the building with adaption to Qt6, QtWebEngine, QtMultimediaEngine, ...)

- UI.VCAEngine: 7.11 => 7.13
- UI.Vision: 8.6 => 9.2

  (Unification the building with adaption to Qt6, QtWebEngine, QtMultimediaEngine, ...)

- UI.WebCfgD: 2.4 => 2.5
- UI.WebVision: 6.8 => 6.10
- LibsDB.OscadaLibs.base: 2.0 => 2.2

  - fileServerHTTP: 1.0
  - weather: 1.0

- LibsDB.OscadaLibs.DevLib: 2.6 => 3.0

  - Incubator: 1.0
  - VSE002: 1.1
  - FF_LE: 0.9
  - ergomera625: 0.1
  - Goboy1M: 1.0
  - AutoPILOT: 1.0
  - AutoPILOT_old: 1.0
  - CorBK: 1.0
  - TDS: 1.0
  - UltraMag: 1.0
  - enronDaniel: 1.0
  - FlowGAS: 1.0

- LibsDB.OscadaLibs.LowDevLib: 1.4 => 1.5

  - UC96: 1.0

- LibsDB.vcaBase.Main: 2.0 => 2.1

  - weather: 1.0
  - storeHouse: 1.3 => 1.4
  - grpGraph, grpGraph10: 1.5 => 1.6
  - ElViewGraph: 1.4 => 1.5

CONCEPTUAL > Unification the building with adaption to Debian 12, Qt6, QtWebEngine, QtMultimediaEngine, OpenSSL3, MIPS

- FIX: Finished in true building with the core library only in static:
  - configure.ac: the configuration option --enable-CoreLibStatic expanded for definition the AM_CONDITIONAL(CoreLibStatic) and the environment variable LIB_MOD;
  - moduls/*/*/Makefile.am: appended by the option --tag=disable-shared and expanded by using the environment variable LIB_MOD;
  - src_call/Makefile.am: expanded by the AM_CONDITIONAL(CoreLibStatic) specific processing for static linking the core library with all included modules.
- configure.ac,acinclude.m4: Cleaned from the deprecated macroses in AutoConf 2.70:
  - AC_HELP_STRING renamed to AS_HELP_STRING;
  - AM_CONFIG_HEADER renamed to AC_CONFIG_HEADER;
  - AC_LIBTOOL_DLOPEN replaced by LT_INIT([dlopen]);
  - AX_PTHREAD replaced by AC_SEARCH_LIBS(pthread, [pthread_create])
  - commented for AC_PROG_LIBTOOL, AM_PROG_LIBTOOL, AC_HEADER_STDC, AC_HEADER_TIME, AC_TYPE_SIGNAL, AC_ISC_POSIX.
- acinclude.m4,DAQ.OPC_UA.libOPC_UA,Transport.SSL,Special.FLibSYS: Cleaned from deprecated functions in OpenSSL 1.1 (API 3.0):
  - acinclude.m4: testing function of the macro AX_LIB_OpenSSL() and AX_LIB_OpenSSL_opt() for libcrypto replaced from MD5_Init() to BIO_new(); testing function of the macro AX_LIB_OpenSSL() for libssl replaced from SSL_free() to SSL_new();
  - OPC_UA.libOPC_UA: UA::symmetricEncrypt() and UA::symmetricDecrypt() merged to UA::symmetricCrypt() and switched for using EVP_CipherInit() and EVP_CipherUpdate() instead AES_cbc_encrypt() for new versions;
    - using RSA_public_encrypt() moved to EVP_PKEY_encrypt() and RSA_private_decrypt() moved to EVP_PKEY_decrypt() for new versions.
  - Transport.SSL,Special.FLibSYS: using of MD5() moved to EVP_DigestInit_ex(), EVP_DigestUpdate(), EVP_DigestFinal_ex() for new versions.
- configure.ac: In appending Qt6 that is appended by Qt6Sensors, Qt6WebEngineWidgets, Qt6MultimediaWidgets.
  - Appended by checking Qt5WebEngineWidgets and Qt5MultimediaWidgets for support in UI.Vision.
  - Appended by checking the declarations-functions clock_nanosleep, pthread_rwlock_timedwrlock, newlocale for very pure environments of MIPS with UCLibC.
  - The parameters --disable-WebKit and --disable-Phonon renamed to --disable-QtWebEngine and --disable-QtMultimediaEngine respectively.
  - The generic variables QtWebKit_{CFLAGS,LIBS} and phonon_{CFLAGS,LIBS} renamed to QtWebEngine_{CFLAGS,LIBS} and QtMultimediaEngine_{CFLAGS,LIBS} respectively.
  - Most of the corresponding messages were improved.
  - Appended by checking the header pthread.h.
- acinclude.m4: The AutoConf macro AX_LIB_Qt expanded by Qt6 support and improved in MOC and RCC detection for Qt5.
  - Some messages improved.
- data/{debian,debian_mod}/compat: The level was risen up to 7 for default building at modern Debian distributives.
- data/{debian,debian_mod}/control: Appended by the dependency variants qt6-base-dev, qt6-webengine-dev, qt6-multimedia-dev and qtwebengine5-dev, qtmultimedia5-dev. Appended by the dependency variant libsensors-dev to libsensors4-dev.
- ResRW::{resRequestW,resRequestR}(): Appended of using the timed version at the definition HAVE_DECL_PTHREAD_RWLOCK_TIMEDWRLOCK.
- TSYS::atime2str(),SYS.strftime(): Appended of using the localized data at the definition HAVE_DECL_NEWLOCALE.
- TSYS::{sysSleep,taskSleep}(): Appended of using the clocked sleep at the definition HAVE_DECL_CLOCK_NANOSLEEP.
- Control Interface of the main page appended by hiding the tab "Translations" and the language fields at missing the internationalisation in whole.
- TMess,TModule: The HAVE_LIBINTL_H checking replaced by "#if HAVE_LIBINTL_H", that is checking for 1.
- Transports.SSL: Adapted to new functions of OpenSSL 1.1 (API 3.0) with treating deprecated ones.
- UI.{QTStarter,QTCfg,Vision}: Adapting for building with Qt6, including adapting to Qt6WebEngine and Qt6Multimedia:
  - QLayout::{setMargin,margin}() replaced by QLayout::{setContentsMargins,getContentsMargins}();
  - QVariant(char*) replaced by QVariant(QString);
  - the QMouseEvent constructor replaced by one with the global position;
  - QRegExp replaced by the OpenSCADA's variant TRegExp for functions of replacing and testing or by the direct checking;
  - the QComboBox signal activated(const QString&), currentIndexChanged(const QString&) replaced by activated(int), currentIndexChanged(int) respectively;
  - the QSignalMapper signal mapped(QWidget*) replaced by mappedObject(QObject*);
  - QPalette::Background replaced by QPalette::Window and Qt::MidButton by Qt::MiddleButton;
  - QFileDialog::setReadOnly() replaced by setOption();
  - QApplication::desktop() replaced by QScreen;
  - QAction::parentWidget() replaced by parent();
  - QVariant::type() renamed to typeId(), QMouseEvent::{pos,globalPos}() renamed to {position,globalPosition}(), QDateTime::{setTime_t,fromTime_t,toTime_t}() renamed to {setSecsSinceEpoch,fromSecsSinceEpoch,toSecsSinceEpoch}();
  - appended by renaming functions for different Qt versions with help the macro-definitions in different files and for: typeId() to type(), position() to pos(), globalPosition() to globalPos(), setSecsSinceEpoch() to setTime_t(), fromSecsSinceEpoch() to fromTime_t(), toSecsSinceEpoch() to toTime_t(), mappedObject() to mapped(), setSource() to setMedia(), setVolume() to audioOutput()->setVolume(), setMedia() to setSource(), state() to playbackState();
  - appended for support QRegularExpression instead QRegExp in Qt6;
  - the QMouseEvent property mouseBtHold splitted on two QPointF: mouseBtHoldPos, mouseBtHoldPosG;
  - the keyboard combination separator "+" replaced by "|", that is "Qt::SHIFT|Qt::Key_F1";
  - the event QEvent::KeyRelease in LineEdit apply replaced by QEvent::KeyPress;
  - QTStarter: the generic library lib_qtgen appended by the function winFit() of specific windows fitting on mobile systems in common; appended by the attribute Qt::AA_ShareOpenGLContexts before the Qt application object for QtWebEngine work on Qt6;
  - Vision: adaption to Qt WebEngineWidgets instead WebKit and to Qt MultimediaWidgets instead Phonon, and the primitive Document split for force using QTextBrowser in the development mode. Restored in new action items of the library widgets appearance by placing the new actions to Menu before ToolBar.

CONCEPTUAL > Refactoring and unifying the Transports subsystem in the additional parameters management and expanding in using the connection time parameters for registering configuration parameters of external sources

- the container configuration field "A_PRMS" of the additional parameters moved to the core library from the modules;
- appended by functions TTransportS::{prm,cntrCmdPrm}(), {TTransportIn,TTransportOut}::prm() with common implementation the additional parameters;
- conPrm() expanded by support the configuration parameters of external sources like to protocols and it extended to the input part, also as for the User API;
- conPrm() appended by an argument of the default value and what used in all transport modules;
- clearConPrm() expanded by clearing single parameter and only from external sources;
- setConPrm() was removed after implementing this feature in conPrm() and some modules was updated for that: DAQ.AMRDevs, Protocol.SelfSystem;
- Protocol.SelfSystem is the first protocol who is used now the configuration parameters in transport;
- the output transports appended by a link to an input transport, who created the output one, and it is used for holding here the configuration parameters of external sources;
- all configuration of the associated output transports are set hidden;
- control of the additional parameters moved in own tab "Additional (aprm)" with a function of resetting their values;
- marking the input and output transports as modified set only at the configuration fields real change.

CONCEPTUAL > Control for big memory consumption

- SYS: TCntrNode::cntrCmd() in processing the primary commands of the Control Interface appended by their generic logging to control actions caused the big memory consumption.
- FIX:DAQ: JavaLikeCalc: The strings concatenation operation appended by the limit checking on limUserFile_SZ(10M).
  - System: Appended by DA Process as an interface to Linux processes in control their memory usage.
- FIX:Archives: The requests TVArchEl::getVals() and "TValue:get:/serv/attr" appended of limiting the requesting depth in limUserIts_N (1e6) items to prevent for big memory consumption.
  - FIX: The Control Interface request "TValue:get:/serv/attr" fixed in limit calculation of the function getVals().
  - FIX:.,FSArch: The values archiving appended by limiting the writing operations at limUserIts_N (1e6) entries for tracing of consuming all memory in some cases.

CONCEPTUAL > Messages Translation (fixes of the conceptual changes of the previous updates)

- FIX:SYS,DB: TMess::translGet() fixed in detecting the system prestored messages at setting empty translation messages and the function TMess::translGetU() fixed in cleaning service zero symbols in non dynamic translation modes.
  - DB: TTable::fieldSQLSet() adapted to clearing the message base and all translations at zeroing a translation, for clear messages edition in the dynamic translation mode and from non base language.
- SYS,DB.{SQLite,MySQL,PostgreSQL,FireBird},Protocol.HTTP: The messages translation adapted mostly for language codes more of 2 (two) symbols.
- Protocol.HTTP,UI.{WebUser,WebVision}: Finished in adapting for dynamic translation the station name with unification the User API function pgCreator() for using language from objFuncCall().
  - Protocol.HTTP: Path from TSYS::ico() used for obtaining translated icons.
- SYS,UI.{Vision,WebVision}: The function TSYS::atime2str() appended by the date translation and it is used in building the time scale of the primitive Diagram of VCA.
- FIX:DB: Allowed in true writing of user changes in the Dynamic Translation Mode on non Base Language, by early checking for dynamic data.
- FIX:DAQ: The DAQ-Templates finished in adapting to translation string type values at their editing and using in the Template Configuration Tab and fixed-adapted to the dynamic translation in using the IO names.
  - FIX:DAQGate: Fixed in the values sending of the translatable fields not in the internal translation structure.
- Protocol: HTTP: Adapted for dynamic translation the station name and processing encoded file names of images.
  - UserProtocol: Fixed-adapted for the dynamic translation of the IO names.
- FIX:UI.VCAEngine: Templates fixed-adapted to the dynamic translation in using the configuration template of the attributes.
- FIX:UI.WebUser: Fixed in translation the page name in the index.
- FIX:UI.WebVision: Fixed in dynamic translation the user name on the index page.

OpenSCADA libraries and projects

- data/{oscada_plc.xml,oscada_server.xml,oscada_start.xml,ModelsDB/{AGLKS/oscada_AGLKS.xml,Boiler/oscada_Boiler.xml}}: Cleared in the input transport description and the transports appended by the port group: 10002,10003,10004 for WEB and 10005,10006,10007 for CNTR.
- LibsDB.{OscadaLibs.flb_Controller.test,vcaBase.prj_archBrowser.IDW},ModelsDB.AGLKS.St.{OPC_UA.test,Archive.{MemInfo_use,CPULoad_load}},ModelsDB.Boiler.St.Archive.{MemInfo_use,CPULoad_load}: Adapted to renaming DAQ.System.AutoDA.CPULoad and DAQ.System.AutoDA.MemInfo to DAQ.System.AutoDA.CPU and DAQ.System.AutoDA.MEM.
- FIX:ModelsDB.AGLKS.St: The input SSL transports set by the port group 10042,10043,10044 for WEB and 10045,10046,10047 for CNTR.
  - FIX:WebUser.test: restored in the text before unification the translation.
  - DAQGate.test: Updated for the parameter cache.
  - LogLevPrm.gen: All parameter objects set for "alDelay" in 1, to prevent the alarm messages at the exiting.
  - Sockets.{testRelease,testRelease1,testRelease2}: disabled by default.
- LibsDB.OscadaLibs:
  - tmplib_DevLib: The library appended by the templates with documenting:
    - from VPF: Incubator, VSE002, "FF LE-03MB CT (FF_LE)", "Ergomera 625(ergomera625)";
    - from Blue Star Group: "Goboy 1M (Goboy1M)", "AutoPILOT PRO Flow Computers (AutoPILOT)", "AutoPILOT OLD Flow Computers (AutoPILOT_old)", "Corrector BK (CorBK)", "Tancy Data (TDS)", "UltraMag", "Enron, Daniel (enronDaniel)", FlowGAS.
  - tmplib_base: Appended by a new template for WebUser "HTTP File Server (fileServerHTTP)" with implementing the HTTP File Server in OpenSCADA, currently that is only reading resources with support partiality; and the new templates "Weather (weather)", "Disk SMART (DiskSMART)".
    - digAlarm,manInUnif,anUnif,pidUnifImp,anUnifSt,pidUnif,codeState,SNMP,UPS: The NAME IO set to the type "String (translate)" and the DESCR IO to the type "Text (translate)".
  - tmplib_LowDevLib: Appended by the template "BT: ATORCH UC96".
    - RDTech: Nondouble commands set to send the command twicely for stable applying by the device, postcommand delay set to 0.2 and moved in common.
  - tmplib_base.ntf: Expanded by a possibility of specifying messages to exclude from the notification.
- LibsDB.vcaBase:
  - wlb_Main: The library appended by the widget "Weather (weather)" with documenting.
    - storeHouse: Expanded by creating the item edition form in the main frame after hiding the main table and other.
      - FIX: Prevented of <EVAL> for <NULL> cells in the item report.
      - FIX: Guaranteed in filling the report dialogs by generating the opening events from the procedure.
      - FIX: Fixed in early setting the vertical position for the data table at changing the user.
      - The text fields of the single-item report were cleared from the left margin for texts.
      - The reports appended by processing the links as the external ones.
      - Expanded by processing ID (index) also as other standard fields "NAME", "DSCR" — to control the field visibility.
      - Appended of resetting filters at the page restart or user change.
      - The whole-table report appended of limiting cells' text in 30 symbols, that is like to the edition table.
      - The item report appended by hiding empty fields.
      - Appended of updating the selection context of the form items at change such item value.
    - grpGraph: Procedure rewrote for unification to work with different elements, so for use in all derivative frames like to grpGraph10.
    - grpGraph10: Switched to inheritance from grpGraph.
    - FIX:alarmsSt: Fixed in the alarms_focus variable accessing after removing of forcing the "focus" attribute, which replaced by this.alarms.attr("focus").
    - tmplSO: Some cleaned for items of the ResultGraph page.
    - ResultGraph: The attribute "grpName" set to the "String (translate)" type.
    - ElViewGraph: Appended of reading the default-static properties for clearing to them.
  - wlb_doc:
    - FIX:docRepInstVals: Restored in translation values of title and parameter's dimension, name.
    - FIX:docUsersSet: Appended by encoding the value fields also, due to there can be not just digits now.
- LibsDB.vcaTest: Finished in renaming CPULoad to CPU and MemInfo to MEM.

API
!!!!:Changes:

- SYS: ico() appended by an argument of obtaining the file path.
  - strLabEnum() appended by an argument "onlyDec" for enumerating one digit.
  - Removed sysClk(), clkCalc(), shrtCnt(), HZ().
  - TError: Removed for DB_TrRemoved.
  - TMess: labStorRemGenStor() renamed to labStorRem(), labStor() cleaned for arguments.
  - TElem: fldList() set to const.
  - TFld: TFld(): Type of the argument vals, nSel changed from "const char *" to "const string&". Removed for selValS(), selValI(), selValR(), selValB(), selNm(), selVl2Nm(), selNm2VlS(), selNm2VlI(), selNm2VlR(), selNm2VlB().
  - TCfg,TVal: Removed getSEL() and setSEL().
  - TCntrNode: isModify() set to constant, save() added by an argument of the maximum error level.
- DAQ: TController::id() set to const.
- Transports:
  - TTransportIn,TTransportOut: Moved to the protected section for logLen(), setLogLen(), pushLogMess(). Removed for logItLim(), setLogItLim().
  - TTransportOut: Merged for conPrm() and setConPrm() to one conPrm(), also for UserAPI ones. clearConPrm() expanded by an argument of specifying identifier or group of cleaned parameters.
  - TTransportIn::associateTrO(): expanded by support the different stages ATrStg_Create, ATrStg_Proc.

Appends:

- SYS: The new definition DB_GEN "<gen>".
  - Appended sysClk(), setSysClk() for receiving the CPU frequency from DAQ.System.
  - The sysTm() function appended by arguments for detection of time jumps after suspending.
  - TMess: The new function labStorFromCode() of names the specific storages.
  - TElem: Appended by the function contN() of obtaining for counter of the connected containers.
- DAQ: TVal: Appended by the function setTime() and by a new flag AttrFlg::NoSave for preventing of marking as modified at the attribute change.
  - TController: Appended by tbl() for tables of the parameter types.
- UI: User API appended by SYS.UI.mimeGet() of obtaining the MIME type from the file name.
- Transports: The new definition STR_A_PRM "prms", STR_A_PRM_CFGP "CFG:".
  - TTransportS: The new functions prm(), cntrCmdPrm() of common processing transport parameters.
  - TTransportIn: Appended by the function prm(), conPrm(), clearConPrm(). Appended by the UserAPI function conPrm() and setConPrm() (for compatibility) and in accordance with ones in TTransportOut.

SYS

- Building:
  - configure.ac: Core library version risen to 3:14:0 and the program version risen to 0.9.7. The module version of the subsystem "DAQ" risen to 15, "Transports" risen to 20.
  - Appended for building to Debian 12 and Ubuntu 24.04 LTS.
- FIX:DB,Transports,DAQ.BFN,UI.VCAEngine: Adapted for checking the TBDS::dataDel() success result to prevent hangs here on RO storages with fixing function TTable::fieldSQLDel() for true checking the function success.
- .,DAQ.{DAQGate,DCON,DiamondBoards,ICP_DAS,LogicLev,ModBus,OPC_UA,Siemens,SoundCard,System},Protocol.{ModBus,OPC_UA},UI.VCAEngine: Simplified significantly in support the selectable types, making that optional and with support the dynamic translation. Allowed also for specifying only list of values.
- .,Archive.DBArch,DAQ.{BFN,JavaLikeCalc,ModBus,OPC_UA},Protocol.UserProtocol,UI.{VCAEngine,Vision,WebUser}: The Generic Storage renamed from "*.*" to "<gen>":
  - with naming the specific storages as "Generic Storage" and "Configuration File" everywhere through the new function TMess::labStorFromCode();
  - appended by the definition DB_GEN "<gen>", which used everywhere instead "*.*";
  - all generic fields like to "Archiver DB" renamed to "Storage";
  - TMess::labStorRemGenStor() renamed to TMess::labStorRem() and appended by information about all object storages.
- .,DAQ.{BlockCalc,Comedi,DiamondBoards,FT3,Fastwel,ICP_DAS,SNMP},Protocol.{ModBus,UserProtocol},UI.{VCAEngine,Vision,WebCfg,WebCfgD,WebUser}: std::string::substr() replaced by std::string::find() in places with static obtaining data for comparing, what is clearer, safer and mostly faster for short strings.
- .,UI.{VCAEngine,Vision}: Improved for messaging the warnings at saving.
- TCntrNode::cntrCmd() in processing the primary commands of the Control Interface appended by their generic logging.
- FIX:TCfg::setS() in the variant with RqFlg appended of locking the critical sections at accessing the container TVariant and appended by notification, only on the data stages and without the returning back.

DAQ

- .,*: Moved in the DAQ sources to fix table names of different parameter types and adapted to the unified conception the parameter types, that is the configuration fields are hidden now when their are standard ones and it scheduled to be cleaned in whole in v1.0.
- FIX: TValFunc::get{S,I,R,B}() appended by code of casting the object TVarObj with EVAL/null converting.
- System: Completely refactored and expanded for:
  - expanding the CPU DA by CPU information and frequency from different sources, including CPUFreq with the control;
  - appending a new DA Power as an interface to Linux Power and DA Process as an interface to Linux processes;
  - Sensors>DA appended by support of the directly accessible sensors "/sys/devices/virtual/thermal/*/temp" and /sys/devices/virtual/hwmon/*/temp*;
  - unification the DA interface calls DA::init(), DA::deInit(), DA::makeActiveDA() with moving most DA modules to call the unified code and implementing for them only the unified function dList();
  - the DA interface class appended by the new signs: isDynamic(), hasSubTypes();
  - appending a mode of the data generic updating from the Service Cycle and the Controller DA Task, by the new function updGen();
  - ID of the automaticly generated DA parameters changed to: CPU - "CPU[{N}]", fs - "FS{MP}", hddstat - "DiskSt_{dev}", MEM - "MEM", netstat - "Net_{IF}", sensors - "Sensors", hddsmart - "DiskSMART", ups - "UPS", uptime - "UpTm_{U}";
  - switched to the soft mode of parameters automatic creation, that is you allowed to create the source parameters automatically, save forcibly need ones and next switch to the manual mode, than preventing continued scanning.
- FIX:DAQGate: Time of the requesting archive increased for 1 (one) microsecond to prevent of spare values requesting and their direct rewriting to the archives.
  - Improved in work with remote host without the time sync:
    - the values can be in future up to one hour;
    - the remote host timestamp everywhere used at the archive presence even in the tag "<vl>";
    - appended of detection the remote host time for its display and using in timestamp the changed values.
- FIX:LogicLev: Significant improving the Parameter Reflection mode in:
  - dynamic creation and removing attributes;
  - disabling at the error enabling with missing the source parameter with removing all attributes;
  - the selection changed to not editable;
  - measuring the processing time.
- OPC_UA: Appended by support the asynchronous writing like to DAQ.ModBus.
- AMRDevs: Adapted in the Kontar part to the new conception of the associated output transports for the input ones.

Archives-History

- FIX: The message archivers are prevented from resetting the buffer position of the last read message since we get doubling the messages at each updating the subsystem, which is often for updation the value archive connections, and especially at missing the resource lock.
- FIX: The Control Interface request "TValue:get:/serv/attr" fixed in expanding to equivalent archivers.

Transports

- Sockets,SSL: Appended for support by the port group in the input transports, that is connection to first free. The input transports appended by a configuration field of properties of the initiative connection and the associated output transports.
- SSL:
  - Expanded by support of the initiative connections:
    - SSL connection code of TSocketOut::{start,stop}() moved to static ones TSocketOut::{connectSSL,disconnectSSL}() for using in the input transport;
    - SSL connection code of TSocketIn::Task() moved to TSocketIn::{start,stop}();
    - removed for support the SSL algorithms and versions specifying in the mode due to that removing in the OpenSSL library and that was not used mostly, so there used only TLS_{client,server}_method() for new libraries (> 1.1) and SSLv23_{client,server}_method() for old ones.
  - FIX: TSocketOut::messIO() prevented from hang at endlessly reading by BIO_read() after the socket closing, by checking errno for EAGAIN.
  - The SSL context moved to the generic module object separately for input (ctxIn) and output (ctxOut) parts and the ciphers information was added for:
    - the generic module object by SSL_CTX_get_ciphers();
    - input-server transport status for SSL_get_shared_ciphers(), SSL_get_client_ciphers() and SSL_get1_supported_ciphers() or SSL_get_ciphers();
    - output-client status for SSL_get1_supported_ciphers() or SSL_get_ciphers().
  - The input and output transports appended by control MSS and the input transports appended by control the system input buffer, both taken from Transport.Sockets.

Transport Protocols

- FIX:SelfSystem: Significantly reviewed and fixed in the external connections implementation, appended by checking limit the header size. Fixed in double request packing of the output transports at second tries of reconnection or reauth.

User Interface

- VCAEngine,Vision,WebVision: Appended by support of data built-in to resource marked attributes, primarily for the source attribute of the Media primitive.
- FIX:Vision: Adapted for obtaining named list of the storages.
- FIX:VCAEngine: Prevented from connection the attribute "focus" of any included widget to the calculation IOs and appended by processing the exceptions of accessing those IOs for missing included widgets. FIX: Attr::setS() improved in the critical section processing.
- FIX:WebVision: Appended of implementation the user fields in the status bar.

#### 7.3.1 Service updates

- the fifth (5) at 01.02.2025.
- the third (4) at 13.11.2024;
- the third (3) at 12.08.2024;
- the second (2) at 26.06.2024;
- the first (1) at 02.06.2024.

### 7.4 [01.01.7531/01.03.2023] ШЕСТОЕ обновление

Это обновление релиза 0.9 LTS исправляет около 70 ошибок и добавляет МНОЖЕСТВО улучшений с несколькими значительными-концептуальными, с которыми целиком можно ознакомиться в протоколе изменений обновления.

Automation Linux distributive of the project OpenSCADA

- updating TDE to 14.0.13 and 14.1.0 — adaption all patches-fixes and for Debian 11 only;
- initial appending the Calendar System from the World Creation at which year 2023 is 7531;
- fixing KDesktop, TDE HW Manager, noatun, TDESVN, basket, KGpg, KPDF, disabling thumbnails for video, than appending the new patched packages "tdelibs-trinity", "tdebase-trinity", "tdegraphics-trinity", "tdesvn-trinity" and "basket-trinity" to the distributive collection;
- some improving and updating KCalc, holiday_ua, korganizer;
- complete translation to Ukrainian for KDiff3 and showfoto;
- packages building with own patches for Debian 11,10,9,8,7 before adaption the release TDE 14.1.0;
- switching the Debian 9 base to the archive repository, after its official archiving;
- appending the Debian 11,10,9 distributives by packages of RHVoice — Speech synthesizer with many voices for ten languages;
- translation the subproject page to Ukrainian.

Main WWW-resources, documentation of the project and subprojects

- completely revised and translated to Ukrainian the "Server and hosting infrastructure of the OpenSCADA project" document;
- fixed for the Site working in WebBrowsers of old embedded devices like to Nokia N900, N9;
- Maemo 5 (Nokia N900) restored with moving to the CSSU-Thumb Toolchain grounded on GCC 4.7.2 from Linaro; and the project page updated;
- completely revised the "API" document in the section "Control Interface and dynamic tree of program objects" and the section "Service commands-functions" moved there as a subsection, the subsection "Service commands-functions" completely rewrote and appended by, and all these translated in Ukrainian;
- started the new subproject Open Phone — PinePhone;
- completely revised and actualised for the "How to Create OpenSCADA module";
- started the new subproject Graphical PLC Programming in OpenSCADA;
- the building scripts of the project Automatic Builder of OpenSCADA completely revised and unified with the subproject document updating and translation to Ukrainian.

New and significantly updated parts

- OpenSCADA Core: 3:12:0 => 3:13:0

  (Productivity optimisation of the VCA interface, Unification the associated output transports to the input one AND the generic output transport connection, Messages Translation — fixes of the conceptual changes of the previous update)

- OpenSCADA "Transport" subsystem: 18 => 19

  (Unification the associated output transports to the input one AND the generic output transport connection)

- DAQ.DAQGate: 2.9 => 2.12
- DAQ.JavaLikeCalc: 5.4 => 5.6
- DAQ.LogicLev: 2.6 => 2.7
- {DAQ,Protocol}.ModBus: 3.4 => 3.7, 2.9 => 2.10
- Archive.FSArch: 3.7 => 3.8
- Transport.Sockets: 4.3 => 4.5

  (Unification the associated output transports to the input one AND the generic output transport connection)

- Protocol.SelfSystem: 1.9 => 1.10
- Protocol.UserProtocol: 1.5 => 1.6
- BD.PostgreSQL: 3.0 => 3.1
- UI.QTStarter: 5.12 => 5.14
- UI.QTCfg: 5.9 => 5.13
- UI.VCAEngine: 7.8 => 7.11

  (Productivity optimisation of the VCA interface)

- UI.Vision: 8.0 => 8.6
- UI.WebCfgD: 2.3 => 2.5
- UI.WebVision: 6.6 => 6.8
- LibsDB.OscadaLibs.LowDevLib: 1.4 => 1.5
  - mbBase: 1.0 => 1.2
- LibsDB.OscadaLibs.base.initConAssociateTrs: 1.1 => 1.2
- LibsDB.vcaBase.Main
  - RootPgSo: 2.5 => 2.6
  - storeHouse: 1.1 => 1.3
  - {grpGraph,grpGraph10}: 1.4 => 1.5
  - grpCadr: 1.2 => 1.3
  - ElCadr: 1.2 => 1.4
  - ElViewGraph: 1.3 => 1.4
  - ResultGraphEl: 1.1 => 1.2
  - anShow: 1.2 => 1.3
  - anShow1: 1.3 => 1.4
  - TextLab: 1.1 => 1.2
  - ImgLab: 1.1 => 1.2
- LibsDB.vcaBase.mnEls
  - El_Kran_Sh: 1.1 => 1.2
  - Compressor: 1.1 => 1.2
  - El_Kran_polozh: 1.0 => 1.1
- LibsDB.vcaBase.doc
  - docAlarmsRep: 1.6 => 1.7
  - docRepDay: 3.1 => 3.2
  - docRepMonth: 3.1 => 3.2
  - docRepYear: 1.2 => 1.3
  - docUsersSet: 1.7 => 1.8
  - docDin: 1.2 => 1.3

CONCEPTUAL > Productivity optimisation of the VCA interface

- FXI:UI.VCAEngine:
  - Adapted to work in very big processing periods and disabling the periodic processing in whole:
    - fixed in obtaining the period from the owner session widget;
    - appended by setting the session side period with the User API function calcPer() of the session side widget, expanded by specifying the special period values: PerVal_Sess(0), PerVal_Parent(-1), PerVal_UserMin(PerVal_Dis(-2)), PerVal_SessDef(-3);
    - "Period of the calculation" renamed to the "Periodic processing" and the renamed field is specified as a generic parameter, that moved to the main configuration tab and appended by the page widgets of the project and child widget of the library widget;
    - the session object appended by the User API function period(), what returns the session processing period;
    - the processing period was clarified in the session widget status.
  - Change of the attribute "alarmSt" appended by accompaniation the new event "ws_alarmChange".
- UI.Vision: Adapted for renaming "Period of the calculation" to the "Periodic processing" and for moving to the main configuration tab. The previous field in the "Processing" tab is set to be hidden at that missing in the VCA model.
- LibsDB.vcaBase,ModelsDB.{AGLKS.vca,Boiler.St}: The VCA projects set to the calculation period 250 ms. Calculation of the control group of the VCA projects set to 1000 ms.
- LibsDB.vcaBase:
  - wlb_Main.RootPgSo: Adapted to work in very big processing periods and disabling the periodic processing in whole:
    - appended by continuing the immediately cycles before the container page opening at the start and after navigation, using the new event "usr_calc";
    - appended by switching to the fast cycle at alarm blink, using the new function calcPer();
    - switched to the processing period 1000 ms.
  - wlb_Main.ElCadr: Adapted to work in very big processing periods and disabling the periodic processing in whole:
    - appended by continuing the immediately cycles using the new event "usr_calc";
    - appended by switching to the fast cycle at alarm blink, using the new function calcPer();
    - switched to the processing period -1 (parent).
  - wlb_Main.{grpGraph,grpGraph10}: Adapted to work in very big processing periods and disabling the periodic processing in whole:
    - appended by continuing the immediately cycles using the new event "usr_calc";
    - switched to the processing period -1 (parent);
    - tracing period of the Diagram primitive linked also to the Widget period.
  - wlb_Main.ElViewCadr: Adapted to work in very big processing periods and disabling the periodic processing in whole:
    - appended by switching to the fast cycle at cursor blink, using the new function calcPer();
    - switched to the processing period -1 (parent);
    - tracing period of the Diagram primitive linked also to the Widget period.
  - wlb_Main.storeHouse: Adapted to work in very big processing periods and disabling the periodic processing in whole:
    - switched to the processing period -2 (disabled);
    - appended by continuing the immediately cycles using the new event "usr_calc".
  - wlb_Main.ElViewGraph: Adapted to work in very big processing periods:
    - appended by continuing the immediately cycles in waiting the values appear, using the new event "usr_calc";
    - appended by switching to the fast cycle at cursor blink, using the new function calcPer();
    - the calculation set in 2000 ms due to need of that updating at the trend cursor changing.
  - wlb_Main.grph_panel: Appended by storing the tracing period of the linked Diagram primitive. Switched to the processing period -1 (parent).
  - wlb_Main.{grpCadr,ResultGraphEl}: Adapted to work in very big processing periods and disabling the periodic processing in whole:
    - switched to the processing period -1 (parent);
    - tracing period of the Diagram primitive linked also to the Widget period.
  - wlb_Main.{TextLab,ImgLab},wlb_mnEls.{El_Kran_polozh,El_Kran_Sh,Compressor}: Adapted to work in very big processing periods and disabling the periodic processing in whole:
    - appended by switching to the fast cycle at cursor blink, using the new function calcPer();
    - switched to the processing period -1 (parent).
  - wlb_Main.{anShow,anShow1}: switched to the processing period -1 (parent) and appended by switching to the fast cycle (500 ms) at focus and alarm blink.
  - wlb_doc.{docRepDay,docRepMonth}, wlb_Main.{graphSelPrm,doc_panel,accept,treeSelect,cntrPaspExt}, wlb_Main.{ViewCadr,ResultGraph}: Switched to the processing period -1 (parent).
  - wlb_doc.{docDin,docAlarmsRep}: Switched to the processing period -2 (disabled).
  - wlb_doc.docRepMonth: Excluded from execution at stopping.
  - wlb_doc.docRepYear: Appended by one immediately cycle after f_start, using the new event "usr_calc". Disabled for the periodic processing.
  - wlb_Main.userManager: Disabled in the periodic processing.

CONCEPTUAL > Unification the associated output transports to the input one AND the generic output transport connection

- FIX: Unification the associated output transports processing of the input Sockets transport for:
  - Transport:
    - the function TTransportIn::assTrO() renamed to TTransportIn::associateTrO() and expanded by creation new transports at the first and next removing for stopped ones, and the just created transports appended by reading the initial connection ID with it registering in the connection parameter "initConID";
    - the new function TTransportIn::associateTr() and its UserAPI variant SYS.Transport["Modul"]["in_Transp"].associateTr() of obtaining the output transport object at its Connection ID;
    - the associated output transports from an input one appended by removing at the inactivity at the TTransportIn::keepAliveTm();
    - the new UserAPI function SYS.Transport["Modul"]["in_Transp"].associateTrsList() as a correct naming variant to assTrsList();
    - the output transport object appended by the UserAPI functions conPrm() and setConPrm() of accessing the connection parameters;
    - changing the name template in "inA_ID_N" of the associated output transports to the input one;
    - FIX:Sockets: the input transports prevented at spare socket closing in the initiative mode; the new initiative connection limit checking moved to the main limits checking part.
  - LibsDB.OscadaLibs: tmplib_base.initConsAssignTrs: Renamed to initConAssociateTrs and adapted to use the function conPrm("initConID") and associateTrsList().
- The generic output transport connection:
  - Transports:
    - the new function TTransportS::outAt() and its UserAPI variant SYS.Transport.outAt() of the output transport generic obtaining from the unified address;
    - TTransportS::extHost() moved to use TTransportS::outAt().
  - Transport,UI.{QTCfg,WebCfgD}: The field "Transport" of the external hosts table expanded for specifying the transport address in the unified-common form and expanded by the selection specifying per item with support such behaviour in the common configurators.
  - DAQ.ModBus: The first one what moved to use the unified connection to the output transport.
  - LibsDB.OscadaLibs: tmplib_DevLib.mbBase: Switched to use TTransportS::outAt().

CONCEPTUAL > Messages Translation (fixes of the conceptual changes of the previous update)

- FIX:SYS:
  - FIX: Prevented from propagating the base language column of the translations table "Tr" in the SINGLE translation mode and the base language.
  - FIX: The string EVal value "<EVAL>" appended as not translated one to prevent that translation in VCAEngine for NULL DB values.
  - FIX: The static messages translation function improved in omitting empty messages for the binary strings with only zero symbols.
  - TFunction::operator=() finished in adaption to the IO name translation.
  - Writing to the configuration in XML prevented in doubling the translated field for the configuration contexts.
- FIX:DB:
  - FIX: The translation prevented from propagating the base language column in the SINGLE translation mode for already translated DBs, by appending for different detection the translated DBs in whole and the translated column presence.
  - FIX: Fixed for the DB syntax error at cleaning the translation fields equal to the base.
  - FIX: Fixed in writing untranslated strings, by clearing all translation and writing to base.
  - FIX: Prevented in the DBs service termination, as the transactions closing, at some wrong DB presence.
  - FIX: The translation setting prevented in setting double messages to the base messages; what completing not translation "<EVAL>".
  - FIX: Absence the flag TFld::TransltText means as the translation complete missing for that field.
- FIX: The Translation Manager:
  - FIX: prevented in the marked base changing to a human readable form at all, since that used as a key;
  - the notification about fixes was moved to pass them for the user through the expanded Control Interface warnings;
  - the flag "chkAndFix" split to "chkAndFix" and "chkAndFixMB";
  - the translation configuration fields TrPassN, TrChkAndFix, TrChkAndFixMB moved to the dynamic variables due to there is no need of their store;
  - the translation mark "<<<Unmatched sources>>>" renamed to "<<<SEVERAL VARIANTS>>>".
- FIX:DAQ::ParamTmpl:
  - FIX: Fixed for the IO name edition in the non basic mode of the dynamic translation.
  - FIX: Fixed in the flag IO::TransltText processing for strings.
  - FIX: The service request "list:/DAQ/{MOD}/{CNTR}/prm_{PRM}[/prm_{PRM}]/%2fserv%2fattr" fixed in the attribute name translation.
- FIX:Transports,UI.{QTCfg,Vision,WebCfgD}: The function TTransportS::extHostList() appended by an argument "lang" to receive translated names of remote hosts.
- FIX:Protocol.ModBus: Fixed-adapted in the IO name dynamic translation.
- FIX:UI:
  - FIX:VCAEngine: The dynamic translation of tr() fixed in the translation loss after the translation cache cleaning and placing the spare messages to the project's table "Trs".
  - FIX:WebUser: Fixed-adapted for the dynamic translation of the IO names.

OpenSCADA libraries and projects

- FIX:LibsDB.OscadaLibs:
  - The library tmplib_LowDevLib appended by the template "BT: RDTech UM24C, UM25C and UM34C (RDTech)".
  - The library tmplib_DevLib appended by the template "Slot LTD devices (SLOT)".
- FIX:LibsDB.vcaBase:
  - wlb_Main.storeHouse: Significantly expanded by: implementation the procedures support for the logical columns; implementation the report of all visible table and a selected record.
  - wlb_Main.RootPgSo: The "Notification: type 2 (TextSpeech) (notify2)" method expanded by the RHVoice support and appended by the builtin syntax highlight for BASH. The "Notification: type 1 (Buzzer) (notify1)" method rewrote for the long samples playback in the background, that is with control the sample playing stop and restarting only in the case. Appended also by the syntax highlight.
  - FIX:wlb_doc.docRepDay: Some improved and appended by: the columns grouping in the header, string values direct reading, colors disable in the table at EVAL scale.
  - wlb_doc.docUsersSet: Added by the "Message category (messCat)" configuration.

API
!!!!:Changes:

- SYS,UI.{QTCfg,WebCfgD}: The Control Requests code TError::Core_CntrWarning expanded for the warning messages pass in the attribute "mtxt" with the main data storing.
- SYS:
  - The functions TSYS::id(), TSYS::name() and TSYS::user() were set as constant.
  - The definitions SEC_XT, SEC_WR, SEC_RD moved from the file tsecurity.h to tcntrnode.h and used there also.
  - ctrChkNode() cleaned for the argument "warn" due to the response attribute "force" is deprecated.
  - The Control Interface request "chlds:/{nPath}/%2fobj" appended by not creating the empty icon tags "ico".
  - NSTR_BUF_LEN(50) split to CFG_A_LEN (100) for using in the maximum attribute size of the configuration cell in XML.
  - The argument "init" removed from setIcoDir(), setDocDir(), setLang() during moving under the generic clearing mechanism.
  - Appending the enumeration MdfSYSFlds by the fields: MDF_Name, MDF_MESS, MDF_TR, MDF_DBG, MDF_RD.
  - The TSYS::ShieldSimb encoding of the function TSYS::strEncode() renamed to TSYS::ShieldSymb, moved to the function TSYS::strDecode() and in TSYS::strEncode() appended by the common one. And the UserAPI function SYS.strDecode() appended by the decoding method "ShieldSymb".
- DB: The Control Interface request "call:/BD/{MOD}/{DB}/%2fserv%2fSQL" appended by processing the "intoTrans" attribute as EVAL at missing and clearing the request text in the response.
- DAQ::Value: The service request "get:/serv/attr" of the Control Interface prevented from clearing the "el" subtags at missing the representing attribute, them value is set to EVAL for true mark that as processed in DAQ.DAQGate and don't continue them request in each cycle.
- Archives-History: The value archive link type "Passive param. attribute (TVArchive::PassiveAttr)" renamed to "DAQ attribute (TVArchive::DAQAttr)". The value archive link type "Active param. attribute" renamed to "Active DAQ attribute" with that mark as DEPRECATED.
- Transports: The function TTransportIn::assTrO() renamed to TTransportIn::associateTrO(). The TTransportOut::isNetwork() virtual function sign moved to the TTypeTransport object with linking the old one to new one, for marking all module as the network one.
- UI.VCAEngine: The Control Interface request "get:/UI/VCAEngine/%2fserv%2fwlbBr" appended by not creating the empty icon tags "ico". The request "connect:/serv/sess" appended by the attribute "onlyMy" for connection only to own sessions, and the request "get:/ses/ses" appended by the same attribute for listing only own ones.

Appends:

- SYS:
  - The new function TSYS::ico() of the icon obtaining.
  - Names of the security standard permissions appended by _W_W_W(0222).
  - TError: expanded by new constructors with the "const string &" type arguments for no limiting strings and the convenience.
  - TRegExp:
    - Appended by a new option 'U' (ungreedy) of the greedy mode toggle, together the User API method "ungreedy".
    - Appended by the function mode(), the argument "mode" in setPattern() and the enumeration "Mode" with the items: MD_8, MD_16, MD_32, MD_WCHAR, MD_SAVE.
    - The search() function of the object appended by an argument "length" of the measured block size return.
  - XMLNode: The loading flags appended by the no flag item LD_NO.
  - TMess: Appended by the common label labStdOutTrs() for address format of the unified output transport function.
- DAQ:
  - The DAQ item linking functions expanded by the base node specifying in the attribute "ndBase", for: ctrListPrmAttr(), daqAt(), prmAt(), attrAt().
  - The object TPrmTempl::Impl appended by the new function archAttrs() of updating-archiving attributes of the LogicalLevel.
- Archives-History: The value archive object TVArchive appended by declaration the enumeration ServReqDtMode for the Control Interface request "get:/Archive/va_{ARCH}/%2fserv%2fval".
- Transports:
  - The new function TTransportIn::associateTr() and its UserAPI variant SYS.Transport["Modul"]["in_Transp"].associateTr().
  - The new function TTransportS::outAt() and its UserAPI variant SYS.Transport.outAt().
  - The new UserAPI function SYS.Transport["Modul"]["in_Transp"].associateTrsList() as a correct naming variant to assTrsList().
  - The output transport object appended by the UserAPI functions conPrm() and setConPrm() of accessing the connection parameters.
  - The function TTransportS::extHostList() appended by an argument "lang" to receive translated names of remote hosts.
  - The "in_" and "out_" prefix moved to the definitions STR_IN_PREF and STR_OUT_PREF respectively.
  - The TTransportS object appended by the enumeration LogType with the items: LTP_BinaryText, LTP_Binary, LTP_Text.
- UI.VCAEngine:
  - Appended by setting the session side period with the User API function calcPer() of the session side widget, expanded by specifying the special values: PerVal_Sess(0), PerVal_Parent(-1), PerVal_UserMin(PerVal_Dis(-2)), PerVal_SessDef(-3).
  - The session object appended by the User API function period(), returning the session periodic processing.
  - The attribute "alarmSt" change appended by accompaniation by the new event "ws_alarmChange".

SYS

- FIX:Building:
  - FIX:configure.ac: Core library version risen to 3:13:0 and the program version risen to 0.9.6. The module version of the subsystem "Transport" risen to 19.
  - FIX:Debian: Improving and fixing the DEB-packages signing for all repositories.
- *: Most close(), iconv_close(), dlclose(), pclose() functions appended by checking the result and warning at problems.
- *: All system (SYS) configuration parameters adapted for true handling the default value.
- .,DAQ.JavaLikeCalc: Getting help from the second line for the Control Interface appended in: description of the element fields (TFld) with DAQ-values; name of function IOs (TFunction) with links and attributes builder of the DAQ Logical Level.
- FIX: Rewrote the function TCntrNode::nodeAt() to prevent of call the virtual chldAt() under the lock mChM, so preventing some dead locks in the virtual definitions of chldAt().
- Revised for all templates in the folders =Tmpl=.
- FIX: The tab "Station" of the main page of the OpenSCADA Control Interface appended by the system time information and commonly restructured.
- FIX:data/openscada-proj.in:
  - Expanded by the new environment variable OSCD_TAR_Args of defining extra tar arguments like to --exclude and it was set to the default value "--exclude=lock --exclude=ARCHIVES".
  - FIX: Fixed in description and using the environment variables OSCD_TAR_ComprPrg and OSCD_BackLim.
- During unification the common project icon obtaining through using the project name and ID there performed:
  - the Base Language Name used also for obtaining the icon, so now checked: The Translated Name, the Base Language Name, ID;
  - the icon obtaining mechanism moved in a new separated function TSYS::ico().
- TRegExp: Appended by the 16 and 32 modes support by the pcre16 and pcre32 libraries respectively and only for the search() function currently.

DB

- FIX:.,PostgreSQL: Processing the table emptiness some softened during problems in DB.PostgreSQL about that, that is no exception generated now.
  - FIX:PostgreSQL: Switched to the standard way of detection the missing Tables with them creation at "toCreate" and the exceptions generating else, so preventing the message "Table is empty.".

DAQ

- The Logical Level linking appended by a form of the address representing as the prefixed path "prm:/node/node", so with support of the relative addressing at "." and "..":
  - the DAQ item linking functions expanded by the base node specifying in the attribute "ndBase", for: ctrListPrmAttr(), daqAt(), prmAt(), attrAt();
  - the implementation object TPrmTempl::Impl of the Logical Level of the DAQ-template expanded for the new linking support.
- FIX: Setting the LogicalLevel links prevented from cleaning all the string after the space at the link constants "val:".
- ModBus: Appended by the option "e" for the register endian switch to LE for generic and BE for strings. The string extension of the registers appended by the input charset conversion. Appended by the parameter "Omit cycles for read back of written" for control such feature apart from the asynchronous writing.
- FIX:DAQGate:
  - FIX: The message categories in catsPat() of obtaining the data source messages of the Controller Object switched to generate own detailed rules of the regular expression from the specified remote controllers — to prevent very redundant messages obtaining.
  - FIX: Improved-fixed in the Controller Alarm status formation for multiple stations, when ALARM it is at missing connection of all stations.
  - The sync() function of the controller object rewrote completely in the "Removing remotely missed parameters" section for:
    - processing the parameter's representing stations: removing completely for missing stations and parameters with no station;
    - removing disabled parameters and the logical containers at the flag "Allow the automatic removal of parameters and attributes".
  - The function TMdContr::messSet() of the DAQ related messages setting adapted to support attributes in the parameter address for significant attributes of the generic-container parameters, that is needed for the messages transmission from the up stations to the down ones.
- JavaLikeCalc: Expansion-finishing the object's cycle implementation "for({var} in {obj}) {body of the loop}" by the possibility of pointing as the Object <obj> of the included ones through the properties or from the results. The constant values appended by "null" as a synonym to EVAL (EVAL_REAL).
- OPC_UA: Finished in the writing support through custom flags of the Standard mode and the type obtaining from IO for the Logical mode.

Archives-History

- .,DAQ.{LogicLev,ModBus,OPC_UA}: Finished the unification of archiving at the Logical Level sources when used only the direct-passive archiving:
  - the object TPrmTempl::Impl appended by the new function archAttrs() of updating-archiving attributes of the LogicalLevel;
  - the value archive link type "Passive param. attribute (TVArchive::PassiveAttr)" renamed to "DAQ attribute (TVArchive::DAQAttr)";
  - the value archive link type "Active param. attribute" renamed to "Active DAQ attribute" with that mark as DEPRECATED.
- The "Messages" tab appended by a function of automatic clearing old Alarms from the Active Alarms Table at the specified days depth.
- FIX:FSArch:
  - FIX: Prevented for access to files[iA] in ModVArchEl::setValsProc() outside the lock using the read-lock switching.
  - FIX: Prevented for access to "files" in ModMArch::checkArchivator() outside the lock.
  - FIX: Files accessing locks completely revised for including the packing/unpacking, new files creation, removing old ones under the WR lock space including also the conditions checking. Also removed for the relocks in cycles and at indexes.

Transports

- FIX: The output transports appended by the force stopping at the object system disable-disconnection, not in destructors what is late then there can be lost the socket handlers.
- The IO log of the transports appended by the data modes "Binary & Text", "Binary", "Text", and by it writing to a file for very big ones at pointing the log size -1.
- FIX:Sockets: Fixed in processing the not complete writing for the Input part, when the message cuts on the TCP transmitter buffer size. The input buffer size of the Input part bound to the hardware receiver buffer size control and the internal one just frozen to the standard string buffer length since that is not critical and need no control.

Transport Protocols

- FIX:SelfSystem: Significantly reviewed and fixed in the external-output connections implementation, appended by checking limit the header size.
- ModBus: Appended by the option "e" for the register endian switch to LE for generic and BE for strings.
- HTTP: Appended by the HTTP Attributes of disabling the WEBBrowser Cache in whole: "Cache-Control: no-cache, no-store, must-revalidate", "Pragma: no-cache", "Expires: 0".
- UserProtocol: The input part expanded by a possibility of schedule the user procedures call in the service cycle, for the background processing of some data; the Object's attribute "This (this)" was appended here also.

User Interface

- QTStarter,QTCfg,Vision: The common Syntax Highlighter in SnthHgl::rule() switched to the main work using PCRE in TRegExp, since that is 5 TIMES FASTER and very richer comparing to QRegExp; and QRegExp left to be automatically enabled at missing the PCRE 32/16 libraries. The Qt-generic library (lib_qtgen) appended by the static-external functions getFont() and getColor() from UI.Vision and by the object SnthHgl from UI.Vision and UI.QTCfg.
- QTCfg,WebCfgD: Unified in notification the errors of the Control Interface during improvement the code TError::Core_CntrWarning and QMessageBox appended of the detailed text at the message longer for 255.
- QTStarter: Appended by the display sessions control, that is the sessions restore.
- QTCfg: Appended by the Favorite pages implementation. The image element appended by a function of clearing the image completely.
- FIX:Vision:
  - FIX: All control requests "<info>" appended by checking the child nodes presence to prevent crashes in some cases.
  - Appended by the possibility of call remote station interfaces by selecting the remote station in a dialog, for what the user selection dialog was expanded.
  - The text areas with the syntax highlighting appended by the builtin variant.
  - The image elements (icons) of the item dialogs appended by a button menu with the functions: Save, Load, Clear.
  - The Widget Attributes edition table appended by the multiline edition for the "Name" column and the context help loading for that.
  - The popup menu of the project, the project pages, the widget libraries and the library widgets in appending widgets from the libraries removed for limit of the libraries here in 20 items by moving all them to a new separated menu item "... from the Library".
- FIX:VCAEngine:
  - Icons of the projects and the widget libraries switched to download the common project icon at missing local.
  - The widget libraries adapted to interhost copying.
  - FIX: The Document primitive generation appended by limiting the repeating blocks size in limUserFile_SZ (10MB).
  - FIX: Fixed in the correct treating of the project pages and the library widgets with initially wrong parent addresses, for don't remove child widgets and change them parent at pointing the correct parent address.
- FIX:WebVision:
  - Appended by the export implementation for the "Document - HTML,CSV" and "Table CSV".
  - Appended by the printing implementation for the "Document" and "Main Page".
  - The type Table of the primitive FormEl added by tearing off the table header at big tables scrolling down.
  - FIX: The type Table of the primitive FormEl improved and fixed for:
    - setting the CSS property "white-space" to "pre-wrap";
    - setting the color changes under the selected cells;
    - preventing the focus loss just after entry to the cell editing;
    - fixing the boolean value setting at entry to the cell editing;
    - the table refitting at growing the column string length.
  - The included pages closing set after several (4) row appears — to prevent of closing all pages at fast navigation;
  - Improved in processing the connections of the ordinal users to own VCA-sessions.
- WebUser: Expanded by a possibility of schedule the user procedures call in the service cycle, for the background processing of some data.

#### 7.4.1 Service updates

- the fourth (4) at 20.12.2023.
- the third (3) at 13.09.2023.
- the second (2) at 12.08.2023.
- the first (1) at 25.06.2023.

### 7.5 [22.12.7529/22.02.2022] ПЯТОЕ обновление

Это обновление релиза 0.9 LTS исправляет около 50 ошибок и добавляет МНОЖЕСТВО улучшений с несколькими значительными-концептуальными, с которыми целиком можно ознакомиться в протоколе изменений обновления.

Significant actions of the developer of the OpenSCADA modules on the update

- FIX:SYS.TMess: Type of labStor(), labSecCRON(), labSecCRONsel(), labTaskPrior(), labMessCat() changed to "string".

  => obligatory revise of using the label functions since the compiler mayn't to say an error in functions like to printf(), TSYS::strMess() but that module will be crashed.

Automation Linux distributive of the project OpenSCADA

- appending Debian 11 as the distributive base;
- moving of building the Debian 10,9 base to the Debian 11 environment, then expanding the installer variants;
- updating TDE to 14.0.11 and next 14.0.12;
- fixing the plymouth problems, then the installations are safe now and "/var/boot.log" doesn't grow;
- fixing Digikam, TDEPim, KArm and kdiff3, than appending the new patched packages "tdepim-trinity", "digikam-trinity" and kdiff3-trinity to the distributive collection.

Main WWW-resources of the project — Site

- significant changes in the Site common interface:
  - the Wiki-pages call in IFRAME appended for a waiting screen and an animated image of representing the loading wait; the opened pages vertical size was precisely fitted also at three attempts;
  - the content window horizontal size limited in 1000 pixels;
  - moving the vertical submenu of the main menu from the static left position to the call at an options button on the left of the main menu;
  - moving to the top right for the service panel with buttons of the language select, call the print variant and the Google-search field;
  - dividing twice the top logo image;
  - the Google-search field: width expanding, moving up and hide under a search icon.
- changing the registration conditions and rules on the OpenSCADA site;
- the registration module finished in the translation to Ukrainian and enabled for acknowledge the new users registration by the site administrator.

New and significantly updated parts

- OpenSCADA Core: 3:11:0 => 3:12:0

  (Common Conception of the Data Storage, Messages Translation, Message Sublevels {Main}[0...9] and Unification for the User Messages Transferring)

- OpenSCADA "BD", "DAQ" subsystems: 14 => 15, 13 => 14

  (Significant Unification the Common SQL-code in the OpenSCADA Core)

- DAQ.DAQGate: 2.5 => 2.9

  (redundancy and the messages transferring, asynchronous writing mode implementation)

- DAQ.JavaLikeCalc: 5.1 => 5.4
- DAQ.Siemens: 4.2 => 4.4
- {DAQ,Protocol}.ModBus: 3.3 => 3.4, 2.8 => 2.9
- {DAQ,Protocol}.OPC_UA: 2.5 => 2.6, 2.1 => 2.2
- Archive.FSArch: 3.6 => 3.7
- Archive.DBArch: 3.0 => 3.1
- Transport.SSL: 3.3 => 3.4

  (pointing the certificates and the key directly from an external file with the input transports restarting at it change)

- Protocol.HTTP: 3.6 => 3.8
- Protocol.UserProtocol: 1.4 => 1.5
- BD.DBGate: 1.0 => 1.1
- BD.SQLite: 3.0 => 4.0
- BD.MySQL: 3.5 => 4.0
- BD.PostgreSQL: 2.5 => 3.0
- BD.FireBird: 2.5 => 3.0
- UI.QTStarter: 5.10 => 5.12
- UI.QTCfg: 5.6 => 5.9
- UI.WebCfg: 1.8 => 2.0
- UI.WebCfgD: 2.1 => 2.3
- UI.VCAEngine: 7.1 => 7.8

  (finishing of implementing the changes obtaining in the runtime mode by the clocking cycles through)

- UI.Vision: 7.14 => 8.0

  (early opening the restored and specified pages in the init procedure)

- UI.WebUser: 1.4 => 1.5
- UI.WebVision: 6.2 => 6.6
- LibsDB.OscadaLibs.base.anUnif: 2.1 => 2.4
- LibsDB.OscadaLibs.base.anUnifSt: 1.2 => 1.3
- LibsDB.OscadaLibs.base.digAlarm: 1.2 => 1.3
- LibsDB.OscadaLibs.base.codeState: 1.3 => 1.4
- LibsDB.OscadaLibs.servProc.docOffLine: 1.2 => 1.3
- LibsDB.OscadaLibs.Controller.test: 1.1 => 1.2
- LibsDB.vcaBase.Main
  - alarmsAct: 1.1 => 1.3
  - alarmsSt: 1.2 => 1.4
  - RootPgSo: 2.4 => 2.5
  - ElCadr: 1.1 => 1.2
  - TextLab,ImgLab: 1.0 => 1.1
  - graphSelPrm: 1.4 => 1.5
  - objProps: 1.1 => 1.2
  - cntrRegul: 1.1 => 1.2
  - storeHouse: 1.0 => 1.1
- LibsDB.vcaBase.mnEls.El_Kran_Sh,Compressor: 1.0 => 1.1
- LibsDB.vcaBase.doc
  - docAlarmsRep: 1.5 => 1.6
  - docUsersSet: 1.5 => 1.7

CONCEPTUAL > Common Conception of the Data Storage

- the Conception is commonly unified in the direct storage specification and definition the Generic Storage "*.*" as a combination of the Configuration File and the work Data Base, when the Configuration File is the priority one for accessing the allowed data and the work Data Base for new data.
- TBDS::{dataSeek,dataGet,dataSet,dataDel,genDBGet,genDBSet}() moved to the bit flags TBDS::ReqGenFlg;
- the TBDS::dbList() moved to the bit flags TBDS::DBLsFlg;
- TCntrNode appended of the functions storage() and setStorage() for tracking the availability of node data in different storages and offer a queue of the storages for the mechanism of sequentially removing duplicates, and they also used in the object functions DB(), fullDB(), setDB();
- the objects are adapted for tracking the multiple storages and are appended of the sequentially removing duplicates: Security.{User,Group}, Transport.{Input,Output}, DAQ.{Controller,TemplateLib}, Archives.{VArchive,VArchiver,MArchiver}, DAQ.JavaLikeCalc.Lib, Protocol.{ModBus,OPC_UA,UserProtocol}.*, UI.WebUser.Page, UI.{VCAEngine,Vision}.{WdgLib,Proj};
- the generic parameters accessing functions TBDS::genDBGet() and TBDS::genPrmSet() moved under the new storage conception using TBDS::dataGet() and TBDS::dataSet() respectively, and renamed to genPrmGet() and genPrmSet() everywhere;
- the objects moved to use the new function dataDelTbl(): DAQ.{TController,TPrmTmplLib,JavaLikeCalc,LogicLev,BlockCalc,ModBus,Siemens,OPC_UA}, Archive.DBArch, UI.{VCAEngine,Vision}.{WdgLib,Proj};
- the functions moved and used everywhere as static ones: TBDS::{dbList,dataSeek,dataGet,dataSet,dataDel,dataDelTbl}();
- the spare storage addresses with tables were shortened to the standard storage address with the table name unification, where the previous not standard names leave to be edited up to the 1.0 release, for the objects: SYS, DAQ.{TemplateLib,JavaLikeCalc.Lib}, UI.{VCAEngine,Vision}.{WdgLib,Proj};
- switched to select only DBs: Archive.DBArch, Protocol.HTTP;
- the root object of the DB subsystem TTypeBD appended of the DB priority base [0...9] in the generic storages list and the Data Base object TBD appended of the configuration field "Priority in list" to control order of the databases from TBDS::dbList(), than control the loading order;
- the "Work DB" configuration field changing disabled on the modification marking of all nodes;

CONFIGURATION FILE

- the configuration parameters and tables implementing in the common context of the TBDS::data{Seek,Get,Set}() functions;

REFACTORING THE TCntrNode FLAGS

- TCntrNode::{chldDel,nodeDis}() moved to direct use the new TCntrNode::EnDisFlag;
- the flags TCntrNode::{NodeRemove,NodeRemoveOnlyStor} used everywhere of the function postDisable() checking and chldDel() call.

CONCEPTUAL > Significant Unification the Common SQL-code in the OpenSCADA Core

- unification the table structure control by the structure item object TTable::TStrIt;
- refactored, initially on SQLite, in the request lists form in the separate list variables;
- common SQL-code moving to the functions: fieldSQLSeek(), fieldSQLGet(), fieldSQLSet(), fieldSQLDel();
- declaration in the core for the service definitions, methods and functions to the common SQL-code: SEEK_PRELOAD_LIM, tblStrct, seekSess, connRes, fieldFix(), getSQLVal(), setSQLVal();
- the fieldFix() appended an argument "langLs" of specifiyng need languages instead the argument "trPresent";
- propagating in such way of the last MULTILANGUAGE support code in DB.SQLite.

CONCEPTUAL > Messages Translation
TFunction::IO object appended the flag IO::TransltText of marking the translate String IO directly:

- the types "String (translate)" and "Text (translate)" appended in: template object of DAQ-Parameter, TFunction object of DAQ.JavaLikeCalc, UI-Attributes of UI.VCAEngine;
- the flag TFld::TransltText used in: value getting of TValue of DAQ-Atributes, DAQ-Attributes translation of DAQ.{LogicLev,ModBus,OPC_UA,Siemens}, UI-Attributes translation of UI.VCAEngine;
- set to the type "String (translate)" for: the field "colDscrCustNames" of wlb_Main.{alarmsAct,alarmsSt}.

Expanding by the language for the execution environment of the user functions of the OpenSCADA object, for functions like to strftime():

- the object TCntrNodeObj, the function TCntrNode::objFuncCall() and TConfig::objFunc() expanded in the argument "user" renaming to "user_lang" with pointing language in the second line;
- DAQ.JavaLikeCalc: the TCntrNodeObj execution appended of the language;
- SYS.strftime() appended of execution from the pointed language-locale.

TUIS,UI.{QTCfg,Vision}: docGet() expanded by the language in the second line.
FIX: The "Translations" tab expansion and fixing for:

- the option "check for mismatch (TrChkUnMatch)" renamed to "check/fix (TrChkAndFix)" and expanded of the translation fixing functions: by propagation the translations to empty sources, clearing the double to base translations, merging the base messages as the translations;
- information of the non matching was appended in the second message text;
- the translation management table appended of the user functions "Split item" and "Remove from Trs";
- the translation status appended of the short labels "SINGLELANGUAGE", "MULTILANGUAGE", "MULTILANGUAGE-DYNAMIC"; the message index; size of the cache and the translation context;
- the base language configuration field of the MULTILANGUAGE modes expanded by list the project locales separated by ";".

FIX: Expansion the Data Messages Translation in the tree modes: SINGLELANGUAGE, MULTILANGUAGE and MULTILANGUAGE-DYNAMIC:

- the user language obtaining unified in the function lang2Code(), expanded by the arguments "user" and "onlyUser";
- the lang2CodeBase() function separated to the common one langBase() and appended the function langToLocale() of obtaining the complete locale at language from langBase();
- the language field of the objects TSYS, TUser appended of the selection list from langBase();
- FIX: the TMess::mRes lock renamed to TMess::trMessIdxRes and limited in use only for TMess::trMessIdx;
- the translation cache significant extending and unification:
  - in the new TMess object's functions translCacheGet(), translCacheSet(), translCacheLimits() and the own lock trMessCacheRes;
  - extended by the message category for caching the system translations and users;
  - the cache limiting also appended by the time limit variable "limCacheIts_TM" for what it checked in the service task.
- appended for the translation context at the new function TMess::trCtx() and the object TrCtxAlloc for handling the context registration as user and language bound to the call thread:
  - TCntrNode::cntrCmd(), Protocol.HTTP, UI.{Vision,WebVision,WebUser,WebCfg,WebCfgD} attached to use the translation context.
- synchronized in the system prestored and the dynamic-data setting messages;
- the DB type-module objects were appended by the specific information field "Features" of specifying the supported by DB features;
- FIX: complete disabling the translation and registering in the message index at the loading for generic TConfig nodes with the JavaLikeCalc procedure text and a deprecated flag of enabling that procedure whole translation;
- UI.QTCfg: the tree update enabled for the root page updation through the reconnection and the tree update at the user change; enabled for using the system language in the SINGLETRANSLATION mode for remote connections;
- FIX:UI.VCAEngine: the project styles moved under a new storing table "{DB_TBL}_stls" and its structure with translation;
- UI.{WebCfg,WebCfgD}: Generically adapted to the dynamic translation in the MULTILANGUAGE-DYNAMIC mode, using the HTTP-variable "lang", the user language and browser language;
- the How to "Create multi language project" document was created.

  PRIMARY PROJECT OBJECTS

- implemented for the base message and its translations mark as fuzzy - "<!>" in the text end at changing, and warning the translation removing;
- accessing the dynamic translation moved under the new functions trD()->TMess::translGet() and trDSet()->TMess::translSet(): TArchives,TDAQ,TTypeDAQ,TController,TParamContr,TFunction,TPrmTmpl,TTransports,DAQ.{BlockCalc,JavaLikeCalc};
- appended in the dynamic translation for:
  - DAQ-attributes name-description postranslation after the system translation and translation in the context help;
  - DAQ-attributes translation in the UserAPI functions: get(), set(), descr();
  - DAQ.JavaLikeCalc: names setting part of the execution form moved to itself;
  - Protocol;{ModBus,OPC_UA,UserProtocol},UI.{VCAEngine,WebUser}.
- adapted commonly to the new changing conception in the MULTILANGUAGE-DYNAMIC mode through "{base}\000{lang}\000{mess}";
- appended and used for a new function translIdxCacheUpd() of updating the operative translation messages' index and cache in the MULTILANGUAGE-DYNAMIC mode for the SET command;
- appended of the translation copy in the SQL INSERT command and for the MULTILANGUAGE-DYNAMIC mode;
- the configuration file appended of the MULTILANGUAGE-DYNAMIC mode support.

  INDIVIDUAL MESSAGES - "Trs"

- UI.VCAEngine: appended of changing the storage just after the widget procedure compile for placing of the dynamic messages translation to the project storage;
- the transitive dynamic translation prevented in appending the table "Trs" for messages available in other sources, so checking the message index before;
- appended for filtering the messages for they translatability before registering.
- LibsDB.vcaBase:
  - wlb_Main.ElViewGraph: enabled for the transitive translation in the tooltip and for the parameter description;
  - wlb_Main.objProps: enabled for the transitive dynamic translation;
  - wlb_Main.storeHouse: significantly expanded for the specific fields, ordering the columns, appending of the highlighting rules for column values with filter index or list, fixed in whole work.

  SYSTEM MESSAGES

- implemented for a function of prestoring system messages translation trS(), where the base message just return with the catalogue information, that is "{base}\000{cat}" and what is translated really in the call _() — in the background there is used Mess->I18N(), but for the specific language code mess_PreSave="<PSV>";
- the system translation function TMess::I18N() was attached to the messages cache;
- the TFld and IO objects expanded in work with the prestoring system messages;
- module info fields adapted to the MULTILANGUAGE-DYNAMIC mode;
- adaption to the postranslation for the User API function TConfig::cfg() in the translatable strings;
- UI.{QTCfg,Vision}: adapted to the control items obtain in language of the user and update the main window interface language at it change;
  - UI.Vision: appended in updation the toolbars at the user change, what also adapted for the dynamic translation; all development dialogs adapted for the dynamic translation.
- UI.{QTStarter,QTCfg,Vision}: appended for the system Qt-messages translation relating to the selected user language, through the common application property "lang" for the Qt-translation reimplemented function QTranslator::translate(), and then the language commonly switched by the last interface and for all opened; the Starter Menu set for dynamic translation and updating.

CONCEPTUAL > Message Sublevels {Main}[0...9] and Unification for the User Messages Transferring

- generic adaption to sublevels {Main}[0...9] of the main message levels [0...7];
- DAQ,DAQ.DAQGate: the function TController::messSet() appended of the messages transferring from the top to the down, so sinking down, making the function virtual one and redefine that in DAQGate, and defining also the new OpenSCADA control service request of the TController object "set:/serv/mess";
- DAQ: specified for the DAQ-transparency messages in the category form "{TP}{ModId}:{CntrId}[.{prm}][:{spec}]", appended of such messages creation function TController::messSet() and the User API functions SYS.DAQ["Modul"]["Controller"].messSet(), SYS.DAQ["Modul"]["Controller"]["Parameter"].messSet();
- LibsDB.vcaBase:
  - wlb_Main.{ElCadr,TextLab,ImgLab,cntrRegul},mnEls.{El_Kran_Sh,Compressor}: adapted for the user action messages forming by the new DAQ-function messSet() with the unified category structure for transferring between OpenSCADA stations of different levels;
  - wlb_Main.{alarmsAct,alarmsSt}: adapted to process of sublevels of the main levels with coloring all the levels; expanded by the new user field "Type" as name of the alarm level from the new configuration attribute "types";
  - wlb_doc.{docUsersSet,docAlarmsRep}: appended in the DAQGate source complete scanning for whole transferring hierarchy;
  - wlb_Main.alarmsSt,wlb_doc.{docMessRep,docAlarmsRep}: adapted to the transferred messages by DAQGate;
  - wlb_Main.{alarmsSt,alarmsAct},wlb_doc.docMessRep: improved in the DAQGate source complete scanning for whole transferring hierarchy, also for user actions (OP);
  - wlb_Main.TextLab: optionally enabled for the transitive translation in the status text which often comes from some DAQ-source.

OpenSCADA libraries and projects

- FIX:LibsDB.{OscadaLibs,vcaBase,vcaTest},{AGLKS,Boiler}.*: Appended, cleaned and fixed for the multilanguage messages by applying the new translation fixing mechanisms.
- LibsDB.vcaBase,AGLKS.vca,Boiler.St: All project styles moved under a new storing table and its structure with translation.
- FIX:LibsDB.vcaBase:
  - FIX:wlb_Main.{alarmsAct,alarmsSt}: The default sorting at the field of the alarm time set back to "1" as not default descending order. wlb_Main.alarmsAct: Appended for the field "messCat" of specifying the alarm categories.
  - wlb_Main.{ElViewGraph,graphSelPrm}: Adapted to reset the trend item color to the default styled at setting that to empty; appended of the empty color processing as the default one also taken from the style.
  - FIX:wlb_Main.RootPgSo: Appended of complete updating at the user change, but language also can be changed, and the language.
- LibsDB.OscadaLibs: The "DB" field content and the table base ID of UserFuncLibs.{techApp,servProc,Controller} renamed to the standard one "flb_techApp", "flb_servProc", "flb_Controller" respectively.
  - tmplib_base.{anUnif,anUnifSt,digAlarm,codeState}: Adapted to the syntax highlight builtin of the input preprocessing procedure.
  - tmplib_base.digAlarm: Expanded in the common attribute DESCR using for the specific parameters redefinition by the new fields "CustomFlds".
  - tmplib_base.anUnif: Expanded in the common attribute DESCR using for the specific parameters redefinition by the new fields "CustomFlds" and "CustomAlarms". Appended of the user procedure option "toSave" of force saving the object at the exit.
- flb_servProc.docOffLine: Expanded for the index page accessing from any other pages.

API
!!!!:Changes:

- SYS: TCntrNode::{chldDel,nodeDis}() moved to direct use the new TCntrNode::EnDisFlag: NodeNoFlg, NodeRemove, NodeRemoveOnlyStor; and the space after > 0x100(TCntrNode::NodeSpecific) was reserved for the node specific, where the TParamContr::EnDisFlag set only to NodeRemove_NoArch and Widget::EnDisFlag set only to Widget::{NodeRemove_NoDelMark,NoContainer}. TCntrNode::Flag items renamed SelfModify->Modified, SelfModifyS->ModifiedS, SelfSaveForceOnChild->SaveForceOnChild.
  - Storage object's functions DB(), fullDB() and setDB() expanded of the argument "qTop".
  - The subsystem name moved to the function subName() call and which set "virtual" and "constant", also as subVer() and subId().
  - The description field type of the TFld object and the name field of the IO object changed to "string".
  - Result of TCntrNode::nodeNameSYSM() changed to "string".
  - TMess: The lang2CodeBase() function separated to the common one langBase() and appended the function langToLocale() of obtaining the complete locale at language from langBase().
    - The function lang2Code() expanded by the arguments "user" and "onlyUser".
    - I18N() changed in the arguments for "const string &mess" the first and mLang moved to the second, it result changed to "string", also for TModule::I18N(), and updated all definitions _().
    - The data translation functions (short definitions) renamed to trD_L(), trD_U(), trD_LU(), trDSet_L(), trDSet_U(), trDSet_LU().
    - Removed for I18Ns().
    - labStorGen() merged to labStor() and that labels labStor(), labSecCRON(), labSecCRONsel(), labTaskPrior(), labMessCat() type changed to "string"; appended of the label labStorGen().
    - lang2Code() and lang2CodeBase() renamed to langCode() and langCodeBase() respectively for starting the adaption to the language code more than 2 symbols.
  - Security: The static method "pHashMagic" moved to the definition SEC_HASH_MAGIC.
- DB: The functions TBDS::{open,close}() renamed to TBDS::{tblOpen,tblClose}() and set to static ones.
  - TBDS::{dataSeek,dataGet,dataSet,dataDel,genDBGet,genDBSet}() moved to the bit flags TBDS::ReqGenFlg (renamed from TBDS::ReqGen): NoFlg, NoException, OnlyCfg, UseTranslation (renamed from ReqGen::UseTranslation), UseCache, UseAllKeys.
  - TBDS::dbList() moved to the bit flags TBDS::DBLsFlg: LsNoFlg, LsCheckSel, LsInclGenFirst.
  - The functions moved as static ones: TBDS::{dbList,dataSeek,dataGet,dataSet,dataDel,dataDelTbl}(), TBDS::{fullDBSYS,fullDB}().
  - The generic parameters accessing functions TBDS::genDBGet() and TBDS::genPrmSet() renamed to genPrmGet() and genPrmSet() everywhere.
- DAQ: TTypeDAQ::compileFuncSynthHighl() renamed to TTypeDAQ::compileFuncSnthHgl() in a way of the name unification.
- Archives-History: Definitions of the archive specific names renamed for BUF_ARCH_NM, ALRM_ARCH_NM, ALRM_ARCH_CH_NM to ARCH_BUF, ARCH_ALRM, ARCH_ALRM_CH; and appended for ARCH_NOALRM ("<noalarms>").

Appends:

- SYS: The global short functions appended of s2l() and s2u().
  - Appended of a new function strParseEnd() of parsing the separated string from the end.
  - The function pathLev() appended of a new argument of position the offset to the next token begin and what also appended in the UserAPI function parsePath() of DAQ.JavaLikeCalc.
  - TCntrNode appended of the functions storage() and setStorage() for tracking the availability of node data. TCntrNode::Flag appended of the item LoadForcibly. TCntrNode::modif() and TCntrNode::modifG() appended of a new argument "forceLoad".
  - The time limit variable "limCacheIts_TM" appended for the cache limiting.
  - The common encoding function strEncode() and the User API one appended the variant "ShieldBin" of shield the binary symbols [\x0-\x8\xB-\xC\x0E-\x1F].
  - TMess: Appended for a function of checking the messages for them translatability — isMessTranslable().
    - Appended for functions of managing the translation cache: translCacheGet(), translCacheSet(), translCacheLimits() and the own lock trMessCacheRes. Appended for a function translIdxCacheUpd() of updating the operative translation messages' index and cache, and functions translItSplit(), translItRemTrs() of the items splitting and removing from Trs.
    - Appended for the translation context at the new function trCtx() and the object TrCtxAlloc for handling.
    - Appended for the data translation trD()->translGet() and trDSet()->translSet().
    - Appended for the prestoring system messages translation trS(), as an other link to I18N().
    - Appended for the function messLevelTest().
    - The TMess::Type structure appended of an item "MaxLev" of the maximum message types/levels specifying.
    - The TMess definitions appended of mess_PreSave="<PSV>" and mess_TrModifMark="<!>".
  - XMLNode: Appended of the new saving option BinShield(0x400) for controllable shield the binary symbols [\x0-\x8\xB-\xC\x0E-\x1F].
  - TConfig,TCfg: Expanded for new parameters TConfig::{trcSet,setTrcSet}(), TCfg::{isSet,setIsSet}() of detection the configuration field changing and using in the partial DB-loading instead toDefault(); and TConfig::{noTransl,setNoTransl}() for global setting the structure default translation. TCfg::setExtVal() function appended an argument "toOne".
  - TError: codes appended of: DB_TrRemoved (22) for mark the translation removing in DB, DB_ReadOnly (23) introduced by SQLite at the unification process, Core_NoNode (5) of the TCntrNode missing, Tr_ErrTransport (12) for the transport errors mark, Tr_ErrResponse (13) and Tr_ErrDevice (14) for more specific transport errors.
- DB: The TBDS::realDBName() appended of the back conversion argument.
  - The static methods of TBDS appended of the new function dbPart() of getting the storage address parts and appended of a new function dataDelTbl() of the common tables removing, also in the Configuration File.
  - Appended for the structure item object TTable::TStrIt.
  - Common SQL-code moving to the new functions: TTable::fieldSQLSeek(), TTable::fieldSQLGet(), TTable::fieldSQLSet(), TTable::fieldSQLDel(); with the flags TTable::SQLReqFlag: SQLNoFlg, SQLOrderForSeek, SQLFirstSkipForSeek.
  - Declaration in the core for the service definitions, methods and functions to the common SQL-code: SEEK_PRELOAD_LIM, tblStrct, seekSess, connRes, fieldFix(), getSQLVal(), setSQLVal().
  - Appended of the list priority specifying functions TBD::lsPr(), TBD::setLsPr() and virtual one TTypeBD::lsPr().
  - Appended of the DB features specifying virtual function TTypeBD::features().
- DAQ: TFunction::IO object's structure IO::IOFlgs appended the flag IO::TransltText of marking the translate String IO directly.
  - The function {TController,TParameter}::messSet() appended of the messages transferring from the top to the down, and also the User API functions SYS.DAQ["Modul"]["Controller"].messSet(), SYS.DAQ["Modul"]["Controller"]["Parameter"].messSet().
  - The TCntrNodeObj appended of the function lang() obtained from the second line of the common method mUserLang.
  - The User API functions appended of the function funcSnthHgl() in the DAQ module object and for obtaining the syntax highlight rules of the module and language.
- Archives-History: Appended of the function "void TArchives::messPut( const TMess::SRec &rec, const string &arch = "" )" variant.
- Transports: Appended of the new function extHostSeek().
- UI: Appended of the Configuration File option "FontSnthHglCode" and the corresponded functions TUIS::fontSnthHglCode() and TUIS::setFontSnthHglCode().
  - VCAEngine:
    - The User API functions mime() and mimeSet() appended of the correct equivalents resource() and resourceSet().
    - The Project object appended a Control Interface service request "read:/serv/access", of checking the read access.
    - The Control Interface service request "get:/prm/cfg/prj" appended an option "noName" for preventing the project name request.

SYS

- FIX:Building: configure.ac: Core library version risen to 3:12:0 and the program version risen to 0.9.5.
  - The module version of the subsystem "BD" risen to 15, the subsystem "DAQ" risen to 14.
  - The Debian 11 root file systems (chroots) are appended for build OpenSCADA; appended for build to Ubuntu 22.04 LTS and Debian 11 ARM64; and Maemo 5 (Nokia N900) removed since the compiler crashes now constantly in several places.
  - data/*.xml: The TBDS Generic parameter "SYSStPref" removed.
  - SYS,data/ModelsDB/{AGLKS/oscada_AGLKS.xml,Boiler/oscada_Boiler.xml}: The configuration parameter "Lang2CodeBase" renamed to "LangBase" with support "Lang2CodeBase" up to the 1.0 release.
- The source code messages and program documentation:
  - The "Quick start" manual completely revised and actualized for the last LTS changes, and also included the new section "Execution the ready OpenSCADA project in the service-background space" into own section "Background and remote execution — server, PLC execution environment and remote development".
  - The "Program Manual" document appended of the new section "Execution the ready OpenSCADA project in the service-background space" and revised in the section "Startup and execution".
  - New document of the How to "Create multi language project" appended for downloading to offline.
  - The whole source code labels like to ????, !!!!, ?!?! and they comments were revised.
  - The language Russian,Російська,Российский renamed to its true name mRussian.
  - UI.{VCAEngine,Vision}: The "Mime data" renamed to "Resources" and "Mime type" to "MIME".
- .,DAQ.DAQGate: The messages redundancy and messages transferring in DAQ.DAQGate limited for depth of the requesting messages up to the restoring time or one hour.
  - The archivers redundancy and DAQ.DAQGate switched in the initial messages requesting to:
    - request the active alarms;
    - request the archive in deep and up to the alarms requesting time, without the alarms activation;
    - ordinal-periodic request of the last messages, without the alarms activation.
- Protocol.HTTP,UI.{WebCfg,WebCfgD,WebUser,WebVision}: Appended of the previous user detection to mark that actions for HTTP-modules with moving the previous user authentication session closing after successful the new one.
  - All the HTTP-modules adapted to the user field in the HTTP-functions with the previous user in the second line.
  - FIX:WebVision: The previous user is used now for detection of the user change between the ordinal users and for single session, than prevent to create new sessions.
- Expanding the binary symbols [\x0-\x8\xB-\xC\x0E-\x1F] shielding:
  - XMLNode: Appended of the new saving option BinShield(0x400) for controllable shield the binary symbols [\x0-\x8\xB-\xC\x0E-\x1F], what is significant for the WebBrowsers.
  - UI.{WebCfgD,WebVision}: Appended of encoding the XML traffic for the binary symbols shielding using the new option "BinShield".
- FIX: strParse() rewrote and tested in processing the group symbols merging at the scan; and strParse(), strLine(), pathLev() in position the offset to the next token begin and limiting in the down for 0; and pathLevEnd() in positioning the offset to the next token end and limited in the up for the size. TModSchedul::chkAllowMod(),UI.QTCfg,Protocol.HTTP: switched in use TSYS::pathLevEnd() and TSYS::pathLev() in the new behaviour.
- Force loading appended of the errors suppression for not modified nodes before that operation.
- .,DB,DAQ: The global configuration context copying mechanism (interstation) appended for the marking link to the last setting operation object, to easy postmarks setting.
  - DAQ: As a postmark to the saving DAQ-parameter object there appended the attribute "prmTp" with the parameter type, which is used next in true detection the parameter type changing at the following loading.
- .,UI.{QTCfg,WebCfgD}: The OpenSCADA Control Interface for Tables expanded by the user commands.

DB

- FIX: The TBD object appended an internal flag "mIsFirst" of control the object first enable and what used to prevent of the table "Trs" registering at each enable-connection-reconnection.
- FIX: The TBDS::dataDel() fixed-appended in removing multiple items and appended of removing the empty table nodes of the Configuration File.

DAQ

- FIX: The controller objects manual start defined for some specific hot doings of the object enabling, when the doing was prevented from call twice at the normal start:
  - DAQGate: resync the remote source data at the sync period >= 0;
  - ModBus: force reformation of the acquisition blocks;
  - OPC_UA: force reformation of the monitored items list;
  - Siemens: force reformation of the acquisition blocks.
- The "Return" type IO of the TFunction object was set to ReadOnly in the manual execution tab.
- FIX:DAQGate: Appended of the asynchronous writing mode implementation. The configuration field of the remote stations selection moved in simple combobox. The controller object status appended of the counters of read/archive's/wrote values, read messages and the writing buffer status.
  - FIX: Fixed in reusing parameters with empty address for included ones and appended for clearing the address at the parameters copy.
  - FIX: Unified in the sync commonly and fixed in the attributes sync, with preventing in constantly sync of the missed on remote host parameters.
- FIX:JavaLikeCalc: Prevented in some resources lock of the library function at its program change, when performed the program compile at disabled function.
- Siemens: Appended of the new option "Maximum size of the request block, bytes" of specifying the maximum requesting block.

Transports

- The UpRiseLev stations splited in the requesting transport per the first host of the "reforwardHost" address, than preventing the common connection hung at long connection to very far reforward missing station.
- SSL: Both input and output parts appended of the possibility to point the certificates and the key directly from an external file. Appended for reloading the certificates file of the input transport at it change by the transport reconnect.

Transport Protocols

- FIX:HTTP: Fixed in reading the "accept-language" HTTP variable only as the two symbol language code, then the common interface is translated also now on FireFox who sends there the country code also.
- FIX:SelfSystem: In the input part switched to load the whole input message before checking the auth information, then preventing for strange error messages "Error the command format." for the message tail.

User Interface

- VCAEngine,Vision,WebVision: The "openlist:/serv/pg" control request appended in the attribute "pgGrp" (group) of the opened page for detection several pages open in one container then open last one and close previous ones, to prevent mostly the included pages all close and allow of specifying-override the need pages open.
  - Vision: Refactored also for early opening the restored and specified pages in the init procedure.
- QTStarter,WebVision,WebCfgD: Qt part, in the generic Qt Library, and Web appended for the table edition text apply at Enter and new line at Ctrl+Enter.
- FIX:QTCfg,Vision: Prevented from hangs at stopping from a termination signal, from the console mostly, since locking the main Qt thread in modStop() without qApp->processEvents().
- QTCfg: The text fields appended of checking and activation the builtin syntax highlight rules from the XML-tag "SnthHgl". The Tables appended of finding for pointed strings.
- VCAEngine:
  - Finishing of implementing the changes obtaining in the runtime mode by the clocking cycles through, after observing the race condition on the attributes changing, which cause to do not update the value on visualizers:
    - rewrote for the modification control mechanism;
    - specifying the forming and fixed cycles;
    - reducing the main calculation clock to uint16;
    - dividing the changes clock value of attributes and the widget commonly to the forming (uint16) and the fixed (uint16) = uint32;
    - processing the changes clock value both at the modification and reading-checking;
    - support of reloading the main calculation clock and clearing the old changes clock value;
    - preventing the empty cycles for the common widgets requesting;
    - removed for code of the previous slide current mark mechanism of the attributes changing detection with the doubles.
  - The Widget copy operation appended of copying the used widget resources (the Image type now only), and in that way there performed.
  - FIX: The "<deleted>" mark setting for the removed inherited included widgets moved to the save function of the container widget, since that is lost at the copy operations and now you can easy undo/redo such widgets removing.
  - FIX: Fixed in the mime data copy at the widget libraries and the projects copy, moving the copy to the copy save, with expanding the mime operations for work with completely specified DBs.
  - FIX: Prevented in the attribute values inheriting for the output links, then do not write to DAQ the obviously wrong values at the hot edition of running projects and their items.
- FIX:Vision: Fixed, or finished the implementation, for UNDO/REDO the removing operation of the inherited included Widgets of the Project Pages.
  - Adjusted in the focus policy to the UI.WebVision way and appended the focus force clearing at lost, to prevent the widget focus return at window activation, so you can use now the event "ws_FocusIn" in opening external subwindows.
  - The child widgets selection conception at the visual editing of the development mode was unified and fixed in a new part "Visual editing" of the UI.Vision module documentation.
  - Requesting of the widget attributes' values of the developed widget moved to a single big request, than the remote development is become much faster.
- FIX:WebVision: The session methods mUser and mUserOrig moved under the data mutex lock, due to there can be crashes at active user manipulations.
  - FIX: The view "Combo" of the type "Line" and the types "List" and "Combo" appended of creation value items missed in the selection list.
  - FIX: The popup windows of the calendar and editable combo appended of the geometry check than preventing the main window overflow; and the popup windows closing moved completely at a mouse button press outward the window, together other popup menus.
  - FIX: Improved and fixed in usability the view Table of the primitive FormEl and mostly in the text edition: true width fitting and minimum height setting to 40 pixels, FIX: fixed in specifying the column sorting value "0" as ascending-default and "1" as descending from the top, like to the UI.Vision behaviour and the numbers (integer,float) sort-comparing was implemented separately.
  - Appended for the FrontEnd status display in the session status field with that requesting-scheduling at display the field.

#### 7.5.1 Service updates

- the fifth (5) at 03.12.2022.
- the fourth (4) at 23.10.2022.
- the third (3) at 03.09.2022.
- the second (2) at 08.08.2022.
- the first (1) at 24.07.2022.

### 7.6 [14.04.7529/14.06.2021] ЧЕТВЁРТОЕ обновление

Это обновление релиза 0.9 LTS исправляет около 45 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.

Переведено в счёт пакета ТП Лаборатории Вакуумных Технологий

Важные действия пользователя по обновлению

- FIX:SYS: Общее конфигурационное поле "WorkDir" предотвращено от маркирования как модифицированное при переключении проекта, чем и от сохранения в конфигурационном файле, но отсутствует механизм автоматического удаления этого поля из конфигурационного файла старых проектов.

  => удалите вручную общее конфигурационное поле "WorkDir" если оно появилось там ошибочно и вы имеете проблемы использования каталогов чужих проектов этим проектом.

Новые и значительно обновленные части

- Ядро OpenSCADA: 3:9:0 => 3:10:0

  (ревизия механизма переводов)

- Подсистема "Транспорты" OpenSCADA: 17 => 18
- {DAQ,Protocol}.OPC_UA,libOPC_UA: 1.7 => 2.1, 1.10 => 2.1, 1.2 => 2.1

  (дополнено реализацией сервиса Publish, поддержкой кусков (CHUNKS) на клиентской части Сбора Данных и общим пересмотром кода в этом процессе)

- DAQ.ModBus: 2.12 => 3.1
- DAQ.DAQGate: 2.2 => 2.3
- DAQ.Siemens: 3.5 => 3.6
- Transport.Sockets: 4.2 => 4.3
- Transport.Serial: 2.5 => 2.6
- Transport.SSL: 3.2 => 3.3
- UI.WebCfgD: 1.5 => 2.0
- UI.VCAEngine: 6.9 => 7.1
- UI.QTStarter: 5.8 => 5.9
- UI.QTCfg: 5.1 => 5.4

  (общий пересмотр и переделка таблиц)

- UI.Vision: 7.7 => 7.13

  (общий пересмотр и переделка таблиц в Qt в целом и вида Таблица примитива FormEl СВУ)

- UI.WebVision: 5.8 => 6.2

  (общий пересмотр и переделка таблиц вида Таблица примитива FormEl СВУ)

- LibsDB.OscadaLibs.DevLib.IEC62056: 1.0 => 1.1
- LibsDB.vcaBase.Main: 2.0 => 2.1
  - storeHouse: 1.0
  - RootPgSo: 2.3 => 2.4

OpenSCADA библиотеки и проекты

- LibsDB.vcaBase,AGLKS.vca: Main.RootPgSo: Дополнено на предмет:
  - виджета "alarms" на основе примитива "Протокол" с возможностью включить/выключить;
  - добавления опциональной функции возврата к типовому пользователю после определённого времени неактивности в атрибуте "defUser";
  - переключено на неотносительный алгоритм вычисления вертикальной позиции и высоты главной мнемосхемы.
- LibsDB.OscadaLibs: DevLib.IEC62056: Переписано в синхронный режим (запрос-ответ) для работы нескольких устройств на одной последовательной шине.
- LibsDB.vcaBase:
  - Библиотека "Основная" дополнена новой страницей реализации "Склада (storeHouse)".
  - Main.RootPgSo: Периодичность исполнения кадра поднята до 1000 миллисекунд после добавления ранней обработки событий. Значительным образом переключено с клавиатурных последовательностей "Ctrl+?" на "CtrlAlt+?".
- AGLKS.vca: Страница проекта /prj_AGLKS/pg_so/pg_4/pg_mn/pg_1 переименована в /prj_AGLKS/pg_so/pg_4/pg_mn/pg_CM101, как с другими.

API
!!!!:Изменения:

- SYS: Функцию TSYS::curTime() дополнено аргументом определения источника часов с использованием функции clock_gettime(). Определение EVAL_RFlt дополнено суффиксом "f".
- Mess: Функция перевода TMess::translSet() дополнена аргументом "srcFltr" фильтрации по источникам.
- Транспорты: Функция протокола ВВ pushLogMess() дополнена аргументами "data" и "dataDir".

Дополнения:

- Mess: Блокирование данных отделено от блокирования всех сообщений в dtRes.
- SYS: Функции API пользователя дополнены функцией lang() быстрого получения системного языка.
  - Дополнено функцией TSYS::curTimeN().
  - .,DAQ.{LogicLev,ModBus,Siemens}: Дополнено и использовано глобальную постоянную DAQ_APER_FRQ представления частоты апериодических вызовов, вроде f_start, периодических процессов.
- Безопасность: Объект пользователя дополнен функцией Пользовательского API auth() для аутентификации по паролю.
- Транспорты: Входные и выходные объекты транспортов дополнены атрибутами протокола ВВ: "mLogLstDt", "mLogLstDtTm".
- DAQ: Объект DAQ-параметра дополнен информационным полем метки времени изменения с его максимальным значением на объекте контроллера, с помощью нового конфигурационного поля БД "TIMESTAMP" объекта параметра.

Система

- FIX:Сборка:configure.ac: Версия библиотеки ядра увеличена до 3:10:0 и версия программы увеличена до 0.9.4.
- Сообщения исходного кода и документация программы:
  - rom_as@oscada.org заменено на roman@oscada.org везде в исходниках.
  - Документ "Modules/OPC_UA" целиком отревизирован для версии модулей 2.1 и перевода.
- Вкладка "Переводы" несколько отревизирована, дополнена актуальным статусом, дополнена контекстной помощью и менеджер переводов дополнен на предмет:

    - ограничения времени формирования таблицы в prmInterf_TM (7 секунд);
    - конфигурационного поля пропуска количества верхних сообщений;
    - установки перевода только для фильтрованных источников;
    - проверки содержимого на совпадение только для фильтрованных источников;
    - пропуск ошибок отсутствия источников.
  - Функция перевода TMess::translSet() предотвращена от распространения групповых сообщений, изменённых не из менеджера перевода.

- FIX:.,BD.LDAP,Archive.{DBArch,FSArch},DAQ.{ModBus,MMS},{DAQ,Protocol}.OPC_UA,UI.Vision: Несколько очищено от предупреждений сборки.
- FIX: Определение EVAL_RFlt дополнено суффиксом "f" для предотвращения ошибочного сравнения double EVAL_RFlt с сохранённым float значением, исправляет работу архиватора Archive.FSArch с типами значений float при выявлении EVAL.
- FIX:Mess: Блокирование данных отделено от блокирования всех сообщений в dtRes для предотвращения конкурентным блокировкам при активной работе с переводами. Атрибуты mLang2CodeBase, mLang2Code переключены на это новое блокирование.
- data/openscada-proj.in: Переключено на ссылку содержимого Пользовательской LibsDB на системные библиотеки, с содержимым только на чтение, вместо копирования.

Сбор Данных

- ModBus,Siemens: Переключено, в формирование значения "f_frq", на использование информации реального исполнения задачи.
- {DAQ,Protocol}.OPC_UA.{.,libOPC_UA} : Дополнено реализацией сервиса Publish, поддержкой кусков (CHUNKS) на клиентской части Сбора Данных и общим пересмотром кода в процессе этого:

    КЛИЕНТ:
  - добавление атрибутов (элементов мониторинга) перенесено из attrPrc() непосредственно в enable() и которая запускается при запуске объекта контроллера
  - ... и обработка элементов улучшена обновлением описания, флагов и связывания;
  - сбор данных унифицирован обработкой в функции параметра upVal()
  - ... и запроса значений функцией объекта контроллера getValMIt() с поддержкой Массивов
  - ... чем вплотную подготовлено для встраивание логического типа параметров;
  - объекты параметров Сбора Данных автивированы для включения других параметров;
  - установка и удаление EVAL ко всем атрибутам проверено во всех режимах;
  - структурные переменные, в просмотрщике выбора DAQ-параметра, разрешены для выбора их элементов отдельно;
  - разбор перечня переменных DAQ-параметров установлен в полный разбор с пропуском пустых строк;
  - объект DAQ-контроллера дополнен закрытием сеанса и безопасного канала при его останове;
  - общий статус объекта контроллера дополнен детализированной информацией на предмет использованного канала безопасности, сеанса, подписки и обрабатываемыми элементами мониторинга;
  - блокирование запроса переименовано в resOPC.
    СЕРВЕР:
  - объект OPC-UA Сервера дополнен вкладкой общего статуса сервера с информацией на предмет активности каналов безопасности;
  - объект Узла EndPoint дополнен общим статусом с информацией на предмет активности сеансов и подписок, а также периодичностью и временем исполнения задачи подписок.
    БИБЛИОТЕКА:
  - унифицировано и определено типовое значение времени жизни канала безопасности, которое установлено в 300000 мс;
  - типовой LifeTimeCounter подписок установлен в 2400;
  - объект NodeId дополнен функцией прямого сравнения operator==();
  - функция XML_N::childClear() дополнена результатом возврата того самого объекта XML_N для объединения;
  - функция curTime() дополнена аргументом определения источника часов с использованием функции clock_gettime();
  - короткие функции дополнены str2int() и str2uint();
  - некоторые поля переименованы: publInterv в publInterval, cntrLifeTime в lifetimeCnt, cntrKeepAlive в maxKeepAliveCnt, maxNotPerPubl в maxNtfPerPubl, en в publEn;
  - исправление слова "POOL" на "POLL".
    БИБЛИОТЕКА_КЛИЕНТ:
  - Client::reqService() дополнен мета-командой "CloseALL" закрытия текущего сеанса и каналу безопасности;
  - функция обработки клиентских сервисов protIO() адаптирована к работе в асинхронном режиме (не запрос);
    - функция Client::messIO() расширена аргументом таймаута с определением также режима запроса;
    - запись в канал и чтение из него отделено в обработке MSG пакетов;
    - адаптация сообщений безопасности к работе со смешанным входным буфером;
    - перенос основного сервисного запроса "OPN" под обработку сообщений из-за отправки обновлений в середине Publish активности.
  - реализован сервис Publish на стороне клиента:
    - объект "Client" дополнен реализацией подобъекта "Subscr" (но сохраняется в Client::SClntSess) с функциями: activate(), monitoredItemAdd() и monitoredItemDel();
    - объект "Client" дополнен функцией poll() с:
      - унификацией чтения значений в обоих режимах Read и Publish;
      - проверкой потери всех Publish запросов в течении OpcUa_ClntPublishResentCntr(2) попыток-времени сохранения живым;
      - восстановления пула Publish.
    - объект Client::Subscr::MonitItem добавлен как представитель элементов мониторинга с доступом из под общего блокирования клиентских ресурсов;
      - сервисные запросы дополнены реализацией, включая обработку ответов: CreateSubscription, DeleteSubscriptions, CreateMonitoredItems, Publish, Poll;
      - реализовано и проверено в поддержке безопасных политик по Publish;
      - целевой пул Publish запросов на подписку установлено в виртуальной функции publishReqsPool() с типовым значением 2.
    - дополнено реализацией кусков (CHUNKS) как в запросах, так и ответах;
    - целиком отревизировано и очищено общую функцию запроса reqService() от дубликатов аргументов и параметров:
      - дополнено восстановлением сеансов при переподключении канала безопасности;
      - унифицировано очистку текущего сеанса и канала безопасности.
    - объект клиента дополнен общим блокированием ресурсов mtxData;
    - свойство сообщения "timeoutHint" установлено в 0 для всех сообщений;
    - запрос Read возвращён к "плоскому" запросу с ограничением только в CHUNKS;
    - ошибка OpcUa_BadSecureChannelIdInvalid добавлена к очистке канала безопасности;
    - Client::SClntSess::{sessOpen,lstMessReq} переименован в {secChnlOpenTm,secLstMessReqTm}
    - ... и предотвращён от очистки и восстановления сеанса и канала безопасности;
    - дополнено отладочными сообщениями ошибок запросов.
    БИБЛИОТЕКА_СЕРВЕР:
  - серверная часть адаптирована к работе с UAExpert 1.5 на предмет: установки атрибута AId_Descr DAQ-значения в тип OpcUa_LocalizedText, добавления декларации целочисленного типа OpcUa_IntAuto и OpcUa_UIntAuto;
  - обработка подписок возвращена к их обработке в отдельной задаче и функции subScrCycle() на предмет:
    - правильного расчёта всех таймаутов для выключения;
    - обработки периодичности подписки и публикации;
    - проверки состояния связанных сеансов и каналов безопасности на предмет закрытия подписок.
  - но публикация оставлена на обработку в активности входного канала и функции Server::EP::publishCall() с предотвращением обработки Publish для ошибочных и чужих Подписок, через проверку inPrtId, sesTokId и isSecCnlAct;
  - унификация Сеанса на предмет: связывания сеансов с каналами безопасности переключено на один вместо массива, проверку сеанса всех сообщений дополнено предотвращением использования чужих подключений;
  - не последние куски пакета переключены на отправку прямо, чтобы не добавлять к одному TCP-пакету;
  - EP::mtxData блокирование переключено в PTHREAD_MUTEX_RECURSIVE;
  - каналы безопасности ограничены колчеством OpcUa_SecCnlLimit(10) и очередь публикаций количеством OpcUa_ServerMaxPublishQueue(10);
  - EP::secSize() переименовано в EP::secN() и добавлено EP::sessN(), EP::subscrN() и chnlList();
  - Server.SecCnl.{TokenId,TokenIdPrev} переименовано в Server.SecCnl.{tokenId,tokenIdPrev}.

- ModBus: Выходная часть RTU варианта протокола дополнена ранним прерыванием ожидания пакетов стандартных функций [ERR,1...6,15,16], что увеличивает общую пропускную способность вдвое.
  - ВВ параметров Логического Уровня включено в перевод, для не связанных строк и так как в DAQ.LogicLev.
  - Разбор атрибутов Сбора Данных переключено на использование TSYS::strLine() и TSYS::strParse(), чем разрешено символ ':' в названии и пустые строки в тексте.
- DAQGate: Режимы синхронизации дополнены режимом предотвращения синхронизации вообще для объектов сохранённых в кеше, путём разрешения значения -1 конфигурационного поля "Периодичность синхронизации с удалённой станцией, секунд".

Архивы-История

- FIX:FSArch: Критически исправлено обработку файлов архива значений, при попытке записи их ИД в нулевую строку.
- DBArch: Архиваторы сообщений дополнены конфигурационным полем "Уникальные и недублирующие сообщения только за временем и категорией".
  - FIX: Исправлено падение при обработке групп архиватора значений из-за неочистки связывания конфигурации полей таблицы (TConfig) под блокированием и неблокирование функции ModVArch::grpLimits() в reqRes.

Транспорты

- Протокол ВВ, во входной и выходной части, расширен и дополнен:
  - комбинированием данных пакетов с одинаковым направлением и адресом данных в течении prmWait_TM (5 секунд);
  - микросекундную часть времени зафиксировано в 6(шести) символах;
  - сообщения данных дополнены символом направления;
  - ограничением размера одного блока обработки, новым конфигурационным полем;
  - значительным повышением производительности через использование предопределённого буфера.
- FIX:Serial: Выходной транспорт исправлен в ожидании между запросами на предмет обработки reqRetrMult*wCharTm как миллисекунды.
- FIX:Sockets: Обнаружено ошибку "Обрыв канала (32)" при записи, после отключения сервера, поэтому попытки переподключения установлены в 2 по (kz <= 0).

Интерфейс Пользователя

- FIX:Общий пересмотр и переделка таблиц в Qt и Web в целом и вида Таблица примитива FormEl СВУ:

  - QTStarter,QTCfg,Vision: Общий библиотечный класс TableDelegate значительным образом улучшено в работе на QTCfg и Vision:
    - дополнено собственными пользовательскими ролями SelectRole, TextLimRole и OneLineString;
    - отображение ячеек дополнено фоновым цветом через чтение-применение общих ролей;
    - числовые типы (целое и реальное) дополнены принудительным центрированием;
    - строковые типы дополнены опциями выравнивания и заворачивания слов с ролями Qt::TextAlignmentRole;
    - дополнено поддержкой визуального ограничения длинных текстов собственной ролью TextLimRole и типовое значение установлено в 300 символов через дополнительное переопределение sizeHint().
  - FIX: Вид "Таблица" примитива "FormEl":

    - VCAEngine,QTStarter,Vision,WebVision: Дополнено новым типом ячейки 't'-текст, в основном для возможности подтверждения редактирования типа 's'-строка нажатием Enter.
    - VCAEngine,Vision,WebVision: Дополнено опцией "prec" пространства колонки, строки и ячейки для контроля точности реальных значений; и реализацией атрибута "align" колонки и ячейки.
    - WebVision,Vision: Дополнено переключением таблиц в предотвращение двойному хранению исходного содержимого при его размере более чем 10000.
    - FIX:Vision: Использование общего делегата таблицы с возможностью многострочного редактирования.
      - Усовершенствовано отображение колонок, строк и ячеек при обновлении и в целом:
        - ограничением визуального размера содержимого ячейки 300 символами и высоты строк в 70% от общего размера таблицы;
        - более точным выравниванием ширины колонок;
        - подстройкой в режиме разработки, а также при видимости вертикального заголовка;
        - плотным заполнением таблицы через учёт размера видимой полосы вертикальной прокрутки;
        - подстройкой только после полного изменения размера таблицы, чем также допуская ручное изменение колонок и для предоставления такой-правильной подстройки всегда.
      - Реализовано "лёгкую" обработку изменения ширины и обновления:
        - "лёгкое" редактирование без переподстройки колонок при каждом обновлении, только при: появлении первой строки, изменения количества колонок и изменения заголовка колонки, изменении шрифта и изменении размера;
        - применение фиксированной ширины колонки и учёт высоты строк с ограничениями независимо от значения общего атрибута "colsWdthFit";
        - установка значения, раннее изменение размера и подстройка таблицы, перенесены в пространство наличия содержимого таблицы и после сортирования.
      - Функцию экспорта во время исполнения дополнено экспортом вида Таблица примитива "FormEl" в CSV.
    - WebVision:
      - Усовершенствовано отображение колонок, строк и ячеек при обновлении и в целом:
        - реализацией режима не подстройки (отсутствие атрибута "colsWdthFit"), с использованием режима автоматического размещения таблицы для вычисления фиксированной ширины и последующего переключения в фиксированный режим размещения таблицы;
        - многострочным редактированием текста ячеек в полную ширину и высоту ячейки, с применением редактирования по Ctrl+Enter;
        - вид строчных ячеек ограничен 300 символами;
        - отображение логических ячеек изображением состояния TRUE;
        - ячейки таблицы, в режиме редактирования, разрешены к вызову контекстного меню системы-браузера.
      - Реализовано "лёгкую" обработку изменения ширины и обновления:
        - обнаружение изменения таблицы и обновление переключено в режим не сохранения исходного содержимого дважды;
        - предотвращено от полного обновления при модификации атрибута "value".
      - Дополнено поддержкой сортировки по колонкам. Установка в сортировку по первой видимой колонке при включении сортировки.

  - WebCfgD: Расширение таблицы на предмет:
    - большое видимое содержимое текста ограничено 300 символами;
    - строковый тип разрешён для многострочного редактирования используя TEXTAREA;
    - тип данных "bool" отображено изображением, не "On" или "Off";
    - центрирование содержимого логического, чисел, времени и выбора;
    - упрощение редактирования содержимого таблицы для типов время, число и строка, путём удаления кнопок применения и прокручивания.

- QTStarter,QTCfg,Vision: Начат перенос общего Qt-кода Qt-модулей OpenSCADA в файлы новой библиотеки lib_qtgen.*, которая размещена в каталоге модуля QTStarter и привязано во всех Qt-модулях, и это осуществлено для: внешней icoSize(), colorAdjToBack() и TableDelegate.
- VCAEngine:

  - Дополнено, и включено как опция сборки, на предмет механизма маркирования изменения атрибутов без дубликатов, путём запроса предыдущих-завершенных циклов, чем также предотвращая необходимости выявления дубликатов в визуализаторах и сохранению большого исходного содержимого.
  - Исполнение проектов улучшено при смене родителя обрабатываемых страниц на лету.
  - Исполнение задач сеансов дополнено ранним исполнением, при наличии событий.
  - FIX: СВУ-стили исправлены при доступе к пустым полям, которые не загружаются.
  - Страницу "Диагностика" СВУ-проектов адаптировано к отображению сообщений уровня отладки при включении отладки.
  - Информацию исполнения сеанса проекта дополнено реальной периодичностью, полученной из задачи, которую также использовано при формировании значения атрибута "f_frq" процедуры.

- Vision: Диалоги свойств "Виджеты" и "Проекты / Библиотеки виджетов" дополнены собственной строкой статуса и кнопкой вызова контекстной документации. Виджеты TextEdit переключены на собственную строку статуса диалогов свойств, на предмет позиции курсора и что выключено во Всплывающей Подсказке. Виджет редактирования текста кода диалога свойств "Виджеты" дополнен восстановлением позиции курсора после применения или отмены.
- FIX:WebVision: Дополнен обнаружением исчезания сеанса исполнения проекта и возвратом ошибки, в общем запросе "pgOpenList", и сброса счётчика вычислений "tmCnt".

  - Клавиатурный фокус и события значительным образом усовершенствованы на предмет гарантии работы этого в целом через:
    - установку атрибута "tabindex" для всех активных виджетов и специфично для FormEl — непосредственно в элементы формы;
    - дополнения вычислением числа "tabindex" как уникальный для целого интерфейса, чем предотвращая скачки фокуса;
    - обработки события onfocus на предмет установки собственного фокуса в setFocus();
    - вид Кнопка примитива FormEl дополнен обработкой клавиатурных событий нажатия и отпускания по клавишам Space и Enter;
    - примитив Диаграмма упрощён путём удаления лишнего элемента тега A;
    - FIX: Исправлено переключение фокуса при клацанье на кнопках с изображениями.
  - FIX: Исправлено проверку удаленных виджетов для всех и главной страницы.
  - FIX: Исправлено наконец размножение лишних DIV элементов при смене страницы в контейнере страниц.
  - FIX: Предотвращение зацикливанию при наличии Web-сеанса, но отсутствии соответствующего СВУ-сеанса.

- FIX:WebCfgD: Целиком отревизировано и расширено на предмет:

  - переноса всех действий внутренних инструментов на реализацию кнопками и размер панели инструментов установлен с 25 в 30 пикселей;
  - удаления фильтрации-изменения размера изображений кнопок инструментов на стороне сервера;
  - установки расстояния между иконкой страницы и заголовком в 10 пикселей;
  - полного обновления контролированной страницы после смены размера окна;
  - расширения поля общего редактирования текста TEXTAREA применением и отменой из клавиатуры;
  - привязки функции обновления хостов к двойному клацанью мышей на общем пространстве области дерева;
  - FIX: исправления функции обновления хостов на предмет выявления элементов дублированных хостов;
  - FIX: принудительного обозначения актуальных-выбранных элементов в дереве контроля после его разворачивания;
  - удаления nodeText() и setNodeText() путём непосредственного использования "innerText" и "textContent".

#### 7.6.1 Сервисные обновления

- первое (1) от 29.08.2021.

### 7.7 [20.10.7528/20.12.2020] ТРЕТЬЕ обновление

Это обновление релиза 0.9 LTS исправляет около 40 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.

Linux Дистрибутив Автоматизации проекта OpenSCADA

- пакеты "tdelibs" и "tdebase" были удалены из-за применения этих исправлений в главной и стабильной ветви TDE;
- исправленные пакеты "tdemultimedia-trinity", "tdenetwork-trinity" и "tdeutils-trinity" были пересобраны;
- собрано новый исправленный пакет "tde-i18n-uk-trinity";
- перед сборкой пакетов была изменена схема формирования версий пакетов этого дистрибутива из "{+1}:14.0.9-0" на "4:14.0.9-{+1}" с целью предотвращения заморозки этих пакетов в следующих версиях TDE; и главный репозиторий пакетов TDE Живых Дисков переключен на ветвь "r14.0.x" вместо предварительной стабильной, которая также присутствует, но закомментирована;
- перед этим релизом, в TDE Weblate завершен перевод Украинским языком частей-пакетов TDE: tdelibs, tdebase, tdegraphics, tdenetwork, tdemultimedia, tdepim, tdeadmin, tdeaccessibility, tdeutils, krusader, yakuake, basket; и создан исправленный пакет "tde-i18n-uk-trinity" для перевода отличий ветви "r14.0.x" от главной;
- заплатка к "tdeutils" дополнена комбинацией клавиш с удержанием Ctrl для медленного изменения яркости дисплея к KMilo.

OpenSCADA библиотеки и проекты

- FIX:LibsDB.OscadaLibs: Библиотека DevLib дополнена шаблонами "MTP 4D (MTP4D)" и "ModBus база (mbBase)".
- FIX:LibsDB.vcaBase: Шаблонный проект (tmplSO) очищен от лишних мнемосхем управления рецептами и главная страница дополнена таблицей актуальных сигналов-нарушений. Кадр Main.RootPgSo унифицирован уведомителями только в общих атрибутах для СВУ-сервера и уведомителей Vision, WebVision: notify0, notify1 та notify2.

API
!!!!:Изменения:

- Архивы-История: {TMArchivator,TVArchivator,TVArchive}::DB() установлена в квалификатор постоянной.
- Транспорты.{.,*}: Функция установки таймаутов setTimings() выходных транспортов расширена различием типовых таймаутов для различных протоколов, с помощью аргумента "isDef".

Дополнение:

- SYS.,*:
  - Ограничения и параметры пространства системы перенесены в пространство конфигурации пользователя (конфигурационный файл) для некоторого разрешённого диапазона. STD_WAIT_DELAY перенесено в prmWait_DL и изменено в 0.1 секунд. Предыдущие определения ограничений и параметров пространства системы оставлены для совместимости внешних модулей!
  - TSYS дополнено функцией taskSendSIGALRM() отправки сигнала прерывания "ALARM" задачам OpenSCADA.
  - TValFunc: Дополнено состоянием исполнения функции через функцию isCalc().
- Транспорты: Выходные транспорты расширены обозначением Сетевых транспортов, функцией isNetwork(), также в пользовательском API.

Система

- FIX:Сборка:configure.ac: Версию библиотеки ядра увеличено до 3:9:0 и версию программы увеличено до 0.9.3.
- {DAQ,Протокол}.ModBus:
  - подтип "_b" — битовый тип, дополнен перемещением номера бита к полю номера регистра вроде "R_b:123.12";
  - дополнено флажком "~" для инверсии порядка регистров комплексных подтипов в некоторых регистрах, вроде "_f";
  - флажок "rw" разделён на "r" и "w".
- Модульную версию подсистемы "Транспорты" увеличено до 17.
- FIX: Предотвращено аутентификацию в интерфейсе пользователя готовым хешем пароля.

Сбор Данных

- LogicLev,ModBus,Siemens: Дополнено прерыванием продолжительного исполнения шаблонов при исполнении параметра, с использованием новых функций TValFunc::isCalc() и TSYS::taskSendSIGALRM().
- FIX:LogicLev: Удалено блокирование исполнения "calcRes", которое использовано только в блокировании записи в параметр в течении вычисления и что может быть продолжительным.

Архивы-История

- FIX: Полученные текущие значения, в активном режиме архивирования, принудительно установлено в текущее время, что важно для архивирования динамических атрибутов.
- Конфигурационное поле архива значений "Режим формирования ID автоматически создаваемых архивов" расширено элементом выбора "Все ID контроллера, параметра и атрибута", в процессе расширения ограничения на размер ИД архива значений до 50 символов.
- FIX:DBArch: Исправлено только прямое архивирование значений в групповом режиме и когда тип значений может сбрасываться в Целый тип, как типовой. Архивирование значений в групповом режиме дополнено удалением соответствующей колонки таблицы при удалении архива, для горячего удаления колонок сразу после добавления нового архиву, чем предотвращая раннему разростанию таблицы до ограничений БД.
- FIX:FSArch: Адаптация к размеру ИД архива значений больше чем 20 символов, когда дополнительные 14 символов сохраняются в резервной части (переименованной в "archive_add") заголовка и остальное в названии файла.

Транспорты

- FIX: Функция TTransportIn::assTrO() обработки входных инициативных подключений целиком отревизировано чтобы обеспечить обязательным создание новых подключений в виде нового выходного транспорта, чем предотвращая правильному завершению присутствующих закрытых но не освобождённых выходных транспортов.
- Команды транспортов переименовано из "Исполнение" в "Подключение" и статусы переименованы из "Запущено. " в "Получение данных. " и "Подключено. ", из "Остановлено. " в "Отключено. ".
- FIX:{Sockets,SSL}: Типовые таймауты возвращены в "10:1".

Транспортные Протоколы

- HTTP:
  - Дополнено динамическим названием печенья (cookies) и Пользовательским пространством ИД, где название печенья "oscd_UID" и использовано Пользовательское пространство ИД при работе с общей таблицей сеансов аутентификации, и название печенья "oscd_UID_{PrjNm}" при работе без этого.
  - FIX: POST выходной функции outMess() с множеством частей предотвращён от размещения конечного разделителя и улучшено в формировании "Content-Disposition".
  - Улучшено генерацию ИД пользователя генерацией различных ИД для различных процессов, ограниченное в 1e6, и дополнено случайным и конфигурируемым Пользовательским пространством ИД [0...99] * 1e6, использованным в работе с таблицей общих сеансов аутентификации.
- SelfSystem: Специфические таймауты выходного транспорта установлены в "20:2".
- ModBus: Специфические таймауты выходного транспорту установлены в "5:0.1" для Сетевых транспортов — isNetwork() и варианта протокола "RTU".

Интерфейс Пользователя

- FIX: TUIS::docKeyGet() исправлено на предмет утечки пользовательских объектов массивов.
- VCAEngine,WebVision,Vision: Примитив "Media" дополнен типом "Audio" и тип "Полное видео" переименован в "Видео", который также имплементирован в WebVision и Vision.
- QTCfg,Vision: Дополнен функцией подстройки цветов текста к фоновому цвету — colorAdjToBack(), которую использовано в коррекции цветов подсветки синтаксиса, и других динамических цветов, к смене палитры.
- VCAEngine,Vision: Расширено реализацией уведомлений в процессе их внедрения в WebVision, на предмет:
  - использования стандартного пути получения уведомлений через активацию соответствующих атрибутов;
  - расширение ntfReg() использованием отрицательного типа для обработки всех типов, в основном очистки, и некоторой унификации кода;
  - расширение получением типа ресурса;
  - дополнение уведомителей флажком "notifyServ" включения уведомления на стороне СВУ-сервера;
  - дополнено, на стороне СВУ-сервера, полем "resStatic" прямого определения ресурса (не динамическое);
  - дополнение контекста процедуры уведомления двумя переменными "resTp" и "prcID".
- FIX:UI.QTStarter: Дополнено периодическим обновлением диалога запуска в перечне проектов.
- FIX:VCAEngine: Исправлено падение при установке ссылки виджета в "prm". Сервис запроса ресурса "get:/wdg/res", Widget::resourceGet() и {WidgetLib,Project}::mimeDataGet() дополнено запросом частей ресурса, в основном для больших медиа файлов.
- FIX:Vision: Дополнено проигрыванием уведомлений внутренним проигрывателем на Phonon и не в отдельной задаче уведомителя. Вызов saveState() перемещён из деструктора окна разработки в событие закрытия, поскольку была помечена проблема сохранения пустого контекста после проигрывания некоторого медиа.
- FIX:WebVision:
  - Имплементация поддержки уведомлений.
  - Имплементация загрузки частей ресурсов, для больших медиа, HTTP параметром "Range: bytes=".
  - FIX: Исправлено лишнюю очистку кеша страницы на предмет виджетов из страниц с общим названием к странице которая удаляется.
- WebUser: Адаптировано к работе с POST и содержимым в теле.

#### 7.7.1 Сервисные обновления

- третье (3) от 23.03.2021.
- второе (2) от 01.03.2021.
- первое (1) от 01.02.2021.

### 7.8 [17.06.7528/17.08.2020] ВТОРОЕ обновление

Это обновление релиза 0.9 LTS исправляет около 60 ошибок и добавляет некоторые улучшения, которые целиком вы можете почитать в протоколе изменений обновления.

Linux Дистрибутив Автоматизации проекта OpenSCADA

- Завершено усовершенствование KMix в работе с PulseAudio, путём его динамизации патчем "kmix-UpdMixersForChangeAndChMaster.patch".
- KRfb (VNC-сервер) был исправлен на предмет аварийного завершения и завершена реализация набора дополнительных клавиш к основной клавиатурной раскладке, в основном Кириллицы, но также и дополнительных UTF символов.
- Завершено обновление перевода проекта Окружения Рабочего Стола Trinity на Украинский для частей: tdelibs, tdebase, tdenetwork, tdemultimedia, tdepim (в основном), krusader, yakuake.

OpenSCADA библиотеки и проекты

- LibsDB.OscadaLibs: Библиотеку Устройств дополнено реализацией протокола IEC-62056 (DevLib.IEC62056). Внесетевая документация дополнена документом "СОГЛАШЕНИЕ О ТЕХНИЧЕСКОЙ ПОДДЕРЖКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ "OpenSCADA" версии 2 и нового модуля DB.DBGate.
- FIX:LibsDB.vcaBase.Main.alarmsSt: Несколько исправлено на предмет оригинальных сообщений и "quietation" целиком заменено на "confirmation". Восстановлено предотвращение дублированных записей новых нарушений в той самой категории.

API
!!!!:Изменения:

- SYS: Унифицированы статусы станции в функциях isRunning(), isFinalKill() и stopSignal(). TCfg::setReqKey() дополнен новым аргументом "treatDep".
- DB: dataSeek(),dataGet(),dataSet(): Расширены аргументом локального конфигурационного контекста "localCfgCtx";
- *,DB: TBDS::dataSeek() и TTable::fieldSeek() переключены на реализацию кеша сканирования в соответствующих модулях.

Дополнения:

- TMess,DB,DB.{SQLite,MySQL,PostgreSQL,FireBird}: TMess дополнено функцией обнаружения перевода конфигурации translCfg(), которую использовано во всех модулях БД и в dataSet().
- SYS: Дополнено функциями доступа к глобальному конфигурационному контексту cfgCtx() и setCfgCtx().
  - Загрузка и сохранение конфигурации дополнена собственным блокированием TSYS->cfgLoadSaveM().
  - Дополнено функцией pathLevEnd() обработки путей с конца.
  - TRegExp: Дополнено функцией getPattern().
  - TFld: Дополнено комбинированным строковым вариантом поля длины - lenS().

SYS

- FIX: Building:
  - FIX:configure.ac: Core library version risen to 3:8:0 and the program version risen to 0.9.2.
  - Modules version of the subsystem "BD" risen to 14, of the subsystem "Transport" risen to 16.
  - data/ModelsDB/{AGLKS/oscada_AGLKS.xml,Boiler/oscada_Boiler.xml}: The input Sockets' transports unified in the names "WEB" and "CNTR".
  - data/ModelsDB/AGLKS/St.sql: The input SSL transports unified in the names "WEB" and "CNTR" and updated for the KeepAlive timeout setting in 60 and for the SSL-certificate.
  - data/{oscada_start,oscada_server,oscada_plc}.xml:
    - The input WWW-transports are unified, where "WEB_1" renamed to "WEB" and "WEB_2" removed.
    - Appended for the disabled DB-entries of the standard OpenSCADA libraries.
    - /oscada_start.xml: Appended for the disabled input transports "WEB" and "CNTR". Appended for the value archivers FSArch.{SYS,alarms,actions} and message archivers FSArch.{1s,1m,1h}.
- FIX:data/openscada-proj.in,UI.QTStarter: Implementation the builtin backuping.
  - FIX:data/openscada-proj.in: Appended for the commands "backup", "backupRestore", "backupList" to implement the project backups.
  - UI.QTStarter: Appended for the backup commands call from the project manager - list of the projects.
- .,DB,DAQ.{LogicLev,ModBus,Siemens},UI.{QTCfg,WebCfgD}: Implementation the interstation copying mechanism of the control interface nodes.
- .,UI.QTStarter: OpenSCADA starting with a module as the GUI in the main thread significantly refactored for:
  - early registration the GUI module in the main thread directly by that module itself and in postEnable() function;
  - adaption the function perSYSCall() to use for update the GUI module in the main thread, its splash mostly, during the program starting and stopping (from the service task) and at the configuration loading (for switch to the starting splash);
  - enabling the messages dynamic display for the main thread execution mode;
  - unification of the splash display for the both modes.
- .,Protocol.SelfSystem,DAQ.AMRDevs: Client accessing of the OpenSCADA control interface expanded by the multiple authentication, what prevents of using direct requests of the OpenSCADA control interface with the authentication in each the request, often for UI.Vision.
- FIX:TRegExp: The patterns processing fixed appending the end symbol treating, so preventing TController::alarmSet() collisions in the objects strict detection.
- FIX:LibsDB.OscadaLibs.doc.diagram,UI.{Vision,WebVision}: Prevented from the value scale double adjustment for the percent scale and appended for the value range expanding.
- FIX: The function TCntrNode::isModify() processing for the children allowed only for nodes in the state "Enabled".

БД

- Создан новый модуль "DBGate".
- FIX: TBDS::dataSet() расширено установкой только ключей и видимых элементов, как у других БД. Дополнено сменой-сохранением определённых элементов в конфигурационном файле вместо полного сохранения всех их в типовой БД.
- FIX: Исправлен первый ошибочный запуск объектов БД на предмет последующих попыток запуска.
- FIX: Загрузка БД предотвращена от двойной загрузки из конфигурационного файла и БД, относительно одинаковых записей.
- Объект TBD дополнен поддержкой сервисных контрольных запросов "call": "/serv/SQL", "/serv/fieldStruct", "/serv/fieldSeek", "/serv/fieldGet", "/serv/fieldSet", "/serv/fieldDel".
- FIX:SQLite: Обнаружена и исправлена потеря данных при конкурентном доступе, когда генерируется непринципиальная ошибка неактивированности транзакции "cannot commit - no transaction is active (1)", которая, однако, прерывает запись данных.

Сбор Данных

- FIX: JavaLikeCalc: Исполнение внутренних функций дополнено сохранением контекста общих-собственных регистров, в двух вариантах, первично для поддержки рекурсии.

Транспорты

- Выходные транспорты унифицированы созданием параметров подключения, с помощью conPrm(), вместо прямых prm1() и prm2().
- Удалён конфигурационный параметр "START" выходных транспортов, как лишний и для предотвращения продолжительного запуска.
- FIX:Sockets,SSL: Для предотвращения многоразового исполнения запросов высокой нагрузки и продолжительного контроля, выходные транспорты переключены на:
  - типовую конфигурацию для Попыток=1, Таймауты="30:2";
  - для потери подключений количество попыток установлено в 2;
  - для ошибок "Исчерпано время" подключение также пере-подключается, кроме типа SOCK_FORCE.

Транспортные Протоколы

- FIX:ModBus: Выходные запросы TCP-варианта дополнены проверкой Идентификатора Транзакции пакетов ответа.
- FIX:SelfSystem: Выходная часть расширена проверкой соответствия ответов запросам, по названию тега запроса. Дополнено кодированием специальных символов пользователя и пароля, и пустой пароль кодируется как "<EMPTY>".

Интерфейс Пользователя

- Vision,WebVision: Свойство специфическое для визуализатора "userSetVis" дополнено реализацией пароля после прямо указанного пользователя и для применения со всеми пользователями.
- FIX:QTStarter: Стандартная-системная заставка запуска/останова обновлена и дополнена информацией про программу (также пользовательские заставки) и проект OpenSCADA, включая иконку проекта. Контекстное меню списка проектов дополнено пунктом удаления не исполняемых проектов.
- FIX:QTCfg: Дополнен слежением за сменой страницы с индикацией в дереве навигации и с прокруткой к текущему элементу.
- FIX:VCAEngine: Предотвращено аварийное завершение на больших конфигурациях с продолжительным закрытием сеансов исполнения во время доступа к наследникам виджета (mHerit), добавлением ResRW блокирования "mHeritRes". Свойство "Перевод" процедур виджетов целиком перенесено под прямой доступ и видимость установлена только при наличии процедуры, также как видимость области текста процедуры и периодичности вычисления от выбора языка.
- FIX:Vision: Существенно унифицирована процедура аутентификации и смены пользователя в UserStBar::userSel() и объект диалога "DlgUser".
- FIX:WebVision: Унифицирована имплементация примитива "Кнопка": переносом специфических кнопок под <button></button> и добавлением соответствующих CSS-стилей для типового и нажатого состояния с отличной границей и полупрозрачным изображением. Исправлена, в конце концов, проблема закрытия всех страниц контейнера основных страниц с заморозкой последней потерянной страницы при быстром переключении. Дополнено пользовательскими CSS правилами интерфейса.

#### 7.8.1 Сервисные обновления

- третье (3) от 15.11.2020.
- второе (2) от 20.10.2020.
- первое (1) от 21.09.2020.

### 7.9 [08.02.7528/08.04.2020] ПЕРВОЕ обновление

Обновление осуществлено после 1.5 года от релиза 0.9 LTS, соответственно оно стоит 10 обновлений, поскольку им исправлено более 250 ошибок и добавлено множество усовершенствований, которые целиком вы можете почитать в протоколе изменений обновления.

Ключевыми свойствами обновления является:

- значительное расширение и стабилизация Web-интерфейса в течении практической эксплуатации в большом распределённом решении, построенном на основе модуля UI.WebVision; также расширение и стабилизация горячей разработки в течении множественного исполнения разрабатываемого проекта;
- тестирование, исправление и расширение резервирования в части сообщений, также благодаря практической эксплуатации в большом распределённом и ещё резервированном решении, в части обще-системного кода и модуля DAQ.ModBus;
- полная реструктуризация, усовершенствование и дополнение библиотек OpenSCADA в SQLite файлах;
- общее улучшение документации, дополнение документацией всех библиотек и ревизия большинства документации модулей.

#### 7.9.1 OpenSCADA библиотеки и проекты

- FIX:DB.LibsDB.{OscadaLibs,vcaBase}: Обновление перевода.
  - FIX:JavaLikeCalc.doc,doc: Библиотека пользовательского интерфейса "Документы" и JavaLikeCalc "Библиотека отчётов и документов" отревизировано, улучшено, дополнено, документировано и документацию добавлена в offline.
    - FIX:doc: {docUsersSet,docAlarmsRep,docMessRep}: Поле "Параметр" переименовано в "Источник", в процессе глобальной унификации структуры сообщений нарушений функции alarmSet().
      - Дополнено реализацией "Годовой отчёт месячных значений (docRepYear)" с функцией ввода значений в ручном режиме, поддержкой сохранения ручных значений в архиве сообщений, их отображения в таблице и диаграмме.
      - {doc,docDin,docRep2WorkSh(переименованный docRepSm2),docAlarmsRep,docRepInstVals(переименованный docGasNodeMgn),docMessRep,docUsersSet, docRepDay(переименованный docGasNodeDayA),docRepMonth(переименованный docGasNodeMonthA),docRepYear(переименованный docResourcesYear)}: выполнено JavaLikeCalc перевод в tr().
      - {docRepInstVals,docRep2WorkSh,docRepDay,docRepMonth}: Значительным образом переписано, улучшено и сделано повторно-используемым, позволив подключение DAQ-параметров.
      - docMessRep: Дополнено обработкой удалённых станций только как дополнительный источник и всегда.
    - JavaLikeCalc.doc: Дополнено реализацией построения "Диаграммы (diagram)" в SVG.
  - PrescrTempl,prescr: Библиотеку интерфейса пользователя и шаблонную библиотеку "Рецепты" отревизировано, улучшено, дополнено, документировано и документация добавлена в offline.
    - PrescrTempl: Дополнено шаблоном "Менеджер", перенесенного из библиотеки контролеров.
    - prescr: Элементы библиотеки расширены линковкой БД и автоматическим созданием таблиц команд и программ.
- DB.LibsDB.vcaElectroEls: Библиотеку интерфейса пользователя "Элементы электрики" отревизировано, улучшено, дополнено, документировано и документация добавлена в offline.
  - Дополнено четырьмя унифицированными элементами: "Ключ, унифицированный (keyUnif)", "Переключатель, унифицированный (swUnif)", "Состояние общее, унифицированное (stGenUnif)", "Состояние области, унифицированное (stAreaUnif)".
- FIX:DB.LibsDB.OscadaLibs:
  - Обновлено на предмет некоторых сообщений.
  - FIX:base: Библиотеку шаблонов "Основная библиотека" отревизировано, улучшено, дополнено, документировано и документация добавлена в offline.
    - {anUnif,anUnifSt,manInUnif,digAlarm,codeState,pidUnif,pidUnifImp,SNMP,UPS}: Переведено на унифицированный механизм формирования и контроля нарушений.
    - Дополнено шаблоном "initConsAssignTrs" обработки выходных транспортов инициативных подключений Сокетов для любых типов объектов источников, вроде DAQ-модули, контроллеры и параметры логического уровня.
    - Дополнено шаблоном "codeState" формирования состояния по коду.
    - Дополнено реализацией сложного уведомителя в шаблоне "ntf", отдельная JavaLikeCalc функция и объекты пользовательских протоколов "SMS" и "SMTP" помечены устарелыми.
    - Дополнено шаблоном "UPS", перенесено из библиотеки "Промышленные устройства".
  - FIX:DevLib: Шаблонная библиотека является отделённой частью оригинальной библиотеки "Устройства" с названием "Промышленные устройства", которую отревизировано, улучшено, дополнено, документировано и документация добавлена в offline.
    - FIX:IEC60870: Дополнено отдельным временем "tmPoolAll" периодичности полного опроса.
      - Дополнено поддержкой пакетов M_ME_TF_1, M_ME_NC_1, расширено поддержкой SQ-режима, проверено M_ME_TF_1 и M_ME_NC_1, M_ME_NB_1 в SQ-режиме, AI установлено в вещественный тип.
      - Дополнено опцией "syncTimePLC" контроля синхронизации ПЛК.
    - Дополнено правильной реализацией DCON в шаблонах DCON_Prt, DCON_Prt_DI, DCON_Prt_AO, DCON_Prt_DO, объект пользовательского протокола "DCON" удалён.
    - Дополнено полнофункциональной реализацией протокола OWEN в части сбора данных.
    - Дополнено реализацией DNP3 и её испытано с outstation-demo из opendnp3.
    - Дополнено реализацией модулей счётчиков Pulsar-M (pulsarM).
    - Дополнено реализацией сканера ModBus, как шаблон "ModBusScan".
  - LowDevLib: Шаблонная библиотека является отделённой частью оригинальной библиотеки "Устройства" с названием "Низкоуровневые устройства", которую отревизировано, улучшено, дополнено, документировано и документация добавлена в offline.
    - FIX:{1W_DS9097,1W_DS9097U}: Исправлено определение семейства устройства как шаблон 0x7F, обнаружено на последних DS2413 с первым байтом 0xBA.
    - Дополнено реализацией шаблона "MAX6675", низкоуровневого SPI Конвертора K-Термопар-в-Цыфру Компенсации-Холодных-Спаев.
    - Дополнено реализацией шаблона "SHT3x", низкоуровневого сенсора влажности.
    - Дополнено реализацией шаблона ADS111x(ADS101x) и MCP4725, низкоуровневых I2C-чипов.
  - FIX:JavaLikeCalc.techApp: JavaLikeCalc библиотеку "Технологические аппараты" документировано и документация добавлена в offline. Все Кириллические символы удалено из идентификаторов моделей и все тексты откорректировано.
  - tests: Библиотека шаблонов "Тесты" переименована из библиотеки "S7".
  - JavaLikeCalc.servProc: JavaLikeCalc библиотеку "Сервисные процедуры" отревизировано, несколько улучшено, дополнено, документировано и документация добавлена в offline.
    - docOffLine: Значительно расширено детализацией сообщений про ошибки и размещением незавершённых страниц в аргументе "pagesCur" для продолжения перерывов.
  - JavaLikeCalc.regEl: JavaLikeCalc библиотеку "Элементы регулирования" документировано и документация добавлена в offline.
- FIX:DB.LibsDB.vcaBase:
  - FIX: Полная и значительная очистка от Кириллических символов и усовершенствование оригинальных идентификаторов и сообщений, с переименованием их на Английский язык.
  - Большинство стандартных кадров и виджетов адаптировано к стилям и создано стиль "Светлый" для всех проектов.
  - FIX:Main: Библиотеку интерфейсов пользователя "Основные элементы" отревизировано, улучшено, дополнено, документировано и документация добавлена в offline.
    - FIX:{alarmsAct,alarmsSt}:
      - Расширено поддержкой квитации-подтверждения, комментариями и пользовательским полями.
      - Поле "Параметр (prm)" переименовано в "Источник" где размещено все удалённые и локальные источники.
    - RootPgSo: Усовершенствованно динамическим созданием объектов сигнализации, количество которых ограничено только общей длиной названий объектов сигнализации и их двумя рядами. Поддерживается также генерация кнопок объектов сигнализации справа от логотипа. Типы отображения также унифицировано идентификаторами "view[1..6]", когда пользователь может их назначить в собственный способ. Совместимость с оригинальными названиями видов сохранено для существующих проектов!
    - Дополнено:
      - панелью-окном контроля "Вычисление параметра графика (graphCalc)";
      - объектным виджетом "Свойства объекта (objProps)";
      - кадром нарушений "Нарушения — отчёт (alarmsStReport)";
      - виджетом "Метка изображением (ImgLab)";
      - кадром "Менеджер пользователей (userManager)".
    - grph_panel: Дополнено независимой кнопкой переключения на время курсора вместо непрямого переключения при смещении глубины.
    - ElViewGraph: Размер шрифта названия уменьшен с 15 до 11 и цвет тренда отображаемых элементов по умолчанию установлен в "gray".
    - Кадры рецептов "prescrEdit", "prescrRun" и "prescrRunSimple" вынесено в новую библиотеку "Рецепты (prescr)".
    - cntrRegul: Толщину трендов увеличено до 2 пикселей.
  - FIX:mnEls: Библиотеку элементов интерфейса пользователя "Элементы мнемосхемы" документировано и документация добавлена в offline.
- FIX:Model.{AGLKS,Boiler}: Значительно обновлено согласно общим изменениям в библиотеках.
  - FIX: Значительно очищено и все оригинальные идентификаторы переименованы Английским языком, в процессе ревизии документации.
  - FIX: AGLKS.vca,Boiler.St: Адаптировано к новым изменениям основной страницы.
    - Создан стиль "Светлый" для всех проектов. Стили переведены на схему прямого исполнения стилей при их наличии вместо "Нет стиля" и добавлен стиль "Типовой".
  - FIX:Model.AGLKS:
    - FIX:St:
      - FSArch.1m: Удалены странные и временные архиваторы: FSArch.{NetRequsts,test,StatErrors}, DBArch.test и добавлены актуальнные: FSArch.{alarms,actions,SYS}, DBArch.SYS.
    - FIX:vca: Перепривязаны аналоговые параметры и графики.

#### 7.9.2 API

!!!!:Изменения:

- SYS: Типовой конструктор ResMtx установлен в true для "isRecurs", поскольку это общая ситуация.
  - Большинство функций добавления в контейнер узлов расширено возвратом результирующего идентификатора/имени созданного узла для: chldAdd(), TSecurity::{usrAdd(),grpAdd()}, TTypeBD::open(), TTypeTransport::{inAdd(),outAdd()}, TValue.chldAdd(), DAQ.{TController::add(),TParameter::add(),BlockCalc.blkAdd()}, TTypeArchivator::{messAdd(),valAdd()}, TArchiveS::valAdd(), UI.VCAEngine::{wlbAdd(),prjAdd(),WLib.add(),Project.add(),Project.Page.pageAdd()}, UI.WebUser.uPgAdd().
  - TFld::Selected везде переименован в TFld::Selectable.
  - Вариант специальной функции strMess() с ограничением размера результирующего сообщения удален и заменен функцией strEncode() с типом TSYS::Limit.
  - chldList() и chldPresent() сделаны виртуальными.
- DAQ,Special: Атрибут "run_st" в TPrmTmplLib и TSpecial переименован в runSt.
- Archives: TArchiveS::messPut() очищено от аргумента "force".
- Protocols.HTTP: Функции пользовательского API pgAccess(), pgCreator() перенесены из TProtocol в TProtocolIn.
- Transports.In: Функция protocol() переименована в protocols() и удалена protocolFull().

Дополнения:

- SYS: Добавлен общий механизм замков через контейнер замков, функция commonLock().
  - TConfig,*: Функции API пользователя для конфигурации TConfig::cfg() и TConfig::cfgSet() расширены контролем прав.
  - Дополнено функциями TCfg::toDefault() и TConfig::cfgToDefault() сброса конфигурационного контекста к типовому.
  - Объект TFunction дополнен признаком изменённости процедуры isChangedProg(), и флажок TFld::Selectable и функция ioAdd() дополнены результатом позиции добавленного ВВ.
  - Запрос Интерфейса Управления "load" расширен определением выбранной БД в атрибуте "force", для осуществления такой операции над конкретным узлом.
  - XMLNode: Функция получения атрибутов attr() расширена опциональным аргументом определения присутствия.
  - "Массив (Array)" пространства пользователя расширен функциями indexOf() и lastIndexOf().
  - Функция API пользователя SYS.fileRead() расширена аргументами смещения и размера блока чтения.
  - Функция API пользователя strEncode() дополнена поддержкой вариантов "ToLower" и "Limit".
  - API пользователя дополнено функцией strFromCharUTF() формирования строки из UTF-8, UTF-16, UTF-16LE, UTF-16BE, UTF-32, UTF-32LE, UTF-32BE.
  - Дополнено определением периодичности сервисного задания SERV_TASK_PER=10.
  - API пользователя дополнено функцией SYS.fileSize().
  - Добавлена функция str2atime() для конвертации времени в строке во время от эпохи UNIX с поддержкой GMT.
  - TError дополнено названиями кодов ошибок в перечислении "Codes", которые везде использованы.
  - Специальные названия архивов дополнено названием ALRM_ARCH_CH_NM ("<alarmsChange>"), для простой смены присутствующих нарушений.
  - Ограничения дополнены USER_ITS_LIMIT (1000000) для ограничения количества элементов вроде пользовательских массивов из DAQ.JavaLikeCalc.
- DB: Добавлен контроль закрытия транзакций в ядре OpenSCADA функциями trTm_ClsOnOpen(), trTm_ClsOnReq() и trPr_ClsTask().
  - Добавлен контроль процесса пере-включения объектов БД функцией disabledByUser().
  - Дополнено конфигурацией "Время жизни открытых таблиц", для закрытия неактивных таблиц функцией tblLifeTime().
  - Атрибут TBD::mEn перенесён в защищённое пространство.
- Транспорты:
  - In: Дополнено виртуальными функциями keepAliveReqs(), keepAliveTm() для правильного KeepAlive на Web.
  - Out: Дополнено сервисом закрытия выходных транспортов согласно временем жизни (неактивности), сервисной функцией outLifeTime().
    - Расширено полем общего контроля попыток в функции attempts().
    - Унифицировано контролем времени последнего запроса в функции lstReqTm().
    - Добавлена функция outAddrHelp() для получения общей помощи по адресу модулей выходных транспортов.
- Protocol.HTTP: Расширено функцией пользовательского API setUser() для изменения автентифицированного пользователя.
- DAQ: TController::alarmSet() расширено аргументом "force" для принуждения установки нарушений на объектах контроллеров в резервировании.
  - DAQ-параметры дополнены функцией пользовательского API alarmSet() и функцией vlSetRednt() унифицированной записи значений в резервировании.
  - TDAQS::rdRestDtTm() расширено возвратом double вместо float.
  - Дополнено функцией пользовательского API daqAt().
  - Функцию пользовательского API funcCall() расширено аргументом "err".
  - JavaLikeCalc: Функции пользовательского API charAt() и charCodeAt() расширено поддержкой UTF. Функции пользовательского API расширено isNaN() для bool, integer, real, string (особенно для проверки чисел в строке).
- Архивы:
  - Объекты TMArchivator и TArchiveS дополнено функцией redntTm() и rdTm() для получения последнего времени резервирования архивов сообщений.
  - TArchiveS::rdRestDtOverTm() расширено возвратом double вместо float.
  - Архивы значений дополнено общей опцией autoIdMode() режима формирования Идентификатора автоматически создаваемых архивов с вариантами перечисления AutoIdMode::{BothPrmAttrId,OnlyPrmId,OnlyAttrId}.
  - Val: Добавлены функции API пользователя getVals() и setVals() для реализации общего механизма доступа к архивам/истории в массиве и с фиксированной периодичностью.
- UI: Декларацию контекстной документации из описания некоторых узлов унифицировано функцией TUIS::docKeyGet().
  - VCAEngine: Добавлена функция пользовательского API уровня сеанса this.ownerSess().uiCmd(). Виджет исполнения дополнен функцией API пользователя this.attrList() для получения перечня атрибутов виджета.

#### 7.9.3 Система

- FIX: Сообщения исходного кода и документация программы:
  - TMess: Дополнено очисткой переменной окружения LC_ALL и установкой "LANG" ясли пусто, для предотвращения переопределения LC_NUMERIC=C в конце концов.
  - FIX:.,*: Исправлено множество оригинальных сообщений исходного кода также в течении документирования большинства модулей.
  - FIX:DAQ.JavaLikeCalc: Исправлено перевод JavaLikeCalc кода функцией tr() в создании таблицы перевода "Trs" и записей там в простом режиме (один язык).
  - Контекстная документация:
    - Внесетевая документация дополнена некоторыми модулями OpenSCADA и большинством библиотек внутренних процедур и графических элементов. Файл общих CSS-стилей внесетевой документации "doc/en/files/doc.css" улучшено выключением прозрачного фонового цвета и некоторыми свойствами выбора языка.
    - Унифицировано декларацией из описания некоторых узлов в функции TUIS::docKeyGet() и добавлены узлы для этого:
      - DAQ-шаблоны и JavaLikeCalc библиотеки;
      - СВУ-библиотеки в UI.VCAEngine и UI.Vision.
    - UI: TUIS::docGet() дополнено кодом определения LTS сборок и использования замороженной LTS документации на OpenSCADA файл-сервере.
    - FIX:DAQ.JavaLikeCalc,UI.VCAEngine: Исправлена декларация внесетевой документации для "User_API".
- FIX: Сборка:
  - FIX:configure.ac: Версия библиотеки ядра увеличена до 3:7:0 и версия программы увеличена до 0.9.1.
  - Дополнено корневыми файловыми системами (chroots) Debian 10, CentOs 8 и Ubuntu 20.04 для сборки OpenSCADA.
    - Исходные тексты значительно почищены на предмет предупреждений сборки из GCC 9 (CentOs 8).
    - UI.{QTCfg,Vision}: Адаптировано к сборке в окружении Debian 10 на предмет Qt5.11.3, GCC8 и ошибки около конфликта макроса message() в StdLibC++ через Qt5.
- Android: Изучено поведение использования переменной окружения QT_SCALE_FACTOR на Android, которая установлена в 1.5 и удален типовой шрифт "Helvetica,12,-1" вместе с CSS-правилами QScrollBar.
- Модульная версия подсистемы "Специальные" увеличена до 12; подсистемы "БД", "DAQ", "Архивы" и "UI" увеличена до 13; подсистемы "Транспорты" увеличена до 15.
- FIX: Потоковость, задания, реальное время и замки:
  - Некоторые общие ресурсы данных dataRes() заменены собственными ресурсами, в основном из-за наблюдения проблем блокирования в Protocol.HTTP и DAQ.ModBus.
  - FIX: Добавлен механизм общих замков через контейнер замков, функция commonLock().
    - FIX: Transport.{Sockets,SSL}: Использовано для системных функций вроде getaddrinfo(), которые не являются многопотоковыми.
  - Планирование задач дополнено фазированием их вызова, что делает нагрузку на процессор ровной.
  - FIX: Ожидание функции TCntrNode::nodeDis() исправлено для нулевого времени и функция chldDel() установлена в отсутствие ожидания по умолчанию.
  - FIX: Исправлена негативная приоритетность политики "BATCH".
  - Archive,DAQ.Controller: Для текущего времени сообщений и значений в основном использовано TSYS::curTime()/1000000 вместо time(NULL) поскольку время сообщений и значений в микросекундах и помечено TSYS::curTime().
- FIX: Резервирование:
  - .,UI.{QTCfg,Vision,WebCfg,WebCfgD}: Функция "Передача локальных первичных команд" резервированных систем унифицирована и расширена полным перемещением в TCntrNode::cntrCmd(), итак, функция на данное время работает для любых вызовов также из окружения программирования пользователя.
  - Archives,DAQ.DAQGate: Обработка верхней границы времени сообщений в резервировании и DAQGate изменена на использование последнего сообщения для повтора его запроса дважды, чтобы предотвратить потере сообщений на границе.
    - FIX: Резервирование и DAQ.DAQGate восстановлены в записи больших архивных блоков значений, в основном в восстановлении участков архива значений.
    - Первое получение нарушений в резервировании сообщений включено только при наличии архиваторов сообщений в резерве.
    - Размещение сообщений в архиваторах процедурой резервирования TMArchivator::redntDataUpdate() изменено на использование функции put(), для осуществления этой операции автоматически для всех полученных сообщений под замком.
  - DAQ,DAQ.*: Запись значений в резервировании унифицировано функцией vlSetRednt(). Сервис "TValue::get:/serv/attr" расширен несколько лишним запросом последнего запрошенного значения для предотвращения EVAL там при потере соединения.
- Функция strEncode() дополнена вариантом "Limit" для ограничения размера строки с учётом переменчивости UTF-8, и следующие элементы переведены на неё, вместо удалённого ограничивающего варианта функции strMess(): ключи TConfig, ВВ DAQ-шаблонов, DB.SQLite, UI.QTCfg.
- FIX: Конфигурация:
  - TConfig,TCfg: Ключевые поля дополнены ограничением их размера перед обрезанием на стороне БД.
    - *: Функции добавления дополнены обработкой формирования идентификатора, или названия, и ограничения их в размере, возвратом результирующего названия инициатора, с использованием расширения функции узла chldAdd() до прямого возврата идентификатора и простого удаления нового узла для одинаковых.
    - DAQ: Идентификаторы ВВ Логического Уровня DAQ-шаблонов расширены ограничением размера до 1.5*OBJ_ID_SZ=30 символов и дополнены их обрезанием при создании.
    - Транспорты: Размер Идентификатора выходных транспортов установлен в OBJ_ID_SZ*2, поскольку они могут комбинироваться из обычного идентификатора узла и некоторого префикса, в автоматическом режиме.
    - Дополнено функцией установки полей TCfg в типовое значение, для предотвращения загрузке значений предыдущих записей в отсутствующие поля.
  - TConfig,*: Функции пользовательского API для конфигурации cfg() и cfgSet() расширены контролем доступа.
  - Загрузка из выбранной БД улучшено предварительной проверкой включения в функции TSYS::chkSelDB().
  - TCntrNode,DAQ,DAQ.JavaLikeCalc: Дополнено функцией load__() для обработки некоторых действий в конце загрузки.
- Интерфейс Управления:
  - *: Унифицировано на предмет контроля модификации объектов узлов и очищено лишние модификации, переносом модификации из контекста исполнения под опцию "modifCalc".
  - .,UI.{QTCfg,WebCfgD}: Таблицы расширены отдельной помощью по колонкам и ячейкам.
    - Транспорты: Таблица внешних хостов OpenSCADA расширена контекстной помощью к ячейке адреса транспорта, используя функцию outAddrHelp().
- DAQ-шаблоны и все их реализации дополнены функцией создания атрибутов выбора из второй и третьей строки шаблонного поля "Значение", TFunction::IO дополнен флагом TFld::Selectable.
- Завершена унифицированная реализацию DAQ-шаблонов — TPrmTempl::Impl, и такие элементы мигрированы и адаптированы к ней: DAQ.{JavaLikeCalc,ModBus,LogicLev,Siemens}, Protocol.{ModBus,UserProtocol}, UI.WebUser.
- FIX:DAQ,Archive.DBArch: Реализован копирующий конструктор TElem для исправления проблем в Archive.DBArch и многих групп-таблиц в групповом табличном режиме.
- Function,DAQ.{JavaLikeCalc,LogicLev,ModBus,Siemens}: Расширено слежением за сменой программы функции и на предмет гарячего перезапуска исполняемых процедур, установкой флага "f_start".
- TMess,XMLNode: Дополнено функцией setUTF8(), формирования UTF-8 из их кодов, взято из XMLNode для использования в других местах.

#### 7.9.4 БД

- FIX:*: Функция сброса конфигурационного контекста cfgToDefault() использована в начале функции dataSeek() и fieldSeek(), поскольку это обязательная операция, как минимум для конфигурационного файла, и должна также осуществляться для конфигурации в БД относительно новых полей.
- Дополнено контролем закрытия транзакций в ядре OpenSCADA, в сервисной задаче для таймаута > 10 секунд или в отдельной на БД задаче быстрого закрытия транзакций общих СУБД. Для чего добавлена функция trTm_ClsOnOpen(), trTm_ClsOnReq() и trPr_ClsTask().
- Объекты БД дополнены восстановлением их включения после потери подключения (или другой причины) для предусмотренных к включению и не выключенных пользователем, с помощью disabledByUser().
- Дополнено конфигурацией "Время жизни открытых таблиц, секунд", для закрытия неактивных таблиц.
- FIX:{SQLite,MySQL,PostgreSQL,FireBird}:
  - FIX:{MySQL,PostgreSQL,FireBird}: Усовершенствовано и проверено горячее восстановление потерянных подключений и без потери данных.
    - FIX:FireBird: Восстановлено основную работу в запросе первичных ключей и адаптировано к FireBird версии 3.
    - FIX:MySQL: Решено с аварийным завершением во встроенном переподключении (по MYSQL_OPT_RECONNECT), который заменён собственным и горячим переподключением. Исправлена ошибка "BLOB/TEXT can't have a default value (1)" на современных версиях сервера MariaDB, полным удалением DEFAULT для TEXT.
  - SQLite: Дополнено корректной обработкой блокирования файлов БД SQLite, при доступе к общим библиотекам из различных процессов.

#### 7.9.5 Сбор Данных

- TController::alarmSet(): Расширено имплементацией концепции тригерования нарушений, которая предусматривает также пропуск нарушений в буфер с целью очистки только при наличии нарушений.
  - Глобально унифицировано и полностью описано в документации на предмет сообщений из объектов контроллеров и DAQ-параметров, когда параметр-источник в сообщении дополняется именем объекта контроллера.
  - FIX: Изменено на использование полного ID-пути параметра, для предотвращения коллизиям в нарушениях от параметров с одинаковыми идентификаторами, но различными источниками.
- FIX:*: Свойство period() заранее актуализировано, при смене конфигурации "SCHEDULE", для обеспечения корректной периодичности данных архивов.
- Расширено ранним включением библиотек шаблонов в процессе загрузки, изначально для транспортных протоколов основанных на DAQ-шаблонах.
- FIX:ModBus:
  - FIX: Режим "Асинхронная запись" восстановлен и проверен на записи после восстановления подключения, для использования в предотвращении потерь. Асинхронная запись перенесена на после фазы запроса с подавлением-задержкой изменения записанных значений в атрибутах до очищения буфера записи.
  - FIX: Исправлена работа в режиме резервирования.
  - FIX: Общая функция upVal() поделена на две функции upValStd() и upValLog() для отдельного обновления типов параметров сначала "Стандартный" и "Логический" тип на конец, для случаев использования данных "Стандартного" типа параметров в "Логическом".
  - Расширено работой с ошибочным или пустым транспортом подключений, чтобы обеспечить его смену из внешних процедур.
  - Расширено флагом "s" строгого запроса сложных данных.
- FIX:JavaLikeCalc: Расширено попыткой восстановления исполнения предыдущей процедуры в случае ошибок в новой, в основном из DAQ-шаблонов.
  - FIX: Исправлено аварийное завершение при горячей компиляции, в основном при возврате к корректной процедуре после компиляции ошибочной, в случае использования процедурой внутренних функций, возможно и внешних также, из-за отсутствия очистки "fPrmst". Все эти очистки унифицированы в функциях buildClear(), workClear().
  - Установлено в остановку функции при смене источника программы, для применения изменений.
  - FIX: Предотвращено рекурсивные вызовы, что наблюдалось на рекурсивном создании виджетов в UI.VCAEngine.
- Siemens: Расширен прямым определением типа данных адреса. LibnoDave обновлен к 0.8.5.1.
- DAQGate: Расширен опцией и функцией размещения различных удалённых контроллеров в виртуальных параметрах.

#### 7.9.6 Архивы-История

- FIX:Сообщения:
  - /serv/mess: Усовершенствовано во вставке, относительно независимой записи в архив и чисто для обновления присутствующих нарушений.
  - Сообщения макросов "message", "mess_info", ... к функции Mess->put() перенаправлено на запись в буфер, для предотвращения прямой записи в архиваторы.
  - TArchiveS::messPut() очищено от аргумента "force".
- FIX:Значения:
  - TVArchive::getVals(): Усовершенствовано обработку несвободных буферов (с фиксированной периодичностью) относительно запроса данных из буфера и различных архиваторов, используя промежуточный буферный массив, который проигрывается в конце.
  - FIX: Усовершенствовано обработку ограничения независимо для буфера, архиваторов и их периодичности, для работы запросов данных на большом интервале и высокой периодичности.
  - FIX: TValBuf.get() переключено из генерации исключений на возврат EVAL при отсутствии запрошенных данных.
  - Архиваторы значений дополнены общей опцией "Режим формирования ID автоматически создаваемых архивов" с выбором из режимов: "Оба ID параметра и атрибута", "Только ID параметра", "Только ID атрибута". Для возможности контроля наименования автоматических архивов.
  - TVArchive::{setVals(),setVal()}: Доступ к функциям записи в архив ограничено только пользователям в группе "Архив".
- FIX:FSArch: Режим сообщений в XML дополнен кешем позиций.
  - FIX: Архивация сообщений значительно усовершенствована и исправлена относительно размещения нескольких различных сообщений на одно время.
  - FIX: Исправлено относительно удаления info.db и его обработки, используя адрес БД как уникальную сущность вместо ограниченного идентификатора БД, который сейчас именуется через индексацию одинаковых.
  - FIX: Создание каталога архива перенесено на начало, до блокирования и создания info.db.
  - FIX: Исправлена архивация дублированных сообщений в режиме предотвращения дубликатам - переписано.
- FIX:DBArch:
  - FIX: Исправлено включение архивов значений в архиваторы для негруппового типа архивации.
  - FIX: Окончательно исправлен запрос одиночных значений архиву, после неполного исправления от 2018-02-23 только для данных архіватора в периодичности 1 секунда.
  - Адаптировано к работе только в режиме прямой записи архива, для группового режима архивов и относительно обновления целевой информации при записи.

#### 7.9.7 Транспорты

- .,*: Расширено поддержкой выбора многих протоколов и функция protocol() переименована в protocols().
  - Дополнено сервисом закрытия выходных транспортов по времени жизни (неактивности) и функцией outLifeTime(), унифицировано относительно контроля времени последнего запроса функцией lstReqTm().
- FIX:Serial: Исправлен режим "Модем" выходного транспорта, корректной обработкой результата функции ResMtx::tryLock(). Поле управления потоком перенесено в поле опций из-за необходимости прямого отключения некоторой опцией вроде -RS485.
- FIX:Sockets,SSL: Расширено поддержкой IPv6 как для входных, так и выходных транспортов, используя getaddrinfo().
  - Дополнено обработкой (подключением) всех IP-адресов, полученных из символического, особенно для выходных транспортов.
  - Выходные транспорты дополнены прямым определением нескольких адресов хостов.
  - Выходные транспорты усовершенствовано в использовании попыток после получения ошибки запроса "Время чтения истекло.".
  - FIX:Sockets: Исправлена обработка выходных транспортов с адресом "SOCK:{N}" от инициативных подключений, относительно очистки адреса установкой в "SOCK:-1", чем предотвращая возможность перезапуска с использованием уже закрытого описателя сокета, но возможно уже выделенного другой частью программы.
    - Адрес входных транспортов в TCP-режиме может быть расширен дополнительными параметрами и сейчас следующим полем после режима является идентифицирующее сообщение инициативного подключения в режимі 2, т.е. этот режим расширен отправкой идентифицирующих сообщений после установки инициативных подключений.
    - "TCP:" префикс адреса сделан необязательным-опциональным.
    - Режим адреса входного транспорта по умолчанию установлен в 1 (не закрывать, только по параметрам KeepAlive).
    - Порт по умолчанию установлен в 10005.
  - SSL: Дополнено обработкой NO_*_METHOD для TLS1, TLS1_1, TLS1_2, DTLS1 и прямой поддержкой DTLSv1_2. Порт по умолчанию установлен в 10045.

#### 7.9.8 Транспортные Протоколы

- FIX:HTTP: Дополнено корректной поддержкой KeepAlive, функциями входных транспортов keepAliveTm() и keepAliveReqs(). Расширено таблицей БД "HTTP_AuthSessions" внешних сеансов аутентификации.
- FIX:ModBus: Входная часть расширена использованием DAQ-шаблонов.
  - Перечень типов данных таблицы ВВ дополнен типом "Объект".
  - Определение варианта протокола по входным запросам несколько улучшено определением отличия вариантов RTU и TCP, через учёт типа транспорта.
- UserProtocol: Расширено поддержкой DAQ-шаблонов.
- SelfSystem: Расширено поддержкой попыток выходных транспортов.

#### 7.9.9 Интерфейс Пользователя

- FIX: TUIS::mimeGet() изменён на предмет поведения определения расширения файла "svg" как "image/svg+xml" для корректного отображения SVG-файлов, и множества таких файлов, на WEB.
- FIX:VCAEngine,Vision,WebVision: Вариант "LineEdit" примитива "FormEl" дополнен видом "Пароль".
- FIX: СВУ-стили переведены на схему включения стилей при их присутствии вместо выключения по "Нет стиля", также исправлено создание новых элементов и в целом.
- VCAEngine,Vision: Вся информацию сведена в поле статуса для виджетов, библиотек и проектов; которые дополнены статусом исполняемой процедуры - наследовано, переопределено.
- FIX:VCAEngine:
  - Страницы проектов дополнены типом "Ссылка", для оптимизации потребления памяти на высоко-динамических и высоко-повторяемых страницах, на стороне сеанса проекта. Открытие страниц при исполнении проекта (сеансы) улучшено предотвращением лишнего и двойного открытия и закрытия, что критично для контроля ссылок на страницы.
  - Множество мероприятий около редактирования визуальных элементов во время исполнения проекта.
    - Исправлено удаление страниц проекта во время исполнения проекта, на предмет предотвращения блокированию объектов и обеспечения их раннего связывания для удаления страниц сеансов вместе со страницами проектов.
    - Объекты сеансов переведены на собственную блокировку данных для предотвращения мертвого блокирования в сложных ситуациях, поскольку вызовы стилей используют непрямой parent().
  - Оптимизация удалённой разработки:
    - информационные сервисы контроля "/prm/cfg/prj", "/page/page" дополнены получением количества дочерних страниц в атрибуте "chPgN" при установке "getChPgN";
    - дополнено на предмет предотвращения передачи иконок виджетов в контрольном сервисе "/serv/wlbBr" загрузки полного дерева виджетов, установкой атрибутов "disIconsW", "disIconsCW".
  - Сеансы проектов СВУ прибраны, в конце концов, из под контроля модификации режима разработки.
  - Добавлено прямое определение специфических для визуализатора атрибутов, маркируя их префиксом "vs_".
  - FIX: Команда сеанса проекта "close" сервиса "/serv/pg" принудительно обрабатывается, что актуально для ссылок на страницы.
  - FIX: Процедура загрузки СВУ-страниц дополнена очисткой лишних записей и записей унаследованных, но отсутствующих виджетов, в таблице "*_incl".
  - FIX: Исправлена работа функции пользовательского API tr() из документов.
- FIX:QTCfg,Vision: Исправлена обработка подсветки синтаксиса текстовых полей путём первичной загрузки правил синтаксису а потом текста, для предотвращения порче текста в отдельных случаях, обнаружено в протоколе обмена транспорта и Qt 5.11.
  - Дополнено кнопками принудительной загрузки и сохранения, в меню.
  - Улучшено формирование Таблиц на предмет получения доступной ширины из maximumViewportSize().
- FIX:Vision,WebVision: Улучшен контроль лент прокрутки вложенных страниц, для обеспечения их работы отдельно, не двух вместе.
  - FIX:ElFigure: Завершена поддержка отражения, реализацией: в целом, черчения Дуги, заполнения в целом и изображением. Заполнение изображением предотвращено от пробелов при доступе поза изображением.
  - FIX:Диаграмма:
    - FIX:Тренды: Расширено построение шкалы времени, для множества суток с полным скрытием времени, и отображение первого значения слева, используя смещение временной зоны. Дополнено поддержкой больших временных интервалов по месяцам.
    - Отключено ограничение точности запрошенных значений архиву, для длинных счётчиков.
    - Улучшена удалённая работа на медленных каналах и с периодичностью буфера значений в 10 секунд.
  - Text,Media,Box: Расширено отображением курсора активности.
  - FormEl: Некоторые виды (Редактирование строки, Редактирование текста, Комбобокс, Список, Дерево, Таблица) расширены отдельным фоном и границей, с помощью специфических пользовательских атрибутов "vs_background", "vs_border".
  - Дополнено специфическим пользовательским атрибутом "vs_winTitle" динамического значения заголовка окна.
- FIX:Vision:
  - Оптимизация удалённой разработки:
    - Дерево проектов переключено на частичную загрузку ветвей и расширение, для улучшения работы на медленных подключениях.
    - Дерево виджетов улучшено в работе на медленных подключениях путём отключением загрузки иконок виджетов по пороговому времени полной загрузки дерева более 5 секунд и включения этого для времени менее 0.1 секунды.
  - Расширено планированием периода обновления в зависимости от реального качества подключения в режиме исполнения, вроде UI.WebVision.
  - FIX: Общие исправления и усовершенствования режимов исполнения окна:
    - FIX: Ручное масштабирование окна исполнения (относительно полного экрана или максимизации) улучшено и исправлено в обработке признака isResizeManual.
    - FIX: Исправлен запуск в полно-экранном режиме и не полное масштабирование при восстановлении в не нулевую позицию окна.
  - FIX:FormEl:
    - FIX:Таблица: Улучшена подстройка к использованию максимальной ширины из размера виджета и максимума порта отображения, поскольку только максимум порта может быть тут ещё не инициированным. Окончательное исправление подстройки таблиц, переносом процедуры в сообщения: создать, изменить размер и показать. Исключены случайные падений.
    - FIX:Date: Исправлено аварийное завершение при установке конфигурации.
  - FIX: Исправлена регулярная замена основной страницы (аварийное завершение) и масштабирование в режиме исполнения.
  - FIX: Исправлено исполнение относительно аварийного завершения в закрытии внешних окон при закрытии главного окна.
  - FIX: Исправлены диалоги редактирования свойств Страниц/Библиотек и Виджетов относительно:
    - предотвращения закрытия по Esc;
    - отключения отмены изменений по времени в LineEdit;
    - отвязки признака редактируемости от видимости в TextEdit;
    - предотвращения потере изменений во вкладке "Обработка";
    - предупреждения про изменение наследованной вычислительной процедуры.
  - Контроль за фокусом переписан в специфичный около СВУ-виджетов контроль, а не Qt-виджетов, что похоже на UI.WebVision и что предотвращает некоторые проблемы.
  - ElFigure: Редактирование фигур переключено в нормальный режим, без какой-нибудь трансформации (поворота и отражения).
- FIX:WebVision:
  - FIX:Основное функционирование:
    - FIX: JS функция servSet() записи на сервер переключена в синхронный режим для предотвращения потерь.
    - Унифицирована основная проверка фоновых объектов относительно поддержки опциональных фоновых объектов, для уменьшения общего количества фоновых объектов, где обязательными сейчас являются: "ElFigure", "Диаграмма", "Документ", "FormEl"; и опциональный только "Текст".
    - Границу вертикального расширения основного окна установлено в 10% от общего размера и в 50% для уменьшения, для предотвращения миганию на FireFox от примечаний про блокирование внешних окон. Установлено использование-включение встроенного режима масштабирования согласно к window.devicePixelRatio равного 1 на уровне Web-бравзера.
    - Значительно улучшено обнаружение потерь подключения для перегрузки основной страницы, в случаях возврата к уже закрытым сеансам в Web-браузере.
    - Дополнено реализацией специфического к визуализатору атрибута "userSetVis".
    - FIX: Восстановлена перегрузка целого дерева виджетов для восстановления функции удаления отсутствующих виджетов в визуализаторе при их удалении в СВУ-движке.
    - FIX: Предотвращены лишние и отдельные запросы содержимого вложенных страниц при запуске.
    - FIX: Улучшено поведение контроля фокуса и предотвращены сообщения мыши вне страниц.
  - Дополнено контролем кеша страниц по времени жизни и максимальному количеству страниц как на стороне сервера, так и Web-бравзера, итак этот модуль, на данное время, больше подходит для работы в оперативном режиме!
  - Контроль сеансов:
    - Расширено возможностью ручного закрытия открытых сеансов от административного пользователя.
    - FIX: Обычные пользователи исключены от возможности подключения к чужим сеансам.
    - FIX: Основной код запроса GET значительно упрощён относительно предотвращения переподключениям к СВУ-сеансам без локальных представителей.
    - Дополнено состоянием открытых сеансов на странице контроля, включая подключенный проект и пользователя.
  - FIX:Панель статуса:
    - Добавлен уровень нарушений с функцией глобальной квитации, отправкой "ws_alarmLev".
    - Расширено поддержкой СВУ-стилей в их отображении и изменении.
    - FIX: Исправлено в формировании размера панели статуса, обновлении и предотвращении её мигания при обновлении основной страницы.
  - FIX:FormEl:
    - FIX:{Tree,Table}: исправлен расчёт ширины границы и отступа в конечной геометрии.
      - FIX:Tree: Исправлена обработка пустой строки в конце. Дополнено масштабированием изображений дерева управления.
  - Расширено установкой визуальных элементов СВУ на предмет атрибута "class" в "Примитив {WPrimitive}" и атрибута "id" в идентификатор виджета вроде "wdg_{id}", для упрощения детальной подстройки.
- FIX:QTStarter: Функция updLookFeel() исправлена на предмет возврата типа "void". Добавлена эмуляцию правой клавиши мыши и контекстного меню при удержании левой клавиши мыши в течении времени, установленного опцией командной строки --simulRightMKeyTm. Это время установлено в 2 секунды для Android.
- FIX:QTCfg:
  - FIX: Исправлено применение-принятие забытых изменений редактируемых виджетов при переключении к другому узлу. Элементы TextEdit исправлены относительно определения признака редактирования, который отвязан от видимости.
  - Добавлен намёк к группам узлов для команды добавления узла.
  - Операции перемещения, в конфигурационной таблице, расширены горячими клавишами "Ctrl+Up" и "Ctrl+Down".
  - Оптимизация удалённой работы:
    - Предотвращено обновление дерева навигации при выборе любого элемента.
    - Замедление цикла периодического обновления после появления диалога занятости.
  - Ускорено закрытие окна конфигуратора со многими неактивными OpenSCADA хостами, путём раннего уведомления заданий хостов.
- WebUser: Расширено поддержкой DAQ-шаблонов.

#### 7.9.10 Специальные

- FIX:FLibSYS:
  - FIX:IO: write() исправлено относительно получения типового типа данных, получение ошибочных данных сделано безопасным.
  - CRC: Завершено использованием нормальных полиномов, входных и выходных относительностей и XOR для выхода.
  - VArchObj: Доступ к функции записи в архив ограничен только пользователями в группе "Архив".

#### 7.9.11 Сервисные обновления

- пятое (5) от 20.07.2020.
- четвертое (4) от 07.07.2020.
- третье (3) от 15.06.2020.
- второе (2) от 01.06.2020;
- первое (1) от 11.05.2020.

## 8 Ссылки

- Протокол тестирования промышленного релиза 0.9 LTS.
- Руководство обновления 0.8.0 LTS.
- Задача выпуска релиза и список послерелизовых работ до первого обновления 0.9 LTS.

Documents/Release_0.9/ru - GFDL | May 2026 | OpenSCADA 0.9.9