Це оновлення релізу 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
- 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" для запобігання запиту назви проєкту.
- VCAEngine:
Система
- 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 переключено у запиті ініціюючих повідомлень:
- запит активних порушень;
- запит архіву у глиб та по час запиту порушень, без активації порушень;
- ординарний-періодичний запит останніх повідомлень, без активації порушень.
- Резервування архіваторів та 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 та сортування-порівняння номерів (ціле,реальне) імплементовано окремо.
- Доповнено відображенням статусу ПередньогоПлану у полі статусу сеансу із його запитом-плануванням при відображені поля.