From OpenSCADAWiki
Jump to: navigation, search
This page is a translated version of the page Documents/Release 0.9/Update5 and the translation is 100% complete.

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

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

At.png Важливі дії розробника модулів 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.
  • Повідомлення вихідного тексту та документація програми:
  • .,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: Доповнено новою опцією "Максимальний розмір блоку запиту, байти" із визначенням максимуму запитаного блоку.

Транспорти

  • 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" для відкриття зовнішніх підвікон.
  • FIX:WebVision: Методи сеансу mUser та mUserOrig перенесено під mutex замок даних, оскільки тут може бути аварійне завершення за активної маніпуляції користувачами.
    • FIX: Вигляд "Комбо" типу "Рядок" та типи "Перелік" і "Комбо" доповнено створенням елементів значення відсутніх у переліку обрання.
    • FIX: Вигулькні вікна календаря та редагованого комбо доповнено перевіркою геометрії чим запобігаючи переповненню головного вікна; та закриття вигулькних вікон переведено цілком на натиск мишею поза вікна, разом із рештою вигулькних вікон.
    • FIX: Покращено та виправлено щодо користування виглядом Таблиця примітиву FormEl та переважно у редагуванні тексту: правильне підлаштування ширини та мінімальну висоту встановлено у 40 пікселів, FIX: виправлено у визначені значення сортування стовпчика "0" як висхідне-типове та "1" як низхідне із гори, як поведінка у UI.Vision та сортування-порівняння номерів (ціле,реальне) імплементовано окремо.
    • Доповнено відображенням статусу ПередньогоПлану у полі статусу сеансу із його запитом-плануванням при відображені поля.