Документи/Реліз 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; та генерації автономної (offline) документації за її зміни.
- Ревізія, актуалізація та деяке розширення 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 помилок і додає деякі удосконалення, які цілком ви можете почитати у протоколі змін оновлення.

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

- адаптація до роботи серверу хостингу під постійною DDoS у ~3 мільйони унікальних IP і за короткого часу від енергомережі шляхом економії батарей, і під контролем OpenSCADA;
- додання Debian 13 у якості бази дистрибутиву;
- переведення назад до серверу OpenSCADA складання бази Debian 9;
- переведення складання бази Debian 12,11,10 у оточення Debian 13 із увімкненням назад підтримки тут SHA-1;
- перемикання концепції складання на використання sshfs у віддаленій роботі із репозиторіями;
- оновлення TDE до 14.1.4, 14.1.5 і потім до 14.1.6;
- TDE > tdebase-trinity: KDesktop > Lock: Відновлення коду блокування до відповідного у версії 14.1.4 із розширенням на сам діалог блокування.
- TDE > krusader-trinity > RAR: Завантаження вбудованої бібліотеки TDEIO RAR.
- TDE > tdebase-trinity > TDEIO > media: Переклад параметрів ФС у втулку "propsdlg".
- TDE > tde-i18n-trinity > uk: Додання перекладу повідомлень до латаних пакетів в українській частині.
- TDE > tdebase-trinity > KControl > Locale: Очищення мовних налаштувань до системних.
- TDE > tdelibs-trinity > TDELocale: Додання отримання країни із оточення.
- TDE > tdelibs-trinity > TDEIO > SwitchLanguageDialog: Очищення усіх мовних налаштувань.
- TDE > tdeutils-trinity > ARK: Додання використання "unrar-free".
- TDE > krusader-trinity > RAR: Додання використання "unrar-free".
- TDE > tdegraphics-trinity > kghostview: Представлення PDF на Ghostscript 10.05.
- TDE > tdepim-trinity > holiday_ua > HoliDays: Заміна актуальними святковими днями і днями пам'яті України.
- TDE > kaffeine-trinity > xine-part: Додання перекладу повідомлення "Неможливо отримати зображення!" українською.
- TDE > tdebase-trinity: Запобігання-придушення дублювання іконок у системному лотку для програм із однаковим ІД на кшталт blueman із опцією вимкнення цієї функції, з виправленням використання readBoolEntry().
- TDE > tqt3-trinity > Plugins > XIM: Виклики XCloseIM() для запобігання течі пам'яті.
- TDE > tdelibs-trinity > TDEIO > KFileView: Опрацювання розширень файлів за шаблонами при збережені і без скидання розміру діалогу.
- TDE > kaffeine-trinity > xine-part: Дозвіл копії екрану у будь якому підтримуваному форматі файлу-зображення.
- TDE > tdesvn-trinity: Виправлення вирішення конфліктів у KDiff3, запобігання аварійним завершенням при вирішенні конфліктів, оновлення предку зміненого елементу із усіма розширеннями.
- TDE > tdebase-trinity > TDEIO > media: Відновлення використання fuser.
- TDE > tdebase-trinity > ksysguard: Видалення обмеження навантаження процесу у 100%.
- TDE > tdelibs-trinity > TDEIO > CopyJob: Не перейменовувати теки і перезапис файлів старих, менших і відмінного розміру.
- TDE > tdebase-trinity > TDEIO > SMB: Запобігання дублюванню генерації сигналу result() через помилки.
- TDE > tdepim-trinity > knote: Додання пошуку лише локально за обраною нотаткою.
- TDE > tdelibs-trinity: Повне вимкнення опрацювання некласифікованих пристроїв через високе навантаження ЦП, особливо на повільному обладнані.

Основні WWW-ресурси, документація проєкту і підпроєктів, та локалізація

- доповнення Бібліотеки основних елементів інтерфейсу користувача описом нового елементу-кадру "Динамічний кадр";
- оновлення інформації підпроєкту Автоматичний Складальник OpenSCADA;
- додання перекладу Португальською від Дієго Екхард до частин: SYS, DAQ.ModBus, Transport.{Sockets,SSL,Serial}, UI.{QTStarter,QTCfg,VCAEngine,Vision}.

Нові та значно оновлені частини

- Ядро OpenSCADA:: 3:15:0 => 3:16:0

  (Реалізація ініціативних підключень — виправлення і розширення концептуальних змін попередніх оновлень, Переклад Повідомлень — виправлення концептуальних змін попередніх оновлень)

- Підсистема "Збір Даних" OpenSCADA: 15 => 16
- Підсистема "Архіви" OpenSCADA: 14 => 15
- DAQ.Siemens: 4.5 => 4.8

  (Загальна стабілізація ISO_TCP підключення, Пряме отримання і встановлення значення за специфічною до джерела адресою, Збереження значень користувацьких динамічних атрибутів)

- DAQ.System: 3.3 => 3.5

  (Читання NVMe Журналу із переведенням на розбір регулярними виразами і читання полів рядком)

- DAQ.LogicLev: 2.9 => 2.11

  (Покращення режиму віддзеркалення параметру, Збереження значень користувацьких динамічних атрибутів)

- DAQ.OPC_UA: 2.8 => 2.10

  (Пряме отримання і встановлення значення за специфічною до джерела адресою, Збереження значень користувацьких динамічних атрибутів)

- DAQ.ModBus: 3.9 => 3.11

  (Пряме отримання і встановлення значення за специфічною до джерела адресою, Збереження значень користувацьких динамічних атрибутів)

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

  (Підсвітлення синтаксису у текстових областях)

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

  - JavaLikeCalc.flb_Json: 0.3
  - base:
    - UPS: 1.3 => 2.2
      (Пряма реалізація пристроїв, визначення атрибутів у "Визначення елементів (defs)")
    - DiskSMART: 1.0 => 1.1
      (Процедура обробки входу)
    - initRemCntr: 1.1 => 1.2
  - DevLib.mbBase: 1.3 => 1.6
      (Процедура обробки входу, додаткові типи і гнучке оновлення атрибутів)
  - LowDevLib:
    - IEC62056: 1.1 => 2.0
      (Підтримка частини 21 і багато вдосконалень)
    - S1BP: 1.0 => 1.1

- LibsDB.vcaBase.Main: 2.2 => 2.3

  - dynFrame: 1.2
  - storeHouse: 2.1 => 2.3
    (Значне розширення і виправлення)
  - TextLab: 1.2 => 1.3
    (Розширення станів)
  - ImgLab: 1.2 => 1.3
    (Розширення станів)
  - cntrPaspExt: 1.2 => 1.3

КОНЦЕПТУАЛЬНЕ > Концентрація різних OpenSCADA хостів на загальному сервері, як для ІнтернетРечей (IoT) на OpenSCADA, так і іншого (виправлення концептуальних змін попередніх оновлень)

- LibsDB.vcaBase.wlb_Main.dynFrame: Просування реалізації цього кадру до можливості реального розташування елементів, зв'язування, загального контролю, збереження і відновлення.
- LibsDB.OscadaLibs:
  - FIX:tmplib_base.initRemCntr: Виправлення збереження таблиці віддалених вузлів OpenSCADA після видалення старих.
    - Додання прямого звільнення даних запитів.
    - Ключ змінено на примусові два символи у HEX.
    - Дозволено оновлення об'єктів віддалених логічних джерел щодо нових джерел.
    - Захисний час виконання збільшено до 60 секунд.
    - Перевірка і видалення логічних параметрів із відсутніми джерелами.
    - Встановлення поля "Дозволяти автоматичне видалення параметрів та атрибутів" і "Період синхронізації з віддаленою станцією, секунд" модуля DAQGate.
  - Security_user,Transport_in.{Sockets,SSL}::RemCntr: Додання детального опису цілі об'єктів і використання.
- data/{oscada_plc.xml,oscada_server.xml}: Спрощення назв станцій для коротких віддалених ідентифікаторів.

КОНЦЕПТУАЛЬНЕ > Переклад Повідомлень (виправлення концептуальних змін попередніх оновлень)

- LibsDB.vcaBase:
  - FIX:wlb_Main.ElViewGraph: Атрибут "Одиниця виміру (ed)" встановлено у тип "Рядок (переклад)" для відновлення транзитивного перекладу повідомлень Джерел Даних за посиланнями у режимі ДИНАМІЧНИЙ-БАГАТОМОВНИЙ.
- FIX:DAQ.TDAQS,Archive.TArchives: Виправлення динамічного перекладу назв резервованих об'єктів.
- FIX:SYS,DAQ.{.,JavaLikeCalc}: TFunction::IO: Виправлення-завершення перекладу типових значень у конструкторі і для DAQ-Шаблонів із їх реалізаціями.
- SYS:
  - Менеджер Перекладу доповнено інформацією у останньому рядку щодо досягнення часу обмеження.
  - FIX:TMess: Додання опрацювання передзбережених I18N повідомлень у довгому варіанті TMess::translGet(), який викликається із objFuncCall(), замість втрати перекладу тут.
- FIX:DB: Запобігання попередженню "Деякі повідомлення цілком очищено для бази ..." для елементів без полів перекладу.
- FIX:DAQ: Виправлення динамічного перекладу обраних елементів із поля типового у addLinksAttrs().
- FIX:UI.VCAEngine: Конфігураційне значення виправлено щодо перекладу у вкладці "Зв'язки" і опрацювання поля перекладу для значень із префіксом "val:" та переключення на нього.

OpenSCADA бібліотеки і проєкти

- LibsDB.OscadaLibs:
  - Додання нової бібліотеки "Json" із підтримки JSON від Аркадій Кисіль.
  - FIX:{tmplib_base,tmplib_DevLib}.UPS: Виправлення запису до атрибутів, доступних до запису.
  - tmplib_base:
    - digAlarm,anUnif,anUnifSt,codeState: Вхідну процедуру опрацювання доповнено параметром "args", як посилання на аргументи основної процедури.
    - UPS: Розширення прямою реалізацією пристроїв у цьому шаблоні починаючи із Must EP2X. Додання передачі атрибутів у параметри на основі цього шаблону із їх визначенням у новому атрибуті "Визначення елементів (defs)". Додання функції alarm() для правильного контролю границь із гістерезисом.
    - FIX:manInUnif: Запобігання встановленню збереженого значення при запуску, перезаписуючи актуальне, також для сигналів поза шкали.
    - FIX:DiskSMART: Додання вхідної процедури обробки для опрацювання специфічних полів і додання нових похідних полів. Поле "Визначення елементів" доповнено типовим переліком специфічної інтерпретації SMART полів. Вдосконалення деяких оригінальних повідомлень.
    - anUnif: Аварійне повідомлення перевищення границі сигналом доповнено цим помилковим значенням.
  - tmplib_DevLib:
    - mbBase,ergomera625: Вдосконалення правил підсвітлення синтаксису щодо типів на кшталт "u4".
    - IEC62056: Розширення підтримкою частини 21 (прямий локальний обмін даних) і вдосконалення:
      - додання вхідної процедури для обробки прочитаних OBISів;
      - перелік OBISів доповнено описом і підсвітленням синтаксису;
      - додання опції контролю LE порядку байтів цілого;
      - ІД атрибуту представлення OBIS доповнено "ClassId" і "a";
      - "ClassId" OBISів розширено до двох байтів;
      - обрізання видимих рядків до першого нульового байту;
      - додано передвстановлені пристрої із відомими головними OBISами;
      - поле адреси розширено підтримкою однієї цифри на кшталт SN;
      - атрибути "tr" і "ctx" винесено із ВВ.
    - mbBase: Розширено вхідною процедурою для кастомізації без зміни шаблону. Розширено підтримкою типів "Int8 (i8)" і "Double (d)", як і повторне створення атрибутів зі зміною типу і видалення атрибутів, які відсутні у переліку елементів. Можливість визначення адрес регістрів у HEX і OCTAL. Додано застосуванням елементів синтаксису регістрів модуля DAQ.ModBus.
- LibsDB.vcaBase:
  - wlb_Main: Бібліотеку доповнено кадром "Динамічний кадр (dynFrame)" із документуванням.
    - Бібліотеку доповнено додатковою іконкою 'weath13n' для віджету "Погода (weather)".
    - FIX:TextLab,ImgLab: Розширення щодо опрацювання конфліктних станів "false && false" і "true && true" беручі параметри із елементу [2] і [3].
      - Додання генерації порушень із атрибуту "Помилка (err)".
      - FIX: Перейменування назв станів "Увімкнути" у "Увімкнено" і "Вимкнути" у "Вимкнено".
      - FIX: Уніфікація блимання аварії просто зміною робочого кольору у аварію у другому циклі.
    - alarmsAct,alarmsSt: Адаптація до читабельних людиною повідомлень.
    - FIX:storeHouse: Перенесення формування Панелі Контролю і її оновлення до коду оновлення таблиці.
      - FIX: Відокремлення частини приготування даних від формування візуальних даних для ранього приготування переліків і з обмеженням часу опрацювання елементів.
      - Додання опрацювання події ws_TableEdit перевіркою валідності рядка і ствпця.
      - Цикли повторення і оновлення переписано для визначення часу у "toCalcCycles" в секундах і оновлення після вичерпання.
      - FIX: Запобігання відображенню другого поля фільтру у формі елементу після зміни користувача.
      - FIX: Виправлення перегляду зображень при виборі у комбобоксі файлів.
      - Визначення режиму транзакції у всіх викликах SQLReq().
      - Панель контролю доповнено полями обрання.
      - Переписано приготування переліку стовпців для фільтрів із використанням перевизначених назв стандартних полів "NAME", "DSCR", і з правильним сортуванням.
      - У розмірах файлів використано нову функцію SYS.cpct2str().
    - FIX:ImgLab: Взяття кольору фону навіть порожнім із переліку зображень за його наявності.
      - FIX: Встановлення ширини границі у 2 коли вона нульова при блиманні обранням, тобто для активних елементів.
      - Формат атрибуту "Зображення (imgs)" переведено до допомоги, тобто до другого рядка.
    - FIX:objProps: Додання стеження за зміною користувача, додання підтримки реальних властивостей.
    - ElCadr: Додання атрибуту "Параметр: Примусове вимкнення ПІД (prmNotPID)" для вимкнення відображення ПІД за наявності SP.
    - cntrPaspExt: Приховання атрибутів у EVAL. Генерація повідомлень дій користувача при зміні редагованих властивостей.
    - TextLab: Адаптовано до використання типового фону за його відсутності у "st_text".
  - wlb_doc:
    - FIX:docRepYear: Виправлення опрацювання останнього значення у році для даних з архівів.
    - docUsersSet: Розширення можливістю визначення-конфігурування використаних архівів.
- Model.AGLKS.Model.DAQ_BlockCalc.gen_cnt: Доповнення опису полем "MessName: {Name}".

API
!!!!:Зміни:

- SYS.ResString: getVal() встановлено постійною.
- Archives,DAQ.*: Елементи переліку режимів джерела додано префіксом "SRC_" і "ActiveAttr" перейменовано у "DAQAttrAct"; елементи режимів комбінування додано префіксом "CMB_" і елементом "FromArchiver"; елементи режиму даних додано префіксом "DM_" замість "DM".
- DAQ.TFunction: Переключення методу "mStor" у ResString.

Доповнення:

- SYS.CntrNode,Protocol.HTTP: Додання сервісних запитів "select:/db/list" опцією "nostor" для порожніх елементів.
- SYS,UI.VCAEngine: Доповнення визначенням "starts_with" як посилання на STL::String функцію "compare(0,strlen(str),str) == 0" для заміни compare() і find() у цій ролі.
- Archives,DAQ.DAQGate: Об'єкт TMArchivator доповнено перевизначенням TMess::SRec із контейнером зберігання дубльованих повідомлень на одну секунду.
- SYS: Файлові функції Користувацького API доповнено fileRotate() для ротації файлів переважно журнального типу.
  - TCntrNode: Нова функція nodeMessSnthHgl().
  - XMLNode: Функцію load() доповнено розбором чистого HTML із опцією LD_HTML. Функцію save() доповнено опцією HoldEmptyAttr утримання порожніх атрибутів.
  - XMLNodeObj: Додано функцією Користувацького API і API childDel( AutoHD<XMLNodeObj> nd ). Функція Користувацького API setAttr() доповнена синонімом attrSet().
- DAQ:
  - TController,TParamContr: Додання функції justCreated() для виявлення щойно створення.
  - TParamContr: Додано віртуальною функцією loadVal() для перевантаження усіх або одного збереженого значення.
  - TPrmTempl.Impl.archAttrs(): Доповнено аргументом мітки часу для використання загальної мітки часу у архівуванні.
  - ModBus,OPC_UA,Siemens: Об'єкт Контролеру доповнено функцією Користувацького API value() прямого отримання і встановлення значення за специфічною до джерела адресою і через реєстрацію адреси для отримання-встановлення у загальному циклі опитування джерела.
- Archives: Об'єкт архіватору TVArchivator додано функцією combMode() і setCombMode().
- JavaLikeCalc: Функції Користувацького API до рядка доповнено sep2path().

Система

- Складання:
  - configure.ac: Підняття версії бібліотеки ядра до 3:16:0 і версії програми до 0.9.9. Підняття версії модулів підсистеми "DAQ" до 16 і підсистеми "Архіви" до 15.
  - Доповнено складанням до Debian 13 і Ubuntu 26.04 LTS.
  - .,DAQ.Siemens: Загальна адаптація до складання на Debian 13, адаптація до підтримки PCRE2 через відсутність старої PCRE бібліотеки на Debian 13 із перенесенням змінної "vSz" до визначення TRegExp_vSz для старих бібліотек.
  - DB.MySQL: Адаптація до складання із заголовками без визначення типу "my_bool" на Ubuntu 26.04 LTS.
- XMLNode: Функцію load() доповнено розбором чистого HTML із: тегами без закриття, атрибутами без значення, значення атрибутів без лапок, переставлення тегів закриття.

Збір Даних

- Шаблони: Увімкнення полів обрання у вкладці "Конфігурація шаблону" для постійних.
- FIX:{ModBus,OPC_UA,Siemens}.LogicLev: Запобігання помилковому запису до ПЛК за RO посиланнями, коли значення змінюється у процедурі.
- LogicLev,ModBus,OPC_UA,Siemens: Функції Користувацького API attrAdd() і attrDel() з керування користувацькими атрибутами перенесено із LogicLev, ModBus, OPC_UA, Siemens до об'єкту параметру ядра і для усіх динамічних параметрів за dynElCntr(). Додання збереження значень динамічних атрибутів користувача.
- FIX:Siemens: Переведення режиму SELF_ISO_TCP на загальну функцію outAt(). Зневадження помилок підключення для режимів SELF_ISO_TCP і ISO_TCP на актуальному підключені S7-1500.
- Система: Додання збору даних повільних джерел за певним циклом через конфігураційне поля "Цикл виклику повільних джерел".
  - DA_SMART: Додання підтримки читання Журналу NVMe із переведенням на розбір регулярним виразом і читання полів рядком, на кшталт температур.
  - DA_PROC: Доповнено отриманням поля "Користувацьке навантаження (%)" і "Системне навантаження (%)" із файлу "/proc/{PID}/stat" також із поєднанням значень для групового обрання.
- FIX:JavaLikeCalc: Виправлення прав доступу до вузла Function після переведення під ACL.
- FIX:LogicLev: Вдосконалення режиму віддзеркалення параметру можливістю пізнього підключення до відсутніх при запуску джерел, так само, як відв'язування-розблокування вимкнених джерел.
- FIX:DAQGate: Виправлення messSet() щодо отриманням повного ІД параметру із першого рядку аргументу "prm" із його нормалізацією видаленням префіксу "prm_". Встановлення запису до віддалених станцій без перевірки рівності значення, оскільки попереднє значення може бути не актуальним за ситуативного читання.
- ModBus: Уніфіковано щодо реєстрації значень за специфічною до ModBus адресою у іншому варіанті функції regVal().

Архіви-Історія

- FIX:Значення: Запобігання аварійного завершення за нульового періоду у TVArchEl::getVals().
  - Додано конфігураційним полем "Режим поєднання даних (CombMode)", як у об'єкті архіву, для визначення поєднання даних у архіваторі, і поле у архіві додано елементом "Із Архіватору" по замовченню.
  - Елемент "Активний DAQ Атрибут (ЗАСТАРІЛО)" джерела архіву перейменовано у "DAQ Атрибут активно" і знято позначку застарілості, оскільки це єдиний шлях створення багатьох архівів до одного джерела.

Транспорти

- FIX: Функція запиту загального Інтерфейсу Керування cntrIfCmd() попереджена від будь якої локальної-прямої-користувацької автентифікації за переспрямування до проміжних вузлів OpenSCADA, що особливо актуально для віддалених підключень UI.Vision від різних користувачів.
- Журналювання трафіку у файл доповнено ротацією файлів.

Інтерфейс Користувача

- FIX:Vision,WebVision: Виправлення компенсації часток реальних чисел у позиції і розмірі для правильного вирівнювання внутрішнього вмісту віджетів з різним розміром, коли масштаб більше 1. Запобігання аварійного завершення функції VCADiagram::TrendObj::loadTrendsData() за нуля у "wantPer".
- QTCfg,Vision: Розмір табуляції текстової області встановлено динамічним і обрахованим із метрики шрифту для стандартних восьми символів "00000000".
- WebCfgD: Реалізовано підсвітлювання синтаксису у текстових полях.
- FIX:WebVision: Відновлення функції зміни користувача після запобігання заповненню повідомленнями підключення до того-ж сеансу від іншого вузла і іншого агента. Додання користувача останнього запиту для запобігання відкриття нових сеансів після зміни користувача від оригінального.
- FIX:VCAEngine: Перенесення встановлення прапорця Attr::VizerSpec для атрибутів із префіксом "vs_" до спадкування атрибутів і лише для віджетів сеансу. Уніфікація власних прапорців Атрибуту поділом на збережені і оперативні.
- FIX:QTStarter.lib_qtgen: Алгоритм підсвітлення синтаксису у SnthHgl::rule() очищено від зайвих контейнерів і уніфіковано.
- FIX:Vision: Запобігання аварійному завершенню у обробнику події ShapeFormEl за незавершеної ініціалізації, тобто відсутня змінна "addrWdg". Запобігання зміні користувача для переспрямованих підключень.

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

Це оновлення релізу 0.9 LTS виправляє біля 70 помилок та додає БАГАТО удосконалень із декількома значними-концептуальними, з якими цілком можна ознайомитися у протоколі змін оновлення.

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

- актуальний (Debian) TDE-репозиторій було цілковито віддзеркалено щодо використаних частин цим проєктом із перепідписуванням усіх цих пакетів ключем OpenSCADA, і це було здійснено у теках TDE14.1 для версій >= 9 і TDE14.0 для < 9. Тобто разом із латаними пакетами, які було перенесено до TDE14.0 для старих версій Debian;
- формалізація часткового відгалуження TDE за підпроєктом — Linux Дистрибутив Автоматизації проєкту OpenSCADA;
- оновлення TDE до 14.1.3 потім до 14.1.4 із складанням латаного для Debian 8,10 ARMHF;
- відновлення запуску nm-applet у системному лотку і видалення пакету "raspi-firmware" із встановлень Debian 12;
- TDE > tdebase-trinity > KXKB-KLayouts: Відновлення завантаження типових параметрів XKb, а саме комбінацій клавіш перемикання розкладки клавіатури;
- TDE > Digikam: Відновлення складання за допомогою AutoTools у 14.1.4;
- ghostscript: Запобігання очищенню налаштувань прозорого тла у pdfi_create_DeviceRGB() попереднім викликом pdfi_setrgbfill(ctx), задля коректних прозорих фонів;
- TDE > tdegraphics-trinity > KSVG: Запобігання зациклюванню SVG-мініатюрника за NAN змінної "th_arc" деяких дуг;
- TDE > tdegraphics-trinity > KPDF: Оновлення локальної копії Poppler у KPDF для відновлення завантаження оригінального кольору заповнення і креслення, задля коректних прозорих фонів;
- TDE > tqt3-trinity: Запобігання падінню QTextEdit при вставлені RTE із параграфами на початок, шляхом оновлення змінної "lastFormatted";
- TDE > tdepowersave-trinity: Запобігання блокуванню-залипанню ознаки "blacklisted_running" після виконання однієї з програм у чорному переліку;
- TDE > basket-trinity: Виправлення не заміни обраних блоків у нотатку за вставлення RTE, просте додання перед блоком;
- TDE > tdepim-trinity > KOrganizer: Запобігання появі двох діалогів редагування елементу і нового елементу за подвійним клацанням на клітинці із елементами у місячному перегляді;
- TDE > krusader-trinity: Виправлення оновлення панелі джерела за операцій переміщення;
- TDE > tdebase-trinity > Konqueror: Запобігання інколи дублюванню елементів у елементі вкладки "Система (system:/)" через подвійний виклик setOpen(true);
- TDE > tdebase-trinity > QuickLauncher: Завершення виправлення появи у QuickLauncher порожніх елементів після видалення якогось елементу, що пов'язано із вставленням вже відсутнього desktop-файлу (після деінсталяції програми) із популярностей;
- TDE > krusader-trinity: Запобігання примусовому блокуванню змонтованих медіа-тек після зміни локальної директорії на віддалену-віртуальну, шляхом зміни локальної теки у Дім. Також запобігання течі пам'яті на виклику функції getcwd(0, 0) без звільнення її результату;
- TDE > krusader-trinity: Запобігання очищенню панелі із переліком елементів спільної теки SMB після перейменування елементу через отримання другої чи третьої події result() від IO-Slave, тобто оновлення панелі зараз відкладено на 0.5 секунди після перейменування;
- TDE > tdebase-trinity > KDesktop: Запобігання повного заморожування KDesktop на очікуванні Рушія Зберігача протягом біля хвилини після пробудження, через виключення використання sigsuspend() при очікуванні "mSaverProcessReady" де достатньо виклику tqApp->processEvents();
- TDE > tdelibs-trinity > DCOP: Переключення внутрішніх інтервальних таймерів на сучасну структуру "timespec" і Монотонний лічильник у основі, що зробило DCOP нечутливим до стрибків реального часу, особливо при пробуджені;
- TDE > tqt3-trinity: Повне переключення Qt3 інтервальних таймерів (QTimer) на сучасну структуру "timespec" і Монотонний лічильник у основі, що зробило Qt3 нечутливим до стрибків реального часу, особливо при пробуджені;
- TDE > kaffeine-trinity: Додання підтримки медіа-формату WEBM;
- TDE > tdelibs-trinity > MIME: Додання підтримки медіа-формату WEBM;
- xine-lib: Переключення "display_queue.mutex" у Відео виході на рекурсивний режим для запобігання зависань у xine_new_framegrab_video_port();
- TDE > tdemultimedia-trinity > XineThumbnails: У Картинках до Відео від Xine вимкнено Аудіо від xine_new_framegrab_audio_port() і відкориговано передачу кольору. На додаток до запобігання мертвим блокуванням у Xine;
- TDE > tdelibs-trinity > TDE IO: Встановлення часу очікування підключення підлеглого SLAVE_CONNECTION_TIMEOUT_MIN із 2 у 10 і SLAVE_CONNECTION_TIMEOUT_MAX із 10 у 30 для запобігання помилок відсутності підлеглого FILE на загалом повільному обладнані і HDD/SSD із повільними секторами;
- TDE > tdeadmin-trinity > KPackage: Доповнення меню "APT Додаткове" елементами: "Очищення (apt-get clean)", "Автовидалення (apt-get autoremove)";
- TDE > tqt3-trinity: Запобігання зависанням на креслені помилкових образів символів у TQTextEngine, помічено у KCharSelect на сторінці 15;
- TDE > tdelibs-trinity: Виправлення підставлення коректного року у kdatepicker відповідно до обраної Календарної Системи;
- TDE > kdiff3-trinity: Перемикання адрес у меню плагіну на гарний вигляд замість кодування UTF-8 символів рідних локалей;
- TDE > tqt3-trinity: Пом'якшення ефекту високого-повного навантаження ЦП із генерацією Незавершених подій від інтерфейсу GLib до серверу X11, що яскраво проявляється на digikam-showfoto, або qtwaittimer, що виявлено на kdesktop-screensaver при пробуджені, і шляхом додання короткого очікування у 1мс після опрацювання подій;
- TDE > amarok-trinity: Запобігання шуму із високим навантаженням ЦП особливо на старих-повільних системах протягом виконання у системному лотку перед відкриттям вікна ПерелікуПрогравання, через помилковий фоновий запуск аналізаторів при зміні періодичності анімації;
- TDE > tdebase-trinity > MediaManager: Додання перемикання використання /etc/fstab або утилітою монтування на кшталт udisks або загальною програмою монтування. І воно корисне як для FD, так і CD/DVD/BLURAY, оскільки udisks[2] не монтує їх без запису у /etc/fstab;
- TDE > tdebase-trinity > MediaManager: Виправлення невідповідності у назві піктограм для CD-R і CD-RW у tdeioslave (14.0.10 на Debian 7);
- TDE > kaffeine-trinity: Виправлення програвання DVD версіями XINE, які не розуміють URM "dvd://", лише "dvd:/";
- TDE > tdebase-trinity > Kate: Повернення зламаних сеансів із 14.0.

Основні WWW-ресурси, документація проєкту і підпроєктів

- доповнення сторінки бібліотеки промислових пристроїв описом нових шаблонів;
- доповнення сторінки бібліотеки низькорівневих сенсорів та чипів описом нових шаблонів;
- доповнення сторінки основної бібліотеки описом нових шаблонів;
- доповнення Як Створити модуль розділом "Створення нових Внутрішніх Елементів і Бібліотек із ними".

Нові та значно оновлені частини

- Ядро OpenSCADA: 3:14:0 => 3:15:0

  (Реалізація властивостей Об'єктів Контролю, Реалізація користувацького ACL до вузлів контролю, Реалізація ініціативних підключень, Розширення менеджменту проєктів, Переклад Повідомлень — виправлення концептуальних змін попередніх оновлень)

- Підсистеми "Транспорти" OpenSCADA: 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

  (Остаточне виправлення ефекту не входження повторно, уніфікація і заміщення вирішення адрес різними способами)

- Transport.Sockets: 4.8 => 5.1

  (Остаточне виправлення ефекту не входження повторно, уніфікація і заміщення вирішення адрес різними способами)

- Protocol.OPC_UA: 2.2 => 2.3

  (Правильна автентифікація із контролем доступу)

- 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

  (Розширення підтримкою прямого запису)

- 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
    (Додано вкладення файлів і попередній перегляд зображень)
  - 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

КОНЦЕПТУАЛЬНЕ > Реалізація властивостей Об'єктів Контролю

- Система: TCntrNode:
  - Додання об'єктних властивостей у групах за префіксами для різних частин OpenSCADA: система (sys), користувач (usr), підключення (con), безпека (sec), ... .
  - Додання Користувацької функції property() для доступу до об'єктних властивостей із контексту користувача на додачу до прямого-натурального шляху.
- Транспорти: Переведення параметрів підключення на об'єктні властивості у групі "con".
- Збір Даних: Переведення прапорців TValue resB1() і resB2() на об'єктні властивості у групі "DAQ", тобто видалення таких функцій.

КОНЦЕПТУАЛЬНЕ > Реалізація користувацького ACL до вузлів контролю

- Система:
  - TCntrNode:
    - нові функції nodeAccess(), nodeLoadACL(), nodeLoadACLSnthHgl();
    - переведення із статичного із деяким вдосконаленням і адаптацією до ACL із сумісністю прямих правил для функцій інтерфейсу керування: ctrMkNode(), ctrChkNode();
    - нове визначення-макрос інтерфейсу керування для ACL: ctrMkNode3() як посилання на ctrMkNode() із автоматичним аргументом переривання NULL, ctrChkNode2() і ctrChkNode3() як посилання на ctrChkNode();
    - ctrMkNode() перемкнено у режим без виключення за відсутності контейнерних вузлів, просто не створювати і повертати NULL.
  - TFld: cntrCmdMake() додано аргументом cntrO для зв'язування із Вузлом Контролю, і весь код адаптовано до цього.
  - TConfig: cntrCmdMake() і cntrCmdProc() додано аргументом cntrO для зв'язування із Вузлом Контролю, і весь код адаптовано до цього.
- Транспорти: TTransportS: cntrCmdPrm() додано аргументом cntrO для зв'язування із Вузлом Контролю, і весь код адаптовано до цього.
- Збір Даних: Адаптація до ACL у полях опису Об'єктів Контролеру і Параметру, DAQ-Шаблонах, JavaLikeCalc Функціях і більшості DAQ-Модулів. Типові власник-доступ для підсистеми Збір Даних встановлено у "root:DAQ"-0775.
- Protocol.OPC_UA: Використання ACL у перевірці доступу.

КОНЦЕПТУАЛЬНЕ > Концентрація різних OpenSCADA хостів на загальному сервері, як для ІнтернетРечей (IoT) на OpenSCADA, так і іншого

- LibsDB.OscadaLibs:
  - tmplib_base: Доповнено шаблоном "Контроль віддалених ініціативних підключень (initRemCntr)", із документуванням і повним перекладом українською.
  - Доповнено користувачем "RemCntr" із паролем "RemCntr" і у групі DAQ для використання у ініціативних віддалених підключеннях до серверу OpenSCADA.
  - Доповнено вимкненими транспортами "RemCntr" до Transport.Sockets і Transport.SSL, тобто якщо бажаєте надати дані вашої станції, ви просто вмикаєте один з них.
- ModelsDB/{AGLKS/oscada_AGLKS.xml,Boiler/oscada_Boiler.xml}: Видалення системних груп без користувачів, чим даючи можливість визначення груп у бібліотеках.
- FIX:Транспорти: TTransportOut доповнено функцією isFromInput() виявлення автоматично-створених об'єктів із вхідного транспорту. Зовнішні ініціативні підключення OpenSCADA хостів попереджено від зупинки.

КОНЦЕПТУАЛЬНЕ > Розширення менеджменту проєктів

- data/openscada-proj.in: Розширення командами snapshot, crash, cores із уніфікацією приготування звітів з аварійного завершення, також для обробки аварійного завершення від себе. Доповнення звітів з аварійного завершення викликом "info thread" і "info sharedlibrary".
  - Переопрацювання алгоритму обробки проєктів у Системній і Користувацькій теці, тобто виправлення створення теки проєкту у Системній директорії за наявності Системного конфігураційного файлу.
- Система: Увімкнено у опрацюванні сигналів SIGFPE і SIGSEGV із викликом openscada-proj crash {ProjID} для приготування звіту з аварійного завершення негайно для SIGFPE, SIGABRT і SIGSEGV.
  - Результат успішного повернення-виходу процесу примусово встановлено у EXIT_SUCCESS, а для відмови у EXIT_FAILURE.

КОНЦЕПТУАЛЬНЕ > Переклад Повідомлень (виправлення концептуальних змін попередніх оновлень)

- LibsDB.OscadaLibs: Автоматичне оновлення деяких перекладів.
- LibsDB.vcaBase.wlb_Main:
  - Доповнено динамічними повідомленнями із перекладом Українською для основних у DiskSMART і UPS, протягом представлення у "Властивості об'єкту (objProps)".
  - FIX:ElCadr,ImgLab: Атрибут "Параметр: шифр (prmShifr)", "Параметр: опис (prmDescr)" і "Параметр: команди (digComs)", "Параметр: статуси (digStts)" встановлено у тип "Рядок (переклад)".
  - anShow,anShow1: Доповнено перекладом динамічних повідомлень із атрибутів параметрів NAME і DESCR.
  - FIX:RootPgSo: Атрибут "Проц. програвання демо (demoPlayProc)" встановлено у тип "Текст (переклад)".
- SYS,DAQ,UI.VCAEngine: Реалізація вимкнення перекладу рядків конфігураційних полів, атрибутів Збору Даних, атрибутів Користувацького Інтерфейсу при зміні у динамічному виконанні:
  - SYS,DAQ,DB.{FireBird,MySQL,ODBC,PostgreSQL,SQLite}: доповнення уніфікованим методом {TCfg,TVal}::isTransl() перевірки перекладу елементу, і переведення на нього всюди;
  - TVal: доповнення прапорцем "mNoTransl" і функціями поводження із ним: noTransl(), setNoTransl(), TValue::setNoTransl();
  - UI.VCAEngine::Attr: доповнення прапорцем "NoTransl" і поводження із ним у isTransl();
  - переклад вимикається:
    - при запису за посиланням реалізації шаблонів у TPrmTempl::Impl::lnkOutput();
    - при виклику Користувацького API TVal::set();
    - UI.VCAEngine: при зміні атрибуту Віджету у контексті Сеансу для опрацьовуваних віджетів і при записі до атрибуту Збору Даних за посиланням.
  - Параметри Збору Даних додано відновленням перекладення динамічно зміненого поля при завантажені.
- FIX:SYS: TMess: Додання повідомлень до таблиці "Trs" увімкнено лише у рівні повідомлень "Налагодження" задля запобігання заповненню таблиці будь якими перекладеними повідомленнями і ні.
  - FIX: Запобігання відображенню Менеджеру Проєктів у ОДНОМОВНОМУ режимі.
  - TMess::translDyn() примусово встановлено у FALSE і цей прапорець встановлено у FALSE із перемиканням у ОДНОМОВНИЙ режим.
  - Конфігураційне поле встановлення локалі програми розширено його очищенням при встановлені порожнього значення.
  - Загальні функції перекладу translGet() і translSet() розширено використанням користувача "root" за відсутності контексту перекладу, тобто ви можете встановити типову мову режиму ДИНАМІЧНИЙ-БАГАТОМОВНИЙ простою зміною мови цього користувача.
- DB: fieldSQLSet() доповнено попередженням щодо повного очищення деяких повідомлень при збережені полів нединамічного встановлення, а копій. Доповнено реєстрацією нових повідомлень до перекладу із попередженням реєстрації і готовності до перекладу у Менеджері Перекладів після встановлення нових базових повідомлень до порожніх полів.
- FIX:DAQ.OPC_UA,Protocol.HTTP,UI.{QTCfg,Vision}: Виправлення і вдосконалення деяких оригінальних повідомлень.
- FIX:Збір Даних: Виправлення-завершення динамічного перекладу для заголовку об'єкту контролера і параметра.
  - FIX: Шаблони виправлено-адаптовано до динамічного перекладу у використанні назв ВВ.
  - FIX: Виправлення-завершення динамічного перекладу запиту значень у Керувальному Запиті TValue::"get:/serv/attr" для неархівних елементів.
  - FIX: messSet(),alarmSet() переписано до динамічного перекладі.
  - Шаблони параметрів дозволено до встановлення порожніх імен задля очищення їх перекладу у режимі динамічного перекладу.
  - LogicLev,ModBus,OPC_UA,Siemens: Доповнення перекладом конфігураційних полів "NAME" і "DESCR" під час завантаження контексту перекладі.
  - FIX:DAQGate: Дещо виправлено переклад Українською.
  - FIX:JavaLikeCalk: Дещо вдосконалено у перекладі.
- FIX:Protocol.OPC_UA: Адаптація до динамічного перекладу у запитах даних.
- FIX:UI.{QTCfg,Vision}: Повідомлення "Завантажити із БД" і "Зберегти до БД" перейменовано у "Завантажити" і "Зберегти", та із "сховище" замість "БД" у повних повідомленнях.
- FIX:UI.VCAEngine: Функція Користувацького API простору сеансу this.attr() виправлено у перевірці прапорця перекладу TFld::TransltText.
  - FIX: Шаблони виправлено-адаптовано до динамічного перекладу у використанні конфігураційного шаблону атрибутів.

OpenSCADA бібліотеки і проєкти

- FIX:LibsDB.OscadaLibs:
  - tmplib_DevLib: Доповнено шаблоном "Ergomera 125 (ergomera125)" із ініціюючою імплементацією власного протоколу і документуванням.
    - mbBase: Розширено підтримкою Вхідних Регістрів функцією 4.
    - FIX:VSE002: Переписано у режим послідовного читання пакетів, тобто виявлення усіх пакетів із зауваженням невідомих.
    - FIX:Incubator: Виправлення значення поля 'Транспорт (transport)'.
  - tmplib_LowDevLib: Доповнено шаблоном "BT: ATORCH S1BP (S1BP)" із документуванням і повним перекладом українською.
    - Доповнено шаблоном "1-Дріт (1W)" як поєднання 1W_DS9097 і 1W_DS9097U перед доданням I2C Драйверів і розширено параметром "Додавати лише при скануванні", із документуванням і повним перекладом українською. Додання підтримки I2C Драйверу DS2482-100 і деякі вдосконалення із виправленням.
    - UC96: Розширено підтримкою ATORCH UD24. Розширено читанням: "Вольти максимум (Vup)", "Вольти мінімум (Vdwn)", "Дата+, В (Dplus)", "Дата-, В (Dminus)".
  - FIX:tmplib_base.fileServerHTTP: Розширено передавання великих даних у шматках шляхом прямого запису функцією writeTo(). Для цього доповнено атрибутами: "Транспорт (tr)", "Протокол (prt)" і "Відправник (sender)".
  - FIX:flb_doc.diagram: Додано креслення неперіодичних прямих даних на кшталт місяці. Реалізація округлення великих інтервалів точок Кривими Кубічної Безіє.
- LibsDB.vcaBase:
  - wlb_Main:
    - grph_panel,doc_panel: Додання перевірки активності контрольованого тренду або документу, і закриття за його неактивності. Переведення у полі розміру-глибини на редагований комбобокс із чисельним номером і множником людським текстом, засновано на новій функції Користувацького API time2str() і str2time(), тобто видалення тут поля типу.
    - docRepDay,docRepMonth,docUsersSet,docRepInstVals,docDin,docRep2WorkSh,docAlarmsRep,docMessRep: Адаптація до відкриття панелі контролю документів після декількох секунд запуску-відкриття, тобто для надання контролю документом при відображені у QtWebengine.
    - grpGraph,grpCadr,doc_panel,grph_panel,prescrEdit,prescrRun,prescrRunSimple,accept,treeSelect,calendar,userManager,alarmsStReport,docRepDay,docRepMonth,docRepYear},wlb_prescr.{prescrEdit,prescrRun,prescrRunSimple: Змінну ev_cur перейменовано у evCur.
    - storeHouse: Розширено підтримкою включення файлів як до MySQL поля LONGTEXT, так і до FS. Додання попереднього перегляду завантажених зображень у формі і звіті елементу. Додання динамічної панелі керування до обраних елементів у таблиці для швидкого контролю і доступу до даних складних полів.
    - FIX:grpGraph10: Виправлено у атрибуті "geomZ" для включених віджетів "el9" і "el10".
    - FIX:RootPgSo: Покращено, встановленням виконання демо-процедури на паузу за відсутності запитів на WEB, чим запобігаючи відкриттю усіх сторінок до реального закриття. Прямий перелік сторінок доповнено перевіркою прав сторінок.
    - FIX:grpGraph: Виправлено у атрибуті "geomZ" для включених віджетів "trnd1" і "arh".
    - FIX:weather: Доповнення піктограмами представлення різних станів. Виправлено у гарантуванні отримання годинних даних при проблемах підключення.
    - treeSelect: Оновлення піктограми кадру із покращенням назви.
    - userManager: Переведення на команди Інтерфейсу Керування для роботи у резервованих системах.
  - wlb_doc.docRepYear: Переключення креслення прямих даних на діаграмі у неперіодичний режим.
- LibsDB.vcaTest.wlb_test.docTestGasNodeDayRep: Адаптація до відкриття панелі контролю документу при встановленні атрибуту "pgOpen" і не встановленому атрибуті "pgOpen" у панелі, оскільки документ архівний, тобто для надання контролю документом при відображені у QtWebengine.
- ModelsDB.AGLKS:
  - wlb_doc.{docRepMonth,docRepDay}: Встановлено до не опрацювання періодично.
  - wlb_test.docTestGasNodeDayRep: Встановлено до опрацювання із періодичністю 10 секунд.

API
!!!!:Зміни:

- Система: Тип змінних обмеження "limUserFile_SZ", "limUserIts_N" змінено у беззнакове.
  - TCntrNode: переведення зі статичного із перейменуванням деяких аргументів: ctrMkNode(), ctrChkNode(). Переведення ctrMkNode2() у визначення-макрос із автоматичним аргументом переривання NULL. Поєднання _ctrMkNode() до ctrMkNode(). Зміна прототипу функції objPropSet() у аргументі "val".
  - TVal: Переведення у константу для fld().
  - TFld: До cntrCmdMake() додано аргумент "cntrO" із перейменуванням деяких аргументів.
  - TConfig: До cntrCmdMake() і cntrCmdProc() додано аргумент "cntrO" із перейменуванням деяких аргументів.
  - TMess: Тип символу UTF у getUTF8() і setUTF8() змінено із int32_t на uint32_t.
- Безпека: Перейменування аргументу "access" функції TSecurity::access() у "perm", також для Користувацького API.
- Транспорти: До TTransportS::cntrCmdPrm() додано аргумент "cntrO".
- Збір Даних: Переведення прапорців TValue resB1() і resB2() до властивостей об'єкту у групі "DAQ", тобто видалення таких функцій.

Доповнення:

- Система: Доповнення функцією sysTmJmp(), як варіант sysTm().
  - Доповнення визначенням "DEF_HTaskPer".
  - TError: Нові помилки: Tr_ErrUnknown, Prt_Unknown, Prt_ErrCommon, Prt_ErrParams.
  - TCfg,TVal: Новий уніфікований метод isTransl().
  - TVal: Нові функції: noTransl(), setNoTransl().
  - TValue: Нова функція setNoTransl().
  - TCntrNode: Нові функції: nodeAccess(), nodeLoadACL(), nodeLoadACLSnthHgl(), nodeLoadACLSnthHgl(), nodeMessSnthHgl(), nodeDocSnthHgl(), property(), propertyClrGrp()'; і нові визначення: ctrMkNode3(), ctrChkNode2(), ctrChkNode3(). Додання функції Користувацького API property().
  - Доповнення параметром обмеження "limObjDscr_SZ" для конфігураційних полів опису (DESCR).
  - Додання функції str2time() із розбором людського часу від time2str(), яку також доповнено аргументом "inParts".
  - Додання нових функцій Користувацького API із представлення системних у просторі користувача: time2str(), cpct2str(), str2time().
  - XMLNodeObj: getElementsBy() і її варіант Користувацького API розширено аргументами "limit" і "from".
  - Mess: Додання глобальних функцій міток labTime(), labTimeSel().
- Транспорти: TTransportOut доповнено функцією isFromInput().

Система

- Складання:
  - configure.ac: Підняття версії бібліотеки ядра до 3:15:0 і версії програми до 0.9.8. Підняття версії модулів підсистеми "Транспорти" до 21.
  - acinclude.m4: Макрос autoconf AX_LIB_MYSQL додано використанням PKG_CONFIG за наявності конфігураційного файлу, для складання із MySQL у оточеннях крос-компіляції з бінарним mysql_config або mariadb_config. Видалення зайвих макросів: AX_LIB_SQLITE3, BNV_HAVE_QT. Деяке покращення макросу AX_LIB_POSTGRESQL.
  - data/{debian,debian_mod}: Додання "openscada-server.service" і "openscada-plc.service", також закоментованим записом "dh_installsystemd" у "rules", і що переключено до використання у Debian 12,11,10 і Ubuntu 24.04,22.04,20.04. Додання MySQL типову залежність "default-libmysqlclient-dev".
- FIX:Security,ModSchedul,DAQ.{Function,Templates,BFN,JavaLikeCalc,OPC_UA,Siemens},Archive.{.,FSArch},Protocol.{ModBus,OPC_UA,HTTP,UserProtocol},UI.VCAEngine: Додання властивостей до полів стовпчика-переліку елементів контролю Таблиці від Інтерфейсу Керування для роботи не лише від root-root.
- FIX:LibsDB.OscadaLibs.tmplib_base.fileServerHTTP,UI.WebVision: Уніфіковано обробку передачі даних у послідовності: діапазони медіа у заголовку, великі дані шматками, простий одинокий пакет для малих даних.
- Archive.{MessArchive,MessArchiver,ValArchive},DAQ: Переведення у полі розміру-глибини Інтерфейсу Керування на редагований комбобокс із чисельним номером і множником людським текстом, засновано на новій функції Користувацького API time2str() і str2time().
- .,DAQ.{BlockCalc,JavaLikeCalc},Protocol.{ModBus,OPC_UA,UserProtocol},UI.{VCAEngine,WebUser}: Доповнено параметром обмеження "limObjDscr_SZ" для конфігураційних полів опису (DESCR) із типовим значенням 1000 і діапазоном [300...1000000].
- DAQ.{LogicLev,ModBus,OPC_UA,Siemens},UI.{QTCfg,WebCfgD}: Реалізація замовлення значення часу оновлення конфігураційного інтерфейсу обчислювальних об'єктів, задля оновлення після опрацювання об'єкту.
- FIX:Transports,Protocols: Уніфікація генерації помилок у викликах messProtIO() і його варіанті Користувацького API messIO(XMLNodeObj req, string prt) згідно документації, тобто обов'язково із кодом помилки.
- Параметри командного рядка доповнено отриманням типового значення зі змінної оточення "OSCADA_{cmd}", що саме вмикається змінною оточення "OSCADA_CMD_EN".

Бази Даних

- FIX:SQLite: Код помилки SQLITE_CORRUPT додано до перепідключення файлу БД, оскільки ця помилка може виникати зі зміною структури файлу БД із зовнішнього джерела.

Збір Даних

- FIX: Виправлено виявлення віддалених архівів для тимчасово порожніх, тобто які не мають джерела.
- JavaLikeCalc: Реалізація оператору "var" щодо обробки правильної області видимості, тобто визначення нових змінних у функціях із оператором і використання глобальних без нього.
- DAQGate: Вдосконалення алгоритму виявлення архівів із наданням інформаційного поля з переліком архівованих атрибутів.
- FIX:ModBus: Виправлено повним опрацюванням рядків із кодуванням, тобто реєстрація усіх регістрів. Запит даних вдосконалено для TCP варіанту щодо очікування хвосту до першого пакету будь якого розміру, тобто не лише MBAP заголовку розміром у 7 байтів.

Архіви-Історія

- Архіви значень доповнено виявленням подвійних посилань і видаленням їх усіх.
- FSArch: Функцію розпакування архівів доповнено уніфікацією повідомлень про помилку і можливістю видалення помилкових архівів, наразі лише при перевірці архівних файлів значень.

Транспорти

- Елементи Логу ВВ доповнено розміром повного пакету (або агрегацією) і типовий час агрегації встановлено у 1 секунду. Використання змін "ReqTm", "ReqMode", "ToTmOut", "InBufSz", "ReqAnsw" переміщено у власний простір об'єкту транспорту.
- FIX:Sockets,SSL: Остаточне виправлення у ефекті невходження повторно із багатьма підключеннями.
  - TTransSock::getAddr() перейменовано у TTransSock::addrGet() і вирішення адрес переведено до нової функції TTransSock::addrResolve() із прямим вирішенням статичних адрес і динамічним вирішенням за допомогою gethostbyname(), також доповнено параметром "--getaddrinfo" для увімкнення його собі (типово увімкнено).
- FIX:SSL: Виправлено опрацювання відповідей вихідних транспортів для ініціативних підключень, особливо для відсутності відповіді.
  - Доповнено реалізацією TTransportIn::writeTo() із переведенням на карту у триманні структури SSockIn.
  - Вхідну частину транспортів переключено на використання уніфікованого TTransSock::addrResolve() для попереднього вирішення усіх динамічних адрес і передачі готових статичних до BIO_new_accept().

Транспортні Протоколи

- OPC_UA: Реалізація правильної автентифікації із перевіркою доступу до DAQ-Вузлів для користувача:
  - libOPC_UA: реалізація автентифікації через UA::Server::EP::sessActivate() і властивість "identTkn", із якої береться користувач у атрибуті "userAuthenticated" і він записується до "UA::Server::Sess::{user,idPolicyId}";
  - libOPC_UA: усі запити даних за reqData() доповнено у "req" атрибутом "sesTokId" із ідентифікатором сеансу і для доступу до користувача тут;
  - доповнення конфігураційним полем "Анонімний користувач" для представлення анонімної автентифікації.
- HTTP: Доповнено загальною функцією передавання будь якого методу до WEB-модулів — HTTP().

Інтерфейс Користувача

- FIX:Vision,WebVision: Реалізація округлення великих інтервалів точок Кривими Кубічної Безіє. Виправлення обчислення нижньої межі вертикальної шкали.
- VCAEngine,Vision,WebVision: Тип Зображення примітиву Медіа доповнено атрибутом "Зберігати співвідношення за вписування (keepAspect)".
- FIX:VCAEngine,Vision: Додання опції у вкладці "Стилі" проєкту із контролем запису до стилів у контексті виконання. І запис до стилів вимкнено на боці проєкту.
- FIX:WebVision: Запит даних ресурсів додано підтримкою шматків для великих даних і перетворення лише для малих зображень. Тип Збереження кнопок доповнено підтримкою діапазонів медіа зі збереженням даних у контексті WebVision для повторних спроб.
- WebUser: Переключено на загальну функію HTTP() перенесення із Protocol.HTTP. Доповнено опціональним атрибутом "Транспорт (tr)" процедур обробки і шаблонів, отриманий із об'єкту протоколу. Атрибут "Результат (rez)" дозволено у порожньому значені для запобігання надсилання будь якої відповіді, що передбачає прямий запис із TTransportIn::writeTo().
- QTCfg: Кнопки Назад і Вперед розширено меню прямого доступу елементів.
- FIX:Vision: Запобігання відмові повноекранного режиму за деяких умов XOrg, коли Qt-прапорець повного екрану випадково очищається, тобто прапорець було продубльовано всередині. Часто відтворюється із Qt6 на Debian 12.
- VCAEngine: Доповнення надсиланням неопрацьованих повідомлень до сторінки, яка відкрила вихідну сторінку.
- WebCfgD: Імплементація обрання групи вузлів з утриманням Control або Shift у дереві навігації та групових операцій щодо видалення і встановлення. Розширено виклик pageRefresh() інтеграцією часу затримки.

#### 7.2.1 Сервісні оновлення

- п'яте (5) від 06.01.2026.
- четверте (4) від 31.10.2025.
- трете (3) від 29.10.2025.
- друге (2) від 27.08.2025;
- перше (1) від 09.07.2025.

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

Це оновлення релізу 0.9 LTS виправляє біля 60 помилок та додає ДУЖЕ БАГАТО удосконалень із декількома значними-концептуальними, з якими цілком можна ознайомитися у протоколі змін оновлення.

Важливі дії користувача за оновленням

- DAQ.System: ІД автоматично генерованих параметрів DA змінено у: CPU - "CPU[{N}]", fs - "FS{MP}", hddstat - "DiskSt_{dev}", MEM - "MEM", netstat - "Net_{IF}", sensors - "Sensors", hddsmart - "DiskSMART", ups - "UPS", uptime - "UpTm_{U}".

  => вручну переприв'язти усі автоматично створені джерела, що змінилися, якщо використано Автоматичний режим створення

- FIX:UI.VCAEngine: Виключено підключення атрибуту "focus" будь якого вкладеного віджету до ВВ обчислення і доповнено обробкою виключень доступу до таких ВВ для відсутніх вкладених віджетів.

  => вручну замінити усі статичні використання атрибуту "focus", на кшталт if(alarms_focus) alUnSel = 10; у LibsDB.vcaBase.wlb_Main.alarmsSt, на код if(this.alarms.attr("focus")) alUnSel = 10;

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

- додання Debian 12 у якості бази дистрибутиву;
- переведення складання бази Debian 11,10,9 у оточення Debian 12;
- оновлення TDE до 14.1.1 і потім 14.1.2 із стабілізацію до рівня 14.0.13;
- опціональне запобігання системного лотку щодо відображення піктограм програм із відмінним WMID але однаковою назвою на кшталт BlueMan;
- запобігання значному наповненню "~/.xsession-errors" зневаджувальними повідомленнями на кшталт "[FIXME] UNCLASSIFIED DEVICE name: ...";
- відімкнення використання Карт Безпеки для автентифікації у діалозі блокування kdesktop, оскільки ним стало неможливо користуватися;
- HWLib: використання Проєктної Напруги у розрахунку АмперГодин із ВатГодин замість Поточної Напруги, для відповідності із інформацією про ємність, яку вказано на батареї; попереджено замерзанню у Менеджері Пристроїв;
- KRDC, KRFB: відновлення нормального функціювання із 14.0.13;
- KXKB-KLayouts: Виправлення регресій у втраті-очищені системних розкладок клавіатури;
- TDESVN: запобігання падінням при доступі до БД із KPart;
- Krusader: виправлення розпакування *.tar.xz і *.txz, чим завершення реалізації підтримки XZ;
- KMix: адаптація до динаміки мікшерів;
- KMilo: відновлення керування яскравістю після його зламу;
- QuickLauncher: наразі просто ігнорує порожні елементи, тож їх буде видалено після оновлення конфігурації;
- TDM: вимкнення автентифікації за Карткою Безпеки для запобігання зависанням при виході;
- KOrganizer: вдосконалення діалогу долучень щодо вказання лише файлу із найменуванням цього долучення з назви файлу та із включенням по замовченню; вдосконалення діалогу редагування категорій щодо сповіщення підлеглого діалогу обрання про зміну категорій;
- TDEPowerSave: запобігання скиданню відображених значень віджетів значень батарей, оскільки вони починають відображати порожню дошку і -1; закоментовано SLOT slotHelpContents() через його відсутність; запобігання появі помилкового діалогу неактивності для присипляння одразу після прокидання, який особливо часто з'являється при використанні ноутбуку від батареї;
- KPackage: оптимізація споживання пам'яті шляхом читання результату "apt-cache dumpavail" через тимчасовий файл а не через пам'ять, відтак споживання пам'яті на Debian 12 зменшено із ~900MB до ~450MB;
- TDEPrint: виправлення перекладу назв груп властивостей друку;
- переклад Українською для: knmap, knutclient, konversation, tdenetworkmanager.

Основні WWW-ресурси, документація проєкту і підпроєктів

- посібник "Швидкий старт" цілковито відревізовано та актуалізовано щодо останніх змін у LTS;
- доповнення сторінки бібліотеки промислових пристроїв описом нових шаблонів;
- доповнення сторінки бібліотеки низькорівневих сенсорів та чипів описом нових шаблонів;
- доповнення сторінки основної бібліотеки описом нових шаблонів;
- доповнення сторінки бібліотеки основних елементів інтерфейсу користувача описом нових віджетів;
- цілковита ревізія і актуалізація щодо останніх змін у LTS для сторінок модулів: DAQ.System, Transport.SSL;
- початок нового підпроєкту NETGEAR R6220 зі складання і адаптації OpenSCADA до MIPS.

Нові та значно оновлені частини

- Ядро OpenSCADA: 3:13:0 => 3:14:0

  (Уніфікація складання із адаптацією ..., Перегляд і уніфікація підсистеми Транспортів ..., Контроль великого споживанням пам'яті, Переклад Повідомлень — виправлення концептуальних змін попередніх оновлень)

- Підсистеми "Транспорти" OpenSCADA: 19 => 20

  (Перегляд і уніфікація підсистеми Транспортів ...)

- Підсистеми "Збір Даних" OpenSCADA: 14 => 15

  (Уніфікація концепції типів параметрів)

- DAQ.System: 2.4 => 3.3

  (Цілковитий перегляд і розширення щодо ...)

- 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

  (Розширення підтримкою ініціативних підключень, адаптація до OpenSSL 1.1 і більше)

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

  (Значне розширення і виправлення у реалізації зовнішніх підключень та більше)

- UI.QTCfg: 5.12 => 6.0

  (Уніфікація складання із адаптацією до Qt6, QtWebEngine, QtMultimediaEngine, ...)

- UI.QTStarter: 5.14 => 6.0

  (Уніфікація складання із адаптацією до Qt6, QtWebEngine, QtMultimediaEngine, ...)

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

  (Уніфікація складання із адаптацією до 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

КОНЦЕПТУАЛЬНЕ > Уніфікація складання із адаптацією до Debian 12, Qt6, QtWebEngine, QtMultimediaEngine, OpenSSL3, MIPS

- FIX: Завершено правильне складання із бібліотекою ядра лише статично:
  - configure.ac: конфігураційний параметр --enable-CoreLibStatic розширено визначенням AM_CONDITIONAL(CoreLibStatic) і змінною оточення LIB_MOD;
  - moduls/*/*/Makefile.am: доповнено параметром --tag=disable-shared і розширено використанням змінної оточення LIB_MOD;
  - src_call/Makefile.am: розширено специфічною обробкою AM_CONDITIONAL(CoreLibStatic) для статичного зв'язування бібліотеки ядра із усіма включеними модулями.
- configure.ac,acinclude.m4: Очищено від застарілих макросів у AutoConf 2.70:
  - AC_HELP_STRING перейменовано у AS_HELP_STRING;
  - AM_CONFIG_HEADER перейменовано у AC_CONFIG_HEADER;
  - AC_LIBTOOL_DLOPEN замінено на LT_INIT([dlopen]);
  - AX_PTHREAD замінено на AC_SEARCH_LIBS(pthread, [pthread_create])
  - закоментовано 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: Очищено від застарілих функцій у OpenSSL 1.1 (API 3.0):
  - acinclude.m4: функції тестування макросу AX_LIB_OpenSSL() і AX_LIB_OpenSSL_opt() на libcrypto замінено із MD5_Init() у BIO_new(); функції тестування макросу AX_LIB_OpenSSL() на libssl замінено із SSL_free() у SSL_new();
  - OPC_UA.libOPC_UA: UA::symmetricEncrypt() і UA::symmetricDecrypt() поєднано у UA::symmetricCrypt() і переключено на використання EVP_CipherInit() і EVP_CipherUpdate() замість AES_cbc_encrypt() для нових версій;
    - використання RSA_public_encrypt() переведено на EVP_PKEY_encrypt() і RSA_private_decrypt() переведено на EVP_PKEY_decrypt() для нових версій.
  - Transport.SSL,Special.FLibSYS: використання MD5() переведено на EVP_DigestInit_ex(), EVP_DigestUpdate(), EVP_DigestFinal_ex() для нових версій.
- configure.ac: При додані Qt6 його доповнено щодо Qt6Sensors, Qt6WebEngineWidgets, Qt6MultimediaWidgets.
  - Доповнено перевіркою Qt5WebEngineWidgets і Qt5MultimediaWidgets для підтримки у UI.Vision.
  - Доповнено перевіркою декларацій-функцій clock_nanosleep, pthread_rwlock_timedwrlock, newlocale для дуже простих оточень MIPS із UCLibC.
  - Параметри --disable-WebKit і --disable-Phonon перейменовано у --disable-QtWebEngine і --disable-QtMultimediaEngine відповідно.
  - Загальні зміни QtWebKit_{CFLAGS,LIBS} і phonon_{CFLAGS,LIBS} перейменовано у QtWebEngine_{CFLAGS,LIBS} і QtMultimediaEngine_{CFLAGS,LIBS} відповідно.
  - Покращено більшість відповідних повідомлень.
  - Доповнено перевіркою заголовку pthread.h.
- acinclude.m4: AutoConf макрос AX_LIB_Qt розширено підтримкою Qt6 та вдосконалено виявлення MOC і RCC для Qt5.
  - Покращено деякі повідомлення.
- data/{debian,debian_mod}/compat: Рівень збільшено до 7 для складання на сучасний дистрибутивах Debian по замовченню.
- data/{debian,debian_mod}/control: Доповнено варіантами залежностей qt6-base-dev, qt6-webengine-dev, qt6-multimedia-dev і qtwebengine5-dev, qtmultimedia5-dev. Доповнено варіантом залежності libsensors-dev до libsensors4-dev.
- ResRW::{resRequestW,resRequestR}(): Доповнено використанням версії за часом із визначенням HAVE_DECL_PTHREAD_RWLOCK_TIMEDWRLOCK.
- TSYS::atime2str(),SYS.strftime(): Доповнено використанням локалізованої дати із визначенням HAVE_DECL_NEWLOCALE.
- TSYS::{sysSleep,taskSleep}(): Доповнено використанням сну за годинником при визначені HAVE_DECL_CLOCK_NANOSLEEP.
- Інтерфейс Контролю основної сторінки доповнено прихованням вкладки "Переклади" і полів мови за відсутності багатонаціональності взагалі.
- TMess,TModule: Перевірку HAVE_LIBINTL_H замінено на "#if HAVE_LIBINTL_H", тобто перевіркою на 1.
- Transports.SSL: Адаптовано до нових функцій OpenSSL 1.1 (API 3.0) з поводженням із застарілими.
- UI.{QTStarter,QTCfg,Vision}: Адаптація до складання із Qt6, включно із адаптацією до Qt6WebEngine і Qt6Multimedia:
  - QLayout::{setMargin,margin}() замінено на QLayout::{setContentsMargins,getContentsMargins}();
  - QVariant(char*) замінено на QVariant(QString);
  - конструктор QMouseEvent замінено відповідною із глобальною позицією;
  - QRegExp замінено на TRegExp варіантом OpenSCADA для функцій заміни і тестування або прямої перевірки;
  - QComboBox сигнал activated(const QString&), currentIndexChanged(const QString&) замінено на activated(int), currentIndexChanged(int) відповідно;
  - QSignalMapper сигнал mapped(QWidget*) замінено на mappedObject(QObject*);
  - QPalette::Background замінено на QPalette::Window та Qt::MidButton на Qt::MiddleButton;
  - QFileDialog::setReadOnly() замінено на setOption();
  - QApplication::desktop() замінено на QScreen;
  - QAction::parentWidget() замінено на parent();
  - QVariant::type() перейменовано у typeId(), QMouseEvent::{pos,globalPos}() перейменовано у {position,globalPosition}(), QDateTime::{setTime_t,fromTime_t,toTime_t}() перейменовано у {setSecsSinceEpoch,fromSecsSinceEpoch,toSecsSinceEpoch}();
  - доповнено перейменуванням функцій для різних версій Qt за допомогою макро-визначень у різних файлах щодо: typeId() у type(), position() у pos(), globalPosition() у globalPos(), setSecsSinceEpoch() у setTime_t(), fromSecsSinceEpoch() у fromTime_t(), toSecsSinceEpoch() у toTime_t(), mappedObject() у mapped(), setSource() у setMedia(), setVolume() у audioOutput()->setVolume(), setMedia() у setSource(), state() у playbackState();
  - доповнено підтримкою QRegularExpression замість QRegExp у Qt6;
  - QMouseEvent властивість mouseBtHold розділено на дві QPointF: mouseBtHoldPos, mouseBtHoldPosG;
  - розділювач комбінацій клавіш "+" замінено "|", тобто "Qt::SHIFT|Qt::Key_F1";
  - подія QEvent::KeyRelease у застосуванні LineEdit замінено на QEvent::KeyPress;
  - QTStarter: загальну бібліотеку lib_qtgen доповнено функцією winFit() загального підлаштування специфічних вікон мобільних систем; доповнено атрибутом Qt::AA_ShareOpenGLContexts перед об'єктом додатку Qt для функціювання QtWebEngine на Qt6;
  - Vision: адаптація до Qt WebEngineWidgets замість WebKit та до Qt MultimediaWidgets замість Phonon, і примітив Документ розділено задля примусового використання QTextBrowser у режимі розробки. Відновлено появу нових елементів дій віджетів бібліотек шляхом розташування нових дій у Меню перед Панеллю Інструментів.

КОНЦЕПТУАЛЬНЕ > Перегляд і уніфікація підсистеми Транспортів у керуванні додатковими параметрами та розширення використання параметрів часу підключення щодо реєстрації конфігураційних параметрів зовнішніх джерел

- конфігураційне поле "A_PRMS" контейнеру додаткових параметрів переміщено із модулів до бібліотеки ядра;
- доповнено функціями TTransportS::{prm,cntrCmdPrm}(), {TTransportIn,TTransportOut}::prm() із загальною реалізацією додаткових параметрів;
- conPrm() розширено підтримкою конфігураційних параметрів зовнішніх джерел на кшталт протоколів і його розповсюджено на вхідну частину, так само для Користувацького API;
- conPrm() доповнено аргументом типового значення, яке використано у всіх транспортних модулях;
- clearConPrm() розширено очищенням одного параметру і лише із зовнішніх джерел;
- setConPrm() видалено після реалізації такої властивості у conPrm() та деякі модулі оновлено щодо цього: DAQ.AMRDevs, Protocol.SelfSystem;
- Protocol.SelfSystem є першим, який використовує наразі конфігураційні параметри у транспорті;
- вихідні транспорти доповнено посиланням на вхідний, який створив вихідний, і його використано для тримання тут конфігураційних параметрів зовнішніх джерел;
- всю конфігурацію асоційованих вихідних транспортів встановлено прихованою;
- контроль додаткових параметрів пересунуто до власної вкладки "Додаткове (aprm)" із функцією скидання їх значень;
- позначення зміни вхідних і вихідних транспортів встановлено лише за реальної зміни конфігураційних полів.

КОНЦЕПТУАЛЬНЕ > Контроль великого споживання пам'яті

- Система: TCntrNode::cntrCmd() у обробці первинних команд Інтерфейс Керування доповнено їх глобальним журналюванням задля контролю дій, що призвели до великого споживання пам'яті.
- FIX:Збір Даних: JavaLikeCalc: Операцію поєднання рядків доповнено перевіркою обмеження у limUserFile_SZ(10M).
  - System: Доповнено DA(Збором Даних) Процес у якості інтерфейсу до Linux процесів у контролі використання ними пам'яті.
- FIX:Архіви-Історія: Запити TVArchEl::getVals() і "TValue:get:/serv/attr" доповнено обмеженням запитаної глибини у limUserIts_N (1e6) елементів для запобігання великому споживанню пам'яті.
  - FIX: Запит Інтерфейсу Керування "TValue:get:/serv/attr" виправлено у обмежені обчислення функції getVals().
  - FIX:.,FSArch: Архівування значень доповнено обмеженням операцій запису у limUserIts_N (1e6) елементів для відстеження споживання усієї пам'яті у певних випадках.

КОНЦЕПТУАЛЬНЕ > Переклад Повідомлень (виправлення концептуальних змін попередніх оновлень)

- FIX:SYS,DB: TMess::translGet() виправлено у виявлені передзбережених системних повідомлень при встановлені порожніх повідомлень і функцію TMess::translGetU() виправлено у очищені сервісних нульових символів у нединамічних режимах перекладу.
  - Бази Даних: TTable::fieldSQLSet() адаптовано до очищення базового повідомлення і всіх перекладів при обнулені перекладу, для очищення редагованого повідомлення у динамічному режимі перекладу і не від базової мови.
- SYS,DB.{SQLite,MySQL,PostgreSQL,FireBird},Protocol.HTTP: Переважно адаптовано переклад повідомлень до кодів мов більше за 2 (два) символи.
- Protocol.HTTP,UI.{WebUser,WebVision}: Завершено адаптацію до динамічного перекладу ім'я станції із уніфікацією функції Користувацького API pgCreator() щодо використання мови із objFuncCall().
  - Protocol.HTTP: Шлях із TSYS::ico() використано для отримання перекладених піктограм.
- SYS,UI.{Vision,WebVision}: Функцію TSYS::atime2str() доповнено перекладом дати і вона використана у побудові шкали часу примітиву СВУ Діаграма.
- FIX:Бази Даних: Дозволено правильний запис змін користувача у Динамічному Режимі Перекладу на Небазовій Мові, шляхом ранньої перевірки щодо динамічних даних.
- FIX:Збір Даних: Завершено адаптацію DAQ-Шаблонів до перекладу значень строкового типу при їх редагуванні і використанні у вкладці Конфігурації Шаблону та виправлено-адаптовано до динамічного перекладу у використання назв ВВ.
  - FIX:DAQGate: Виправлено надсилання значень перекладуваних полів не у внутрішній структурі перекладу.
- Транспортні Протоколи: HTTP: Адаптовано до динамічного перекладу назви станції і опрацювання кодованих назв файлів зображень.
  - UserProtocol: Виправлено-адаптовано до динамічного перекладу назв ВВ.
- FIX:UI.VCAEngine: Шаблони виправлено-адаптовано до динамічного перекладу у використанні конфігураційного шаблону атрибутів.
- FIX:UI.WebUser: Виправлено переклад назви сторінки у індексі.
- FIX:UI.WebVision: Виправлено динамічний переклад ім'я користувача на сторінці індексу.

OpenSCADA бібліотеки і проєкти

- data/{oscada_plc.xml,oscada_server.xml,oscada_start.xml,ModelsDB/{AGLKS/oscada_AGLKS.xml,Boiler/oscada_Boiler.xml}}: Очищено опис вхідних транспортів та транспорти доповнено групами портів: 10002,10003,10004 для WEB і 10005,10006,10007 для 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}: Адаптовано до перейменування DAQ.System.AutoDA.CPULoad і DAQ.System.AutoDA.MemInfo у DAQ.System.AutoDA.CPU і DAQ.System.AutoDA.MEM.
- FIX:ModelsDB.AGLKS.St: Вхідні SSL транспорти встановлено групами портів 10042,10043,10044 для WEB і 10045,10046,10047 для CNTR.
  - FIX:WebUser.test: відновлено текст у значення до уніфікації перекладу.
  - DAQGate.test: Оновлено кеш параметрів.
  - LogLevPrm.gen: Усі об'єкти параметрів встановлено у 1 для "alDelay", для запобігання повідомленням порушень при виході.
  - Sockets.{testRelease,testRelease1,testRelease2}: вимкнено по замовченню.
- LibsDB.OscadaLibs:
  - tmplib_DevLib: Бібліотеку доповнено шаблонами із документуванням:
    - від ВПФ: Incubator, VSE002, "FF LE-03MB CT (FF_LE)", "Ergomera 625(ergomera625)";
    - від 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: Доповнено новим шаблоном для WebUser — "HTTP Файловий Сервер (fileServerHTTP)", із реалізацією HTTP Файлового Серверу у OpenSCADA, наразі лише читання ресурсів із підтримкою частковості; і нові шаблони "Погода (weather)", "Дисковий SMART (DiskSMART)".
    - digAlarm,manInUnif,anUnif,pidUnifImp,anUnifSt,pidUnif,codeState,SNMP,UPS: ВВ NAME встановлено у тип "Рядок (переклад)" і ВВ DESCR у тип "Текст (переклад)".
  - tmplib_LowDevLib: Доповнено шаблоном "BT: ATORCH UC96".
    - RDTech: Недублюючі команди встановлено до надсилання двічі задля стабільного застосування пристроєм, післякомандну затримку встановлено у 0.2 і переміщено на загал.
  - tmplib_base.ntf: Розширено можливістю визначення повідомлень для виключення зі сповіщення.
- LibsDB.vcaBase:
  - wlb_Main: Бібліотеку доповнено віджетом "Погода (weather)" із документуванням.
    - storeHouse: Розширено створенням форми редагування елементу у головному кадрі після приховання основної таблиці та решти.
      - FIX: Попереджено <EVAL> для <NULL> клітинок у звіті елементу.
      - FIX: Гарантовано заповнення діалогів звітів генерацією подій відкриття із процедури.
      - FIX: Виправлено раннє встановлення вертикальної позиції таблиці даних при зміні користувача.
      - Текстові поля звіту одного елементу очищено від лівого відступу для текстів.
      - Звіти доповнено опрацюванням посилань, як зовнішні виклики.
      - Розширено опрацюванням ІД (індексу) таким чином, як решта стандартних полів "NAME", "DSCR" — для контролю видимістю поля.
      - Додано скидання фільтрів при перезапуску сторінки або зміні користувача.
      - Звіт із повної таблиці доповнено обмеженням тексту клітинок у 30 символів, тобто як у таблиці редагування.
      - Звіт із елементу доповнено прихованням порожніх полів.
      - Доповнено оновленням контексту обрання елементів форми при зміні значення цього елементу.
    - grpGraph: Переписано процедуру для уніфікації роботи із різними елементами, тож для використання у всіх похідних кадрах на кшталт "grpGraph10".
    - grpGraph10: Переключено на спадкування від grpGraph.
    - FIX:alarmsSt: Виправлено доступ до змінної alarms_focus після видалення примусовості атрибуту "focus", що замінено на this.alarms.attr("focus").
    - tmplSO: Дещо очищено щодо елементів сторінки РезультуючіГрафіки.
    - ResultGraph: Атрибут "grpName" встановлено у тип "Рядок (переклад)".
    - ElViewGraph: Доповнено читанням типових-статичних властивостей для очищення до них.
  - wlb_doc:
    - FIX:docRepInstVals: Відновлено переклад значень заголовку та одиниці виміру і назви параметру.
    - FIX:docUsersSet: Доповнено також кодуванням полів значень, оскільки зараз тут можуть бути не лише цифри.
- LibsDB.vcaTest: Завершено із перейменуванням CPULoad у CPU і MemInfo у MEM.

API
!!!!:Зміни:

- Система: ico() доповнено аргументом отримання шляху файлу.
  - strLabEnum() доповнено аргументом "onlyDec" для нумерування однією цифрою.
  - Видалено sysClk(), clkCalc(), shrtCnt(), HZ().
  - TError: Видалено DB_TrRemoved.
  - TMess: labStorRemGenStor() перейменовано у labStorRem(), labStor() очищено від аргументів.
  - TElem: fldList() встановлено у постійну.
  - TFld: TFld(): Тип аргументів vals, nSel змінено із "const char *" у "const string&". Видалено selValS(), selValI(), selValR(), selValB(), selNm(), selVl2Nm(), selNm2VlS(), selNm2VlI(), selNm2VlR(), selNm2VlB().
  - TCfg,TVal: Видалено getSEL() і setSEL().
  - TCntrNode: isModify() встановлено у постійну, save() доповнено аргументом максимального рівня помилки.
- Збір Даних: TController::id() встановлено у постійну.
- Транспорти:
  - TTransportIn,TTransportOut: Перенесено до захищеної секції logLen(), setLogLen(), pushLogMess(). Видалено logItLim(), setLogItLim().
  - TTransportOut: conPrm() і setConPrm() поєднано у conPrm(), також для них у КористувацькомуAPI. clearConPrm() розширено аргументом визначення ідентифікатору або групи очищувальних параметрів.
  - TTransportIn::associateTrO(): розширено підтримкою різних стадій ATrStg_Create, ATrStg_Proc.

Доповнення:

- Система: Нове визначення DB_GEN "<gen>".
  - Додано sysClk(), setSysClk() для отримання частоти ЦП із DAQ.System.
  - Функцію sysTm() доповнено аргументами виявлення стрибків часу після засинання.
  - TMess: Нова функція labStorFromCode() імен специфічних сховищ.
  - TElem: Доповнено функцією contN() отримання лічильнику підключених контейнерів.
- Збір Даних: TVal: Доповнено функцією setTime() і новим прапорцем AttrFlg::NoSave для запобігання позначення модифікованим при зміні атрибуту.
  - TController: Доповнено tbl() для таблиць типів параметрів.
- Інтерфейс Користувача: Користувацьке API доповнено SYS.UI.mimeGet() для отримання типу MIME із назви файлу.
- Транспорти: Нове визначення STR_A_PRM "prms", STR_A_PRM_CFGP "CFG:".
  - TTransportS: Нові функції prm(), cntrCmdPrm() загального опрацювання параметрів транспортів.
  - TTransportIn: Доповнено функцією prm(), conPrm(), clearConPrm(). Доповнено функцією КористувацькогоAPI conPrm() і setConPrm() (для сумісності) і відповідно до таких у TTransportOut.

Система

- Складання:
  - configure.ac: Підняття версії бібліотеки ядра до 3:14:0 і версії програми до 0.9.7. Підняття версії модулів підсистеми "Збір Даних" до 15, "Транспорти" до 20.
  - Доповнено складанням для Debian 12 і Ubuntu 24.04 LTS.
- FIX:DB,Transports,DAQ.BFN,UI.VCAEngine: Адаптовано до перевірки вдалого результату TBDS::dataDel() для запобігання зависань на сховищах лише для читання із виправленням функції TTable::fieldSQLDel() щодо коректної перевірки успішності функції.
- .,DAQ.{DAQGate,DCON,DiamondBoards,ICP_DAS,LogicLev,ModBus,OPC_UA,Siemens,SoundCard,System},Protocol.{ModBus,OPC_UA},UI.VCAEngine: Значно спрощено у підтримці типів обрання, встановивши опціональним і з підтримкою динамічного перекладу. Дозволено також визначення лише переліку значень.
- .,Archive.DBArch,DAQ.{BFN,JavaLikeCalc,ModBus,OPC_UA},Protocol.UserProtocol,UI.{VCAEngine,Vision,WebUser}: Загальне сховище перейменовано із "*.*" у "<gen>":
  - із отриманням назв специфічних сховищ "Загальне Сховище" і "Конфігураційний Файл" всюди з нової функції TMess::labStorFromCode();
  - доповнено визначенням DB_GEN "<gen>", яке завжди використовується замість "*.*";
  - усі загальні поля на кшталт "БД Архіватору" перейменовано у "Сховище";
  - TMess::labStorRemGenStor() перейменовано у TMess::labStorRem() і доповнено інформацією про всі сховища об'єкту.
- .,DAQ.{BlockCalc,Comedi,DiamondBoards,FT3,Fastwel,ICP_DAS,SNMP},Protocol.{ModBus,UserProtocol},UI.{VCAEngine,Vision,WebCfg,WebCfgD,WebUser}: std::string::substr() замінено на std::string::find() у місцях зі статичним отриманням даних для порівняння, що прозоріше, безпечніше і переважно швидше для коротких рядків.
- .,UI.{VCAEngine,Vision}: Покращено сповіщення попереджень при збережені.
- TCntrNode::cntrCmd() у обробці первинних команд Інтерфейс Керування доповнено їх глобальним журналюванням.
- FIX:TCfg::setS() у варіанті із RqFlg доповнено блокуванням критичної секції при доступі до контейнеру TVariant і доповнено сповіщенням, лише на стадії даних та без повернення.

Збір Даних

- .,*: Переведено у джерелах Збору Даних на фіксовані назви таблиць різних типів параметрів і адаптовано до уніфікованої концепції типів параметрів, тобто конфігураційні поля наразі приховуються коли вони стандартні і їх заплановано до цілковитого видалення у v1.0.
- FIX: TValFunc::get{S,I,R,B}() доповнено кодом приведення об'єкту TVarObj із перетворенням EVAL/null.
- System: Цілковито переглянуто і розширено щодо:
  - розширення ЦП (CPU) DA інформацією ЦП і частотою із різних джерел, включаючи CPUFreq із контролем;
  - додання нового DA Живлення (Power) у якості інтерфейсу до Потужність Linux і DA Процес (Process) у якості інтерфейсу до Linux процесів;
  - Сенсори>DA доповнено підтримкою прямо доступних сенсорів "/sys/devices/virtual/thermal/*/temp" і /sys/devices/virtual/hwmon/*/temp*;
  - уніфікація викликів DA інтерфейсу DA::init(), DA::deInit(), DA::makeActiveDA() із переведенням більшості DA модулів на виклик уніфікованого коду і реалізацію для них лише уніфікованої функції dList();
  - інтерфейсний клас DA доповнено новими ознаками: isDynamic(), hasSubTypes();
  - додання режиму загального оновлення даних із Сервісного Циклу і Завдання DA Контролеру, новою функцією updGen();
  - ІД автоматично генерованих параметрів DA змінено у: CPU - "CPU[{N}]", fs - "FS{MP}", hddstat - "DiskSt_{dev}", MEM - "MEM", netstat - "Net_{IF}", sensors - "Sensors", hddsmart - "DiskSMART", ups - "UPS", uptime - "UpTm_{U}";
  - переключено у м'який режим автоматичного створення параметрів, тобто ви можете створити джерельні параметри автоматично, примусово зберегти необхідні, а потім перемкнути у ручний режим, чим запобігти продовженню сканування.
- FIX:DAQGate: Час запиту архіву збільшується на 1 (одну) мікросекунду для запобігання запиту зайвих значень і їх прямому перезапису у архівах.
  - Покращено роботу із віддаленим хостом без синхронізації часу:
    - значення можуть бути у майбутньому до години;
    - мітку часу віддаленого хосту всюди використано за присутності архіву, навіть у тегу "<vl>";
    - доповнено виявленням часу віддаленого хосту для його використання у якості мітки часу змінених значень.
- FIX:LogicLev: Значним чином покращено режим Віддзеркалення Параметру щодо:
  - динамічного створення і видалення атрибутів;
  - вимкнення за помилкового увімкнення на відсутньому параметрі джерела із видаленням усіх атрибутів;
  - обрання змінене на нередаговане;
  - вимірювання часу опрацювання.
- OPC_UA: Доповнено підтримкою асинхронного запису на кшталт DAQ.ModBus.
- AMRDevs: Адаптовано у частині Kontar до нової концепції асоційованих вихідних транспортів до вхідних.

Архіви-Історія

- FIX: Архіватори повідомлень попереджено від скидання позиції буферу останнього прочитаного повідомлення оскільки ми отримаємо дубльовані повідомлення із кожним оновленням підсистеми, що є частим за оновлення підключень архівів значень, і особливо за відсутності блокування ресурсу.
- FIX: Запит Інтерфейсу Керування "TValue:get:/serv/attr" виправлено у поширені на еквівалентні архіватори.

Транспорти

- Sockets,SSL: Доповнено підтримкою групи портів у вхідних транспортах, тобто підключення до першого вільного. Вхідні транспорти доповнено конфігураційним полем властивостей ініціативного підключення і асоційованих вихідних транспортів.
- SSL:
  - Розширено підтримкою ініціативних підключень:
    - SSL код підключення TSocketOut::{start,stop}() перенесено до статичних функцій TSocketOut::{connectSSL,disconnectSSL}() для використання у вхідному транспорті;
    - SSL код підключення TSocketIn::Task() перенесено до TSocketIn::{start,stop}();
    - видалено підтримку визначення у режимі SSL щодо алгоритмів і версій через видалення цього у бібліотеці OpenSSL і воно переважно не використовувалося, тож використано лише TLS_{client,server}_method() для нових бібліотек (> 1.1) і SSLv23_{client,server}_method() для старих.
  - FIX: TSocketOut::messIO() попереджено щодо зависань при нескінченому читанні BIO_read() після закриття сокету, шляхом перевірки errno на EAGAIN.
  - SSL-контекст перенесено до загального об'єкту модуля окремо для вхідної (ctxIn) і вихідної (ctxOut) частин і додана інформація по шифрах для:
    - загального об'єкту модуля за SSL_CTX_get_ciphers();
    - статусу вхідного-серверного транспорту за SSL_get_shared_ciphers(), SSL_get_client_ciphers() і SSL_get1_supported_ciphers() або SSL_get_ciphers();
    - статусу вихідного-клієнтського за SSL_get1_supported_ciphers() або SSL_get_ciphers().
  - Вхідний і вихідний транспорти доповнено контролем MSS та вхідні транспорти доповнено контролем системного вхідного буферу, обидва взято із Transport.Sockets.

Транспортні Протоколи

- FIX:SelfSystem: Значним чином переглянуто і виправлено під час реалізації зовнішніх підключень, доповнено перевіркою розміру заголовку. Виправлено подвійне пакування запиту вихідних транспортів за других спроб перепідключення або повторної автентифікації.

Інтерфейс Користувача

- VCAEngine,Vision,WebVision: Доповнено підтримкою вбудування даних до атрибутів, позначених ресурсом, первинно для атрибуту джерела примітиву Медіа.
- FIX:Vision: Адаптовано до отримання іменованого переліку сховищ.
- FIX:VCAEngine: Виключено підключення атрибуту "focus" будь якого вкладеного віджету до ВВ обчислення і доповнено обробкою виключень доступу до таких ВВ для відсутніх вкладених віджетів. FIX: Attr::setS() вдосконалено опрацювання критичної секції.
- FIX:WebVision: Доповнено реалізацією користувацьких полів у рядку статусу.

#### 7.3.1 Сервісні оновлення

- п'яте (5) від 01.02.2025.
- четверте (4) від 13.11.2024.
- третє (3) від 12.08.2024;
- друге (2) від 26.06.2024;
- перше (1) від 02.06.2024.

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

Це оновлення релізу 0.9 LTS виправляє біля 70 помилок та додає БАГАТО удосконалень із декількома значними-концептуальними, з якими цілком можна ознайомитися у протоколі змін оновлення.

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

- оновлення TDE до 14.0.13 і 14.1.0 — адаптація усіх латок-виправлень та лише для Debian 11;
- ініціююче додання Календарної Системи від Створення Світу за якою рік 2023 є 7531;
- виправлення KDesktop, Апаратного Менеджеру TDE, noatun, TDESVN, basket, KGpg, KPDF, вимкнення мініатюр до відео, відтак доповнення колекції дистрибутиву новими латаними пакетами "tdelibs-trinity", "tdebase-trinity", "tdegraphics-trinity", "tdesvn-trinity" та "basket-trinity";
- деяке вдосконалення та оновлення KCalc, holiday_ua, korganizer;
- завершення перекладу Українською для KDiff3 та showfoto;
- складання пакетів із власними латками для Debian 11,10,9,8,7 перед адаптацією випуску TDE 14.1.0;
- перемикання Debian 9 бази на архівний репозиторій, після його офіційного архівування;
- доповнення дистрибутивів Debian 11,10,9 пакетами RHVoice — Синтезатор мови із багатьма голосами для десятку мов;
- переклад сторінки підпроєкту Українською.

Основні WWW-ресурси, документація проєкту та підпроєктів

- цілковито переглянуто та перекладено Українською документ "Серверна та хостингова інфраструктура проєкту OpenSCADA";
- виправлення роботи Сайту у Web-оглядачах старих вбудованих пристроїв на кшталт Nokia N900, N9;
- відновлення Maemo 5 (Nokia N900) із перенесенням на Ланцюг-втулок CSSU-Thumb, заснований на GCC 4.7.2 від Linaro; та оновлення сторінки проєкту;
- цілковитий перегляд документу "API" у секції "Інтерфейс Управління та динамічне дерево об'єктів програми" та секцію "Сервісні команди-функції" перенесено туди як підсекцію, підсекцію "Сервісні команди-функції" цілком переписано і доповнено, та все це перекладено Українською;
- розпочато новий підпроєкт Відкритий Телефон — PinePhone;
- цілковитий перегляд та актуалізація "Як здійснити Створення модулю OpenSCADA";
- розпочато новий підпроєкт Графічне програмування ПЛК в OpenSCADA;
- скрипти складання проєкту Автоматичний Складальник OpenSCADA цілком переглянуто і уніфіковано із оновленням документації підпроєкту та її перекладом Українською.

Нові та значно оновлені частини

- Ядро OpenSCADA: 3:12:0 => 3:13:0

  (Оптимізація продуктивності інтерфейсу СВУ, Уніфікація асоційованих вихідних транспортів із вхідним ТА загального підключення вихідного транспорту, Переклад Повідомлень — виправлення концептуальних змін попереднього оновлення)

- Підсистеми "Транспорти" OpenSCADA: 18 => 19

  (Уніфікація асоційованих вихідних транспортів із вхідним ТА загального підключення вихідного транспорту)

- 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

  (Уніфікація асоційованих вихідних транспортів із вхідним ТА загального підключення вихідного транспорту)

- 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

  (Оптимізація продуктивності інтерфейсу СВУ)

- 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

КОНЦЕПТУАЛЬНЕ > Оптимізація продуктивності інтерфейсу СВУ

- FXI:UI.VCAEngine:
  - Адаптовано до опрацювання у дуже великих періодичностях та цілковитого вимкнення періодичного опрацювання:
    - виправлено отримання періоду із власника віджету сеансу;
    - доповнено встановленням періоду на стороні сеансу, функцією Користувацького API calcPer() віджету сеансу, розширено визначенням спеціальних значень періоду: PerVal_Sess(0), PerVal_Parent(-1), PerVal_UserMin(PerVal_Dis(-2)), PerVal_SessDef(-3);
    - "Період обчислення" перейменовано у "Періодичне опрацювання" та його визначено як загальний параметр, тобто перенесено до вкладки загальної конфігурації та додано до віджетів сторінок проєкту та дочірніх віджетів бібліотечного віджету;
    - об'єкт сеансу доповнено функцією Користувацького API period(), що повертає період сеансу;
    - період сеансу очищено у статусі віджету сеансу.
  - Зміна атрибуту "alarmSt" доповнена новою супровідною подією "ws_alarmChange".
- UI.Vision: Адаптовано до перейменування "Період обчислення" у "Періодичне опрацювання" та перенесення до вкладки головної конфігурації. Попереднє поле у вкладці "Опрацювання" встановлено приховуваним за відсутності у моделі СВУ.
- LibsDB.vcaBase,ModelsDB.{AGLKS.vca,Boiler.St}: Проєкти СВУ встановлено у період обчислення 250 мс. Обчислення групи контролю СВУ проєктів встановлено у 1000 мс.
- LibsDB.vcaBase:
  - wlb_Main.RootPgSo: Адаптовано до функціювання у дуже великій періодичності та вимкнення періодичного опрацювання взагалі:
    - доповнено продовженням негайних циклів до відкриття сторінки контейнеру при запуску та після навігації, використовуючи нову подію "usr_calc";
    - доповнено перемиканням на швидкий цикл за миготіння порушення, використовуючи нову функцію calcPer();
    - переключено на період опрацювання 1000 мс.
  - wlb_Main.ElCadr: Адаптовано до функціювання у дуже великій періодичності та вимкнення періодичного опрацювання взагалі:
    - доповнено продовженням негайних циклів використовуючи нову подію "usr_calc";
    - доповнено перемиканням на швидкий цикл за миготіння порушення, використовуючи нову функцію calcPer();
    - переключено на період опрацювання -1 (предок).
  - wlb_Main.{grpGraph,grpGraph10}: Адаптовано до функціювання у дуже великій періодичності та вимкнення періодичного опрацювання взагалі:
    - доповнено продовженням негайних циклів використовуючи нову подію "usr_calc";
    - переключено на період опрацювання -1 (предок);
    - період стеження примітиву Діаграма також прив'язано до періоду Віджету.
  - wlb_Main.ElViewCadr: Адаптовано до функціювання у дуже великій періодичності та вимкнення періодичного опрацювання взагалі:
    - доповнено перемиканням на швидкий цикл за миготіння курсору, використовуючи нову функцію calcPer();
    - переключено на період опрацювання -1 (предок);
    - tracing period of the Diagram primitive linked also to the Widget period.
  - wlb_Main.storeHouse: Адаптовано до функціювання у дуже великій періодичності та вимкнення періодичного опрацювання взагалі:
    - переключено на період опрацювання -2 (disabled);
    - доповнено продовженням негайних циклів використовуючи нову подію "usr_calc".
  - wlb_Main.ElViewGraph: Адаптовано до функціювання у дуже великій періодичності:
    - доповнено продовженням негайних циклів під час очікування появи значень, використовуючи нову подію "usr_calc";
    - доповнено перемиканням на швидкий цикл за миготіння курсору, використовуючи нову функцію calcPer();
    - обчислення встановлено у 2000 мс через необхідність оновлення цього за зміни курсору тренду.
  - wlb_Main.grph_panel: Доповнено збереженням періоду стеження пов'язаного примітиву Діаграма. Переключено на період опрацювання -1 (предок).
  - wlb_Main.{grpCadr,ResultGraphEl}: Адаптовано до функціювання у дуже великій періодичності та вимкнення періодичного опрацювання взагалі:
    - переключено на період опрацювання -1 (предок);
    - період стеження примітиву Діаграма також прив'язано до періоду Віджету.
  - wlb_Main.{TextLab,ImgLab},wlb_mnEls.{El_Kran_polozh,El_Kran_Sh,Compressor}: Адаптовано до функціювання у дуже великій періодичності та вимкнення періодичного опрацювання взагалі:
    - доповнено перемиканням на швидкий цикл за миготіння курсору, використовуючи нову функцію calcPer();
    - переключено на період опрацювання -1 (предок).
  - wlb_Main.{anShow,anShow1}: переключено на період опрацювання -1 (предок) та доповнено перемикання на швидкий цикл (500 мс) за фокусом та миготінням порушення.
  - wlb_doc.{docRepDay,docRepMonth}, wlb_Main.{graphSelPrm,doc_panel,accept,treeSelect,cntrPaspExt}, wlb_Main.{ViewCadr,ResultGraph}: Переключено на період опрацювання -1 (предок).
  - wlb_doc.{docDin,docAlarmsRep}: Переключено на період опрацювання -2 (вимкнено).
  - wlb_doc.docRepMonth: Виключено виконання при зупинці.
  - wlb_doc.docRepYear: Доповнено одним негайним циклом після f_start, використовуючи нову подію "usr_calc". Вимкнено періодичне опрацювання.
  - wlb_Main.userManager: Вимкнено періодичне опрацювання.

КОНЦЕПТУАЛЬНЕ > Уніфікація асоційованих вихідних транспортів із вхідним ТА загального підключення вихідного транспорту

- FIX: Уніфікація опрацювання асоційованих вихідних транспортів вхідного транспорту Sockets щодо:
  - Transport:
    - перейменування функції TTransportIn::assTrO() у TTransportIn::associateTrO() та розширення створенням нових транспортів на початку і подальшим видаленням зупинених, та щойно створені транспорти доповнено читанням ІД ініціювального підключення із реєстрацією у параметрі підключення "initConID";
    - нової функції TTransportIn::associateTr() та її варіанту Користувацького API SYS.Transport["Modul"]["in_Transp"].associateTr() із отримання об'єкту вихідного транспорту за його ІД Підключення;
    - доповнення асоційованих вихідних транспортів із вхідного видаленням за неактивності від TTransportIn::keepAliveTm();
    - нової функції Користувацького API SYS.Transport["Modul"]["in_Transp"].associateTrsList() як коректного варіанту назви до assTrsList();
    - доповнення об'єкту вихідного транспорту функціями Користувацького API conPrm() та setConPrm() із доступу до параметрів підключення;
    - зміни шаблону назви у "inA_ID_N" для асоційованих вихідних транспортів до вхідного;
    - FIX:Sockets: Вхідні транспорти виключено від зайвого закриття сокетів у ініціативному режимі. Перевірка обмеження нових ініціативних підключень переміщено до ділянки загальної перевірки обмежень.
  - LibsDB.OscadaLibs: tmplib_base.initConsAssignTrs: Перейменовано у initConAssociateTrs та адаптовано до використання функції conPrm("initConID") і associateTrsList().
- Загальне підключення вихідного транспорту:
  - Transport:
    - нової функції TTransportS::outAt() та її варіанту Користувацького API SYS.Transport.outAt() із загального отримання вихідного транспорту з уніфікованої адреси;
    - переведення TTransportS::extHost() на використання TTransportS::outAt();
  - Transport,UI.{QTCfg,WebCfgD}: Поле "Транспорт" таблиці зовнішніх хостів розширено визначенням адреси транспорту в уніфікованій-загальній формі та розширено специфічним до елементу вибором із підтримкою такої поведінки у загальних конфігураторах.
  - DAQ.ModBus: Перший, кого переведено на використання уніфікованого підключення до вихідного транспорту.
  - LibsDB.OscadaLibs: tmplib_DevLib.mbBase: Переключено на використання TTransportS::outAt().

КОНЦЕПТУАЛЬНЕ > Переклад Повідомлень (виправлення концептуальних змін попереднього оновлення)

- FIX:SYS:
  - FIX: Попереджено розповсюдженню стовпця базової мови таблиці перекладів "Tr" у режимі перекладу ОДИНИЧНИЙ та базовій мові.
  - FIX: EVal значення рядка "<EVAL>" додано до неперекладуваних для запобігання його перекладу у VCAEngine для NULL значень БД.
  - FIX: Функція перекладу статичних повідомлень вдосконалена у пропуску порожніх повідомлень для бінарних рядків лише із нульовими символами.
  - TFunction::operator=() завершено адаптацію до перекладу назв ВВ.
  - Запис до конфігурації у XML попереджено щодо дублювання поля перекладу для конфігураційних контекстів.
- FIX:БД:
  - FIX: Попереджено розповсюдженню стовпця базової мови у режимі перекладу ОДИНИЧНИЙ для вже перекладуваних БД, шляхом додання відмінного виявлення перекладуваних загалом БД та наявності стовпця перекладу.
  - FIX: Виправлено помилку синтаксису БД при очищені полів перекладу рівних базі.
  - FIX: Виправлено запис неперекладуваних рядків, очищенням всіх перекладів та запису у базу.
  - FIX: Попередження перериванню сервісу БД за наявності помилкової БД, закриттям транзакції.
  - FIX: Встановлення перекладу попереджено щодо встановлення дублювальних повідомлень до базових повідомлень; що завершує неперекладання "<EVAL>".
  - FIX: Відсутність прапорця TFld::TransltText визначається як цілковита відсутність перекладу цього поля.
- FIX: Менеджер Перекладу:
  - FIX: попереджено взагалі щодо зміни маркованої бази у читабельну форму, оскільки воно використовується як ключ;
  - сповіщення щодо виправлень переведено на передачу їх користувачу через розширені попередження Інтерфейсу Управління;
  - прапорець "chkAndFix" поділено на "chkAndFix" і "chkAndFixMB";
  - конфігураційні поля перекладу TrPassN, TrChkAndFix, TrChkAndFixMB переміщено до динамічних змінних оскільки відсутня необхідність їх зберігати;
  - позначку перекладу "<<<Незбіг джерел!!!>>>" перейменовано у "<<<КІЛЬКА ВАРІАНТІВ>>>".
- FIX:DAQ::ParamTmpl:
  - FIX: Виправлено щодо редагування назви ВВ у небазовому режимі динамічного перекладу.
  - FIX: Виправлено опрацювання прапорця IO::TransltText для рядків.
  - FIX: Сервісний запит "list:/DAQ/{MOD}/{CNTR}/prm_{PRM}[/prm_{PRM}]/%2fserv%2fattr" виправлено у перекладі назви атрибуту.
- FIX:Транспорти,UI.{QTCfg,Vision,WebCfgD}: Функцію TTransportS::extHostList() доповнено аргументом "lang" для отримання перекладеними назв віддалених хостів.
- FIX:Protocol.ModBus: Виправлено-адаптовано у динамічному перекладі назв ВВ.
- FIX:Користувацький Інтерфейс:
  - FIX:VCAEngine: Виправлено динамічний переклад tr() щодо втрати перекладу після очищення кешу перекладу та розміщення зайвих повідомлень до таблиці проєкту "Trs".
  - FIX:WebUser: Виправлено-адаптовано динамічного перекладу назв ВВ.

OpenSCADA бібліотеки та проєкти

- FIX:LibsDB.OscadaLibs:
  - Бібліотеку tmplib_LowDevLib доповнено шаблоном "BT: RDTech UM24C, UM25C та UM34C (RDTech)".
  - Бібліотеку tmplib_DevLib доповнено шаблоном "Прилади ТОВ СЛОТ (SLOT)".
- FIX:LibsDB.vcaBase:
  - wlb_Main.storeHouse: Значним чином розширено: реалізацією підтримки процедур для логічних стовпчиків; реалізацією звітності всієї видимої таблиці та обраного запису.
  - wlb_Main.RootPgSo: Метод "Сповіщення: тип 2 (МовленняТексту) (notify2)" розширено підтримкою RHVoice і доповнено вбудованим підсвітленням синтаксису для BASH. Метод "Сповіщення: тип 1 (Гудок) (notify1)" переписано щодо програвання тривалих зразків у фоні, тобто із контролем зупинки програвання семплу і перезапуску лише у цьому випадку. Також доповнено підсвітленням синтаксису.
  - FIX:wlb_doc.docRepDay: Дещо вдосконалено та доповнено щодо: групування стовпців у заголовку, прямого читання значень рядків, вимкнення кольорів у таблиці за EVAL шкали.
  - wlb_doc.docUsersSet: Додано конфігурацію "Категорії повідомлень (messCat)".

API
!!!!:Зміни:

- SYS,UI.{QTCfg,WebCfgD}: Код Запитів Управління TError::Core_CntrWarning розширено передаванням попереджувальних повідомлень у атрибуті "mtxt" зі збереженням основних даних.
- SYS:
  - Функції TSYS::id(), TSYS::name() і TSYS::user() встановлено постійними.
  - Визначення SEC_XT, SEC_WR, SEC_RD перенесено із файлу tsecurity.h до tcntrnode.h та також там використано.
  - ctrChkNode() очищено щодо аргументу "warn" через застарілість атрибуту "force".
  - Запит Інтерфейсу Управління "chlds:/{nPath}/%2fobj" доповнено не створенням порожніх тегів піктограм "ico".
  - NSTR_BUF_LEN(50) виокремлено у CFG_A_LEN (100) для використання у якості максимуму розміру атрибуту конфігураційної клітинки у XML.
  - Аргумент "init" видалено із setIcoDir(), setDocDir(), setLang() із перенесенням під загальний механізм очищення.
  - Доповнення перелічення MdfSYSFlds полями: MDF_Name, MDF_MESS, MDF_TR, MDF_DBG, MDF_RD.
  - Кодування TSYS::ShieldSimb функції TSYS::strEncode() перейменовано у TSYS::ShieldSymb, перенесено до функції TSYS::strDecode() і у TSYS::strEncode() доповнено загальним. Та функцію Користувацького API SYS.strDecode() доповнено методом декодування "ShieldSymb".
- БД: Запит Інтерфейсу Управління "call:/BD/{MOD}/{DB}/%2fserv%2fSQL" доповнено опрацюванням атрибуту "intoTrans" як EVAL за відсутності та очищенням тексту запиту у відповіді.
- DAQ::Value: Сервісний запит "get:/serv/attr" Інтерфейсу Управління попереджено від очищення підтегів "el" за відсутності репрезентативного атрибуту, їх значення встановлюється у EVAL для коректного позначення опрацьованими у DAQ.DAQGate та не продовжувати їх запит у кожному циклі.
- Архіви-Історія: Тип зв'язку архіву значень "Пасивний атрибут параметру (TVArchive::PassiveAttr)" перейменовано у "DAQ атрибут (TVArchive::DAQAttr)". Тип зв'язку архіву значень "Активний атрибут параметру" перейменовано у "Активний DAQ атрибут" із позначкою ЗАСТАРІЛЕ.
- Транспорти: Функцію TTransportIn::assTrO() перейменовано у TTransportIn::associateTrO(). Віртуальну функцію ознаки The TTransportOut::isNetwork() перенесено до об'єкту TTypeTransport зі зв'язуванням старої на нову, для позначення усього модуля як мережа.
- UI.VCAEngine: Запит Інтерфейсу Управління "get:/UI/VCAEngine/%2fserv%2fwlbBr" доповнено не створенням тегів порожніх піктограм "ico". Запит "connect:/serv/sess" доповнено атрибутом "onlyMy" для підключення лише до власних сеансів, а запит "get:/ses/ses" доповнено таким самим атрибутом для переліку лише власних.

Доповнення:

- SYS:
  - Нова функція TSYS::ico() отримання піктограми.
  - Назви стандартних дозволів доповнено _W_W_W(0222).
  - TError: розширено новими конструкторами із аргументами типу "const string &" для необмежених рядків і зручності.
  - TRegExp:
    - Доповнено новим параметром 'U' (нежадібне) із перемикання режиму жадібності, разом із методом Користувацького API "ungreedy".
    - Доповнено функцією mode(), аргументом "mode" у setPattern() і переліченням "Mode" із елементами: MD_8, MD_16, MD_32, MD_WCHAR, MD_SAVE.
    - Функцію search() об'єкту доповнено аргументом "length" із повернення розміру виміряного блоку.
  - XMLNode: Прапорці завантаження доповнено елементом відсутності прапорця LD_NO.
  - TMess: Доповнено загальною міткою labStdOutTrs() до формату адреси функції уніфікованого вихідного транспорту.
- DAQ:
  - Функцію зв'язування елементів DAQ розширено визначенням базового вузла у атрибуті "ndBase", щодо: ctrListPrmAttr(), daqAt(), prmAt(), attrAt().
  - Об'єкт TPrmTempl::Impl доповнено новою функцією archAttrs() із оновлення-архівування атрибутів ЛогічногоРівня.
- Архіви-Історія: Об'єкт архіву значень TVArchive доповнено декларацією перелічення ServReqDtMode для Інтерфейсу Управління "get:/Archive/va_{ARCH}/%2fserv%2fval".
- Транспорти:
  - Нова функція TTransportIn::associateTr() та її варіант Користувацького API SYS.Transport["Modul"]["in_Transp"].associateTr().
  - Нова функція TTransportS::outAt() та її варіант Користувацького API SYS.Transport.outAt().
  - Нова функція Користувацького API SYS.Transport["Modul"]["in_Transp"].associateTrsList() як варіант коректної назви до assTrsList().
  - Об'єкт вихідного транспорту доповнено функціями Користувацького API conPrm() і setConPrm() доступу параметрів підключення.
  - Функцію TTransportS::extHostList() доповнено аргументом "lang" для отримання перекладеними назв віддалених хостів.
  - Префікси "in_" і "out_" винесено у визначення STR_IN_PREF і STR_OUT_PREF відповідно.
  - Об'єкт TTransportS object доповнено переліченням LogType із елементами: LTP_BinaryText, LTP_Binary, LTP_Text.
- UI.VCAEngine:
  - Доповнено встановленням періоду на стороні сеансу, функцією Користувацького API calcPer() віджету сеансу, розширено визначенням спеціальних значень періоду: PerVal_Sess(0), PerVal_Parent(-1), PerVal_UserMin(PerVal_Dis(-2)), PerVal_SessDef(-3);
  - Об'єкт сеансу доповнено функцією Користувацького API period(), що повертає період сеансу.
  - Зміна атрибуту "alarmSt" доповнена новою супровідною подією "ws_alarmChange".

Система

- FIX:Складання:
  - FIX:configure.ac: Версію бібліотеки ядра збільшено до 3:13:0 та версію програми збільшено до 0.9.6. Модульну версію підсистеми "Транспорти" збільшено до 19.
  - FIX:Debian: Покращення та виправлення підпису DEB-пакетів усіх репозиторіїв.
- *: Більшість close(), iconv_close(), dlclose(), pclose() функцій доповнено перевіркою результату та попередженням про проблеми.
- *: Усі системні (SYS) конфігураційні параметри адаптовано для коректного утримання типових значень.
- .,DAQ.JavaLikeCalc: Додано отримання допомоги від другого рядка у Інтерфейсі Управління для: опису полів елементів (TFld) із DAQ-значеннями; назв ВВ функцій (TFunction) із побудовувачем зв'язків та атрибутів Логічного Рівня DAQ.
- FIX: Переписано функцію TCntrNode::nodeAt() для запобігання виклику віртуальної chldAt() під блокуванням mChM, чим попереджаючи деяким мертвим блокування у віртуальних визначеннях chldAt().
- Переглянуто усі шаблони у теках =Tmpl=.
- FIX: Вкладку "Станція", головної сторінки Інтерфейсу Управління OpenSCADA, доповнено інформацією системного часу та загалом реструктуровано.
- FIX:data/openscada-proj.in:
  - Розширено новою змінною оточення OSCD_TAR_Args із визначення додаткових аргументів tar на кшталт --exclude та її типово встановлено у значення "--exclude=lock --exclude=ARCHIVES".
  - FIX: Виправлено опис та використання змінних оточень OSCD_TAR_ComprPrg і OSCD_BackLim.
- У процесі уніфікації отримання загальної піктограми проєкту за назвою та ІД здійснено:
  - для отримання піктограми також використано Назву Базовою Мовою, тож наразі перевіряється: Перекладена Назва, Назва Базовою Мовою, ІД;
  - механізм отримання піктограми переведено на нову окрему функцію TSYS::ico().
- TRegExp: Доповнено підтримкою режимів 16 і 32 від бібліотек pcre16 і pcre32 відповідно та наразі лише для функції search().

Бази Даних

- FIX:.,PostgreSQL: Дещо пом'якшено опрацювання порожнечі таблиці протягом проблем у DB.PostgreSQL щодо цього, тобто виключення наразі не генеруються.
  - FIX:PostgreSQL: Перемкнено на стандартний спосіб виявлення відсутніх таблиць із їх створенням за "toCreate" та генерації виключення інакше, чим попереджаючи повідомленню "Таблиця порожня.".

Збір Даних

- Зв'язування Логічного Рівня доповнено формою представлення адреси через шлях із префіксом "prm:/node/node", тож підтримкою відносної адресації за "." і "..":
  - функції зв'язування DAQ елементу розширено визначенням базового вузла у атрибуті "ndBase", для: ctrListPrmAttr(), daqAt(), prmAt(), attrAt();
  - об'єкт TPrmTempl::Impl із реалізації DAQ-шаблону Логічного Рівня розширено підтримкою нового зв'язування.
- FIX: Встановлення зв'язків Логічного Рівня попереджено щодо очищення усього рядка після пробілу, за постійних зв'язком "val:".
- ModBus: Доповнено параметром "e" для перемикання послідовності байтів регістру у LE (молодший перший) загалом та BE (старший перший) для рядків. Розширення рядка регістрів доповнено кодуванням для вхідного перекодування. Доповнено параметром "Пропуск циклів для читання назад записаного" для контролю такої властивості окремого від асинхронного запису.
- FIX:DAQGate:
  - FIX: Категорії повідомлень у catsPat(), із отримання повідомлень джерела даних Об'єкту Контролера, переключено на генерацію власних деталізованих правил регулярних виразів із визначених віддалених контролерів — для запобігання отриманню надлишкових повідомлень.
  - FIX: Вдосконалено-виправлено формування статусу Порушення Контролеру для декількох станцій, коли ПОРУШЕННЯ це за відсутності підключення з усіма станціями.
  - Функцію sync() об'єкту контролера цілком переписано у секції "Видалення відсутніх віддалено параметрів" щодо:
    - опрацювання станцій надання параметрів: цілковите видалення відсутніх станцій та параметрів без станцій;
    - видалення вимкнених параметрів та логічних контейнерів за прапорцем "Дозволяти автоматичне видалення параметрів та атрибутів".
  - Функцію TMdContr::messSet() з встановлення повідомлень пов'язаних зі Збором Даних адаптовано до підтримки атрибутів у адресі параметрів для значущих атрибутів загальних-контейнерних параметрів, що необхідно для передавання повідомлень із верхніх станцій до нижніх.
- JavaLikeCalc: Розширення-завершення реалізації циклів об'єктів "for({var} in {obj}) {тіло циклу}" можливістю вказання Об'єкту <obj> як включеного через властивості або із результату. Постійні значення доповнено "null", як синонім до EVAL (EVAL_REAL).
- OPC_UA: Завершено підтримку запису через специфічні прапорці режиму Стандартний і отримання типу із ВВ для Логічного режиму.

Архіви-Історія

- .,DAQ.{LogicLev,ModBus,OPC_UA}: Завершено уніфікацію архівування джерел Логічного Рівня із використанням лише прямого-пасивного архівування:
  - об'єкт TPrmTempl::Impl доповнено новою функцією archAttrs() із оновлення-архівування атрибутів ЛогічногоРівня;
  - тип зв'язку архіву значень "Пасивний атрибут параметру (TVArchive::PassiveAttr)" перейменовано у "DAQ атрибут (TVArchive::DAQAttr)";
  - тип зв'язку архіву значень "Активний атрибут параметру" перейменовано у "Активний DAQ атрибут" із позначкою ЗАСТАРІЛЕ.
- Вкладку "Повідомлення" доповнено функцією автоматичного очищення Таблиці Активних Порушень від старих Порушень на визначену глибину днів.
- FIX:FSArch:
  - FIX: Попереджено доступ до files[iA] у ModVArchEl::setValsProc() поза блокування, використовуючи перемикання на читання.
  - FIX: Попереджено доступ до "files" у ModMArch::checkArchivator() поза блокування.
  - FIX: Блокування доступу до файлів цілковито переглянуто, включаючи пакування/розпакування, створення нових файлів, видалення старих у просторі блокуванням на Запис включно із перевіркою умов. Також видалено переблокування у циклах та індексах.

Транспорти

- FIX: Вихідні транспорти доповнено примусовою зупинкою за вимкнення-відключення системного об'єкту, не у деструкторі, що вже пізно та тут можуть втрачатися тримачі сокетів.
- Лог ВВ транспортів доповнено режимами "Бінарний і Текст", "Бінарний", "Текст", та його записом до файлу за вказанням розміру протоколу -1 для дуже великих.
- FIX:Sockets: Виправлено опрацювання нецілковитого запису у Вхідній частині, коли повідомлення обрізається по розміру буферу передавача TCP. Розмір вхідного буферу Вхідної частини прив'язано до контролю розміру буферу апаратного приймача, а внутрішній просто заморожено на розмірі буферу від стандартного рядка оскільки воно не критичне та не вимагає контролю.

Транспортні Протоколи

- FIX:SelfSystem: Значним чином переглянуто та виправлено реалізацію зовнішніх-вихідних підключень, доповнено перевіркою обмеження розміру заголовка.
- ModBus: Доповнено параметром "e" для перемикання послідовності байтів регістру у LE (молодший перший) загалом та BE (старший перший) для рядків.
- HTTP: Доповнено HTTP Атрибутами вимкнення кешу WEB-Браузеру взагалі: "Cache-Control: no-cache, no-store, must-revalidate", "Pragma: no-cache", "Expires: 0".
- UserProtocol: Вхідну частину розширено можливістю планування виклику користувацьких процедур у сервісному циклі, для фонового опрацювання деяких даних; також тут додано атрибут Об'єкту "Цей (this)".

Інтерфейс Користувача

- QTStarter,QTCfg,Vision: Загальне підсвічування синтаксису у SnthHgl::rule() переключено на основне використання PCRE у TRegExp, оскільки він ВП'ЯТЕРО ШВИДШИЙ і значно багатший порівняно із QRegExp; та QRegExp залишено для автоматичного увімкнення за відсутності бібліотек PCRE 32/16. Загальну бібліотеку Qt (lib_qtgen) доповнено статичними-зовнішніми функціями getFont() і getColor() із UI.Vision та об'єктом SnthHgl із UI.Vision і UI.QTCfg.
- QTCfg,WebCfgD: Уніфіковано у сповіщені помилок Інтерфейсу Управління протягом вдосконалення коду TError::Core_CntrWarning і QMessageBox доповнено детальним текстом за повідомлень довше за 255.
- QTStarter: Доповнено контролем сеансів дисплею, тобто відновленням сеансів.
- QTCfg: Доповнено реалізацією Улюблених сторінок. Елемент зображення доповнено функцією цілковитого очищення зображення.
- FIX:Vision:
  - FIX: Усі контрольні "<info>" запити доповнено перевіркою наявності дочірніх вузлів для запобігання падінням у деяких випадках.
  - Доповнено можливістю виклику інтерфейсів віддалених станцій шляхом обрання віддаленої станції у діалозі, щодо чого розширено діалог обрання користувача.
  - Текстові області із підсвіченням синтаксису доповнено вбудованим варіантом.
  - Елементи зображень (піктограми) діалогів елементів доповнено кнопкою меню із функціями: Зберегти, Завантажити, Очистити.
  - Таблицю редагування Атрибутів Віджету доповнено багаторядковим редагуванням стовпця "Назва" та завантаженням контекстної допомоги для цього.
  - Вигулькне меню проєкту, сторінок проєкту, бібліотек віджету та віджетів бібліотеки щодо додання віджетів із бібліотек позбавлено обмеження у 20 елементів через перенесення усіх їх до нового окремого пункту меню "... із Бібліотеки".
- FIX:VCAEngine:
  - Піктограми проєктів та бібліотек віджетів переключено на завантаження загальної піктограми проєкту за відсутності локальної.
  - Бібліотеки віджетів адаптовано до міжхостового копіювання.
  - FIX: Генерацію примітиву Документ доповнено обмеженням розміру повторних блоків у limUserFile_SZ (10MB).
  - FIX: Відкориговано поводження зі сторінками проєктів та віджетами бібліотек із початково помилковою адресою предка, щодо не видалення дочірніх віджетів та зміни їх предка із вказанням коректної адреси.
- FIX:WebVision:
  - Доповнено реалізацією експорту "Документ - HTML,CSV" і "Таблиця CSV".
  - Доповнено реалізацією друку "Документ" і "Основна Сторінка".
  - Тип Таблиця примітиву FormEl додано відриванням заголовку таблиці за гортання великих таблиць додолу.
  - FIX: Тип Таблиця примітиву FormEl вдосконалено та виправлено щодо:
    - встановлення CSS властивості "white-space" у "pre-wrap";
    - встановлення змін кольору під обраними клітинками;
    - запобігання втраті фокусу одразу після входження у редагування клітинки;
    - виправлення встановлення значення логічного за входження у редагування клітинки;
    - перелаштування таблиці за зростання довжини таблиці.
  - Встановлення закриття включених сторінок після декількох появ рядка (4) — для запобігання закриттю всіх сторінок за швидкої навігації;
  - Вдосконалено опрацювання підключень звичайних користувачів до власних сеансів СВУ.
- WebUser: Розширено щодо можливості планувати виклику користувацьких процедур у сервісному циклі, для фонової обробки деяких даних.

#### 7.4.1 Сервісні оновлення

- четверте (4) від 20.12.2023.
- третє (3) від 13.09.2023.
- друге (2) від 12.08.2023.
- перше (1) від 25.06.2023.

### 7.5 [22.12.7529/22.02.2022] П'ЯТЕ оновлення

Це оновлення релізу 0.9 LTS виправляє біля 50 помилок та додає БАГАТО удосконалень із декількома значними-концептуальними, з якими цілком можна ознайомитися у протоколі змін оновлення.

Важливі дії розробника модулів OpenSCADA за оновленням

- FIX:SYS.TMess: Тип labStor(), labSecCRON(), labSecCRONsel(), labTaskPrior(), labMessCat() змінено у "string".

  => обов'язково переглянути використання функцій міток, оскільки компілятор може не повідомляти про помилки у функціях на кшталт printf(), TSYS::strMess(), але цей модуль буде аварійно завершуватися.

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

- додання Debian 11 у якості бази дистрибутиву;
- перенесення складання Debian 10,9 основи у оточення Debian 11, відтак розширення варіантів встановлювача;
- оновлення TDE до 14.0.11 та наступного 14.0.12;
- виправлення проблем із plymouth, відтак встановлення наразі безпечні та "/var/boot.log" не зростає;
- виправлення Digikam, TDEPim, KArm та kdiff3, відтак доповнення колекції дистрибутиву новими латаними пакетами "tdepim-trinity", "digikam-trinity" та kdiff3-trinity.

Основні WWW-ресурси проєкту — Сайт

- значні зміни у загальному інтерфейсі Сайту:
  - виклик Wiki-сторінок у IFRAME доповнено екраном очікування та анімованим зображенням репрезентації очікування завантаження; вертикальний розмір відкриваних сторінок було також точно підлаштовано у три спроби;
  - горизонтальний розмір вікна вмісту обмежено 1000 пікселями;
  - переміщено вертикальне підменю основного меню зі статичної позиції ліворуч до виклику кнопкою опцій ліворуч від головного меню;
  - переміщення нагору праворуч щодо сервісної панелі із кнопками обрання мови, виклику варіанту для друку та поля панелі пошуку Google;
  - зображення логотипу нагорі поділено навпіл;
  - поле пошуку Google: розширено у ширини, переміщено нагору та приховано за іконкою пошуку.
- зміна умов реєстрації та правил сайту OpenSCADA;
- модуль реєстрації завершено у перекладі Українською та увімкнено підтвердження адміністратором сайту щодо реєстрації нових користувачів.

Нові та значно оновлені частини

- Ядро OpenSCADA: 3:11:0 => 3:12:0

  (Загальна Концепція Зберігання Даних, Переклад Повідомлень, Підрівні Повідомлень {Main}[0...9] та Уніфікація Передачі Повідомлень Користувача)

- Підсистеми "БД", "Збір Даних" OpenSCADA: 14 => 15, 13 => 14

  (Значна Уніфікація Загального SQL-коду у Ядрі OpenSCADA)

- DAQ.DAQGate: 2.5 => 2.9

  (резервування та транспортування повідомлень, імплементація асинхронного режиму запису)

- 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

  (вказання сертифікатів та ключа безпосередньо із зовнішнього файлу із перезапуском вхідних транспортів за його зміни)

- 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

  (завершення реалізації отримання змін у режимі виконання за циклами тактування)

- UI.Vision: 7.14 => 8.0

  (раннє відкриття відновлених та визначених сторінок у процедурі ініціалізації)

- 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

КОНЦЕПТУАЛЬНЕ > Загальна Концепція Зберігання Даних

- Концепцію загалом уніфіковано специфікацією прямого сховку та визначенням Загального Сховку "*.*", як комбінація Конфігураційного Файлу та робочої Бази Даних, коли Конфігураційний Файл є пріоритетним у доступі до наявних даних, а База Даних для нових даних;
- TBDS::{dataSeek,dataGet,dataSet,dataDel,genDBGet,genDBSet}() переведено на бітові прапорці TBDS::ReqGenFlg;
- the TBDS::dbList() переведено на бітові прапорці TBDS::DBLsFlg;
- TCntrNode доповнено функціями storage() та setStorage() для відстеження наявності даних вузла у різних сховках і надання черги сховків для механізму послідовного видалення дублікатів, а також їх використання у функціях об'єкту DB(), fullDB(), setDB();
- об'єкти адаптовано до відстеження багатьох сховків та доповнено послідовним видаленням дублікатів: 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};
- функції доступу до загальних параметрів TBDS::genDBGet() та TBDS::genPrmSet() переведено під нову концепцію сховків через використання TBDS::dataGet() та TBDS::dataSet() відповідно, та перейменовано всюди у genPrmGet() та genPrmSet();
- на використання нової функції dataDelTbl() переведено об'єкти: DAQ.{TController,TPrmTmplLib,JavaLikeCalc,LogicLev,BlockCalc,ModBus,Siemens,OPC_UA}, Archive.DBArch, UI.{VCAEngine,Vision}.{WdgLib,Proj};
- переведено на статичні та всюди використано функції: TBDS::{dbList,dataSeek,dataGet,dataSet,dataDel,dataDelTbl}();
- надлишкові адреси сховків із таблицями скорочено до стандартних адрес сховку із уніфікацією назви таблиці, де попередні нестандартні назви залишено для редагування до релізу 1.0, для об'єктів: SYS, DAQ.{TemplateLib,JavaLikeCalc.Lib}, UI.{VCAEngine,Vision}.{WdgLib,Proj};
- перемкнуто до обрання лише БД: Archive.DBArch, Protocol.HTTP;
- кореневий об'єкт підсистеми БД TTypeBD доповнено основою пріоритету БД [0...9] у загальному переліку сховків та об'єкт Бази Даних TBD доповнено конфігураційним полем "Пріоритет у переліку" для контролю порядку баз даних із TBDS::dbList(), чим контролюючи порядок завантаження;
- зміну конфігураційного поля "Робоча БД" вимкнено щодо позначення всіх вузлів до модифікації;

КОНФІГУРАЦІЙНИЙ ФАЙЛ

- реалізація конфігураційних параметрів та таблиць у загальному контексті функцій TBDS::data{Seek,Get,Set}();

ПЕРЕРОБЛЕННЯ ПРАПОРЦІВ TCntrNode

- TCntrNode::{chldDel,nodeDis}() переведено на пряме використання TCntrNode::EnDisFlag;
- прапорці TCntrNode::{NodeRemove,NodeRemoveOnlyStor} всюди використано для перевірки у функції postDisable() та виклику chldDel().

КОНЦЕПТУАЛЬНЕ > Значна Уніфікація Загального SQL-коду у Ядрі OpenSCADA

- уніфікація контролю структури таблиці елементом об'єкту структури TTable::TStrIt;
- перероблення, початково у SQLite, формування переліків запиту окремими змінними переліку;
- переміщення SQL-коду до функцій: fieldSQLSeek(), fieldSQLGet(), fieldSQLSet(), fieldSQLDel();
- декларація у ядрі щодо сервісних визначень, методів та функцій до загального SQL-коду: SEEK_PRELOAD_LIM, tblStrct, seekSess, connRes, fieldFix(), getSQLVal(), setSQLVal();
- fieldFix() доповнено аргументом "langLs" визначення потрібних мов замість аргументу "trPresent";
- розповсюдження таким чином останнього коду підтримки БАГАТОМОВНОСТІ у DB.SQLite.

КОНЦЕПТУАЛЬНЕ > Переклад Повідомлень
Об'єкт TFunction::IO доповнено прапорцем IO::TransltText прямого маркування перекладуваного ВВ Рядку:

- типи "Рядок (переклад)" та "Текст (переклад)" додано у: об'єкті шаблону DAQ-Параметру, об'єкті TFunction DAQ.JavaLikeCalc, UI-Атрибутів UI.VCAEngine;
- прапорець TFld::TransltText використано у: отриманні значення TValue of DAQ-Атрибутів, перекладі DAQ-Атрибутів DAQ.{LogicLev,ModBus,OPC_UA,Siemens}, перекладі UI-Атрибутів UI.VCAEngine;
- встановлено типу "Рядок (переклад)" для: поля "colDscrCustNames" wlb_Main.{alarmsAct,alarmsSt}.

Розширення мовою оточення виконання користувацьких функцій об'єкту OpenSCADA, для функцій на кшталт strftime():

- об'єкт TCntrNodeObj, функція TCntrNode::objFuncCall() та TConfig::objFunc() розширено перейменуванням аргументу "user" у "user_lang" із вказанням мови у другому рядку;
- DAQ.JavaLikeCalc: виконання TCntrNodeObj доповнено мовою;
- SYS.strftime() доповнено виконанням від вказаної мови-локалі.

TUIS,UI.{QTCfg,Vision}: docGet() розширено мовою у другому рядку.
FIX: Розширення вкладки "Переклади" та виправлення щодо:

- опцію "перевірка на невідповідність (TrChkUnMatch)" перейменовано у "перевірка/виправлення (TrChkAndFix)" та розширено функціями виправлення перекладу щодо: розповсюдження перекладів на порожні джерела, очищення перекладів-дублікатів до бази, поєднання базових повідомлень до перекладів;
- інформацію невідповідності доповнено другим текстом повідомлення;
- менеджер перекладу доповнено користувацькими функціями "Розділити" та "Видалити із Trs";
- статус перекладу доповнено короткими мітками "ОДНОМОВНИЙ", "БАГАТОМОВНИЙ", "БАГАТОМОВНИЙ-ДИНАМІЧНИЙ"; індексом повідомлень; розміром кешу та контексту;
- поле конфігурації базової мови режимів БАГАТОМОВНОСТІ розширено переліком локалей проєкту, поділених ";".

FIX: Розширення Перекладу Повідомлень Даних у трьох режимах: ОДНОМОВНИЙ, БАГАТОМОВНИЙ та БАГАТОМОВНИЙ-ДИНАМІЧНИЙ:

- отримання мови користувача уніфіковано у функції lang2Code(), розширеній аргументами "user" та "onlyUser";
- функцію lang2CodeBase() поділено на загальну langBase() та доповнено функцією langToLocale(), отримання повної локалі за мовою із langBase();
- поле мови об'єктів TSYS, TUser доповнено переліком обрання із langBase();
- FIX: замок TMess::mRes перейменовано у TMess::trMessIdxRes та обмежено у використанні лише для TMess::trMessIdx;
- значне розширення та уніфікація кешу перекладів:
  - новими функціями об'єкту TMess — translCacheGet(), translCacheSet(), translCacheLimits() та власним замком trMessCacheRes;
  - розширено категорію повідомлень щодо кешування системних перекладів та користувачів;
  - обмеження кешу також доповнено змінною обмеження за часом "limCacheIts_TM" щодо чого він перевіряється у сервісному завданні.
- доповнено контекстом перекладу за новою функцією TMess::trCtx() та об'єктом TrCtxAlloc для утримання реєстрації контексту як прив'язка користувача та мови до потоку виклику:
  - TCntrNode::cntrCmd(), Protocol.HTTP, UI.{Vision,WebVision,WebUser,WebCfg,WebCfgD} підключено до використання контексту перекладу.
- синхронізовано системні передзбережені повідомлення та встановлення повідомлень динамічних-даних;
- об'єкти типу-модуля БД доповнено специфічним інформаційним полем "Властивості" для визначення властивостей підтримуваних БД;
- FIX: цілковите вимкнення перекладу та реєстрації у індексі повідомлень під час завантаження загальних TConfig вузлів із текстом JavaLikeCalc процедури і застарілим прапорцем увімкнення перекладу процедури в цілому;
- UI.QTCfg: для оновлення кореневої сторінки увімкнено оновлення дерева через перепідключення та оновлення дерева за зміни користувача; увімкнено використання системної мови у ОДНОМОВНОМУ режимі перекладу для віддалених підключень;
- FIX:UI.VCAEngine: стилі проєкту перенесено до нової таблиці зберігання "{DB_TBL}_stls" та структурою із перекладом;
- UI.{WebCfg,WebCfgD}: Загалом адаптовано до динамічного перекладу у режимі БАГАТОМОВНИЙ-ДИНАМІЧНИЙ, використовуючи HTTP-змінну "lang", мову користувача та мову оглядача;
- створено документ Як "Створити багатомовний проєкт".

  ПЕРВИННІ ОБ'ЄКТИ ПРОЄКТУ

- реалізація маркування базового повідомлення та його перекладів як неточне - "<!>" у кінці тексту за зміною, та попередження щодо видалення перекладу;
- доступ до динамічного перекладу перенесено під функції trD()->TMess::translGet() та trDSet()->TMess::translSet(): TArchives,TDAQ,TTypeDAQ,TController,TParamContr,TFunction,TPrmTmpl,TTransports,DAQ.{BlockCalc,JavaLikeCalc};
- додано до динамічного перекладу:
  - післяпереклад назви-опису DAQ-атрибутів після системного перекладу та переклад у контекстній допомозі;
  - переклад DAQ-атрибутів у функціях Користувацького API: get(), set(), descr();
  - DAQ.JavaLikeCalc: частину встановлення назв форми виконання перенесено собі;
  - Protocol;{ModBus,OPC_UA,UserProtocol},UI.{VCAEngine,WebUser}.
- адаптовано загалом до нової концепції зміни у режимі БАГАТОМОВНИЙ-ДИНАМІЧНИЙ через "{base}\000{lang}\000{mess}";
- доповнено та використано нову функцією translIdxCacheUpd() щодо оновлення індексу та кешу оперативних перекладів повідомлень у режимі БАГАТОМОВНИЙ-ДИНАМІЧНИЙ для команди SET;
- доповнено копіюванням перекладу у команді SQL INSERT та для режиму БАГАТОМОВНИЙ-ДИНАМІЧНИЙ;
- конфігураційний файл доповнено підтримкою режиму БАГАТОМОВНИЙ-ДИНАМІЧНИЙ.

  ОКРЕМІ ПОВІДОМЛЕННЯ - "Trs"

- UI.VCAEngine: доповнено зміною сховку одразу після компіляції процедури віджету для розміщення динамічного перекладу повідомлень у сховку проєкту;
- транзитивний динамічний переклад попереджено щодо доповнення таблиці "Trs" повідомленнями наявними у інших джерелах, тож попередньою перевіркою індексу повідомлень;
- доповнено фільтруванням повідомлень щодо можливості їх перекладу перед реєстрацією.
- LibsDB.vcaBase:
  - wlb_Main.ElViewGraph: увімкнено до транзитивного динамічного перекладу опису параметру у підказці;
  - wlb_Main.objProps: увімкнено до транзитивного динамічного перекладу;
  - wlb_Main.storeHouse: значним чином розширено щодо специфічних полів, впорядкування стовпців, доповнення правилами підсвітлення для значень стовпців із фільтром індексу або переліку, та виправлено загальну роботу.

  СИСТЕМНІ ПОВІДОМЛЕННЯ

- імплементовано функцію перекладу системних повідомлень trS() через попереднє збереження, де базове повідомлення просто повертається із інформацією про каталог, як то "{base}\000{cat}" та що реально перекладається викликом _() — у фоні використано Mess->I18N(), але для специфічного коду мови mess_PreSave="<PSV>";
- функцію системного перекладу TMess::I18N() підключено до кешу повідомлень;
- об'єкти TFld та IO розширено роботою із попередньо збереженими системними повідомленнями;
- інформаційні поля модуля адаптовано до режиму БАГАТОМОВНИЙ-ДИНАМІЧНИЙ;
- адаптація до післяперекладу для функції Користувацького API TConfig::cfg() у перекладуваних рядках;
- UI.{QTCfg,Vision}: адаптовано до отримання елементів контролю у мові користувача та оновлення мови інтерфейсу головного вікна за його зміни;
  - UI.Vision: доповнено оновленням панелей інструментів за зміни користувача, що також адаптовано до динамічного перекладу; всі діалоги розробки адаптовано до динамічного перекладу.
- UI.{QTStarter,QTCfg,Vision}: доповнено перекладом системних Qt-повідомлень відповідно до мови обраного користувача, через загальну властивість додатку "lang" для перевизначеної функції Qt-перекладу QTranslator::translate(), тож мова загалом перемикається останнім інтерфейсом та для всіх відкритих; Меню Пускачу встановлено у динамічний переклад та оновлення.

КОНЦЕПТУАЛЬНЕ > Підрівні Повідомлень {Main}[0...9] та Уніфікація Передачі Повідомлень Користувача

- загальна адаптація до підрівнів {Main}[0...9] основних рівнів повідомлень [0...7];
- DAQ,DAQ.DAQGate: додано функцію TController::messSet() транспортування повідомлень із гори до низу, тож опускання їх, роблячи функцію віртуальною та перевизначаючи її у DAQGate, та також додано визначення нового сервісного запиту контролю OpenSCADA "set:/serv/mess" до об'єкту TController;
- DAQ: визначено повідомлення DAQ-транспортування із категорією у формі "{TP}{ModId}:{CntrId}[.{prm}][:{spec}]", доповнено функцію TController::messSet() для створення таких повідомлень, а також функції Користувацького API SYS.DAQ["Modul"]["Controller"].messSet(), SYS.DAQ["Modul"]["Controller"]["Parameter"].messSet();
- LibsDB.vcaBase:
  - wlb_Main.{ElCadr,TextLab,ImgLab,cntrRegul},mnEls.{El_Kran_Sh,Compressor}: доповнено щодо повідомлень дій користувача, які формуються новою DAQ-функцією messSet() із уніфікованою структурою категорії для транспортування між OpenSCADA станціями різного рівня;
  - wlb_Main.{alarmsAct,alarmsSt}: адаптовано для опрацювання підрівнів основних рівнів із підсвітленням всіх рівнів; розширено новим користувацьким полем "Тип", як назва рівня порушення із нового конфігураційного атрибуту "types";
  - wlb_doc.{docUsersSet,docAlarmsRep}: доповнено цілковитим скануванням DAQGate джерела щодо повної ієрархії транспортування;
  - wlb_Main.alarmsSt,wlb_doc.{docMessRep,docAlarmsRep}: адаптовано до транспортування повідомлень у DAQGate;
  - wlb_Main.{alarmsSt,alarmsAct},wlb_doc.docMessRep: покращено щодо цілковитого скануванням DAQGate джерела до повної ієрархії транспортування, також до дій користувача (OP);
  - wlb_Main.TextLab: увімкнено опціонально щодо транзитивного перекладу тексту статусу, який часто приходить із якогось DAQ-джерела.

OpenSCADA бібліотеки та проєкти

- FIX:LibsDB.{OscadaLibs,vcaBase,vcaTest},{AGLKS,Boiler}.*: Доповнено, очищено та виправлено щодо багатомовних повідомлень через застосування нових механізмів виправлення перекладу.
- LibsDB.vcaBase,AGLKS.vca,Boiler.St: Всі стилі проєкту перенесено до нової таблиці зберігання та її структури із перекладом.
- FIX:LibsDB.vcaBase:
  - FIX:wlb_Main.{alarmsAct,alarmsSt}: Типове сортування за полем часу сигналу повернуте у "1", як нетиповий низхідний порядок. wlb_Main.alarmsAct: Доповнено полем "messCat" визначення категорій порушень.
  - wlb_Main.{ElViewGraph,graphSelPrm}: Адаптовано до скидання кольору елементу тренду до типового стильового, встановленням його у порожнє; доповнено опрацюванням порожніх кольорів як типове також отримане зі стилю.
  - FIX:wlb_Main.RootPgSo: Доповнено повним оновленням за зміни користувача, оскільки мова також може змінитися, та мови.
- LibsDB.OscadaLibs: Вміст поля "DB" та базовий ІД таблиці UserFuncLibs.{techApp,servProc,Controller} перейменовано у стандартний "flb_techApp", "flb_servProc", "flb_Controller" відповідно.
  - tmplib_base.{anUnif,anUnifSt,digAlarm,codeState}: Адаптовано до вбудування підсвітлення синтаксису у процедуру опрацювання входу.
  - tmplib_base.digAlarm: Розширено загальним використанням атрибуту DESCR для перевизначення специфічних параметрів у нових полях "CustomFlds".
  - tmplib_base.anUnif: Розширено загальним використанням атрибуту DESCR для перевизначення специфічних параметрів у нових полях "CustomFlds" та "CustomAlarms". Доповнено опцією процедури користувача "toSave" для примусового збереження об'єкту при виході.
- flb_servProc.docOffLine: Розширено доступом до індексної сторінки із будь якої іншої.

API
!!!!:Зміни:

- SYS: TCntrNode::{chldDel,nodeDis}() переведено на пряме використання TCntrNode::EnDisFlag: NodeNoFlg, NodeRemove, NodeRemoveOnlyStor; та проміжок після > 0x100(TCntrNode::NodeSpecific) зарезервовано для специфічних вузлів, де TParamContr::EnDisFlag встановлено лише у NodeRemove_NoArch та Widget::EnDisFlag встановлено лише у Widget::{NodeRemove_NoDelMark,NoContainer}. Елементи TCntrNode::Flag перейменовано щодо SelfModify->Modified, SelfModifyS->ModifiedS, SelfSaveForceOnChild->SaveForceOnChild.
  - Функції сховку об'єкту DB(), fullDB() та setDB() розширено аргументом "qTop".
  - Назву підсистеми перенесено до виклику функції subName() та яку встановлено у "virtual" та "constant", так само як subVer() і subId().
  - Тип поля опису об'єкту TFld та поля назви об'єкту IO змінено у "string".
  - Результат TCntrNode::nodeNameSYSM() змінено у "string".
  - TMess: Функцію lang2CodeBase() поділено на загальну langBase() та доповнено функцією langToLocale(), отримання повної локалі за мовою із langBase().
    - Функцію lang2Code() розширено аргументами "user" та "onlyUser".
    - I18N() змінено у аргументах щодо "const string &mess" перший та mLang перенесено до другого, результат змінено у "string", також для TModule::I18N(), та оновлено всі визначення _().
    - Функції перекладу даних (короткі визначення) перейменовано у trD_L(), trD_U(), trD_LU(), trDSet_L(), trDSet_U(), trDSet_LU().
    - Видалено I18Ns().
    - labStorGen() поєднано із labStor() та тип міток labStor(), labSecCRON(), labSecCRONsel(), labTaskPrior(), labMessCat() змінено у "string"; доповнено міткою labStorGen().
    - lang2Code() та lang2CodeBase() перейменовано у langCode() та langCodeBase() відповідно для початку адаптації коду мови більш за 2 символи.
  - Безпека: Статичний метод "pHashMagic" перенесено до визначення SEC_HASH_MAGIC.
- БД: Функції TBDS::{open,close}() перейменовано у TBDS::{tblOpen,tblClose}() та встановлено статичними.
  - TBDS::{dataSeek,dataGet,dataSet,dataDel,genDBGet,genDBSet}() переведено на бітові прапорці TBDS::ReqGenFlg (перейменовано із TBDS::ReqGen): NoFlg, NoException, OnlyCfg, UseTranslation (перейменовано із ReqGen::UseTranslation), UseCache, UseAllKeys.
  - TBDS::dbList() переведено на бітові прапорці TBDS::DBLsFlg: LsNoFlg, LsCheckSel, LsInclGenFirst.
  - Функції переведено у статичні: TBDS::{dbList,dataSeek,dataGet,dataSet,dataDel,dataDelTbl}(), TBDS::{fullDBSYS,fullDB}().
  - Функції доступу до загальних параметрів TBDS::genDBGet() та TBDS::genPrmSet() всюди перейменовано у genPrmGet() та genPrmSet().
- DAQ: TTypeDAQ::compileFuncSynthHighl() перейменовано у TTypeDAQ::compileFuncSnthHgl() в процесі уніфікації назви.
- Архіви-Історія: Визначення архіво-специфічних назв перейменовано для BUF_ARCH_NM, ALRM_ARCH_NM, ALRM_ARCH_CH_NM у ARCH_BUF, ARCH_ALRM, ARCH_ALRM_CH; та доповнено щодо ARCH_NOALRM ("<noalarms>").

Доповнення:

- SYS: Глобальні короткі функції доповнено s2l() та s2u().
  - Доповнено новою функцією strParseEnd() розбору рядків за роздільником із кінця.
  - Функцію pathLev() доповнено новим аргументом позиціювання зміщення на початок наступного елементу та що також доповнено у функції користувацького API parsePath() від DAQ.JavaLikeCalc.
  - TCntrNode доповнено функціями storage() та setStorage() для відстеження наявності даних вузла. TCntrNode::Flag доповнено елементом LoadForcibly. TCntrNode::modif() та TCntrNode::modifG() доповнено новим аргументом "forceLoad".
  - Додано змінну обмеження за часом "limCacheIts_TM" для обмеження кешу повідомлень.
  - Загальну функцію кодування strEncode() та відповідник API користувача доповнено варіантом "ShieldBin" захисту-екранування бінарних символів [\x0-\x8\xB-\xC\x0E-\x1F].
  - TMess: Доповнено функцією перевірки повідомлень щодо їх перекладуваності — isMessTranslable().
    - Доповнено функціями контролю кешу перекладу: translCacheGet(), translCacheSet(), translCacheLimits() та власним замком trMessCacheRes. Доповнено функцією translIdxCacheUpd() оновлення індексу та кешу оперативних перекладів повідомлень, і функціями translItSplit(), translItRemTrs() розділення елементів та видалення із Trs.
    - Доповнено щодо контексту перекладу новою функцією trCtx() та об'єктом TrCtxAlloc для утримання.
    - Доповнено для перекладу даних trD()->translGet() та trDSet()->translSet().
    - Доповнено перекладом системних повідомлень через передзбереження trS(), як ще одне посилання на I18N().
    - Доповнено функцією messLevelTest().
    - Структуру TMess::Type доповнено елементом "MaxLev" для визначення максимуму типів/рівнів повідомлень.
    - Визначення TMess доповнено mess_PreSave="<PSV>" та mess_TrModifMark="<!>".
  - XMLNode: Доповнено новою опцією зберігання BinShield(0x400) для контрольованого захисту-екранування бінарних символів [\x0-\x8\xB-\xC\x0E-\x1F].
  - TConfig,TCfg: Розширено новими параметрами TConfig::{trcSet,setTrcSet}(), TCfg::{isSet,setIsSet}() виявлення зміни конфігураційних полів та використання у частковому завантажені БД замість toDefault(); та TConfig::{noTransl,setNoTransl}() для глобального встановлення типового перекладу структури. Функцію TCfg::setExtVal() доповнено аргументом "toOne".
  - TError: Коди доповнено: DB_TrRemoved (22) для маркування видалення перекладу у БД, DB_ReadOnly (23) впроваджено у SQLite в процесі уніфікації, Core_NoNode (5) відсутності TCntrNode, Tr_ErrTransport (12) для маркування помилок транспорту, Tr_ErrResponse (13) та Tr_ErrDevice (14) для збільшення специфічних до транспорту помилок.
- БД: TBDS::realDBName() доповнено аргументом зворотного перетворення.
  - Статичні методи TBDS доповнено новою функцією dbPart() отримання частин адреси сховища та доповнено новою функцією dataDelTbl() загального видалення таблиць, також у Конфігураційному Файлі.
  - Доповнено об'єктом елементу структури TTable::TStrIt.
  - Загальний SQL-код перенесено до нових функцій: TTable::fieldSQLSeek(), TTable::fieldSQLGet(), TTable::fieldSQLSet(), TTable::fieldSQLDel(); із прапорцями TTable::SQLReqFlag: SQLNoFlg, SQLOrderForSeek, SQLFirstSkipForSeek.
  - Декларація у ядрі щодо сервісних визначень, методів та функцій до загального SQL-коду: SEEK_PRELOAD_LIM, tblStrct, seekSess, connRes, fieldFix(), getSQLVal(), setSQLVal().
  - Доповнено функцією визначення пріоритету у переліку TBD::lsPr(), TBD::setLsPr() та віртуальною TTypeBD::lsPr().
  - Доповнено віртуальною функцією визначення властивостей БД — TTypeBD::features().
- DAQ: Структуру IO::IOFlgs об'єкту TFunction::IO доповнено прапорцем IO::TransltText прямого маркування ВВ Рядку до перекладу.
  - Функцію {TController,TParameter}::messSet() доповнено транспортуванням повідомлень з гори до низу, а також функції Користувацького API SYS.DAQ["Modul"]["Controller"].messSet(), SYS.DAQ["Modul"]["Controller"]["Parameter"].messSet().
  - TCntrNodeObj доповнено функцією lang(), отриманою із другого рядка загального методу mUserLang.
  - Функції API Користувача доповнено funcSnthHgl() у об'єкті модуля Збору Даних і для отримання правил підсвітлення синтаксису модуля та мови.
- Архіви-Історія: Доповнено варіантом функції "void TArchives::messPut( const TMess::SRec &rec, const string &arch = "" )".
- Транспорти: Доповнено новою функцією extHostSeek().
- UI: Доповнено параметром Конфігураційного Файлу "FontSnthHglCode" та відповідними функціями TUIS::fontSnthHglCode() і TUIS::setFontSnthHglCode().
  - VCAEngine:
    - Функції Користувацького API mime() та mimeSet() доповнено коректними еквівалентами resource() та resourceSet().
    - Об'єкт Проєкту доповнено сервісним запитом Інтерфейсу Контролю "read:/serv/access" щодо перевірки доступу читання.
    - Сервісний запит Інтерфейсу Контролю "get:/prm/cfg/prj" доповнено параметром "noName" для запобігання запиту назви проєкту.

Система

- FIX:Складання: configure.ac: Версію бібліотеки ядра збільшено до 3:12:0 та версію програми збільшено до 0.9.5.
  - Модульну версію підсистеми "БД" збільшено до 15, підсистеми "Збір Даних" збільшено до 14.
  - Додано кореневі файлові системи Debian 11 (chroots) для складання OpenSCADA; додано до складання для Ubuntu 22.04 LTS та Debian 11 ARM64; та Maemo 5 (Nokia N900) видалено через аварійне завершення компілятору у декількох місцях.
  - data/*.xml: Видалено Загальний Параметр TBDS — "SYSStPref".
  - SYS,data/ModelsDB/{AGLKS/oscada_AGLKS.xml,Boiler/oscada_Boiler.xml}: Конфігураційний параметр "Lang2CodeBase" перейменовано у "LangBase" із підтримкою "Lang2CodeBase" до релізу 1.0.
- Повідомлення вихідного тексту та документація програми:
  - Посібник "Швидкий старт" цілковито відревізовано та актуалізовано щодо останніх змін у LTS, а також доповнено новою секцією "Виконання готового проєкту OpenSCADA у просторі сервісу-фоні" до власної секції "Фонове та віддалене виконання — сервер, середовище виконання ПЛК та віддалена розробка".
  - Документ "Посібник по програмі" доповнено новою секцією "Виконання готового проєкту OpenSCADA у просторі сервісу-фоні" та відревізовано секцію "Запуск та виконання".
  - Новий документ Як "Створити багатомовний проєкт" додано до завантаження позамережево.
  - Відревізовано усі мітки вихідного коду на кшталт ????, !!!!, ?!?! та їх коментарі.
  - Мову Russian,Російська,Российский перейменовано у її правильну назву mRussian.
  - UI.{VCAEngine,Vision}: "Mime дані" перейменовано у "Ресурси" та "Mime тип" у "MIME".
- .,DAQ.DAQGate: Резервування повідомлень та їх транспортування у DAQ.DAQGate обмежено у глибині запиту повідомлень на час відновлення або одну годину.
  - Резервування архіваторів та DAQ.DAQGate переключено у запиті ініціюючих повідомлень:
    - запит активних порушень;
    - запит архіву у глиб та по час запиту порушень, без активації порушень;
    - ординарний-періодичний запит останніх повідомлень, без активації порушень.
- Protocol.HTTP,UI.{WebCfg,WebCfgD,WebUser,WebVision}: Доповнено виявленням попереднього користувача для позначення цих дій до HTTP-модулів із перенесенням закриття попереднього сеансу автентифікації користувача на після вдалу нову.
  - Всі HTTP-модулі адаптовано до поля користувача у HTTP-функціях із попереднім користувачем у другому рядку.
  - FIX:WebVision: Попереднього користувача наразі використано у виявлені зміни користувача між звичайними користувачами та для одного сеансу, чим попереджаючи створення нових сеансів.
- Розширення захисту-екранування бінарних символів [\x0-\x8\xB-\xC\x0E-\x1F]:
  - XMLNode: Додано нову опцію збереження BinShield(0x400) для контрольованого захисту-екранування бінарних символів [\x0-\x8\xB-\xC\x0E-\x1F], що є значним для WebОглядачів.
  - UI.{WebCfgD,WebVision}: Доповнено кодуванням XML трафіку щодо захисту-екранування бінарних символів через використання нової опції "BinShield".
- FIX: strParse() переписано та перевірено у опрацюванні поєднання групи символів при скануванні; та strParse(), strLine(), pathLev() у позиціюванні зміщення на початку наступного елементу та обмеженні по низу в 0; та pathLevEnd() у позиціюванні зміщення на кінці наступного елементу та обмеженні по верху в розмір. TModSchedul::chkAllowMod(),UI.QTCfg,Protocol.HTTP: переключено на використання TSYS::pathLevEnd() та TSYS::pathLev() у новій поведінці.
- Примусове завантаження доповнено придушенням помилок для вузлів, які немодифіковані перед цією операцією.
- .,DB,DAQ: Механізм глобального копіювання конфігураційного контексту (між станціями) доповнено маркуванням посилання на об'єкт останньої операції встановлення, для спрощення після-маркованого встановлення.
  - DAQ: Як після-маркування для збереженого об'єкту DAQ-параметру додано атрибут "prmTp" із типом параметру, який надалі використовується у коректному виявлені зміни типу параметру при подальшому завантажені.
- .,UI.{QTCfg,WebCfgD}: Інтерфейс Контролю OpenSCADA розширено користувацькими командами до Таблиць.

БД

- FIX: Об'єкт TBD доповнено внутрішнім прапорцем "mIsFirst" контролю першого увімкнення об'єкту та що використано для запобігання реєстрації таблиці "Trs" за кожного увімкнення-підключення-перепідключення.
- FIX: TBDS::dataDel() виправлено-доповнено видаленням багатьох елементів та доповнено видаленням порожніх вузлів таблиць Конфігураційного Файлу.

Збір Даних

- FIX: Ручний запуск об'єктів контролерів визначено щодо деяких специфічних гарячих дій увімкнення об'єкту, коли ця дія запобігаться від подвійного здійснення за нормального запуску:
  - DAQGate: повторна синхронізація віддалених даних джерела за періоду синхронізації >= 0;
  - ModBus: примусове переформування блоків опитування;
  - OPC_UA: примусове переформування переліку елементів моніторингу;
  - Siemens: примусове переформування блоків опитування.
- Тип ВВ "Повернення" об'єкту TFunction встановлено в ЛишеЧитання у вкладці ручного виконання.
- FIX:DAQGate: Доповнено імплементацією асинхронного режиму запису. Конфігураційне поле обрання віддаленої станції переведено на простий комбобокс. Статус об'єкту контролеру доповнено лічильником читання/архівних/запису значень, читання повідомлень та статусу буферу запису.
  - FIX: Виправлено у повторному використанні параметрів із порожніми адресами для включених та доповнено очищенням адрес при копіюванні параметрів.
  - FIX: Уніфіковано загалом у синхронізації та виправлено синхронізацію атрибутів, із запобіганням постійній синхронізації відсутніх параметрів на віддаленому хості.
- FIX:JavaLikeCalc: Попереджено блокуванню деяких ресурсів бібліотечної функції при зміні програми, коли здійснювалося компіляцію програми для вимкненої функції.
- Siemens: Доповнено новою опцією "Максимальний розмір блоку запиту, байти" із визначенням максимуму запитаного блоку.

Транспорти

- Станції "рівня підняття на гору (UpRiseLev)" розщеплено щодо транспорту запиту за першим хостом адреси "reforwardHost", чим попереджено підвисання загального підключення на довгих підключеннях до відсутніх дуже далеких станціях переспрямування.
- SSL: Вхідну та вихідну частину доповнено можливістю вказання сертифікатів та ключа безпосередньо із зовнішнього файлу. Доповнено перевантаженням файлу сертифікатів вхідного транспорту за його зміни, шляхом перепідключення транспорту.

Транспортні Протоколи

- FIX:HTTP: Виправлено у читанні HTTP-змінної "accept-language" лише як двосимвольний код мови, тож загальний інтерфейс перекладається тепер на FireFox, який надсилає тут також код країни.
- FIX:SelfSystem: У вхідній частині переключено на завантаження усього вхідного повідомлення до перевірки автентифікації, чим запобігаючи дивному повідомленню про помилку "Помилка формату команди." до хвосту повідомлень.

Інтерфейс Користувача

- VCAEngine,Vision,WebVision: Запит контролю "openlist:/serv/pg" доповнено атрибутом "pgGrp" (група) відкритої сторінки для виявлення відкриття декількох сторінок у одному контейнері, відтак відкривати останню та закривати попередні, переважно попереджаючи закриттю всіх вкладених сторінок та дозволяючи вказати-перевизначити відкриття потрібних сторінок.
  - Vision: Переопрацьовано також щодо раннього відкриття відновлених та визначених сторінок у процедурі ініціалізації.
- QTStarter,WebVision,WebCfgD: Qt частина, у загальній Qt Бібліотеці, та Web доповнено прийняттям редагування тексту таблиці за Enter та нового рядка за Ctrl+Enter.
- FIX:QTCfg,Vision: Попереджено зависанням при зупинці за сигналом переривання, переважно із консолі, через блокування основного потоку Qt у modStop() без qApp->processEvents().
- QTCfg: Текстові поля доповнено перевіркою та активацією вбудованих правил підсвітлення синтаксису із XML-тегу "SnthHgl". Таблиці доповнено пошуком вказаного рядка.
- VCAEngine:
  - Завершено реалізацію отримання змін у режимі виконання за циклами тактування, після спостереження гонки за станом на змінах атрибутів, що призводить до невиконання оновлення значення візуалізаторами:
    - переписано механізму контролю модифікацій;
    - визначення циклів формування та фіксації;
    - зменшення основного лічильника обрахунку до uint16;
    - поділ значення лічильника зміни атрибутів та віджету загалом на формування (uint16) та фіксації (uint16) = uint32;
    - опрацювання значення лічильника зміни при модифікації та читанні-перевірці;
    - підтримка перевантаження основного лічильника обчислення та очищення старих значень лічильника зміни;
    - запобігання порожнім циклам при загальному запиті віджетів;
    - видалено коду попереднього ковзного механізму маркування поточного щодо виявлення зміни атрибутів із дублюванням.
  - Операцію копіювання Віджету доповнено копіюванням використаних віджетом ресурсів (наразі лише типу Зображення).
  - FIX: Встановлення позначки "<deleted>" до видалених успадкованих включених віджетів перенесено до функції збереження контейнерного віджету, оскільки він втрачається при операціях копіювання та зараз ви можете просто відкатити/накатити видалення таких віджетів.
  - FIX: Виправлено копіювання mime даних при копіюванні бібліотек віджетів та проєктів, переміщенням цього копіювання до збереження копії, із розширенням mime операцій роботою з цілком визначеними БазамиДаних.
  - FIX: Запобігання спадкуванню значень атрибутів для вихідних зв'язків, тож не записувати до Збору Даних вочевидь помилкових значень при гарячому редагуванні виконуваних проєктів та їх елементів.
- FIX:Vision: Виправлено, або завершено імплементацію, щодо ВІДКАТУ/НАКАТУ операцій видалення успадкованих Віджетів Сторінок Проєктів.
  - Підлаштовано у політиці фокусування у спосіб UI.WebVision та доповнено примусовим очищенням фокусу при втраті, щоб запобігти поверненню фокусу при активації вікна, тож ви можете наразі використовувати подію "ws_FocusIn" для відкриття зовнішніх підвікон.
  - Уніфіковано концепцію обрання дочірніх віджетів за візуального редагування режиму розробки та зафіксовано це у новому розділі "Візуальне редагування" документації модуля UI.Vision.
  - Запит значень атрибутів розроблюваного віджету перенесено до одного великого запиту, чим віддалена розробка стала значно швидшою.
- FIX:WebVision: Методи сеансу mUser та mUserOrig перенесено під mutex замок даних, оскільки тут може бути аварійне завершення за активної маніпуляції користувачами.
  - FIX: Вигляд "Комбо" типу "Рядок" та типи "Перелік" і "Комбо" доповнено створенням елементів значення відсутніх у переліку обрання.
  - FIX: Вигулькні вікна календаря та редагованого комбо доповнено перевіркою геометрії чим запобігаючи переповненню головного вікна; та закриття вигулькних вікон переведено цілком на натиск мишею поза вікна, разом із рештою вигулькних вікон.
  - FIX: Покращено та виправлено щодо користування виглядом Таблиця примітиву FormEl та переважно у редагуванні тексту: правильне підлаштування ширини та мінімальну висоту встановлено у 40 пікселів, FIX: виправлено у визначені значення сортування стовпчика "0" як висхідне-типове та "1" як низхідне із гори, як поведінка у UI.Vision та сортування-порівняння номерів (ціле,реальне) імплементовано окремо.
  - Доповнено відображенням статусу ПередньогоПлану у полі статусу сеансу із його запитом-плануванням при відображені поля.

#### 7.5.1 Сервісні оновлення

- п'яте (5) від 03.12.2022.
- четверте (4) від 23.10.2022.
- трете (3) від 03.09.2022.
- друге (2) від 08.08.2022;
- перше (1) від 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/uk - GFDL | May 2026 | OpenSCADA 0.9.9