From OpenSCADAWiki
Jump to: navigation, search
Other languages:
English • ‎mRussian • ‎Українська

This update of the 0.9 LTS release fixes about 50 bugs and appends MANY improvements with several of significant-conceptual ones, which you can read wholly in the update ChangeLog.

At.png Significant actions of the developer of the OpenSCADA modules on the update

  • FIX:SYS.TMess: Type of labStor(), labSecCRON(), labSecCRONsel(), labTaskPrior(), labMessCat() changed to "string".
=> obligatory revise of using the label functions since the compiler mayn't to say an error in functions like to printf(), TSYS::strMess() but that module will be crashed.

Automation Linux distributive of the project OpenSCADA

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

Main WWW-resources of the project — Site

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

New and significantly updated parts

  • OpenSCADA Core: 3:11:0 => 3:12:0
(Common Conception of the Data Storage, Messages Translation, Message Sublevels {Main}[0...9] and Unification for the User Messages Transferring)
  • OpenSCADA "BD", "DAQ" subsystems: 14 => 15, 13 => 14
(Significant Unification the Common SQL-code in the OpenSCADA Core)
  • DAQ.DAQGate: 2.5 => 2.9
(redundancy and the messages transferring, asynchronous writing mode implementation)
  • DAQ.JavaLikeCalc: 5.1 => 5.4
  • DAQ.Siemens: 4.2 => 4.4
  • {DAQ,Protocol}.ModBus: 3.3 => 3.4, 2.8 => 2.9
  • {DAQ,Protocol}.OPC_UA: 2.5 => 2.6, 2.1 => 2.2
  • Archive.FSArch: 3.6 => 3.7
  • Archive.DBArch: 3.0 => 3.1
  • Transport.SSL: 3.3 => 3.4
(pointing the certificates and the key directly from an external file with the input transports restarting at it change)
  • Protocol.HTTP: 3.6 => 3.8
  • Protocol.UserProtocol: 1.4 => 1.5
  • BD.DBGate: 1.0 => 1.1
  • BD.SQLite: 3.0 => 4.0
  • BD.MySQL: 3.5 => 4.0
  • BD.PostgreSQL: 2.5 => 3.0
  • BD.FireBird: 2.5 => 3.0
  • UI.QTStarter: 5.10 => 5.12
  • UI.QTCfg: 5.6 => 5.9
  • UI.WebCfg: 1.8 => 2.0
  • UI.WebCfgD: 2.1 => 2.3
  • UI.VCAEngine: 7.1 => 7.8
(finishing of implementing the changes obtaining in the runtime mode by the clocking cycles through)
  • UI.Vision: 7.14 => 8.0
(early opening the restored and specified pages in the init procedure)
  • UI.WebUser: 1.4 => 1.5
  • UI.WebVision: 6.2 => 6.6
  • LibsDB.OscadaLibs.base.anUnif: 2.1 => 2.4
  • LibsDB.OscadaLibs.base.anUnifSt: 1.2 => 1.3
  • LibsDB.OscadaLibs.base.digAlarm: 1.2 => 1.3
  • LibsDB.OscadaLibs.base.codeState: 1.3 => 1.4
  • LibsDB.OscadaLibs.servProc.docOffLine: 1.2 => 1.3
  • LibsDB.OscadaLibs.Controller.test: 1.1 => 1.2
  • LibsDB.vcaBase.Main
    • alarmsAct: 1.1 => 1.3
    • alarmsSt: 1.2 => 1.4
    • RootPgSo: 2.4 => 2.5
    • ElCadr: 1.1 => 1.2
    • TextLab,ImgLab: 1.0 => 1.1
    • graphSelPrm: 1.4 => 1.5
    • objProps: 1.1 => 1.2
    • cntrRegul: 1.1 => 1.2
    • storeHouse: 1.0 => 1.1
  • LibsDB.vcaBase.mnEls.El_Kran_Sh,Compressor: 1.0 => 1.1
  • LibsDB.vcaBase.doc
    • docAlarmsRep: 1.5 => 1.6
    • docUsersSet: 1.5 => 1.7

CONCEPTUAL > Common Conception of the Data Storage

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


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


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

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

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

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

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

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

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

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

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

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

  • the user language obtaining unified in the function lang2Code(), expanded by the arguments "user" and "onlyUser";
  • the lang2CodeBase() function separated to the common one langBase() and appended the function langToLocale() of obtaining the complete locale at language from langBase();
  • the language field of the objects TSYS, TUser appended of the selection list from langBase();
  • FIX: the TMess::mRes lock renamed to TMess::trMessIdxRes and limited in use only for TMess::trMessIdx;
  • the translation cache significant extending and unification:
    • in the new TMess object's functions translCacheGet(), translCacheSet(), translCacheLimits() and the own lock trMessCacheRes;
    • extended by the message category for caching the system translations and users;
    • the cache limiting also appended by the time limit variable "limCacheIts_TM" for what it checked in the service task.
  • appended for the translation context at the new function TMess::trCtx() and the object TrCtxAlloc for handling the context registration as user and language bound to the call thread:
    • TCntrNode::cntrCmd(), Protocol.HTTP, UI.{Vision,WebVision,WebUser,WebCfg,WebCfgD} attached to use the translation context.
  • synchronized in the system prestored and the dynamic-data setting messages;
  • the DB type-module objects were appended by the specific information field "Features" of specifying the supported by DB features;
  • FIX: complete disabling the translation and registering in the message index at the loading for generic TConfig nodes with the JavaLikeCalc procedure text and a deprecated flag of enabling that procedure whole translation;
  • UI.QTCfg: the tree update enabled for the root page updation through the reconnection and the tree update at the user change; enabled for using the system language in the SINGLETRANSLATION mode for remote connections;
  • FIX:UI.VCAEngine: the project styles moved under a new storing table "{DB_TBL}_stls" and its structure with translation;
  • UI.{WebCfg,WebCfgD}: Generically adapted to the dynamic translation in the MULTILANGUAGE-DYNAMIC mode, using the HTTP-variable "lang", the user language and browser language;
  • the How to "Create multi language project" document was created.
  • implemented for the base message and its translations mark as fuzzy - "<!>" in the text end at changing, and warning the translation removing;
  • accessing the dynamic translation moved under the new functions trD()->TMess::translGet() and trDSet()->TMess::translSet(): TArchives,TDAQ,TTypeDAQ,TController,TParamContr,TFunction,TPrmTmpl,TTransports,DAQ.{BlockCalc,JavaLikeCalc};
  • appended in the dynamic translation for:
    • DAQ-attributes name-description postranslation after the system translation and translation in the context help;
    • DAQ-attributes translation in the UserAPI functions: get(), set(), descr();
    • DAQ.JavaLikeCalc: names setting part of the execution form moved to itself;
    • Protocol;{ModBus,OPC_UA,UserProtocol},UI.{VCAEngine,WebUser}.
  • adapted commonly to the new changing conception in the MULTILANGUAGE-DYNAMIC mode through "{base}\000{lang}\000{mess}";
  • appended and used for a new function translIdxCacheUpd() of updating the operative translation messages' index and cache in the MULTILANGUAGE-DYNAMIC mode for the SET command;
  • appended of the translation copy in the SQL INSERT command and for the MULTILANGUAGE-DYNAMIC mode;
  • the configuration file appended of the MULTILANGUAGE-DYNAMIC mode support.
  • UI.VCAEngine: appended of changing the storage just after the widget procedure compile for placing of the dynamic messages translation to the project storage;
  • the transitive dynamic translation prevented in appending the table "Trs" for messages available in other sources, so checking the message index before;
  • appended for filtering the messages for they translatability before registering.
  • LibsDB.vcaBase:
    • wlb_Main.ElViewGraph: enabled for the transitive translation in the tooltip and for the parameter description;
    • wlb_Main.objProps: enabled for the transitive dynamic translation;
    • wlb_Main.storeHouse: significantly expanded for the specific fields, ordering the columns, appending of the highlighting rules for column values with filter index or list, fixed in whole work.
  • implemented for a function of prestoring system messages translation trS(), where the base message just return with the catalogue information, that is "{base}\000{cat}" and what is translated really in the call _() — in the background there is used Mess->I18N(), but for the specific language code mess_PreSave="<PSV>";
  • the system translation function TMess::I18N() was attached to the messages cache;
  • the TFld and IO objects expanded in work with the prestoring system messages;
  • module info fields adapted to the MULTILANGUAGE-DYNAMIC mode;
  • adaption to the postranslation for the User API function TConfig::cfg() in the translatable strings;
  • UI.{QTCfg,Vision}: adapted to the control items obtain in language of the user and update the main window interface language at it change;
    • UI.Vision: appended in updation the toolbars at the user change, what also adapted for the dynamic translation; all development dialogs adapted for the dynamic translation.
  • UI.{QTStarter,QTCfg,Vision}: appended for the system Qt-messages translation relating to the selected user language, through the common application property "lang" for the Qt-translation reimplemented function QTranslator::translate(), and then the language commonly switched by the last interface and for all opened; the Starter Menu set for dynamic translation and updating.

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

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

OpenSCADA libraries and projects

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


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


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


  • FIX:Building: Core library version rose to 3:12:0 and the program version rose to 0.9.5.
    • The module version of the subsystem "BD" rose to 15, the subsystem "DAQ" rose to 14.
    • The Debian 11 root file systems (chroots) are appended for build OpenSCADA; appended for build to Ubuntu 22.04 LTS and Debian 11 ARM64; and Maemo 5 (Nokia N900) removed since the compiler crashes now constantly in several places.
    • data/*.xml: The TBDS Generic parameter "SYSStPref" removed.
    • SYS,data/ModelsDB/{AGLKS/oscada_AGLKS.xml,Boiler/oscada_Boiler.xml}: The configuration parameter "Lang2CodeBase" renamed to "LangBase" with support "Lang2CodeBase" up to the 1.0 release.
  • The source code messages and program documentation:
  • .,DAQ.DAQGate: The messages redundancy and messages transferring in DAQ.DAQGate limited for depth of the requesting messages up to the restoring time or one hour.
    • The archivers redundancy and DAQ.DAQGate switched in the initial messages requesting to:
      • request the active alarms;
      • request the archive in deep and up to the alarms requesting time, without the alarms activation;
      • ordinal-periodic request of the last messages, without the alarms activation.
  • Protocol.HTTP,UI.{WebCfg,WebCfgD,WebUser,WebVision}: Appended of the previous user detection to mark that actions for HTTP-modules with moving the previous user authentication session closing after successful the new one.
    • All the HTTP-modules adapted to the user field in the HTTP-functions with the previous user in the second line.
    • FIX:WebVision: The previous user is used now for detection of the user change between the ordinal users and for single session, than prevent to create new sessions.
  • Expanding the binary symbols [\x0-\x8\xB-\xC\x0E-\x1F] shielding:
    • XMLNode: Appended of the new saving option BinShield(0x400) for controllable shield the binary symbols [\x0-\x8\xB-\xC\x0E-\x1F], what is significant for the WebBrowsers.
    • UI.{WebCfgD,WebVision}: Appended of encoding the XML traffic for the binary symbols shielding using the new option "BinShield".
  • FIX: strParse() rewrote and tested in processing the group symbols merging at the scan; and strParse(), strLine(), pathLev() in position the offset to the next token begin and limiting in the down for 0; and pathLevEnd() in positioning the offset to the next token end and limited in the up for the size. TModSchedul::chkAllowMod(),UI.QTCfg,Protocol.HTTP: switched in use TSYS::pathLevEnd() and TSYS::pathLev() in the new behaviour.
  • Force loading appended of the errors suppression for not modified nodes before that operation.
  • .,DB,DAQ: The global configuration context copying mechanism (interstation) appended for the marking link to the last setting operation object, to easy postmarks setting.
    • DAQ: As a postmark to the saving DAQ-parameter object there appended the attribute "prmTp" with the parameter type, which is used next in true detection the parameter type changing at the following loading.
  • .,UI.{QTCfg,WebCfgD}: The OpenSCADA Control Interface for Tables expanded by the user commands.


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


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


  • SSL: Both input and output parts appended of the possibility to point the certificates and the key directly from an external file. Appended for reloading the certificates file of the input transport at it change by the transport reconnect.

Transport Protocols

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

User Interface

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