Documents/Release 0.9 - OpenSCADAWiki

# Documents/Release 0.9

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

## 1 Introduction

The release of OpenSCADA, an open SCADA (Supervisory Control and Data Acquisition) system, version 0.9 is a stable production release of the long-term support (LTS).

The main purpose of the release is to provide an updated and stable platform for building integrated automation systems and other adjacent solutions for the community of users and developers of the free software. Also, the release is intended to become an actual and solid foundation for commercial solutions building.

The release is the next release of the stable branch for which, over a long period of time, there provided the technical support from developers and releasing of updates in the form of public builds for the main and stable environments of Linux, as well as operational builds for holders of packages of the technical support. The life cycle of the previous release 0.8.0 LTS stops from its latest update, right before the first builds of 0.9 LTS packages.

It was at this version that the final transition to the Work/LTS development scheme took place, that is, the development is carried out within the working version and on its basis periodically released the stable releases, which, in turn and in parallel, are updated by the back-porting compatible changes from the working version. The initiating transition took place in 2013, when the current stable version was recognized as 0.8.0 LTS and the working as 0.9 Work. Currently, 0.9 LTS is announced as a stable version, and 1 Work as a working version.

In general, the new stable version is the result of six years of development, implementation to various solutions, stabilization and exploitation of OpenSCADA in its work branch, which is currently being released as a stable one. All this time updates for 0.8.0 LTS continued to be released and what will be done for the announced 0.9 LTS.

This document is a generalization of the Change Log, starting with the zero revision of the previous LTS version, through its updates and ending with the current one. The document is intended to briefly and clearly show the new features of OpenSCADA. You can read in detail the changes in the "ChangeLog" file of distributive packages or from the source: http://oscada.org/svn/tags/openscada_0.9/ChangeLog.

### 1.1 Overall information

The OpenSCADA project was founded by Roman Savochenko in 2003 as a free implementation of the SCADA system or the Human Machine Interface (HMI), based on its thorough projecting during 2002 and the experience of using and developing a commercial SCADA system to this.

SCADA or HMI systems are generally designed and used to carry out human operational control over the work of complex and responsible technological equipment and processes of various manufacturing enterprises.

At the time of announcement of 0.9 LTS, OpenSCADA is a developed SCADA/HMI system, which is quite widely used as in the direct destination and, due to its flexibility, in many related industries and it can definitely be called more general — a dynamic system of working with data in the real time.

The number of the stable version of OpenSCADA is less than one only because its purpose was claimed multiplatform, to achieve which in the planned volume is scheduled for the next stable release number 1. In general, the objectives of OpenSCADA are:

- openness — mostly GPLv2;
- scalability, flexibility, extensibility — modularity, multithreading and internal dynamism;
- executive redundancy — reservation;
- accessibility — opened source texts; multilingual; dynamic multilingual; automatic build for archives, packages, live disks, ...; builds and executes on wide age Linux environments, from 2002 (2009-ALTLinux 6, LP8x81, Fedora 12; 2012-Debian 7) to modern ones;
- reliability — practical application, quick problems solving;
- security — permissions distribution, SSL;
- multiplatform — x86_32, x86_64, ARM, Web, Android, QNX (preadapted), MS Windows (scheduled);
- united, unified, user-friendly, dynamic and advanced user interface — Qt, Web, transparent and multi-level remote dynamic control;
- wide range of the data sources — unified ones, DAQ boards and low-level buses, created into the environment of OpenSCADA.

### 1.2 Application

Roles of OpenSCADA.

For actual implementations, where at least one implementation is known and with a short list of which from the project participants you can read through this link, belong:

- ACS TP (SCADA/HMI) or telemechanics systems — the main direction and there are many implementations;
- dynamic models, imitators and training apparatus of technological processes into the real-time;
- machine tools and industrial robots;
- agricultural dispatching and control systems, poultry-yards;
- embedded and mobile systems — environments of execution Programming Logical Controllers (PLC), robots, ...;
- server equipment monitoring;
- smart houses and home automation.

With some restrictions and improvements, largely in the user's internal environment, OpenSCADA can be used in the following areas:

- enterprise resources management (ERP);
- Geo-location and location tracking;
- trading systems;
- medical diagnostic systems;
- accounting and bookkeeping;
- billing systems.

## 2 Results of the previous release 0.8.0 LTS

The release 0.8.0 LTS was released in April 2012 and during these six years it received 20 updates, which, in total, corrected over 500 errors and added many improvements that do not violate the compatibility of library databases and configurations.

The configuration and library databases of 0.8.0 LTS were generally frozen due to large incompatible changes at 0.9 Work, for OpenSCADA launch methods, and the imperfection of distributing the library databases at the release date of 0.8.0 LTS. Therefore, the upgrade and transition to 0.9 LTS will be non-trivial, although 0.9 LTS provides everything possible for simplification this procedure. Updating 0.9 LTS to the planned future 1 LTS will no longer be so complex and in fact can only turn into a formal change in the version of the working branch, since now it is planned to upgrade all, including the library databases.

## 3 Planned tasks of the release

The development of OpenSCADA, after the previous LTS version and within the Work branch, was mainly through deep stabilization and through the practical adaptation with elements of the expansion of the existing functional, aimed to provide a stable and reliable environment for the industrial automation and related tasks, and therefore, there was no clearly defined plan. But three years before this release, such a plan appeared and made the following tasks, as seen from the general development plan:

- Full revising the main documentation and preparing the release announce.
- Adaptation for work on the software platform "Android".
- OpenSCADA knowledge and documenting WIKI-resource moving to a new engine with the structure unification for multi-languages into the priority: English, Ukrainian, mRussian; and the off-line documentation generation at it changes.
- Main Web-modules revision, actualization and some expanding.
- OpenSCADA expanding and adapting for direct working with the low-level buses and their devices like to 1Wire, I2C. Implementation for "the Smart House" in my own apartments.
- Automation Linux distributive of the project OpenSCADA formal creation and documenting.
- Creating the Automatic building system of the OpenSCADA packages.
- Moving the OpenSCADA server infrastructure to its own equipment and Internet channel.
- DAQ.OPC_UA: Simplification, features rising and protocol's code moving to a separate library on LGPL v3.

These tasks are done and some details about them are given below.

## 4 System-wide properties

The new stable version of OpenSCADA has gained significant system-wide extensions, increased stability in work and productivity, and also received significant improvements to the graphical user interface and its environment, such as: advanced configuration, documentation, accessible directly from the program (offline and online), and which significantly revised and updated.

The common part of documentation of the project has been moved to a new Wiki, based on MediaWiki, and a significant amount of this part has been revised and translated into three languages — English, Ukrainian, mRussian. For the pages transferring a converting procedure from the WackoWiki engine dialect to MediaWiki was created which was completely written in the internal programming language of OpenSCADA, and is used to transfer large volume of the old Wiki. Format the offline documentation has been changed from static PDF-files, that were not updated after the previous LTS version, to HTML-files which dynamically generated from the actual knowledge base (Wiki) of the project, and have actual cross-links between pages and links on the online-documentation, for exclusively external materials. The offline-documentation is also generated by a specially-written procedure in the internal language of OpenSCADA, which, along with the procedure of the Wiki-dialects converting and complex testing the release OpenSCADA, is a bright sign of power and the current level of development of the internal language of OpenSCADA.

Within the old Wiki, after the release 0.8.0 LTS, some documents were added and updated, and with the transferring to the new Wiki, in addition to revision and translation of the main part of the documentation, the overall unification of its structure was made for reasons of: multilingualism (English as a primary language), the logic of the organization, the convenience of translation and the ability to remove duplicate articles from the official site, which at the moment are simply used with the Wiki. We will separately note the significantly expanded main documents:

- Quick start;
- Program manual;
- User API of OpenSCADA;
- FAQ and How to ...;
- Creating OpenSCADA module.

The original language (English) was completely revised in original messages of the program and mainly for the main articles of the documentation-Wiki OpenSCADA, which is currently making OpenSCADA an adequately favorable for an audience that does not understand the original language — Ukrainian or mRussian. And, along with the full realization of the dynamic translation mechanism, it is possible to build on the basis of OpenSCADA the dynamically multilingual user interfaces that you can see, in particular, on the publicly available Web-interface of the dynamic simulators of TP: AGLKS, Boiler.

The Work version, based on this stable, for the first time defined the OpenSCADA projects conception and implemented a command line script for launching and creating OpenSCADA projects. Immediately before the release of this version, the concept of the OpenSCADA project was finally assigned to the folder with the data of the separate project and the configuration file of OpenSCADA, and the implementation of the project manager was integrated directly into OpenSCADA. Consequently, this LTS version has a developed concept for the project manager that allows to flexibly work with them and eliminate the dangerous possibility of multiple launches with the general data of one project.

The Work version also introduced modification of the modules versions at modification in the code of the module and just before they are uploaded to the source repository, and therefore, the versions of the OpenSCADA modules of this release clearly reflect the overall level of development and stability.

Live disks of the Automation Linux distributive of the project OpenSCADA.

In the process of implementing works on the Work branch, based on this stable, there were introduced the repositories of Linux distribution packages with the OpenSCADA builds, which until now were only provided as separate packages. That significantly simplified the deployment of OpenSCADA and keeping it up to date. Then automatic builder of these packages was created, which currently has up to 100 targets, and which greatly simplified the release of updates for both branches, that is the Work and this stable. Therefore, this LTS version provides packages collections for the main Linux environments and the entire history of public updates will be saved.

To the OpenSCADA packages collections there also provide builds of the live disks of the quick acquaintance and deployment of OpenSCADA together with the system environment. Currently, they have received a formal background in the form of the Linux Automation Distribution of OpenSCADA.

Main OpenSCADA server.

OpenSCADA builds and packages are accompanied by a number of open and free materials of the internal environment of the program, that is, the development of the data acquisition and processing layer, graphic representation elements and whole-complex projects of the TP simulators. These materials are provided as SQLite database files and include:

- Functions libraries (OscadaLibs), "LibsDB/OscadaLibs.db" — contains all the development of the OpenSCADA project in the data acquisition and processing layer, including data source elements of the user protocol.
- VCA: Main libraries (vcaBase), "LibsDB/vcaBase.db" — contains main elements of the graphic representation and elements of the mnemonic schemes of the OpenSCADA project.
- VCA: Tests (vcaTest), "LibsDB/vcaTest.db" — contains test elements of the graphic representation primitives.
- VCA: Library of electrical-elements of the mnemonic schemes of the user interface (vcaElectroEls), "LibsDB/vcaElectroEls.db" — contains elements of the graphical representation of the electrical schemes.

Hosting of the project in general and materials of 0.9 LTS in particular were transferred to own project server, where additionally were deployed: the demonstration Web-interfaces of OpenSCADA simulators, the project of server monitoring and smart home based on OpenSCADA and builder of the packages of the OpenSCADA repositories.

### 4.1 Internal

The resolution of internal data of the integer type of the OpenSCADA environment is increased to 64 bits. In general, the internal data of OpenSCADA, with error value reservation (EVAL) for each, is unified by common types: logical, integer, real, string, and object. Which primarily concerns the data sources.

To the OpenSCADA core, its own protocol and all nodes that work with remote stations OpenSCADA; added the ability to "raise" the nodes of OpenSCADA that are located behind other nodes and, as a rule, in another network. What generally allows you to centrally manage the OpenSCADA network at any level of the hierarchy.

### 4.2 Improvements and adaptions to the different platforms

OpenSCADA on Android.

This version of OpenSCADA has gained in-depth support and ability to adapt to different platforms. This was mainly due to the adaptation to work on the Android software platform and the restoration of the building and work with ucLibC, and that it is planned to be used for further adaptation to work on QNX and MS Windows software platforms.

Raspberry Pi.
Orange Pi.

Working on the Single-board PCs was expanded by the Raspberry Pi and Orange Pi boards.

Nokia N9.

Support of the Linux smartphones of Nokia was appended by the last one based on MeeGo 1.2, that is Nokia N9. Or it was the renewing of support for the Nokia N950.

In addition to direct work (natively) on different platforms, the Web-interface has been significantly expanded, which currently implements all the general features of the concept of the Visualization Control Area (VCA).

### 4.3 Optimization, stabilization and performance

Significant stabilization of the OpenSCADA core, and the overall program, has been achieved through the unification of internal resources control and the expansion of capabilities of the user debugging. In general, the user diagnostic and debugging expanded:

- general enabling-disabling of the debugging and target control of the debugging nodes;
- special debugging of the controller objects of the data sources;
- special debugging of execution of the VCA projects;
- in-depth statistics formation for execution of the dynamic objects OpenSCADA, such as: controller objects of the data sources and their parameters, incoming and outgoing traffic, VCA sessions with detail up to widgets;
- logging of ingoing and outgoing traffic of the transports.

Almost all of the OpenSCADA modules have been subjected to deep and comprehensive stabilization and many have been optimized, of which especially should be noted:

- All DB modules — added processing and verification of database or DBMS errors, and issuance of messages about these errors in the case of user uploading and recording; increased productivity (up to ten times) DBs that support SQL, through the implementation of the pre-loading mode of the scan query;
- Calculator on the Java-like language (DAQ.JavaLikeCalc) — increased productivity by: saving the context of the function execution, constants pre-loading and direct access to string.
- Archiver to DB (Archive.DBArch) — significantly optimized for recording and reading of the database, that is: group recording of multiple archives to one table and block reading (multiples of ten) in one query.
- All transports — increased for the overall productivity.
- Operation user interface (WEB) (UI.WebVision) — sensitivity of the interface increased by using asynchronous queries in the overall updating cycle.

Redundancy of the OpenSCADA stations.

Reliability of the redundant station on an integrated solution scale, more precisely the preservation of the history data, was enhanced by the extension of the redundancy mechanism, which potentially involves reserving any subsystem and currently implements the subsystems "Data acquisition" and "Archives-History".

And, for the program as a whole, a series of formal comprehensive tests was executed, that was pre-expanded in the internal integrated testing procedure of the OpenSCADA release. On the basis of these tests, several bugs were detected which were fixed.

### 4.4 Data acquisition

User object model of the core OpenSCADA.

Given the key role of the data acquisition in this type of software, this feature, in the person of the subsystem "Data acquisition" and its modules, has received significant improvements, of which particular attention should be paid: shifting emphasis on the extending supported data sources from implementation of individual modules of the subsystem "Data acquisition" in the system language "C/C++", to their implementation in the OpenSCADA environment and in its internal language — logical level of OpenSCADA. That is, at the logical level of OpenSCADA, can be and implements everything that: uses the network to access the data, does not require to use specific libraries and functions, and is not very complicated. Currently there implemented in this way:

Low-level devices connected to Raspberry Pi.
OpenSCADA on Raspberry Pi LCD screen.

- Sending SMS (SMS) and Email (SMTP).
- Uninterruptible Power Supply (UPS), as a data object with attributes of values.
- Simple sensors:
  - Елемер TM510x;
  - EDWARDS TURBOMOLECULAR PUMPS (SCU750);
  - Sycon Multi Drop Protocol (SMDP);
  - Power supply of the turbo-molecular pump (TMP-xx03);
  - Temperature measurement IT-3 (IT3);
  - IVE-452HS-02;
  - OPTRIS CT/CTL;
  - CTR 100, 101.
- Computer of the heat-counter VKT7.
- IEC-60870-104.
- Test implementations and examples: DCON, OWEN.
- Bus "One Wire" in help of {DS9097,DS9097U} (1W_{DS9097,DS9097}) for chips: DS1820, DS1820/DS18S20/DS1920, DS1822, DS2413, DS2408, DS2450, DS2438.
- Bus I2C: PCF8591, PCF8574, BMP180, DS3231, AT24C{32|64}.
- Generic ports IO (GPIO): DHT11,22 (AM23XX). GPIO|I2C: 1602A(HD44780).

Given the increased role of the logical level of OpenSCADA, there has been an increase in the requirements to the flexibility of the data model of the data source, which was satisfied by:

- completion of the coverage of the internal data model by all the functions that are specific to the areas of application;
- adding hierarchy to the parameters of controller objects of the data sources;
- giving the possibility of an arbitrary and dynamic formation of the data model — a set of attributes of parameters.

The OpenSCADA internal programming language has made significant improvements and, at the moment, satisfies all the requirements of the areas of application OpenSCADA. Many of these enhancements came in the previous version of 0.8.0 LTS, and some could not get there because of the backward compatibility or lack of stability at that time. Of these significant improvements, it should be noted again: increasing the resolution of the data of the OpenSCADA internal environment of the integer type up to 64 bits and preserving the context of execution of the internal procedures.

### 4.5 Graphical environment

OpenSCADA projects selection dialog.
Custom control of the Qt interface appearance.

In general, the graphical environment has been significantly developed, and the main one has been the extension of the module of starting the Qt-interface, as the basis for the rest local interface modules. First of all, this module and the core of OpenSCADA are adapted to allow the Qt-library to run in the main thread of the program, eliminating many of the problems associated with execution in the non-main thread, and also provides work with version 5 of this library. Secondly, this module took on the role of the selecting interface of the OpenSCADA projects when it launches and switches, as well as creating new ones. And thirdly, because of its primacy to launching Qt, it received the function of controlling the appearance of the program regardless of the graphical environment and the possibility of its launch-closing in the system tray. In general, it has made of the possibility to customize OpenSCADA to personal user requirements and to adapt it to very specific environments such as Android.

Notable improvements have been made to the Qt and Web configuration modules, which are particularly noteworthy:

- Configurator-Qt (UI.QTCfg): querying remote stations in a separate thread from the Qt-thread made it more convenient and more predictable and even, along with one update, got into the previous stable versions of 0.8.0 LTS.
- Configurator-WEB (UI.WebCfgD): in general, has been completely updated to the interface, which is now more dynamic, user-friendly and can be extended by themes.

OpenSCADA on Web.

Notable improvements were also made to the Visual Control Area (VCA), consisting of all its modules:

- VCA Engine and the visualizer modules at all (UI.VCAEngine):
  - allows to carry out a full-hot development, that is — editing the VCA project at the time of its execution by sessions;
  - the original interface messages are fully corrected, grammatically and spelling correct for the English language;
  - provided a number of additional types of the primitive "Form elements", "Diagram" and extended the primitive "HTML" by "HTML" displaying;
  - the mechanism of the widget specific attributes to the visualizer was provided, which allowed to reveal and use their individual properties;
  - new-flexible mechanism of user notification about extraordinary events in the process controlled by the system, which provides the possibility of free formation of custom announcers with the necessary properties, such as: mono-tone signal, synthesis of speech.
- Visualizer-Qt (UI.Vision):
  - noticeably improved performance of execution the remote interfaces and it is ensured for queries to the remote station in a separate thread from the Qt one, which facilitated remote development with parallel execution of the project;
  - forming the primitive "Document" can be performed at help WebKit.
- Visualizer-WEB (UI.WebVision):
  - unified, optimized and expanded by using CSS3;
  - provides the implementation for all elements-primitives of the unified interface;
  - performs the scaling to allowed space of the browser window;
  - increased for the working productivity and the interface sensibility, through using only the asynchronous mechanism at updating.

All Web modules, in general, have the opportunity to change the view by topics, through the system-wide interfaces of the protocol HTTP and its mechanisms for query processing and response forming. Also, they all have the support of dynamic translation of the interface, which is especially relevant for multi-user Web-interfaces, and what you can see on the demo Web-interfaces of the OpenSCADA models: AGLKS, Boiler. There is also a mechanism for the distribution of access to the pages, which, in particular, allows to differentiate access to the Web-modules in general.

## 5 New and significantly updated modules

The new version has added new modules and significantly updated a number of present ones:

- New modules added:
  - MMS(IEC-9506) (DAQ.MMS) — a module of supporting for data exchanging at the protocol "Manufacturing Message Specification (MMS, IEC-9506)".
  - Comedi (DAQ.Comedi) — a module of supporting the data sources of the real time (library "Comedi"), which are based on the data acquisition boards of different manufacturers and are installed on the buses: ISA, PCI, PCMCIA and USB.
  - SMH2Gi (DAQ.SMH2Gi) — a module of implementation of access to hardware modules of the data sources of PLC Segnetics SMH2Gi,SMH4 for "MC", "MR", and also for interaction with the original environment "SMLogix".
  - Fastwel IO (DAQ.Fastwel) — a module of data exchanging with the hardware modules of Fastwel IO.
  - FT3 (АПСТМ) (DAQ.FT3) — a module of data exchanging with the PLC АПСТМ, АСДКУ, СУАП.
  - GPIO (DAQ.GPIO) — a module of accessing to GPIO of the single-board PC like to Raspberry Pi, Orange Pi and other.
- Calculator on the Java-like language (DAQ.JavaLikeCalc) expanded for: support for internal functions, dynamic translation of messages and many other functions of the user programming interface in general.
- Data sources gate (DAQ.DAQGate) expanded by reflecting the messages associated with the selected data source.
- Data acquisition of OS (DAQ.System) expanded for the data sources: "File System", UPS, QSensor and the ability to separate slow sources from fast ones.
- ModBus ({DAQ,Protocol}.ModBus) expanded for support string, as a sequence of values of the registers.
- Client DCON (DAQ.DCON) significantly expanded for specific modules support.
- Roles of OpenSCADA as the OPC-UA server.
  OPC-UA (DAQ.OPC_UA) significantly expanded for Publishes and to support for "Chunks" into client part of the service, the specific protocol code is separated from the library.
- Equipment of ICP_DAS (DAQ.ICP_DAS) significantly expanded, and in fact completely rewritten, for support all available ICP_DAS data acquisition boards for the series I8k, I-87k, on the ISA bus and unified types for standard modules of the I7k series.
- Siemens S7 PLC (DAQ.Siemens) significantly expanded its own implementation of ISO-TSAP.
- Diamond data acquisition boards (DAQ.DiamondBoards) significantly expanded, but in fact completely rewritten, to support all existing data acquisition boards from Diamond Systems.
- AMR devices АСКО (DAQ.AMRDevs) appended of support the counter Kontar (MZTA).
- All DB modules significantly expanded by the dynamic translation.
- Archiver to DB (Archive.DBArch) expanded by archiving several archives into one table and restoring the list of archives from information in the database.
- Archiver to FS (Archive.FSArch) added for supported the intermediate types "Int16", "Int32", "Int64", "Float", "Double", and appended by an absolute limit to the size of the archive on the disk.
- All transport modules extended for the pooling mode of the input transports and protocols.
- Sockets (DAQ.Sockets) expanded by the RAWCAN bus support and initiated connections of the input transports.
- Serial interfaces (Transport.Serial) expanded for the low-level bus I2C support; special user functions of the serial interface: "sendbreak", "TS", "DR", "DCD", "RI"; advanced control RTS for RS-485.
- Security Sockets Layer (Transport.SSL) expanded by support: TLSv1.1, TLSv1.2, DTLSv1.
- Own protocol of the program (Protocol.SelfSystem) expanded for hierarchical and multi-level targeting of requests to external hosts.
- HTTP (Protocol.HTTP) expanded for adapting to the user interfaces in the system dialogs and providing a generic API for building HTTP interfaces for both the user and the modules behind it.
- Program configurator (Qt) (UI.QTCfg) OpenSCADA control interface requests are moved to a different thread and improved for implementation of the control elements.
- Program configurator (Dynamic WEB) (UI.WebCfgD) expanded with a new design using CSS3 and the features of modern WEB browsers.
- Conception and the Visual Control Area (VCA) (UI.VCAEngine) expanded by: support for specific visualizer attributes of the widgets, implementation of the new-flexible mechanism of the user's notification, background (in a separate thread) execution of the document forming task, increase of the number of trends in one frame to 100 and support of the logarithmic scale for the primitive "Diagram".
- Operation user interface (Qt) (UI.Vision) expanded: to work on the network through the visualizer server; implementing a group of attributes specific to this visualizer; realization of the views "Tree", "Table" and extension of the type "Button", of the primitive "Form elements"; implementation of the view "XY" of the primitive "Diagram"; significant refactoring code of the primitive "Elementary figure".
- Operation user interface (WEB) (UI.WebVision) expanded for using CSS3 and the capabilities of modern browsers, in particular: added zoom to the available window browser space, implemented all the primitives of the unified interface.
- Functions library of the system API of the user programming environment (Special.FLibSYS) expanded by the functions and objects: "floatExtract", "md5", "tmSleep", the object "IO"; significantly expanded for the actual functions and objects: "dbReqSQL", "FFT", "strParse", "strDec4Bin".

## 6 Conclusion

On the way to the new release 0.9 LTS of industrial use, much work has been done to stabilize, expand functionality, and expand adaptability to work on alternative platforms. All this in general has further expanded the scope of full use of OpenSCADA at all levels of industrial automation systems and related areas of automation and automatic.

LTS versions of OpenSCADA are not blank, they are really supported all the time until the next LTS version, and support for this version will be further expanded with the service updates. Also, the emphasis and implementation policy of the LTS version, which was previously recommended to upgrade configurations with frozen library databases, will be shifted to the using priority on a wide range of new solutions.

Previous adaptation of OpenSCADA to work on QNX.

In the emergence of the new industrial version of OpenSCADA 0.9 LTS took part:

- Roman Savochenko: the main volume of work on the development, testing, building, documenting and translation of the program and documentation in three languages.
- Maxim Kochetkov: implementing the modules DAQ.Fastwel, DAQ.FT3; expanding the module Transport.Sockets by support RAWCAN and the module Transport.Serial by extended control RTS for RS-485.
- Arsen Zakojan: implementing for support the electricity counters "Mercury 200" and "Mercury 230".
- Ruslan Yarmoliuk: implementing for support the electricity counter NIK 2303.
- Almaz Karimov: expanding for the module of the protocol DCON implementation.
- Arcadiy Kisel: implementing for support the I2C temperature, barometric pressure and humidity sensor BME280.
- Constantine (IrmIngeneer): support of the OpenSCADA build on the Linux distribution Gentoo.
- Sergij Doroshka: previous adaptation of OpenSCADA to work on QNX.
- The organizations which caused to the most significant OpenSCADA improvement through it integration to own control systems:
  - Proviron Holding NV: purchasing the technical support packages for the general support, fixing and improvement the Siemens ISO-TSAP(ProfiNet) protocol implementation, some workouts with Raspberry Pi, 2014, 2016-2018.
  - Laboratory of the vacuum technologies: "Vacuum technological facility", 2011-2018, and financing equipment for the OpenSCADA server, 2014
  - Optima: "Automation System of the Metropolitan", 2015-2016.
  - Vector: purchasing the technical support packages for fixing and improvement the OPC-UA implementation to work with different OPC-UA clients and servers, 2015-2016.
  - Kramatorskteploenergo+DIYA: "ACS of the ball drum mills BDM 287/410 of the boiler #8 of BKZ 160–100 PT", 2015, and "ACS of Phosphating, Amination and Hydrazine of boiler BKZ 160–100 PT", 2014. For PLC there used ICP-DAS LP-8781 with OpenSCADA in a role of environment of execution of PLC.
  - Hartron: "Reactivity Monitoring System (RMS) of the Subcritical Nuclear Facility (SNF)", 2013-2015.
- Many other organizations and individual users who wished to remain anonymous, through the purchase of technical support and services, constructive feedback on implementation and exploiting.

Further development efforts will focus on:

- Completion of revisions of the basic documentation, mainly for modules and libraries.
- Clear definition and update of the policy of providing commercial services around the OpenSCADA project:
  - view and update the terms of package of the technical support;
  - policy and organization of building updates to the stable branch: preserving the history of all public updates and organizing service ones;
  - distribution of exclusively commercial builds with public demonstration on an example package for Android — development and formation of a mechanism for monitoring the term of the package of technical support and demonstration mode.
- Mastering and adapting to Enterprise Resource Planning (ERP), focusing on:
  - create a resource management interface on the project server;
  - creating a common interface for tasks control and their funding, with the organization of developers to engage in the implementation of these tasks and technical support.
- Expand the application functions in the areas: "Smart House", "Home Automation" and "Custom Robots".
- Adaptation to work in the environment of the operating systems QNX and MS Windows.

## 7 Updates

### 7.1 [01.01.7534/01.03.2026] The NINTH update

This update of the 0.9 LTS release fixes about 70 bugs and appends MANY improvements, which you can read wholly in the update ChangeLog.

Automation Linux distributive of the project OpenSCADA

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

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

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

New and significantly updated parts

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

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

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

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

- DAQ.System: 3.3 => 3.5

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

- DAQ.LogicLev: 2.9 => 2.11

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

- DAQ.OPC_UA: 2.8 => 2.10

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

- DAQ.ModBus: 3.9 => 3.11

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

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

  (Syntax highlight in the textareas)

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

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

- LibsDB.vcaBase.Main: 2.2 => 2.3

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

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

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

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

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

OpenSCADA libraries and projects

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

API
!!!!:Changes:

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

Appends:

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

SYS

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

DAQ

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

Archives-History

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

Transports

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

User Interface

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

### 7.2 [01.01.7533/01.03.2025] The EIGHTH update

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

Automation Linux distributive of the project OpenSCADA

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

Main WWW-resources, documentation of the project and subprojects

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

New and significantly updated parts

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

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

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

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

- Transport.Sockets: 4.8 => 5.1

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

- Protocol.OPC_UA: 2.2 => 2.3

  (True authentication with control the permission)

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

  (Expanding for support direct writing)

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

  - initRemCntr: 1.1
  - fileServerHTTP: 1.0 => 1.2

- LibsDB.OscadaLibs.LowDevLib: 1.5 => 1.6

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

- LibsDB.OscadaLibs.DevLib: 3.0 => 3.1

  - ergomera125: 0.5
  - mbBase: 1.2 => 1.3

- LibsDB.vcaBase.Main

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

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

CONCEPTUAL > Implementing properties of the Control Objects

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

CONCEPTUAL > Implementing the custom ACLs to the control nodes

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

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

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

CONCEPTUAL > Expanding the project management

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

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

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

OpenSCADA libraries and projects

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

API
!!!!:Changes:

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

Appends:

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

SYS

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

DB

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

DAQ

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

Archives-History

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

Transports

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

Transport Protocols

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

User Interface

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

#### 7.2.1 Service updates

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

### 7.3 [01.01.7532/01.03.2024] The SEVENTH update

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

User significant actions on the update

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

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

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

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

Automation Linux distributive of the project OpenSCADA

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

Main WWW-resources, documentation of the project and subprojects

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

New and significantly updated parts

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

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

- OpenSCADA "Transport" subsystem: 19 => 20

  (Refactoring and unifying the Transports subsystem ...)

- OpenSCADA "DAQ" subsystem: 14 => 15

  (Unification of conception the parameter types)

- DAQ.System: 2.4 => 3.3

  (Complete refactoring and expanding for ...)

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

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

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

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

- UI.QTCfg: 5.12 => 6.0

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

- UI.QTStarter: 5.14 => 6.0

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

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

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

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

  - fileServerHTTP: 1.0
  - weather: 1.0

- LibsDB.OscadaLibs.DevLib: 2.6 => 3.0

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

- LibsDB.OscadaLibs.LowDevLib: 1.4 => 1.5

  - UC96: 1.0

- LibsDB.vcaBase.Main: 2.0 => 2.1

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

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

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

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

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

CONCEPTUAL > Control for big memory consumption

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

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

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

OpenSCADA libraries and projects

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

API
!!!!:Changes:

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

Appends:

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

SYS

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

DAQ

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

Archives-History

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

Transports

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

Transport Protocols

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

User Interface

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

#### 7.3.1 Service updates

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

### 7.4 [01.01.7531/01.03.2023] The SIXTH update

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

Automation Linux distributive of the project OpenSCADA

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

Main WWW-resources, documentation of the project and subprojects

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

New and significantly updated parts

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

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

- OpenSCADA "Transport" subsystem: 18 => 19

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

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

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

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

  (Productivity optimisation of the VCA interface)

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

CONCEPTUAL > Productivity optimisation of the VCA interface

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

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

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

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

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

OpenSCADA libraries and projects

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

API
!!!!:Changes:

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

Appends:

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

SYS

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

DB

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

DAQ

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

Archives-History

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

Transports

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

Transport Protocols

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

User Interface

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

#### 7.4.1 Service updates

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

### 7.5 [22.12.7529/22.02.2022] The FIFTH update

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.

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

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

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

Automation Linux distributive of the project OpenSCADA

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

Main WWW-resources of the project — Site

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

New and significantly updated parts

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

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

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

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

- DAQ.DAQGate: 2.5 => 2.9

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

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

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

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

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

- UI.Vision: 7.14 => 8.0

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

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

CONCEPTUAL > Common Conception of the Data Storage

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

CONFIGURATION FILE

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

REFACTORING THE TCntrNode FLAGS

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

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

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

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

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

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

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

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

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

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

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

  PRIMARY PROJECT OBJECTS

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

  INDIVIDUAL MESSAGES - "Trs"

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

  SYSTEM MESSAGES

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

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

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

OpenSCADA libraries and projects

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

API
!!!!:Changes:

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

Appends:

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

SYS

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

DB

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

DAQ

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

Transports

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

Transport Protocols

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

User Interface

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

#### 7.5.1 Service updates

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

### 7.6 [14.04.7529/14.06.2021] The FOURTH update

This update of the 0.9 LTS release fixes about 45 bugs and appends some improvements, which you can read wholly in the update ChangeLog.

User significant actions on the update

- FIX:SYS: The common configuration field "WorkDir" was prevented from marking as modified one at the project switch than saving it in the configuration file, but there is no mechanism of automatic removing this field from the configuration file of the old projects.

  => remove manually the common configuration field "WorkDir" if it was appeared there in a wrong way and you have problems in use folders of foreign OpenSCADA projects by this project.

New and significantly updated parts

- OpenSCADA Core: 3:9:0 => 3:10:0

  (revision the translations mechanism)

- OpenSCADA "Transports" subsystem: 17 => 18
- {DAQ,Protocol}.OPC_UA,libOPC_UA: 1.7 => 2.1, 1.10 => 2.1, 1.2 => 2.1

  (appended for the Publish service implementation, CHUNKS support on the DAQ-client part and the code coming refactoring in generic)

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

  (common review and refactoring the tables)

- UI.Vision: 7.7 => 7.13

  (common review and refactoring the tables in Qt generically and in the view Table of the primitive FormEl of VCA)

- UI.WebVision: 5.8 => 6.2

  (common review and refactoring the tables in the view Table of the primitive FormEl of VCA)

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

OpenSCADA libraries and projects

- LibsDB.vcaBase,AGLKS.vca: Main.RootPgSo: Appended for:
  - the widget "alarms" on the primitive "Protocol" basis with the possibility of enable/disable;
  - appended for an optional function of returning to a default user after specified time of the inactivity in a new attribute "defUser";
  - switched to a non relative algorithm of the main mnemonic scheme's vertical position and height calculation.
- LibsDB.OscadaLibs: DevLib.IEC62056: Rewrote in the synchronous (request-answer) mode for working multiple devices on the serial bus.
- LibsDB.vcaBase:
  - The library "Main" appended for the new page "StoreHouse (storeHouse)" implementation.
  - Main.RootPgSo: Periodicity of the frame execution rise to 1000 milliseconds after appending for events early processing. Switched mostly from the hotkeys "Ctrl+?" to "CtrlAlt+?".
- AGLKS.vca: The project page /prj_AGLKS/pg_so/pg_4/pg_mn/pg_1 renamed to /prj_AGLKS/pg_so/pg_4/pg_mn/pg_CM101 like to other ones.

API
!!!!:Changes:

- SYS: The function TSYS::curTime() appended for an argument of the clock source specifying with using the function clock_gettime(). The EVAL_RFlt definition appended for the suffix "f".
- Mess: The translation function TMess::translSet() appended by an argument "srcFltr" of filtering at sources.
- Transports: The IO-log functions pushLogMess() appended by the arguments "data" and "dataDir".

Appends:

- Mess: The data lock separated from all messages lock in dtRes.
- SYS: The user API functions appended by the function lang() of the system language fast obtaining.
  - Appended for the function TSYS::curTimeN().
  - .,DAQ.{LogicLev,ModBus,Siemens}: Appended and used for a global constant DAQ_APER_FRQ of frequency of representing the aperiodic invokes, like to f_start, of the periodic processes.
- Security: The user object appended for a function auth() of the User API to authenticate at password.
- Transports: The input and output transport objects appended for the IO-log attributes: "mLogLstDt", "mLogLstDtTm".
- DAQ: The DAQ-parameter object appended for an information field of the changing timestamp with it maximum value on the controller object, by the new DB configuration field "TIMESTAMP" of the parameter object.

SYS

- FIX:Building: configure.ac: Core library version risen to 3:10:0 and the program version risen to 0.9.4.
- The source code messages and program documentation:
  - rom_as@oscada.org replaced by roman@oscada.org in everywhere in the source.
  - The document "Modules/OPC_UA" complete revised for the modules version 2.1 and the translation.
- The "Translations" tab revised something, appended for the actual status, appended for some context help and the translations manager appended for:

    - limiting of the table form time in prmInterf_TM (7 seconds);
    - a configuration field of passing number the top messages;
    - translation setting only for the filtered sources;
    - checking the content for match only for the filtered sources;
    - pass the sources missing error.
  - The translation function TMess::translSet() prevented from propagation the group messages changed not from the translation manager.

- FIX:.,BD.LDAP,Archive.{DBArch,FSArch},DAQ.{ModBus,MMS},{DAQ,Protocol}.OPC_UA,UI.Vision: Some cleaned from the build warnings.
- FIX: The EVAL_RFlt definition appended for the suffix "f" to prevent of wrong comparing the double EVAL_RFlt with stored float values, fixes the archiver Archive.FSArch work with the float type values in the EVAL detection.
- FIX:Mess: The data lock separated from all messages lock in dtRes to prevent the concurrently locks at active work with translations. The mLang2CodeBase, mLang2Code attributes switched to this new lock.
- data/openscada-proj.in: Switched to linking user LibsDB content to the system RO-content-libraries instead the copying.

DAQ

- ModBus,Siemens: Switched in "f_frq" value form to use the real task execution information.
- {DAQ,Protocol}.OPC_UA.{.,libOPC_UA} : Appended for the Publish service implementation, CHUNKS support on the DAQ-client part and the code coming refactoring in generic:

    CLIENT:
  - attributes (monitored items) adding moved from attrPrc() directly to enable() and which ensured to call at the controller object start
  - ... and the items processing improved in updating the description, flags and link;
  - values acquisition is unified in processing in the parameter function upVal()
  - ... and the values requesting by the controller object function getValMIt() with the Arrays support
  - ... than preparing closely for builtin the logical parameter type;
  - the DAQ-parameter objects enabled for including other parameters;
  - the EVAL setting and removing for all attributes tested for all modes;
  - structure variables in DAQ-parameters allowed to select them items separately, in the selection browser;
  - the variables list of the DAQ-parameters parsing set to complete parsing with passing empty lines;
  - the DAQ-controller object appended in closing the session and secure channel at it stopping;
  - the controller object common status appended for the detailed information about the used secure channel, session, subscription and the processing monitored items;
  - the request lock renamed to resOPC.
    SERVER:
  - the OPC-UA Server object appended for the common server status tab with information about activity of the secure channels;
  - the EndPoint Node object appended for the common status with information about activity of the sessions and subscriptions, also the subscription task period and time of execution.
    LIB:
  - unified in specifying the default value of the secure channel life time, what set to 300000 ms;
  - the default LifeTimeCounter of the subscriptions set to 2400;
  - the object NodeId appended for the function operator==() of direct comparing;
  - the function XML_N::childClear() appended by a result of returning the same XML_N object for concatenation;
  - the function curTime() appended for an argument of the clock source specifying with using the function clock_gettime();
  - short functions appended for str2int() and str2uint();
  - some fields renamed: publInterv to publInterval, cntrLifeTime to lifetimeCnt, cntrKeepAlive to maxKeepAliveCnt, maxNotPerPubl to maxNtfPerPubl, en to publEn;
  - fixing "POOL" word on "POLL".
    LIB_CLIENT:
  - Client::reqService() appended for the meta command "CloseALL" of closing current session and secure channel;
  - the main client services processing function protIO() adapted to work in the asynchronous mode (not requesting);
    - the function Client::messIO() expanded for the timeout argument with specifying the requesting mode also;
    - the channel writing and reading is separated in MSG packages processing;
    - adaption the secure messages to work with the mixed input buffer;
    - moving the main service request "OPN" under the messages processing due to the renewals sending inward the Publish activity.
  - implemented for the Publish service on the client side:
    - the "Client" object appended for the subobject "Subscr" implementation (but stored in Client::SClntSess) with the functions: activate(), monitoredItemAdd() and monitoredItemDel();
    - the "Client" object appended for the function poll() with:
      - unifying the values reading both for the Read and Publish modes;
      - checking of loss all Publish requests during the OpcUa_ClntPublishResentCntr(2) keep alive count-time;
      - restoring the Publish pool.
    - the object Client::Subscr::MonitItem was added as the monitored items representer with the access under the client resource common lock;
      - the service requests appended for implementation, include processing the responses: CreateSubscription, DeleteSubscriptions, CreateMonitoredItems, Publish, Poll;
      - implemented and tested in the secure policies support at Publish;
      - the target Publish requests pool per subscription set in the virtual function publishReqsPool() with default value 2.
    - appended for the CHUNKS implementation both for requests and responses;
    - completely revised and cleared in the common requesting function reqService() from doubling the arguments and parameters:
      - appended for restoring sessions at reconnection the secure channel;
      - unifying the clearing of the current session and secure channel.
    - the client object appended by the common resources lock mtxData;
    - the message property "timeoutHint" set to 0 for all messages;
    - the Read request returned to the plain requesting with limition on CHUNKS only;
    - the error OpcUa_BadSecureChannelIdInvalid added for clearing the secure channel;
    - Client::SClntSess::{sessOpen,lstMessReq} renamed to {secChnlOpenTm,secLstMessReqTm}
    - ... and prevented from clearing in restoring the session and secure channel;
    - appended for debug message of the request errors.
    LIB_SERVER:
  - the server part adapted to work with UAExpert 1.5 for: the attribute AId_Descr of the DAQ-value set to the type OpcUa_LocalizedText, the integer types appended for declaration OpcUa_IntAuto and OpcUa_UIntAuto;
  - the subscriptions processing returned to they processing in a separate task and the function subScrCycle() for:
    - true counting all timeouts to disable;
    - processing the periodicity of subscription and publishing;
    - checking the assigned sessions and secure channels state to close the subscriptions.
  - but the publishing leave for processing in the input channel activity and the function Server::EP::publishCall() with preventing the Publish processing for wrong and foreign Subscriptions, by checking inPrtId, sesTokId and isSecCnlAct;
  - Session unification for: link of the sessions to secure channels switched to single one instead an array, the session checking of all messages appended of preventing of using foreign connections;
  - not final chunk packages switched to send directly, for not append to single TCP-package;
  - EP::mtxData lock switched to PTHREAD_MUTEX_RECURSIVE;
  - the secure channels limited in OpcUa_SecCnlLimit(10) and the publishes queue in OpcUa_ServerMaxPublishQueue(10);
  - EP::secSize() renamed to EP::secN() and there added EP::sessN(), EP::subscrN() and chnlList();
  - Server.SecCnl.{TokenId,TokenIdPrev} renamed to Server.SecCnl.{tokenId,tokenIdPrev}.

- ModBus: The output part of the protocol RTU variant appended for early termination of the package waiting of the standard functions [ERR,1...6,15,16], what increases the overall bandwidth twice.
  - IO of the Logical Level parameters enabled for the translation, for not linked strings and like to DAQ.LogicLev.
  - The DAQ attributes parsing switched to use TSYS::strLine() and TSYS::strParse() than allowing the symbol ':' in the name and empty lines in the text.
- DAQGate: The sync modes appended for a mode of preventing the sync in whole for the stored in the cache objects, allowing value -1 for the configuration field "Synchronization time with the remote station, seconds."

Archives-History

- FIX:FSArch: Critical fixed in the value archive files processing, in try they ID write to NULL string.
- DBArch: The message archivers appended for the configuration field "Unique and non duple messages for time and category only".
  - FIX: Fixed from crashes at the value archiver groups processing by not clearing the table field configs (TConfig) links under the locks and the unlocked function ModVArch::grpLimits() for reqRes.

Transports

- The IO log, both input and output parts, expanded and appended of:
  - combining data of packages with even direction and address during prmWait_TM (5 seconds);
  - microseconds part of the time fixed for 6 symbols;
  - the data messages appended for the direction symbol;
  - of limiting the one processing block size by a new configuration field;
  - performance significantly rising by using the preliminary buffer.
- FIX:Serial: The output transport fixed in the inter request waiting at the reqRetrMult*wCharTm processing as milliseconds.
- FIX:Sockets: The error "Broken channel (32)" is detected at the writing, after disconnecting the server, so the reconnection attempts set to 2 at (kz <= 0).

User Interface

- FIX:Common review and refactoring the tables in Qt and Web both generically and in the view Table of the primitive FormEl of VCA:

  - QTStarter,QTCfg,Vision: The common library class TableDelegate significantly improved to work in QTCfg and Vision:
    - appended for the own user roles SelectRole, TextLimRole and OneLineString;
    - the cell paint appended for the background color by reading-applying the common roles;
    - the number types (integer and real) appended for force centering;
    - the string types appended by the options of alignment and wordwrapping from the role Qt::TextAlignmentRole;
    - appended for long text visible limit support by the own role TextLimRole and the default value 300 symbols by sizeHint() additional reimplementation.
  - FIX: The view "Table" of the primitive "FormEl":

    - VCAEngine,QTStarter,Vision,WebVision: Appended by the new cell type 't'-text mostly for allowing the edition confirming the type 's'-string by pressing Enter.
    - VCAEngine,Vision,WebVision: Appended of the column, row and cell space option "prec" of the real value precision control; and by the column and cell attribute "align" implementation.
    - WebVision,Vision: Appended for switching the tables in preventing of double storing the source content at the content size more for 10000.
    - FIX:Vision: Using the common table delegate with the feature of multiline edition.
      - Improved in the columns, rows and cells show at the table updation and commonly:
        - in limiting the visual size of the cell content in 300 symbols and the rows height in 70% from the whole table size;
        - more precision columns width alignment;
        - in fitting at the development mode and also at the vertical header show;
        - in the table close filling by consideration the visible vertical scrollbar size;
        - in fitting after the table whole resizing only, so allow the columns resizing manually also and to provide that true fitting always.
      - Implemented for the light processing of the width changing and updating:
        - light edition without the columns refitting all updating time, only at: first row appearing, columns count change and the column title change, font change and resize;
        - apply the column force width and the row height calculation with limits independently from the common attribute "colsWdthFit" value;
        - setting the value, early resizing and the table fitting, moved to the space of the table content presence and after the sorting.
      - The export function in runtime append of export the view Table of the primitive "FormEl" in CSV.
    - WebVision:
      - Improved in the columns, rows and cells show at the table updating and commonly:
        - the not fitting mode (the attribute "colsWdthFit" missing) implementation, using the automatic table layout mode for calculation the fixed widths and next switching to the fixed table layout mode;
        - multiline text edition of the text cells in whole width and height of the cell, with the edition apply by Ctrl+Enter;
        - view limiting the string cells in 300 symbols;
        - display the boolean cells as an image at the TRUE state;
        - table cells in the editing mode allowed for the system-browser context menu.
      - Implemented for the light processing of the width changing and updating:
        - the table changes detection and updating switched to the mode of not storing double source content;
        - prevented from the complete updating at the attribute "value" modification.
      - Appended for the sorting support by columns. Set to the first visible column for sorting at the sorting enable.

  - WebCfgD: The table expandings for:
    - the big text content limiting in 300 symbols at the visibility;
    - the string type allowed for the multiline edition using TEXTAREA;
    - the type data "bool" is shown as an image, not "On" or "Off";
    - centring the boolean, number, time and selectable content;
    - simplifying the table content edition for the types time, number and string by removing the apply and spin buttons.

- QTStarter,QTCfg,Vision: The common Qt-code of the OpenSCADA Qt-modules started in their moving to the new library files lib_qtgen.* what placed in the module QTStarter folder and linked in all Qt-modules, and that done for: external icoSize(), colorAdjToBack() and TableDelegate.
- VCAEngine:

  - Appended and enabled as a build option for the mark mechanism of the attributes changing without the doubles, by requesting the previous-completed cycles, than also preventing the need of detection the doubles in the visualisers and storing the big source content.
  - The projects runtime improved in changing parents of the processing pages on the fly.
  - The session tasks execution appended of early execution at events presence.
  - FIX: The VCA-styles fixed in accessing to empty fields which don't load.
  - The "Diagnostic" page of the VCA-projects adapted to show the debug level messages at enable the debugging.
  - The project session execution information appended for the real periodicity taken from the task, which also used in form value of the procedure attribute "f_frq".

- Vision: The property dialogues of the "Widgets" and "Projects / Widget libraries" appended for own statusbar and a button of context manual invoking. The TextEdit widgets switched to own statusbar of the property dialogues for the cursor position and what disabled in ToolTip. The text code edition widget of the "Widgets" property dialogue appended in restoring the cursor position after apply or cancel.
- FIX:WebVision: Appended for detection disappearing of the project execution session and return an error, in the common request "pgOpenList", and at dropping down the calculation counter "tmCnt".

  - The keyboard focus and events significantly improved for ensure that working in common by:
    - setting the "tabindex" attribute for all active widgets and for FormEl items specially - for the form elements;
    - appending the "tabindex" number calculation as a unique one for whole interface, than prventing the tab focus jumps;
    - processing the onfocus event for the own focus setting by setFocus();
    - the view Button of the primitive FormEl appended for the keyboard events processing for down and up at the keys Space and Enter;
    - the primitive Diagram is simplified by removing the spare A item;
    - FIX: Fixed in the keyboard focus switching at mouse clicking on buttons with images.
  - FIX: Fixed in checking the removed widgets for all and the master page.
  - FIX: Fixed at last in plodding spare DIV items at the page changing in the page containers.
  - FIX: Prevented in cycling at presence the Web-session but missing the corresponded VCA-session.

- FIX:WebCfgD: Completely revised and expanded for:

  - the all internal tool actions moving to the implementation as buttons and the toolbar size set from 25 to 30 pixels;
  - removing the toolbar button images' size filtering-resizing on the server side;
  - page icon padding between the title set to 10 pixels;
  - the control page complete updating after the window resize;
  - the generic text edition field by TEXTAREA expanded for apply and cancel from the keyboard;
  - the hosts updating function bound to the double mouse click on the common space of the tree area;
  - FIX: the hosts updating function fixed in detection douple host items;
  - FIX: forced in the actual-selected item marking in the control tree after it rolling;
  - removing nodeText() and setNodeText() by direct using "innerText" and "textContent".

#### 7.6.1 Service updates

- the first (1) at 29.08.2021.

### 7.7 [20.10.7528/20.12.2020] The THIRD update

This update of the 0.9 LTS release fixes about 40 bugs and appends some improvements, which you can read wholly in the update ChangeLog.

Automation Linux distributive of the project OpenSCADA

- the packages "tdelibs" and "tdebase" were removed due to this fixes were applied in the master and stable branches of TDE;
- the patched packages "tdemultimedia-trinity", "tdenetwork-trinity" and "tdeutils-trinity" were rebuilt;
- the new patched package "tde-i18n-uk-trinity" was built;
- before the packages building there was changed the scheme of the package version forming of this distributive from "{+1}:14.0.9-0" to "4:14.0.9-{+1}" to prevent these packages freeze on next TDE versions; and the TDE main package repository of the Live Disks was switched to the branch "r14.0.x" instead the preliminary stable, what also present but commented;
- before the release there, in TDE Weblate, have finished the translation to Ukrainian for the parts-packages of TDE: tdelibs, tdebase, tdegraphics, tdenetwork, tdemultimedia, tdepim, tdeadmin, tdeaccessibility, tdeutils, krusader, yakuake, basket; and the patched package "tde-i18n-uk-trinity" was created for translating the branch "r14.0.x" difference from the master branch;
- the patch in "tdeutils" was appended for the key combination with holding Ctrl of slow changing the display brightness for KMilo.

OpenSCADA libraries and projects

- FIX:LibsDB.OscadaLibs: The library DevLib appended by the template "MTP 4D (MTP4D)" and "ModBus base (mbBase)".
- FIX:LibsDB.vcaBase: The template project (tmplSO) cleaned from spare mnemos of the prescription management and the main page appended of the actual alarms-violations table. The frame Main.RootPgSo unified for the notifiers in the generic attributes only for the VCA-server and notifiers Vision, WebVision: notify0, notify1 and notify2.

API
!!!!:Changes:

- Archives-History: {TMArchivator,TVArchivator,TVArchive}::DB() set to the constant qualifier.
- Transports.{.,*}: The timeouts setting function setTimings() of the output transports expanded in the default timeouts difference for different protocols, by the argument "isDef".

Appends:

- SYS.,*:
  - The system wide limits and parameters moved to the user configuration area (the configuration file) for some allowed range. STD_WAIT_DELAY moved to prmWait_DL and changed to 0.1 seconds. The previous system wide limits' and parameters' definitions left for the external modules compatibility!
  - TSYS appended for the function taskSendSIGALRM() of sending the termination signal "ALARM" to OpenSCADA tasks.
  - TValFunc: Appended for a state of the function execution by the function isCalc().
- Transports: The output transports expanded for a mark of the transport as Network one, by the function isNetwork(), in the User API also.

SYS

- FIX:Building:configure.ac: Core library version risen to 3:9:0 and the program version risen to 0.9.3.
- {DAQ,Protocol}.ModBus:
  - the subtype "_b" — bit type, expanded by moving the bit number to the register number field like to "R_b:123.12";
  - added by the flag "~" for inversion registers order of the complex subtypes in multiple registers, like to "_f";
  - the flag "rw" separated to "r" and "w".
- The module version of the subsystem "Transports" risen to 17.
- FIX: Prevented from authentication in user interfaces by the ready password hash.

DAQ

- LogicLev,ModBus,Siemens: Appended for termination long time executed templates at the parameter disable, using new functions TValFunc::isCalc() and TSYS::taskSendSIGALRM().
- FIX:LogicLev: Removed for the calculation lock "calcRes", what used only in locking the writing to the parameter attributes during the calculation and what can be long.

Archives-History

- FIX: Obtained current values, in the active archiving mode, forced to the current time, what is significant for the dynamic attributes archiving.
- The value archive configuration field "Mode of forming ID of the automatic created archives" expanded by the selection item "All controller, parameter and attribute ID", during the process of expanding the limit of the value archive ID to 50 symbols.
- FIX:DBArch: Fixed for only direct the values archiving in the group mode and when the values type may drop to the Integer type as the default one. The value archiving in the group mode appended for removing the according table column at the archive removing, for the table column hot removing just after appending some new archive, than preventing the table early growing to the DB limit.
- FSArch: Adaption to the ID size of the value archive more than 20 symbols, when its 14 extra symbols are stored in the reserve part (renamed to "archive_add") of the header and extra more in the filename.

Transports

- FIX: The function TTransportIn::assTrO() of processing input initiative connections complete revised to make new connection necessarily created as a new output transport, then preventing true finishing the present closed but not freed output transports.
- The transport commands renamed from "Running" to "Connect" and the statuses renamed from "Started. " to "Receiving data. " and "Connected. ", from "Stoped. " to "Disconnected. ".
- FIX:{Sockets,SSL}: The default timeouts returned to "10:1".

Transport Protocols

- HTTP:
  - Appended for the dynamic cookie name and the User ID space, where the cookie name is "oscd_UID" and is used the User ID space in work with the common authentication sessions table, and the cookie name is "oscd_UID_{PrjNm}" in the work without that.
  - FIX: Multipart POST of the output function outMess() prevented in the end boundary placing and improved in the "Content-Disposition" form.
  - The User ID generation improved in generation different IDs for the different processes, limited in 1e6, and appended by the random and configurable User ID space [0...99] * 1e6, used in the work with the common authentication sessions table.
- SelfSystem: Output transport specific timeouts are set to "20:2".
- ModBus: Output transport specific timeouts are set to "5:0.1" for Network transports — isNetwork() and the protocol variant "RTU".

User Interface

- FIX: TUIS::docKeyGet() fixed from the user array objects leaking.
- VCAEngine,WebVision,Vision: The primitive "Media" appended by the type "Audio" and the type "Full video" renamed to "Video", which also implemented in WebVision and Vision.
- QTCfg,Vision: Appended by a function of adjustion text colors to the background color — colorAdjToBack(), which used in correction the syntax highlighting and other dynamic colors to the palette changing.
- VCAEngine,Vision: Expanding the notifications implementation in way their implementation on WebVision, for:
  - using the standard way of the notifications obtaining through the corresponding attributes activation;
  - ntfReg() expanding for the negative type using in all types processing, freeing mostly, and some unification of the code;
  - expanding by the resource type obtaining;
  - appending the notifiers by the flag "notifyServ" of the notification enabling on the VCA-server side;
  - VCA-server side appended for the field "resStatic" of the direct resource specifying (non dynamic);
  - appending the notification procedures' context for the two variables "resTp" and "prcID".
- FIX:UI.QTStarter: Appended for the start dialog periodic updating in the project list.
- FIX:VCAEngine: Fixed in crash at a widget link setting to "prm". The resource requesting service "get:/wdg/res", Widget::resourceGet() and {WidgetLib,Project}::mimeDataGet() appended for requesting the resource parts, for big media files mostly.
- FIX:Vision: Appended of playing the notifications by the internal player at Phonon and not in the separate notification task. The call saveState() moved from the developing window destructor to the closing event, but a problem of empty context saving was observed after playing some media.
- FIX:WebVision:
  - Implementing of the notifications support.
  - Implementation of the resources uploading in parts, for big media, by the HTTP parameter "Range: bytes=".
  - FIX: Fixed in the page cache spare cleaning for widgets from pages with common name to the remove page.
- WebUser: Adapted to the work with POST and the content in the body.

#### 7.7.1 Service updates

- the third (3) at 23.03.2021.
- the second (2) at 01.03.2021.
- the first (1) at 01.02.2021.

### 7.8 [17.06.7528/17.08.2020] The SECOND update

This update of the 0.9 LTS release fixes about 60 bugs and appends some improvements, which you can read wholly in the update ChangeLog.

Automation Linux distributive of the project OpenSCADA

- KMix was completed in improving the work with PulseAudio by making dynamic in the patch "kmix-UpdMixersForChangeAndChMaster.patch".
- KRfb (VNC-server) was fixed for crashed and completed in implementation typing the additional keys to the main keyboard layout, Cyrillic mostly but allowed for additional UTF symbols also.
- Complete translation updating of the Trinity Desktop Environment project to Ukrainian for the parts: tdelibs, tdebase, tdenetwork, tdemultimedia, tdepim (mostly), krusader, yakuake.

OpenSCADA libraries and projects

- LibsDB.OscadaLibs: The Devices Library appended for the protocol IEC-62056 implementation (DevLib.IEC62056). The offline documentation appended for the document "AGREEMENT ON TECHNICAL SUPPORT OF THE "OpenSCADA" SOFTWARE" version 2 and the new module DB.DBGate.
- FIX:LibsDB.vcaBase.Main.alarmsSt: Some fixed for the original messages and the "quietation" completely replaced by "confirmation". Restored in preventing the duplicate entries for new alarms in that category.

API
!!!!:Changes:

- SYS: The station statuses unified in the function isRunning(), isFinalKill() and stopSignal(). TCfg::setReqKey() appended by a new argument "treatDep".
- DB: dataSeek(),dataGet(),dataSet(): Expanded for the local configuration context argument "localCfgCtx";
- *,DB: TBDS::dataSeek() and TTable::fieldSeek() switched to the seek cache implementing in the corresponded modules.

Appends:

- TMess,DB,DB.{SQLite,MySQL,PostgreSQL,FireBird}: TMess appended for a function of detection the configuration translation translCfg(), which used in all DB modules and in dataSet().
- SYS: Appended for the global configuration context accessing functions cfgCtx() and setCfgCtx().
  - The loading and saving configuration appended for own lock TSYS->cfgLoadSaveM().
  - Appended for the function pathLevEnd() of the paths processing from the end.
  - TRegExp: Appended by the function getPattern().
  - TFld: Appended for the combined string variant of the length field - lenS().

SYS

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

DB

- A new module "DBGate" created.
- FIX: TBDS::dataSet() expanded for setting only keys and viewed elements, like to other DB. Appended for changing-saving the defined entries in the config file instead complete saving all their in the default DB.
- FIX: The wrong started DB objects in the first fixed for try them next start tries.
- FIX: DB loading is prevented from double loading from the config file and from DB for the equal entries.
- The TBD object appended for the service control "call" requests support: "/serv/SQL", "/serv/fieldStruct", "/serv/fieldSeek", "/serv/fieldGet", "/serv/fieldSet", "/serv/fieldDel".
- FIX:SQLite: Detected and corrected of data losses with concurrence access, when a minor error of the not activated transaction "cannot commit - no transaction is active (1)" is generated, which, however, interrupts the data recording.

DAQ

- FIX: JavaLikeCalc: The internal functions executing appended for storing the shared-own registers context, in two variants, for allowing the recursion primarily.

Transports

- The output transports unified by creation the connection parameters, by conPrm(), instead direct ones prm1() and prm2().
- The configuration option "START" was removed for the output transports as spare one and to prevent long starting.
- FIX:Sockets,SSL: To prevent the multiple execution of the high loading and long-time control requests the output transports switched to:
  - the default configuration for Tries=1, Timeouts="30:2";
  - for the connection losses the tries number set to 2;
  - for the error "Timeouted" the connections also set to reconnect, besides the SOCK_FORCE type.

Transport Protocols

- FIX:ModBus: The output requests of the TCP-variant appended for checking Transaction ID of the response packages.
- FIX:SelfSystem: The output part expanded for checking correspondence of the responses to the requests by the request tag name. Appended for encoding special symbols of the user and password, and the empty password encoding as "<EMPTY>".

User Interface

- Vision,WebVision: The visualizer specific property "userSetVis" appended for password implementation after the direct user specifying and for applying all users.
- FIX:QTStarter: The standard-system start/stop splash updated and appended for information about the program (the custom splashes also) and the OpenSCADA project, including the project icon. Context menu of the project list appended for an item of removing not running projects.
- FIX:QTCfg: Appended in tracing the page changing for indication in the navigation tree with scrolling to the current item.
- FIX:VCAEngine: Prevented from crashing on big configurations with long closing the runtime sessions in accessing the widget heritors (mHerit) by appending the ResRW lock "mHeritRes". The property "Translation" of the widget procedures completely moved to the direct access and set visible only for the procedure presence, also as the procedure text area and the calculation periodicity visible only at any language selection.
- FIX:Vision: The authentication and user changing procedure in UserStBar::userSel() and the dialogue object "DlgUser" were significantly unified.
- FIX:WebVision: Unified in the primitive "Button" implementation: by moving the custom buttons under <button></button> and appending the proper CSS-styles for the default and pressed state with the border and transparent image difference. The issue of closing all pages of the main page container with frozing the last loss page at fast page switching caught and fixed at last. Appended for the custom interface CSS rules.

#### 7.8.1 Service updates

- the third (3) at 15.11.2020.
- the second (2) at 20.10.2020.
- the first (1) at 21.09.2020.

### 7.9 [08.02.7528/08.04.2020] The FIRST update

This update is done after 1.5 years of releasing the 0.9 LTS, then it worth as 10 updates by there have fixed about 250 bugs and append many improvements, which you can read wholly in the update ChangeLog.

The key features of the update are:

- significant expanding and stabilisation of the Web-interface during practical exploiting in a large distributed solution based on the module UI.WebVision; also expanding and stabilisation the hot development during the multiple execution of the developing project;
- testing, fixing, and extending the redundancy in the messages part, also through the practical exploiting in a large distributed and also redundant solution, in the common-system code and the module DAQ.ModBus;
- complete restructuring, improvement and addition of the OpenSCADA libraries in the SQLite files;
- general documentation enhancements, appending for the all libraries documentation and revision for most module documentation.

#### 7.9.1 OpenSCADA libraries and projects

- FIX:DB.LibsDB.{OscadaLibs,vcaBase}: Translation updating.
  - FIX:JavaLikeCalc.doc,doc: The user interface library "Documents" and the JavaLikeCalc "Reports' and documents' library" revised, improved, appended, documented and the documentation appended to offline.
    - FIX:doc: {docUsersSet,docAlarmsRep,docMessRep}: The field "Parameter" renamed to "Source" in the way of global unification of the alarm messages structure of the function alarmSet().
      - Appended for implementing "Year report of the month values (docRepYear)" with a function of entering values in the manual mode, support for the manual values storing into the message archive, their display in the table and diagram.
      - {doc,docDin,docRep2WorkSh(renamed docRepSm2),docAlarmsRep,docRepInstVals(renamed docGasNodeMgn),docMessRep,docUsersSet, docRepDay(renamed docGasNodeDayA),docRepMonth(renamed docGasNodeMonthA),docRepYear(renamed docResourcesYear)}: made the JavaLikeCalc translation by tr().
      - {docRepInstVals,docRep2WorkSh,docRepDay,docRepMonth}: Significantly rewrote, improved and made secondly usable, by allowing the DAQ-parameters connecting.
      - docMessRep: Appended for processing the remote stations as additional sources and anytime.
    - JavaLikeCalc.doc: Appended for implementing the "Diagram (diagram)" building in SVG.
  - PrescrTempl,prescr: The user interface library and the template library "Prescriptions" revised, improved, appended, documented and the documentation appended to offline.
    - PrescrTempl: Appended for the "Manager" template, moved from the controllers library.
    - prescr: Items of the library expanded for DB linking and the command and program tables automatic creation.
- DB.LibsDB.vcaElectroEls: The user interface library "Elements of the electric" revised, improved, appended, documented and the documentation appended to offline.
  - Appended for the four unified items: "Key, unified (keyUnif)", "Switch, unified (swUnif)", "General state, unified (stGenUnif)", "Area state, unified (stAreaUnif)".
- FIX:DB.LibsDB.OscadaLibs:
  - Updated for some messages.
  - FIX:base: The template library "Main library" revised, improved, appended, documented and the documentation appended to offline.
    - {anUnif,anUnifSt,manInUnif,digAlarm,codeState,pidUnif,pidUnifImp,SNMP,UPS}: Moved under the unified alarms forming and controlling mechanism.
    - Appended for the "initConsAssignTrs" template of the assigned output transports processing of the initial Sockets' connections for any type of the source objects, that is DAQ-modules and logical level controllers and parameters.
    - Appended for the "codeState" template of the state forming by a code.
    - Appended for the complex notifier implementation in the template "ntf", the separate JavaLikeCalc function and the user protocol objects "SMS" and "SMTP" are marked for obsolete.
    - Appended for the "UPS" template, moved from the "Industrial devices" library.
  - FIX:DevLib: The template library is a splitted part of the original library "Devices" under the name "Industrial devices", which revised, improved, appended, documented and the documentation appended to offline.
    - FIX:IEC60870: Appended for the separate time "tmPoolAll" of the period of the complete polling.
      - Appended for the package M_ME_TF_1, M_ME_NC_1 support, expanded for the SQ-mode support, tested for M_ME_TF_1 and M_ME_NC_1, M_ME_NB_1 in the SQ-mode, set AI to "real".
      - Appended for the option "syncTimePLC" to controll the PLC synchronisation.
    - Appended for the true DCON implementation in the templates DCON_Prt, DCON_Prt_DI, DCON_Prt_AO, DCON_Prt_DO, the user protocol object "DCON" is removed.
    - Appended for a full featured implementation of the protocol OWEN in the data acquisition part.
    - Appended for the DNP3 implementation and it tested with outstation-demo from opendnp3.
    - Appended for the counter modules Pulsar-M (pulsarM) implementation.
    - Appended for the ModBus scanner implementation as the template "ModBusScan".
  - LowDevLib: The template library is a splitted part of the original library "Devices" under the name "Low-level devices", which revised, some improved, documented and the documentation appended to offline.
    - FIX:{1W_DS9097,1W_DS9097U}: Fixed for the device family detection as the template 0x7F, detected on the last DS2413 with the first byte 0xBA.
    - Appended for the template "MAX6675" implementation of the low-level SPI Cold-Junction-Compensated K-Thermocouple-to-Digital Converter.
    - Appended for the template "SHT3x" implementation of the low-level humidity sensors.
    - Appended for the templates ADS111x(ADS101x) and MCP4725 implementation of the low-level I2C chips.
  - FIX:JavaLikeCalc.techApp: The JavaLikeCalc library "Technological apparatuses" documented and the documentation appended to offline. All Cyrillic symbols removed from identifiers of the models and all texts corrected.
  - tests: The template library "Tests" renamed from the library "S7".
  - JavaLikeCalc.servProc: The JavaLikeCalc library "Service procedures" revised, some improved, documented and the documentation appended to offline.
    - docOffLine: Significantly expanded for detailing the error messages and placing the unfinished pages to the argument "pagesCur" for continue the termination.
  - JavaLikeCalc.regEl: The JavaLikeCalc library "Regulation elements" documented and the documentation appended to offline.
- FIX:DB.LibsDB.vcaBase:
  - FIX: Complete and significant cleaning from the Cyrillic symbols and improving in the original identifiers and messages, renaming their to English.
  - Most standard cadres and widgets adapted to styles and the style "Light" created for all projects.
  - FIX:Main: The user interface library "Main elements" revised, improved, appended, documented and the documentation appended to offline.
    - FIX:{alarmsAct,alarmsSt}:
      - Expanded for support quittance-confirmation, comments and custom fields.
      - The field "Parameter (prm)" renamed to "Source" where placed all remoted and local sources.
    - RootPgSo: Improved for dynamically create signal objects, the number of which is limited only by the total length of the signal objects names and their two rows. The signal object buttons generating in the right of the logo is supported also. The types of views also unified for ID "view[1..6]", when user can their assign in self way. The compatibility with the original names of the views was saved, for present projects!
    - Appended for:
      - the control panel-window "Graph parameter calculation (graphCalc)";
      - the objects widget "Object properties (objProps)";
      - the alarms frame "Alarms — report (alarmsStReport)";
      - the widget "Image label (ImgLab)";
      - the frame "Users manager (userManager)".
    - grph_panel: Appended for an independent button of switching to the cursor time instead the indirect switching at the depth of decreasing.
    - ElViewGraph: Font size of the name decreased from 15 to 11 and trend color of the disabled items set by default to "gray".
    - The prescription frames "prescrEdit", "prescrRun" and "prescrRunSimple" moved to the new library "Prescriptions (prescr)".
    - cntrRegul: The trends width increased to 2 pixels.
  - FIX:mnEls: The user interface elements library "Mnemo elements" documented and the documentation appended to offline.
- FIX:Model.{AGLKS,Boiler}: Significantly updated regarding the common libraries' changes.
  - FIX: Significantly cleaned and all original identifiers renamed to English, during the documentation revision.
  - FIX: AGLKS.vca,Boiler.St: Adapted to the new changes of the main page.
    - The style "Light" created for all projects. The styles moved under a scheme of direct styles disabling at their presence instead "No style" and the style "Default" is appended.
  - FIX:Model.AGLKS:
    - FIX:St:
      - FSArch.1m: The strange and temporary message archivers removed: FSArch.{NetRequsts,test,StatErrors}, DBArch.test and added the actual ones: FSArch.{alarms,actions,SYS}, DBArch.SYS.
    - FIX:vca: The analog parameters and graphics is relinked.

#### 7.9.2 API

!!!!:Changes:

- SYS: The ResMtx default constructor set to true for "isRecurs" but it is the typical situation.
  - The most functions of appending to the nodes container expanded for returning the result created node ID/name for: chldAdd(), TSecurity::{usrAdd(),grpAdd()}, TTypeBD::open(), TTypeTransport::{inAdd(),outAdd()}, TValue.chldAdd(), DAQ.{TController::add(),TParameter::add(),BlockCalc.blkAdd()}, TTypeArchivator::{messAdd(),valAdd()}, TArchiveS::valAdd(), UI.VCAEngine::{wlbAdd(),prjAdd(),WLib.add(),Project.add(),Project.Page.pageAdd()}, UI.WebUser.uPgAdd().
  - TFld::Selected everywhere renamed to TFld::Selectable.
  - The special function strMess() variant with limiting in the result message size is removed and replaced by the function strEncode() in the type TSYS::Limit.
  - chldList() and chldPresent() set to virtual.
- DAQ,Special: The attribute "run_st" in TPrmTmplLib and TSpecial renamed to runSt.
- Archives: TArchiveS::messPut() cleaned from the argument "force".
- Protocols.HTTP: User API functions pgAccess(), pgCreator() moved from TProtocol to TProtocolIn.
- Transports.In: The function protocol() renamed to protocols() and protocolFull() removed.

Appends:

- SYS: Common locks mechanism is added by a locks container, the function commonLock().
  - TConfig,*: The user API functions TConfig::cfg() and TConfig::cfgSet() of the configuration expanded by the permition control.
  - Appended for the configuration context resetting functions to defaults TCfg::toDefault() and TConfig::cfgToDefault().
  - TFunction object appended by a mark of the function procedure changing isChangedProg() and the flag TFld::Selectable and the function ioAdd() appended by the result for the appended IO position.
  - The Control Interface request "load" expanded for specifying the selected DB in the attribute "force" to perform such operations for concrete nodes.
  - XMLNode: The attributes getting function attr() expanded for the optional argument of the presence detection.
  - The user space "Array" expanded by the functions indexOf() and lastIndexOf().
  - The user API function SYS.fileRead() expanded by the arguments of the reading block offset and size.
  - The user API function strEncode() appended for support the variants "ToLower" and "Limit".
  - The user API appended for the function strFromCharUTF() of forming string from UTF-8, UTF-16, UTF-16LE, UTF-16BE, UTF-32, UTF-32LE, UTF-32BE.
  - Appended for the definition SERV_TASK_PER=10 of the service task periodicity.
  - The user API appended for the function SYS.fileSize().
  - The function str2atime() is appended to convert from string time to the UNIX epoch time supporting GMT.
  - TError appended for naming the error codes in the enum "Codes", which used everywhere.
  - The special archive names appended for the name ALRM_ARCH_CH_NM ("<alarmsChange>") of just changing the presented alarms.
  - The limits appended by USER_ITS_LIMIT (1000000) for limit the items number like to user arrays from DAQ.JavaLikeCalc.
- DB: Appended for the transactions closing control into the OpenSCADA core by the functions trTm_ClsOnOpen(), trTm_ClsOnReq() and trPr_ClsTask().
  - Appended for the DB-objects reenabling control at the function disabledByUser().
  - Appended for configuration of the "Opened tables lifetime" of the inactive tables closing by the function tblLifeTime().
  - The attribute TBD::mEn moved to the protected space.
- Transports:
  - In: Appended by the virtual functions keepAliveReqs(), keepAliveTm() for the true KeepAlive on Web.
  - Out: Appended for a service of closing output transports at the lifetime (inactivity) by the service function outLifeTime().
    - Expanded by the attempts field ot the generic control in the function attempts().
    - Unified for the last request time control in the function lstReqTm().
    - The function outAddrHelp() of taken common address help for the output transport modules was added.
- Protocol.HTTP: Appended for the user API function setUser() to change the authenticated user.
- DAQ: TController::alarmSet() expanded for the argument "force" to force the alarms on the controller objects in the redundancy.
  - The DAQ-parameter appended for the User-API function alarmSet() and the function vlSetRednt() of the unified values writing in the redundancy.
  - TDAQS::rdRestDtTm() expanded from the float to double type return.
  - Appended for the user API function daqAt().
  - The user API function funcCall() expanded by the "err" argument.
  - JavaLikeCalc: The User API functions charAt() and charCodeAt() expanded to support UTF. The User API functions expanded by isNaN() for bool, integer, real, string (especially for checking numbers in the string).
- Archives:
  - The objects TMArchivator and TArchiveS appended of the function redntTm() and rdTm() to obtain last time of the message archives redundancy.
  - TArchiveS::rdRestDtOverTm() expanded from the float to double type return.
  - Val: The value archives appended by the common option autoIdMode() of the mode of forming ID of the automatic created archives with the enum variants AutoIdMode::{BothPrmAttrId,OnlyPrmId,OnlyAttrId}.
  - Val: The user API functions getVals() and setVals() added to implement generic archives/history accessing mechanism in an array and the fixed periodicity.
- UI: The inline documentation declaration from description some nodes is unified in the function TUIS::docKeyGet().
  - VCAEngine: The user API function this.ownerSess().uiCmd() added on the session level. The runtime widget appended of the user API function this.attrList() of obtaining list of the widget attributes.

#### 7.9.3 SYS

- FIX: The source code messages and program documentation:
  - TMess: Appended for the environment variable LC_ALL cleaning and setting "LANG" if empty, to prevent from overriding LC_NUMERIC=C at the last.
  - FIX:.,*: Fixed for many original messages of the source code also during the most modules documenting.
  - FIX:DAQ.JavaLikeCalc: The JavaLikeCalc code translation by the function tr() fixed in creating the translations table "Trs" and entries here in the simple mode (single language).
  - The inline documentation:
    - The offline documentation appended by some OpenSCADA modules and most libraries of the internal procedures and graphical elements. The common CSS-styles file of the offline documentation "doc/en/files/doc.css" improved in disable the transparent background color and some properties of the language selector.
    - Declaration from description some nodes is unified in the function TUIS::docKeyGet() and the nodes appended for that:
      - the DAQ-template and JavaLikeCalc libraries;
      - the VCA-libraries in UI.VCAEngine and UI.Vision.
    - UI: TUIS::docGet() appended by a code of the LTS build checking and using the LTS frozen documentation on the OpenSCADA file-server.
    - FIX:DAQ.JavaLikeCalc,UI.VCAEngine: Fixed in the offline documentation declaration for "User_API".
- FIX: Building:
  - FIX:configure.ac: Core library version risen to 3:7:0 and the program version risen to 0.9.1.
  - The Debian 10, CentOs 8 and Ubuntu 20.04 root file systems (chroots) are appended for build OpenSCADA.
    - The source codes significantly cleaned at the building warnings of GCC 9 (CentOs 8).
    - UI.{QTCfg,Vision}: Adapted to build in the environment of Debian 10 for Qt5.11.3, GCC8 and an error about a conflict in the macro message() into StdLibC++ through Qt5.
- Android: The behaviour of using the environment variable QT_SCALE_FACTOR on Android is observed, what set to 1.5 and the default font "Helvetica,12,-1" with QScrollBar CSS rule are removed.
- The module version of the subsystem "Special" risen to 12; of the subsystem "DB", "DAQ", "Archives" and "UI" risen to 13; of the subsystem "Transports" risen to 15.
- FIX: Threading, tasks, realtime and locks:
  - Some common data resources of dataRes() replaced by own resources, mostly due to the observed locking problems in Protocol.HTTP and DAQ.ModBus.
  - FIX: Common locks mechanism is added by a locks container, the function commonLock().
    - FIX: Transport.{Sockets,SSL}: Used for system functions like to getaddrinfo(), which is not multithreaded one.
  - The tasks planning appended for phasing their invoking, what make the CPU loading even.
  - FIX: The function TCntrNode::nodeDis() waiting fixed for zero time and the function chldDel() set to no waiting by default.
  - FIX: Fix for the negative priority of the policy "BATCH".
  - Archive,DAQ.Controller: For the current time of messages and values mostly used TSYS::curTime()/1000000 instead time(NULL) due to the message and value time is in microseconds and mark by TSYS::curTime().
- FIX: Redundancy:
  - .,UI.{QTCfg,Vision,WebCfg,WebCfgD}: The function "Local primary commands transfer" of the redundant systems is unified and expanded for complete moving to TCntrNode::cntrCmd(), so the function works now for any calls also from the user programming environment.
  - Archives,DAQ.DAQGate: The messages bottom time border processing for redundancy and the DAQGate changed to use time of the last message to repeat it requesting for two time, to prevent the messages losses on the border.
    - FIX: The redundancy and DAQ.DAQGate restored for writing the big value archive's blocks, mostly in restoring the value archive parts.
    - The first alarms obtaining in the messages redundancy enabled only at presence the message archivers in the redundancy.
    - Placing messages to the archivers of the redundancy procedure TMArchivator::redntDataUpdate() changed to use the function put(), to do this operation atomically for all obtained messages under a lock.
  - DAQ,DAQ.*: Writing values in the redundancy is unified under the new function vlSetRednt(). The service "TValue::get:/serv/attr" expanded to some spare request of the last requested value to prevent EVAL here at the connection loss.
- The function strEncode() appended by the variant "Limit" to limit the string size counting for the UTF-8 variability, and such items moved to it instead removed limiting variant of the function strMess(): TConfig keys, DAQ-Template IOs, DB.SQLite, UI.QTCfg.
- FIX: Configuration:
  - TConfig,TCfg: The key fields appended for their size limiting before cutting on the DB side.
    - *: Adapted in the adding functions to treat the ID or name forming and to limit its size, returning the result name to the creator, using the node function chldAdd() expanding in direct return the ID and to just remove the new node for equal ones.
    - DAQ: Identifiers of the logical level IO of the DAQ-templates expanded to the size limit up to 1.5*OBJ_ID_SZ=30 symbols and have added for these shrinking on creating.
    - Transports: Size of the output transports ID set to OBJ_ID_SZ*2, since it can be combined from the ordinal node ID and some prefix, in the automatic mode.
    - Appended by a function of setting the TCfg fields to the default value, to prevent loading values of previous records for miss fields.
  - TConfig,*: The user API functions cfg() and cfgSet() of the configuration expanded by the permition control.
  - The loading from selected DB improved in checking the DB enabling before, in the function TSYS::chkSelDB().
  - TCntrNode,DAQ,DAQ.JavaLikeCalc: Appended for the function load__() to treat some doings in the loading end.
- Control Interface:
  - *: Unified in the modification control of the node objects and cleaned the spare modifications, moving the calculation context modification to the option "modifCalc".
  - .,UI.{QTCfg,WebCfgD}: Tables expanded for difference help per columns and cells.
    - Transports: Table of the external OpenSCADA hosts expanded for the context help to the transport address cell, using the function outAddrHelp().
- The DAQ-templates and all their implementations appended by a function of selectable attributes creation from the template field "Value" of the two and three lines, TFunction::IO appended by the flag TFld::Selectable.
- The unified DAQ-templates implementation TPrmTempl::Impl is finished and such items migrated and adapted to it: DAQ.{JavaLikeCalc,ModBus,LogicLev,Siemens}, Protocol.{ModBus,UserProtocol}, UI.WebUser.
- FIX:DAQ,Archive.DBArch: The TElem copy constructor was implemented to fix problems into Archive.DBArch at multiple groups-tables in the group table mode.
- Function,DAQ.{JavaLikeCalc,LogicLev,ModBus,Siemens}: Expanded for tracing the function program changing and hot restarting the executing procedures, by setting the flag "f_start".
- TMess,XMLNode: Appended for the function setUTF8() of forming UTF-8 from their code, taken from XMLNode to use in other places.

#### 7.9.4 DB

- FIX:*: The configuration context resetting function cfgToDefault() used in the function dataSeek() and fieldSeek() begin, due to it is an obligatory operation for the configuration file at least and must be done for the DB configuration also, for new fields.
- Appended for the transactions closing control into the OpenSCADA core whether in the service task, for the timeout > 10 seconds, or in a different per DB task of fast transactions closing of the shared DBMS. For what appended the functions trTm_ClsOnOpen(), trTm_ClsOnReq() and trPr_ClsTask().
- DB-objects appended for restoring their enabling after the connection loss (or other reason) for meaned to enable and not disabled by the user, by disabledByUser().
- Appended for configuration of the "Opened tables lifetime" of the inactive tables closing.
- FIX:{SQLite,MySQL,PostgreSQL,FireBird}:
  - FIX:{MySQL,PostgreSQL,FireBird}: Improved and tested for hot restoring of the losses connections and without the data loss.
    - FIX:FireBird: Restored for the main work in the primary keys requesting and adapted to FireBird version 3.
    - FIX:MySQL: Resolved for crashing in the built-in reconnection (by MYSQL_OPT_RECONNECT), which replaced for the own and hot reconnection. Fixed for the error "BLOB/TEXT can't have a default value (1)" on modern MariaDB server versions, wholly removing the DEFAULT for TEXT.
  - SQLite: Appended for correct treating the locking of the SQLite DB files, at accessing to common libraries from different processes.

#### 7.9.5 DAQ

- TController::alarmSet(): Expanded by implementing the alarms triggering conception, which means also of passing messages to the buffer for clearance the alarms only at the alarms presence.
  - Globally unified and completely described in the documentation for messages from the controller objects and DAQ-parameters, when the parameter-source in the message appended for the controller object name.
  - FIX: Changed to use complete parameter ID-path, to prevent collisions in alarms from parameters with even IDs but different sources.
- FIX:*: The property period() is set actual in early, at the configuration "SCHEDULE" changing, for true data period of the archives.
- Expanded for early enabling the template libraries in the loading stage, initially for transport protocols based on the DAQ-templates.
- FIX:ModBus:
  - FIX: The mode "Asynchronous write" restored and tested in writing after restoring the connection, to use it for the losses preventing. The asynchronous writing moved to the after requesting stage with oppresing-delay the writen values changing in the attributes, before the writing buffer clearance.
  - FIX: Fixed for work in the redundancy mode.
  - FIX: The common function upVal() is separated to two functions upValStd() and upValLog() of the parameter types separate updating for the "Standard" firstly and the "Logical" type in the last, for cases of using data of the "Standard" type parameters in the "Logical" ones.
  - Expanded in work with wrong or empty connection transport, to allow it set-change from external procedures.
  - Expanded for the flag "s" of the strict requesting at the complex data.
- FIX:JavaLikeCalc: Expanded for try of the restoring the previous procedure executing at the new one error, mostly from DAQ-templates.
  - FIX: Fixed for crashing in the hot compiling, mostly at returning to the correct procedure after the wrong one compiling, in case of the procedure uses internal functions and possible external ones also due to missing for clearing "fPrmst". All these clearings are unified in the functions buildClear(), workClear().
  - Set to stop the functions at the program source changing for apply the changes.
  - FIX: Prevented for the recursive call, observed on the recursive widgets creating in UI.VCAEngine.
- Siemens: Extended for direct specifying the data type of the link address. LibnoDave updated to 0.8.5.1.
- DAQGate: Expanded by an option and a function of placing different remote controllers to the virtual parameters.

#### 7.9.6 Archives-History

- FIX:Mess:
  - /serv/mess: In put it is improved for independent writing to the archive and just to update the presented alarms.
  - Messages of the function's Mess->put() macrosses "message", "mess_info", ... redirected to the buffer writing, to prevent of direct writing to the archivers.
  - TArchiveS::messPut() cleaned from the argument "force".
- FIX:Val:
  - TVArchive::getVals(): Improved for processing not free buffers (for a fixed period) of the data requesting from the buffer and different archivers, using an intermediate buffer array which is back replayed at the end.
  - FIX: Improved for the limit processing independently for the buffer and the archivers and their periodicity, to work the long ranged and high periodicity data requests.
  - FIX: TValBuf.get() switched from the exceptions emitting to return EVAL at the requested data missing.
  - The value archives appended by the common option "Mode of forming ID of the automatic created archives" with selection from the modes: "Both parameter and attribute ID", "Only parameter ID", "Only attribute ID". For the possibility to control the automatic archives naming.
  - TVArchive::{setVals(),setVal()}: Access to the archive writing functions restricted only for users in the group "Archive".
- FIX:FSArch: The XML mode of the messages appended by the positions cache.
  - FIX: The messages archivation is significantly improved and fixed in placing several different messages in even time.
  - FIX: Fixed for the info.db removing and processing by using the DB address as a unique essence instead limited DB-identifier, what currently is named through indexing the equal ones.
  - FIX: The archive folder creation moved in the begin, before the locking and the info.db creating.
  - FIX: Fixed for archiving double messages in the mode of preventing the doubles - rewriting.
- FIX:DBArch:
  - FIX: Fixed for the value archives including to an archiver for the not grouped archiving mode.
  - FIX: Finally fixed for the single-value requests of the value archive, after the not full fix from 2018-02-23 only for the archiver data period 1 second.
  - Adapted to work in the only direct archive writing mode on the archives group mode for updating the meta at writing.

#### 7.9.7 Transports

- .,*: Expanded for support the multiple protocols selecting and the function protocol() renamed to protocols().
  - Appended for a service of closing output transports at the lifetime (inactivity) by the service function outLifeTime(), unified for the last request time control in the function lstReqTm().
- FIX:Serial: Fixed for the "Modem" mode of the output transports in the correct processing the function ResMtx::tryLock() result. The flow control field moved to the options field due to a need with direct disabling some options like to -RS485.
- FIX:Sockets,SSL: Expanded for support IPv6 both for input and output transports using getaddrinfo().
  - Appended for processing (connecting) all IP addresses resolved from the symbolic one, especially for the output transports.
  - The output transports appended for direct definition several host addresses.
  - The output transports improved in using the tries after the error "Reading timeouted." of responding to request.
  - FIX:Sockets: Fixed in processing the output transports with the address "SOCK:{N}" of the initiative connections to clean up the address by setting it to "SOCK:-1", then preventing of the restarting possibility with using already closed socket's handler but possible allocated already by another part of the program.
    - Address of the input transports in the TCP-mode can be expanded for addition parameters and currently the next one after the mode field is identification message of the initiative connection into the mode 2, so this mode expanded for sending identification messages after establish the initiative connections.
    - "TCP:" prefix of the addresses set to nonobligatory-optional.
    - The address mode of the input transports set to 1 (do not close, only by the KeepAlive parameters) by default.
    - The default port set to 10005.
  - SSL: Appended for treating NO_*_METHOD for TLS1, TLS1_1, TLS1_2, DTLS1 and for direct support DTLSv1_2. The default port set to 10045.

#### 7.9.8 Transport Protocols

- FIX:HTTP: Appended for the true KeepAlive support by the input transport functions keepAliveTm() and keepAliveReqs(). Expanded for the DB table "HTTP_AuthSessions" of the external authentication sessions.
- FIX:ModBus: The input part expanded for the DAQ-templates using.
  - The data types list of the IO table appended by the type "Object".
  - The protocol variant recognising for input requests some improved for detecting difference RTU and TCP variants, appending to that the transport type.
- UserProtocol: Expanded by the DAQ-templates support.
- SelfSystem: Expanded for the output transport attempts support.

#### 7.9.9 User Interface

- FIX: TUIS::mimeGet() changed in the behaviour of determining the file extension "svg" as "image/svg+xml" for correct and multiple SVG files display on WEB.
- FIX:VCAEngine,Vision,WebVision: The variant "LineEdit" of the primitive "FormEl" appended for the view "Password".
- FIX: The VCA-styles moved under a scheme of enabling styles at their presence instead disabling by "No style" and fixed in the the new items creating and at all.
- VCAEngine,Vision: All information moved to the status field for widgets, libraries and projects; what appended for the calculating procedure state - inherited, redefined.
- FIX:VCAEngine:
  - Pages of the projects appended for the type "Link", to optimise the memory consumption on fully dynamic and highly replicated pages, on the project's session side. The pages opening in the project's execution (sessions) improved to prevent spare and double opening and closing, which is critical one to manage the linked pages.
  - Many measures of the visual items edition in time of the project execution:
    - Fixed in deletion the project pages in time of the project execution, to prevent the objects lock and to provide their early linking for removing the session pages together the project pages.
    - Session objects moved under own data lock to prevent the dead locking in the complex situations due to the style calls uses indirect parent().
  - Optimisation the remote development:
    - the info control services "/prm/cfg/prj", "/page/page" appended by getting of number of the child pages in the attribute "chPgN" at setting "getChPgN";
    - appended to prevent the widgets' icons transmitting in the control service "/serv/wlbBr" of the complete widgets' tree loading, setting the attributes "disIconsW", "disIconsCW".
  - The project sessions of the VCA moved at the last from the modification control for the development mode.
  - Expanded for the direct definition of the visualiser specific attributes, marking their by the prefix "vs_".
  - FIX: The project session command "close" of the service "/serv/pg" forced to processing, what actual to the linked pages.
  - FIX: The VCA pages loading procedure appended for cleaning the spare records and records of inherited but missed widgets of the "*_incl" table.
  - FIX: Fixed in the User API function tr() work from documents.
- FIX:QTCfg,Vision: Fixed in processing the syntax highlighting of the text fields to load firstly the syntax rules and next the text, to prevent the text corruption in some cases, detected into the transport exchanging log and Qt 5.11.
  - Appended for buttons of the force loading and saving, into the menu.
  - Table forming improved for the allowed width getting from maximumViewportSize().
- FIX:Vision,WebVision: Improved for the scrollbar control of the included pages, to ensure they work separately, not two together.
  - FIX:ElFigure: The mirroring support is completed in the implementing for the common, shape Arc draw and it generic and image fills. The filling by image prevented from lacks at accessing outside the image.
  - FIX:Diagram:
    - FIX:Trends: Expanded in the time scale building for many days with the time complete hiding and show the first value in the left, using the timezone offset. Appended for support the big time range intervals per month.
    - Disabled in limiting the requested archive values precision, for long counters.
    - Improved in the remote work on slow channels and with the value buffers period in 10 seconds.
  - Text,Media,Box: Expanded to display the activity cursor.
  - FormEl: Some views (Line edit, Text edit, Combo box, List, Tree, Table) expanded for custom background and border by the visualiser specific attributes "vs_background", "vs_border".
  - Appended for the visualiser specific attribute "vs_winTitle" of the dynamic window title value.
- FIX:Vision:
  - Optimisation the remote development:
    - The projects tree switched to download the branches partially at expanding, to improve it work on slow connections.
    - The widgets tree improved in the work on slow connections, disabling the widgets' icons downloading at the threshold of the complete tree downloading time more for 5 seconds and enabling that at the time less for 0.1 second.
  - Expanded for the planning of the updating period depending to the real connection quality of the runtime mode, like to UI.WebVision.
  - FIX: Common fixes and improvements of the runtime window modes:
    - FIX: Manual scaling of the runtime window (for full-screen or maximise) improved and fixed in the processing the sign isResizeManual.
    - FIX: Fixed in starting to the full-screen mode and not full scaling at restoring to not zero window position.
  - FIX:FormEl:
    - FIX:Table: Tables fitting improved to use maximum width from the widget size and the maximum view port, but the maximum view port only can be uninitiated here yet. Final fix for the tables fitting, moving the procedure in events: create, resize and show. Prevented from casual crashing.
    - FIX:Date: Fixed for crashing at setting configuration.
  - FIX: Fixed for the master page regular replacing (crashing) and scaling into the run-time mode.
  - FIX: The runtime executing was fixed from crashing in closing external windows at closing the main window.
  - FIX: Fixed in the properties edition dialogues of Pages/Libraries and Widgets for:
    - preventing for closing at Esc;
    - disabling for timeouted cancelling of the LineEdit;
    - unbinding the edited state from the visibility for TextEdit;
    - preventing from the changes loss into the tab "Process";
    - appending for warnings about the inherited calculation procedure changing.
  - The focus control rewrote to the VCA-widgets specific one and not Qt-widgets, like to UI.WebVision, what prevents some problems.
  - ElFigure: The figure edition switched to the normal mode, without any transformation (rotation and mirroring).
- FIX:WebVision:
  - FIX:Main operation:
    - FIX: The JS function servSet() of writing to the server switched to the synchronous mode to prevent loses.
    - The main checking of the background objects is made unified and expanded for support the optional background objects, to decrease the overall number of the background objects, where the obligatory currently are: "ElFigure", "Diagram", "Document", "FormEl"; and the optional is only "Text".
    - The main window vertical expanding threshold set to 10% of the window decreasing size and to 50% for shrinking, to prevent flicking on FireFox for notes about block the external windows. The built-in scaling mode set to use-enable in relation from window.devicePixelRatio equal to 1, on the WebBrowser level.
    - Significantly improved in the connection losses detection for the main page reload, for the cases of return back to already closed sessions in WebBrowser.
    - Appended for implementation the visualiser specific attribute "userSetVis".
    - FIX: Restored in the full widgets tree reloading to restore the function of removing missed widgets in the visualiser at their removing into the VCA-engine.
    - FIX: Prevented from spare and separate requesting of the included pages' content, in the starting.
    - FIX: Improved for the focus control behaviour and fixed to prevent mouse events to behind pages.
  - Appended for the pages cache be controlled in the lifetime and the pages maximum number, both on the server and WebBrowser side, then the module is more suitable now to work in the operative mode!
  - Sessions control:
    - Expanded for the possibility of the opened sessions manual closing from the administrator user.
    - FIX: The ordinal users prevented from connection to foreign sessions.
    - FIX: The main requesting code of GET significantly simplified to prevent of reconnections to the VCA-sessions without the local ones.
    - Appended for the state of the opened sessions on the control page, including the connected project and the user.
  - FIX:Status bar:
    - Appended for the alarm level with a function of the global quietation, sending "ws_alarmLev".
    - Expanded for the VCA-styles support in their display and changing.
    - FIX: Fixed in form the statusbar size, updating and preventing from its flicking at the master page updating.
  - FIX:FormEl:
    - FIX:{Tree,Table}: Are fixed for true counting the border width and padding in the result geometry.
      - FIX:Tree: Fixed for processing the empty string in the end. Appended for scaling the control tree images.
  - Expanded for setting the VCA visual elements at the "class" attribute to "Primitive {WPrimitive}" and the "id" attribute to the widget identifier like to "wdg_{id}", for simplifying the customisation.
- FIX:QTStarter: The function updLookFeel() fixed for the void return type. Right mouse key and context menu emulation is added at holding the left mouse key during the time set by the command line option --simulRightMKeyTm. This time set to 2 seconds for Android.
- FIX:QTCfg:
  - FIX: Fixed for applying forgotten changes of the editable widgets at switching to a different node. The TextEdit items fixed for the editing sate detection, what is unbidden from the visibility.
  - The Node groups hint is added for a command of the node adding.
  - The moving operations, in the configuration table, expanded by the hot keys "Ctrl+Up" and "Ctrl+Down".
  - Optimisation the remote work:
    - Prevented from the navigation tree updating at selecting any item.
    - Makes slower the cycle of the periodic updating after the busy dialog appearing.
  - Set fast for the closing time of the configurator window with many OpenSCADA inactive external hosts, by early notifying the host tasks.
- WebUser: Expanded by the DAQ-templates support.

#### 7.9.10 Special

- FIX:FLibSYS:
  - FIX:IO: write() fixed for the default data type obtain, wrong data type obtaining set safe.
  - CRC: Completed by using normal polynomials, the input and output references and the XOR for output.
  - VArchObj: Access to the archive writing functions restricted only for users in the group "Archive".

#### 7.9.11 Service updates

- the fifth (5) at 20.07.2020.
- the fourth (4) at 07.07.2020.
- the third (3) at 15.06.2020.
- the second (2) at 01.06.2020.
- the first (1) at 11.05.2020.

## 8 Links

- Tests report of the industrial release 0.9 LTS.
- Manual of updating 0.8.0 LTS.
- The releasing process task and a list of the post-release works before the first 0.9 LTS update.

Documents/Release_0.9/en - GFDL | July 2026 | OpenSCADA 1+r3070