Contents
- 1 Introduction
- 2 Implementation of planned tasks
- 3 Optimization, stability, sustainability and system performance increasing
- 4 Improvement and stabilization of the graphics subsystem
- 5 Formation, expansion and stabilization of the user programming API
- 6 System-wide extensions
- 7 Publication of OpenSCADA solutions
- 8 Conclusion
- 9 Updates
- 9.1 [06.06.2018] The TWENTIETH (20) last update
- 9.2 [29.12.2017] The NINETEENTH (19) update
- 9.3 [02.07.2017] The EIGHTEENTH (18) update
- 9.4 [12.02.2017] The SEVENTEENTH (17) update
- 9.5 [28.06.2016] The SIXTEENTH (16) update
- 9.6 [12.01.2016] The FIFTEENTH (15) update
- 9.7 [07.11.2015] The FOURTEENTH (14) update
- 9.8 [14.05.2015] The THIRTEENTH (13) update
- 9.9 [27.12.2014] The TWELFTH (12) update
- 9.10 [21.07.2014] The ELEVENTH (11) update
- 9.11 [09.05.2014] The TENTH (10) update
- 9.12 [21.12.2013] The NINTH (9) update
- 9.13 [16.09.2013] The EIGHTH (8) update
- 9.14 [11.07.2013] The SEVENTH (7) update
- 9.15 [12.05.2013] The SIXTH (6) update
- 9.16 [02.02.2013] The FIFTH (5) update
- 9.17 [13.11.2012] The FOURTH (4) update
- 9.18 [08.09.2012] The THIRD (3) update
- 9.19 [09.07.2012] The SECOND (2) update
- 9.20 [09.06.2012] The FIRST (1) update
- 10 Links
1 Introduction
The release of an open SCADA (Supervisory control and data acquisition) system of version 0.8.0 is the stable industrial release with the long term support (LTS).
The main purpose of this release is providing the community of users and developers of free software with the platform for the solutions of complex automation systems and related solutions, as well as providing commercial services on the basis of the OpenSCADA project.
This release is the next stable release, for which technical support is available from the developers and for which it is planned to release fixes during a long time. The life cycle of the previous stable release 0.7.0 LTS will be terminated within one month after the 0.8.0 release by the latest update.
This document is the processing (compilation) of "ChangeLog" document of the OpenSCADA system version 0.8.0, including the intermediate working releases 0.7.1 and 0.7.2, which is designed to cover brief and clear the new features of the OpenSCADA system. To get acquainted with all the changes in the OpenSCADA system it is possible in the file ChangeLog from the distribution kit of the system, or here: http://oscada.org/svn/tags/openscada_0.8.0/ChangeLog.
The key features of this version are:
- Implementation of the planned tasks.
- Optimization, increasing of stability, sustainability and system performance.
- Improvement and stabilization of the VCA.
- Expansion of the user programming API.
- System-wide expansions.
- Publication of OpenSCADA solutions.
New and updated modules:
- Archive.DBArch (0.9.5) — The limits for requesting data on the request time are added as well as some more extensions.
- Archive.FSArch (1.5.1) — Significant stabilization. The set of extensions, including:
- The files' indexes of the values' archives read performance is increased.
- The adaptation of storing and reading the floating to the ARM FPA.
- The limits for requesting data on the request time are added.
- The limit on the total files' size of the values' archiver is added.
- DB.MySQL (1.7.1) — Stabilization. The ability to specify the connection timeouts is added.
- DB.SQLite (1.6.4) — Stabilization
- DB.FireBird (0.9.7) — Stabilization
- DB.PostgreSQL (0.9.2) — Stabilization
- DAQ.DiamondBoards (1.2.5) — The ability to change the parameter's type is added. Stabilization.
- DAQ.System (1.7.5) — Stabilization. The dependence on the library "Libsensors" is made the optional one. The CRON scheduling of calls is added.
- DAQ.BlockCalc (1.6.0) — Stabilization. The set of extensions, including:
- The syntax highlighting is added.
- The CRON scheduling of calls is added.
- The start and stop blocks' call is added.
- The support of the object parameters' type is added.
- DAQ.JavaLikeCalc (2.0.0) — Significant stabilization. The set of extensions, including:
- The syntax highlighting is added.
- The adaptation to the ARM hardware architecture is completed.
- The implementation of regular expressions and a number of user's API extensions are added.
- The ability to write the string characters using the octal "\041" and the hex "\x21" numbers is added.
- The direct, dynamic call of library functions is added.
- The direct association of string constants is added.
- The conditional call of the expression's arguments ( the second argument) with the logical operators ||(OR) and &&(AND) is added.
- The support of the data source object parameters' type is added.
- DAQ.LogicLev (1.3.0) — Stabilization. The set of extensions, including:
- The ability to change the parameter's type is added.
- The CRON scheduling of calls is added.
- The support of the object parameters' type is added.
- DAQ.SNMP (0.7.0) — Significant stabilization. The set of extensions, including:
- The implementation of the full support of the protocol's client-side is done.
- The support of all values' types is added.
- The support of the values' record is added.
- An error handling is improved.
- The additional connection configuration parameters are added.
- The the ability to directly query the scalars is added.
- DAQ.Siemens (1.4.0) — Significant stabilization. The set of extensions, including:
- Library LibnoDave is updated to the 0.8.4.6 version.
- The CRON scheduling of calls is added.
- The reconnection function for the "Industrial Ethernet" connections is added.
- The ISO_TCP version of the protocol is added for S7-200.
- The support of the object parameters' type is added.
- The "ADS" protocol implementation is added.
- Connection errors are some unified.
- The ability to set the database number and offset in hexadecimal is added.
- DAQ.ModBus (1.3.0) — Significant stabilization. The set of extensions, including:
- The attributes' syntax highlighting is added.
- The support for "Logical" parameter's type is added for the working with template of the parameter, and also the functions of the user's API to send arbitrary, non-standard ModBus requests from the templates are added.
- The function of the formation the alarm messages in the controller is added and used.
- The support of the function for group record (0x0F, 0x10) is added.
- The option to install the block size limit of the group requests is added.
- The support of the object parameters' type is added.
- The maximum size of the request block is made optional.
- The ability to comment the items in the list of attributes of the standard parameter's type by the '#' at the beginning is added.
- DAQ.DCON (0.5.1) — The module is completely rewritten for the support of mixed modules by selecting the request commands. Stabilization.
- DAQ.ICP_DAS (0.8.0) — The "ICP DAS" API library libi8k.a for the ARM architecture is added, the ability to build the module for ARM is added. The build is disabled by default to prevent attempts to build on the wrong ARM environment. Stabilization.
- DAQ.DAQGate (0.9.5) — The parameters' cache for their initialization during the autonomous operation is added. The CRON scheduling of calls is added. Stabilization.
- DAQ.SoundCard (0.6.2) — Stabilization.
- DAQ.OPC_UA (0.6.2) — Stabilization. The syntax highlighting of the attributes' list is added. The adaptation of storing and reading the floating to the ARM FPA is done.
- DAQ.BFN (0.5.1) — New module.
- Transport.Sockets (1.5.1) — Significant stabilization. The output transport request retry timeout is added.
- Transport.SSL (1.0.1) — Stabilization. Some improvements.
- Transport.Serial (0.8.0) — Stabilization. During initialization of the port the previous settings are used and an opportunity to omit some of the settings is implemented. The flow control using RTS signal for the simple RS232->RS485 signals transducers is added.
- Protocol.ModBus (0.6.4) — Stabilization. Some improvements.
- Protocol.OPC_UA (0.6.2) — Stabilization.
- Protocol.HTTP (1.6.0) — Significant stabilization. The set of extensions, including:
- The support for HTTP variable "Transfer-Encoding = chunked" in the output transport is added.
- The support of user's templates for internal contents of the module is added.
- The generation of the user's authentication messages is added.
- The support of all major versions of the completion the string during HTTP-request parsing is added.
- Protocol.SelfSystem (0.9.5) — Stabilization.
- Protocol.UserProtocol (0.6.2) — The syntax highlighting is added. Stabilization.
- Special.FLibComplex1 (1.1.0) — The direct, dynamic call of library functions is added.
- Special.FLibMath (0.6.0) — The direct, dynamic call of library functions is added.
- Special.FLibSYS (1.0.0) — The direct, dynamic call of library functions is added.
- Special.SystemTests (1.5.1) — Some improvements.
- UI.QTStarter (1.7.0) — Stabilization. Significant extensions and improvements.
- UI.QTCfg (2.1.1) — Stabilization. Significant extensions and improvements.
- UI.WebCfg (1.5.6) — Stabilization.
- UI.WebCfgD (0.8.1) — Stabilization. Significant extensions and improvements.
- UI.VCAEngine (1.3.0) — Stabilization. Significant extensions and improvements.
- UI.Vision (1.3.0) — Stabilization. Significant extensions and improvements.
- UI.WebVision (1.0.1) — Significant stabilization. Significant extensions and improvements.
- UI.WebUser (0.6.2) — Stabilization. The syntax highlighting in the procedures is added.
2 Implementation of planned tasks
In accordance with the plane of the release there were made the following tasks:
- Formation of the provision of commercial services based on OpenSCADA — The concept is built and the mechanisms are created to provide commercial services by the developers based on OpenSCADA (http://oscada.org/en/services).
- Adaptation of OpenSCADA to work on the ARM hardware platform — The building, adaptation and full testing of OpenSCADA on the ARM architecture is made on the N800 Internet tablet of the Nokia company (http://wiki.oscada.org/Works/Tests/ARM). The build and adaptation of OpenSCADA for complex (very old) software environment of the LP-5451 controller are completed, as well as build for the SMH2Gi controller and Nokia smart phones: N900, N950, N9 are completed also. As part of the build and adaptation to different mobile devices the following tasks were done:
- SYS:
- Functions' prototypes TMess::put(), TMess::get(), TCntrNode::grpSize(), TCntrNode::grpId(), TCntrNode::grpAt() are changed to correct the usage of an unsigned type "char" on the ARM as a signed.
- The adaptation to build with GLibC version less than 2.5 (2.3.2) is done.
- TVariant, DAQ.{AMRDevs, OPC_UA}: The not aligned access to data is fixed.
- DAQ.OPC_UA: The system functions floatLE(), floatLErev(), doubleLE(), doubleLErev() are added to convert the storage format of a real number on different architectures.
- The adaptation to uClibc is done. Build begins with 0.9.32 version, which has the support of real-time functions such as clock_nanosleep().
- The check and disable the usage the "Iconv" and "Intl" (I18N) API is added.
- The automatic detection and enabling the --enable-CrossCompile configuration option for cross-compilation environment is added.
- The --enable-CoreLibStatic configuration option to disable the OpenSCADA kernel shared library build and static linking of the call-launch program is added.
- The usleep() function is everywhere replaced by the own wrapper function TSYS::sysSleep() due to lack of the usleep() function in uCLibc and availability of it only in the case of special configuration of the uClibc build. The nanosleep() is used at the TSYS::sysSleep() function.
- The pthread_yield() function is replaced by the sched_yield().
- DAQ:
- JavaLikeCalc: Virtual Machine is rewritten for direct using the structures of commands to avoid alignment problems, as well as for some increasing of productivity.
- Siemens: The problem of the NoDave library for a global packing structures command calling "#pragma pack(1)" is fixed.
- ICP_DAS: The "ICP DAS" API library libi8k.a for the ARM architecture is added, the ability to build the module for ARM is added.
- Archive:
- Functions' prototypes TArchiveS::messPut() and TArchiveS::messGet() are changed to correct variable of the message level as a signed number.
- FSArch:
- The LE format real number storage in the archive on the ARM architecture is fixed.
- The algorithm of the quickly count the number of bits uses the function of not aligned reading TSYS::getUnalign32().
- The encoding field size in the plane archive of messages expanded from 9 to 99 characters.
- UI.QTCfg: The short time sleep after closing all windows in the switch off function is added, in order to provide the time for the object of all the windows to be finally destroyed and to prevent crashing.
- SYS:
- The implementation of the editing changes rollbacks mechanism in the Vision. — As a part of the widgets' visual editing window the multi-level changes rollback mechanism it is implemented for all basic operations: visual geometry changes, the widget attribute's value change, add/remove widgets, widget's copy and edit the widgets, based on the "ElFigure" primitive.
3 Optimization, stability, sustainability and system performance increasing
Since the latest stable release during the work on this version, as well as during its practical adaptation, it was discovered and corrected in a total of about 300 errors. In general, the work on cleaning code from the compiler's warnings with the "-Wall" flag has been done:
- unused variables removing;
- adding the return in the all functions;
- initialization of variables with the possibility of their undefined using;
- exception of the incomplete handling of the enumeration types in the select operation;
- comparison between signed with unsigned integer.
Let's list the most significant errors the correction of which significantly affected the increasing of stability:
- System-wide:
- The command of the building system "$ make dist" is corrected and adapted to correct creation of the OpenSCADA distributions.
- The TSYS::cron() function to call on the schedule is repeatedly corrected.
- The variable type to store the result of the find() function, the string, is everywhere changed to the correct one "size_t".
- The unscheduled calls on the schedule, related to desync of the functions values time() and clock_gettime(CLOCK_REALTIME,&sp_tm), are fixed.
- The checking and waiting for threads to access due to the overlapping with the previous, eponymous one's stop are fixed.
- The waiting for initialization of the disconnectable tasks is disabled in order to prevent freezing in anticipation of rapidly closing tasks.
- The work of not aligned reading functions getUnalign*() is fixed on the ARM. The Problem is detected on PXA270.
- Function: The possibility of a memory leak when attempting to set the object to a non-object function's parameter is excluded.
- DAQ.ModBus, Transport.Serial, UI.{WebCfg, WebCfgD, WebUser, WebVision}: The incorrect usage of the completion string symbol '\n' is fixed for a variety of software platforms UNIX, MAC, DOS/Windows by replacing it with "\x0A".
- ResString: The "string(vl.data(), vl.size())" way is used for read-write of string in order to prevent the COW algorithm.
- Function: The check for a modification during the installation of the various IO types values (Real to Integer) is fixed.
- Data bases:
- DB.PostgreSQL: The handling of database address to determine the empty fields is fixed.
- Transports and protocols:
- Transport:
- The loading of all transports from the database is fixed, if there are records about the transport the module of which is missing.
- The using of unsigned type in the return of the read() and write() functions is fixed. The resources for the counters of the i/o requests are added.
- The option of interrupting the output transport by the signal on the timeout waiting. It is useful to interrupt the transport on exit/shutdown.
- Sockets:
- The missing of the initialization of the size of the return value of the getsockopt() function is fixed.
- The closing of the client connection by the time out of the lifetime for connections in the case of the data absence is fixed.
- Unix-socket is set to nonblocking mode by the O_NONBLOCK flag. The generating of the error messages for output transports is fixed.
- Serial: O_NONBLOCK flag is set to open() function of a serial device to prevent the blocking of port's opening on some USB->RS485 converters.
- Sockets, SSL: The cleaning of the input buffer to prevent re-use on the high latency channels after timeout is added.
- Transport, DAQ.{AMRDevs, DCON, ICP_DAS, ModBus, OPC_UA}, Protocol.HTTP: The usage of the TTransportOut::messIO() function at the request of the tail and getting the zero response is fixed.
- Protocol.HTTP, UI.{WebCfg, WebCfgD, WebVision, WebUser}: The parsing of POST-request elements is fixed by the for parsing all the attributes of each element.
- Transport:
- Data acquisition and archives:
- Archive:
- The using of the buffer with a soft grid with low-and high-resolution time in the archives of values is fixed.
- The calculation of the archive's beginning in the begin() function with an empty buffer is corrected.
- FSArch:
- The creation of messages archive's files during the placing of the set of old messages is fixed. The parameter to prevent duplicates is added.
- The result of the fgetc() function is recorded in an integer variable instead of a character one that has corrected the discovery of "EOF".
- The reading of data from the archive's buffer in accordance with the size of the buffer in the algorithm of fast calculation of the bits number is fixed.
- The placement of the offset into the cache from the algorithm of fast calculation of the bits number is fixed.
- The incorrect processing of the not aligned blocks end of the fast bits number counting algorithm is fixed.
- The exclusive resource to the calcVlOff() function call is added to prevent the incorrect operation with cache.
- DAQ:
- System: The crash when exiting to the "Hddtemp" source is fixed.
- ModBus: The setting of values of the parameter's attributes mode is changed to active and the error handling is improved.
- JavaLikeCalc:
- The check of the index when accessing the character of the string on the index is added, in order to prevent the out of range situation.
- The crash of the replace() function of the "RegExp" object is fixed.
- Siemens:
- The receiving and recording the values of real types is fixed.
- The reconnect in the case of error is fixed.
- The using of the integer, real and string size property is fixed.
- The cleaning of the parameter's links at its disabling is added.
- Archive:
- Visualization Interfaces:
- VCAEngine:
- The blocking of the session for dynamically active projects with dynamic access to their own widget's attributes is fixed.
- The possibility of changes' loss in the visualization server is precluded when displayed in the visualizers by preliminary saving the value of clock counter in the "openList" service request.
- Resources to widget's attributes is made more clear (by use Recursive mutex) and use one generic resource, for session and other, for each other dead locking prevent.
- Vision, WebVision:
- The resolution of the coordinates is increased of all the widgets to three decimal places, in order to ensure proper positioning on the large scales.
- The access abroad the vector's size during the rendering of the primitives "FormEls" graphics is fixed.
- The redraw of the primitive "Elementary figure" is fixed when the scale is changed.
- The update of the "Protocol" primitive in time and size is fixed.
- Vision:
- The crash of the session for projects with an execution period of more than 500 ms is fixed.
- The fine-tuning of the coordinates of the "Elementary figure" primitive shapes is implemented to the remainder of the widget's position.
- Scaling the text primitive "Text" is changed to change the font size instead of scaling the final image, which increased the overall quality of the display font.
- WebVision:
- The validation of figures' points for their getting to the display area of the primitive "Elementary figure" is removed. This function is shifted to the GD library.
- The possibility of crashing for primitives "Diagram" or "ElFigure" is excluded in the case of transmission of incorrect values of attributes of the image "xSc" or "ySc" from a Web-browser.
- The opening and replacing the root page is fixed.
- The handling of nested pages' scale is fixed, taking into account the scale of the root one.
- The clearing of the "Protocol" primitive's tail is fixed.
- VCAEngine:
Optimization and performance improvement:
- SYS:
- The mechanism of the "ResString" object resource is replaced from the RW-locks with mutex in order to improve performance and reduce memory consumption.
- TConfig: The object of the configuration item (TCfg) is based on TVariant. An access to the "TCfg" object is made clear, which allows to use links without the basic types.
- The mechanism for storing child nodes in the map wit the key "string" is changed to the key type "const char*". All nodes are adapted to the constancy of the identifier.
- Archive.FSArch: The processing of the values' archive index table is significantly accelerated through the use of fast algorithm for computing the number of bits in a 32-bit integer.
- UI.WebCfgD:
- The resizing of icons on the server side is added to reduce traffic.
- The group request of the page's contents is used to greatly improve the performance on slow and high latency channels.
- UI.QTCfg:
- The group request to the control interface is used for performance improvement on slow and high latency connections.
- The multiple query of selective table columns elements is excluded.
- UI.Vision: The rendering performance of the fills of the "ElFigure" primitive is improved.
- UI.VCAEngine:
- The measures to increase the speed of project's session initiation are implemented:
- The initialization of the basic attributes because of their subsequent inheritance is skipped.
- The translation of certain messages of the runtime session is removed.
- The enabling of only the necessary pages at startup of the session is implemented. Other pages of the running session are enabled when accessed. This has greatly increase the speed of session's startup, as well as reduce the dependence of the starting speed on the complexity of the visualization project.
- Implementation of the archive mode of the "Document" primitive is changed to direct work with the database, which let to expand the depth of the archive up to the 1000000 documents, and without prejudice to the RAM.
- The measures to increase the speed of project's session initiation are implemented:
4 Improvement and stabilization of the graphics subsystem
The notable work was made within the graphics system, namely in the VCA engine modules UI.VCAEngine, visualizers UI.Vision and UI.WebVision, as well as in the configurators. The changes were provided for stabilization, the optimization of memory consumption and improvement of user's properties.
Improvements of the graphics subsystem:
- The API of syntax highlighting is added. On the basis of this API the syntax highlighting is added to:
- DAQ:
- BlockCalc: Syntax highlighting in description of the parameters' attributes.
- JavaLikeCalc: Syntax highlighting for the compiler of the JavaLikeCalc.JavaScript language, as well as for all text fields using the language inside the module.
- ModBus, OPC_UA: syntax highlighting of the attributes' list.
- Protocol.UserProtocol: syntax highlighting to the text of the protocol's procedures.
- UI:
- QTCfg: multilevel syntax highlighting displaying, transmitted from the data model in the form of the rules of regular expressions.
- VCAEngine: syntax highlighting for text attributes of the widget's primitives for which this is necessary.
- Vision: syntax highlighting for text attributes of the widget's primitives, as well as for the texts of the widgets' programs.
- WebUser: syntax highlighting in the procedures for constructing the Web-based interface.
- DAQ:
- UI.QTStarter:
- Adaptation to the ARM.
- Font message in "Splash" is fixed at 10 pixels to ensure a uniform display.
- The OpenSCADA stop is implemented in the case of closure the last dialog box of the QT UI-modules selection .
- The forwarding of the QT4 command line options from the OpenSCADA is done (eg, --qws and --style to -qws and -style).
- //UI.QTCfg//:
- The ability to manual change the height of the text and table fields is added. Change is made by grasping and dragging the bottom edge of the field.
- Adaptation to the ARM.
- Group request "CntrReqs" is used to query the page's context.
- The restriction on the height of the rows of tables at half the height of the table is added.
- The limit on the size of the input dialogue is added, and the adaptive determination of its size on its contents is added.
- The fixed style "StyledPanel" is set for the elements, available to adjust their height by the user for the work elsewhere.
- The function of full text editing of table's cells is added.
- Playback engine of the syntax highlight rules is completely rewritten to simplify it and to avoid hidden errors.
- UI.{VCAEngine, Vision, WebVision}:
- The addressing abroad the array's (vector's) size in the construction of trends of the "Diagram" primitive is fixed.
- The width property of trend of the "Diagram" primitive is added and implemented.
- The periodic inspection of the widgets' tree of the page is added in order to detect the fact of widgets' removing by requesting the complete list of widgets.
- The display of trends, graphics group of the "Diagram" primitive in the scale of values is implemented in the case of differences between the scales of all graphs not more than 20%.
- The ability to select the confirmation mode for the items of the line and text editing of the primitive "FormEl".
- The possibility of loosing of some changes in the model, when displayed in the visualizers is fixed.
- The property of the values' count of the one pixel in the trends of the "Diagram" primitive is added and implemented in order to control granularity of export to CSV etc.
- The logarithmic scale of values for the trends of "Diagram" is implemented.
- The storage of aspect ratio property of the main page during the maximization of the main window of the project's session execution is added and implemented.
- The new type "Full Video" is added in the "Media" primitive. To implement the "Phonon" media engine in the //UI.Vision//.
- The field of the archive's properties "prm{X}prop" is added in the "Diagram" primitive, which is filled with the value of the available depth and frequency of the archive.
- UI.VCAEngine:
- The specific properties of the attributes of primitives are added, such as help and syntax highlighting.
- The enabling of project's session pages when it is really necessary is implemented in order to speed up the startup and optimize memory usage.
- The "Document" primitive is remade for keeping the archives fully in the database, as well as the function of user API to access the elements of the archive is added.
- The periodic (30 minutes) check and the closing of the unused (orphaned) projects' sessions are added.
- The previous one (controversial) rollback mechanism of nested widgets deleting is removed and it is replaced by the full-fledged rollback mechanism in the UI.Vision visualizer.
- Optimization of memory usage by the session's elements up to 20% is implemented.
- The support of the first, out of date, version of the database structure of the visual area is removed.
- The restriction on the time of the document's generation in the "Document" primitive in 5 seconds is added.
- The support of the attribute's type "Object" and "Text" is added.
- The forced initialization of new user's attributes in EVAL is disabled.
- The display of help for the widget's attributes is added.
- The "Document" primitive is switched to XML parsing in order to fully preserve the XHTML markup.
- The display of the correct status of the links in the form of "(+)" at the end of the line is added.
- The redirection to the above page of raw events is added. This allows you to globally handle events at the very top page.
- The ability to make the links between widgets of "wdg:" type in the form of absolute and relative ones.
- The support of the "arh:" link type is added.
- The support of the data source parameters' object type is added.
- UI.Vision:
- The display of help for the widget's attributes is added.
- Adaptation to the ARM.
- The display of message about loss of connection with the visualization server and its recovery is added for remote visualization.
- The separate full-text editor for text attributes is added.
- The implementation of the full-fledged changes undo and redo in visual editing of widgets is added.
- Improvements in the sensitivity and updating the changes in the project's session: the rendering performance of the "ElFigure" primitives is optimized, handling of the changes in the "geomZ" level of the widget is added.
- The export to CSV format from the "Diagram" and "Document" primitives is added.
- The limit on the size of the input dialogs is added and an adaptive determination of their sizes by their contents is added.
- The rules' execution mechanism for syntax highlighting is completely rewritten.
- The new session creation after the restoration of remote connection and absence of the previous session is added.
- Window background for the editable widget is set to "QT::Dense7Pattern" template to eliminate the possible of overlapping by color.
- The event handling of the widget's selecting when press in the scroll area, but outside of the widget is added.
- "Elementary figure" primitive:
- The dialog to set properties for the separately selected figures is added.
- The reorganization of the operations of the Properties dialog and context menu with dynamic and static properties is completed.
- In the process of addition the figure its rendering when moving the mouse cursor is implemented.
- UI.WebVision:
- The support for "gif" and "jpg" images in the elements of the "Elementary figure" primitive is added.
- The handling of nested frames scale is fixed, as well as the mechanism of formation-enabling of scroll is revised.
- The function of the images conversion on the server's side is added. Conversion function is used for resizing and discoloration the images of inactive buttons.
- The opening of small windows of the nested pages as the DIV-blocks is implemented, it solves the problem of lock and the long opening of the external windows in many browsers.
- The main page of the interface is centered in the browser's window.
- UI.WebCfgD:
- The brightness of decolorized-passive buttons is reduced.
- All dialogs windows are implemented as DIV-blocks in order to avoid problems and delays in opening external windows in different browsers.
- The group request the page's contents is used for the significant improvement of the performance on slow and high latency channels.
- The information in the status bar about the current user and the possibility of its change are added.
- The adaptation to work in full screen width is made.
5 Formation, expansion and stabilization of the user programming API
It was continued the development of object API of the user programming, which provides the integration of user's functions in the object's tree of OpenSCADA. In addition, a number of changes were made to the existing library of the user's API functions.
In particular the following changes were made:
- SYS:
- User's API for the TArrayObj object is extended for the possibility of using object properties if the properties are not the numbers.
- In the object tree of OpenSCADA of the user's API the SYS.Security.access() function is added to control user access to OpenSCADA resources with the necessary privileges.
- The functions to work with files are added: SYS.fileRead() and SYS.fileWrite().
- The getElementBy() function is added to the XMLNodeObj object's API to search for embedded nodes by attribute's value.
- The function of encoding the text between different character encodings is added.
- The NodeObj.nodePath() function is added.
- SYS, DAQ.JavaLikeCalc: The implementation of the support for regular expressions of user's API, based on "PCRE", through the "TRegExp" object is added. The interface of functions RegExp.exec() and RegExp.test() is implemented in the standard for the "JavaScript" language. The "new RegExp()" initialization of the "TRegExp" object is implemented for the DAQ.JavaLikeCalc. The additional functions using "RegExp": int search(); Array match(); Array split(RegExp pat, int limit); string replace(string substr, string str); string replace(RegExp pat, string str) are implemented for DAQ.JavaLikeCalc.
- TConfig, TBD, TTransportIn, TTransportOut, TUser, TGroup, TPrmTmplLib, TPrmTempl, TParamContr, TController, TVArchive, TVArchivator, TMArchivator: The following functions of the user API are added: cfg() and cfgSet() to access the configuration of the objects (stored in the database).
- TFunction, DAQ.JavaLikeCalc: The user's API object "TFuncArgObj" is added for function arguments get.
- DB: The following functions of the user's API are added: fieldStruct(), fieldSeek(), fieldGet(), fieldSet() and fieldDel() for the table object to provide the user access to the database through the database interface OpenSCADA.
- DAQ:
- The TController::alarmSet() function is added to generate the typical alarms in the controller's object of the "Data acquisition" subsystem's modules.
- The SYS.DAQ["Modul"]["Controller"]["Parameter"]["Attribute"].arch() function is added to directly access the object's archive associated with the attribute of the parameter.
- The following functions of the user API are added: enable() and start() for the direct monitoring of the controller's object.
- JavaLikeCalc:
- The built-in function typeof() to check the value's type is added.
- The isEVal() function for the "null" data type is added, which always returns "true".
- The call() function of the user API is added to the objects of the library functions.
- ModBus: The messIO() function of the user API is added in the "ModBus" controller's object in order to provide an opportunity to send custom ModBus-queries directly from the template of the parameter.
- DAQ.JavaLikeCalc, Special.{FLibComplex1, FLibMath, FLibSYS}: The function for the dynamic call of the library functions is added: SYS.DAQ.JavaLikeCalc["lib_{Lib}"].funcId(prms, ...).
- Archive: The following functions of the user API are added: status(), end() and begin() for access to the state and properties of an object of the messages' archiver.
- UI.VCAEngine: The wdgAt() function of the user's API is added for easy connection to the widget, both in absolute and relative path.
6 System-wide extensions
There have been made the significant changes and extensions to the system-wide API of the OpenSCADA system with the purpose of the general stabilization and in view of the general measures for cleaning the source code and reorganizing the sources' tree:
- SYS:
- The new structure of the sources tree is implemented.
- All the resources of the project are moved to the separate archive.
- To create sources' and resources' archives it can be used the command "$ make dist-lzma" and "$ make dist-reslzma".
- Documentation is made the static for modules and is divided by languages. The separate package is formed for each documentation language. In the documentation of each language it is created an index file for the entire list of local and network documentation. The total list of local documentation is greatly expanded with new documents, as well as with the supported network documentation.
- The packages of librarian databases are added: "*-LibDB.Main" and "*-LibDB.VCA", they are placed to "data/LibsDB".
- The packages of the "AGLKS" and "Boiler" models are added and placed to the "data/ModelsDB" instead of the "DemoDB" package.
- Configuration files to build RPM and DEB packages are updated.
- Dependence on the library PCRECPP is globally replaced by PCRE.
- The new function TSYS::time2str() is added to convert time intervals into a string like "1hour 23min 10sec". This function is used everywhere.
- The implementation of own XML-parser is added, instead of Expat. The own XML-parser solves the problem of supporting different character sets other than UTF, as well as the problem of safe handling the situation of the characters presence that are not valid for the current character encoding.
- TMess: Common control interface messages are moved into one TMess::lab* function.
- The storage object of the string with the "ResString" resource is significantly expanded for the clear conversion from/to "std::string type".
- The ability to save to the configuration file is added:
- The database prefix "<cfg>" is added for presentation of the configuration file as a source of load/store configuration.
- The TDBS::dataSeek() and TDBS::dataDel() functions are updated for the strict processing the configuration file.
- The chkSelDB() function is adapted to support the record to the configuration file.
- The storage of large and multi-line field values in the text box of the individual tag of the configuration file is added.
- The "long long" type, usually a 64-bit integer is replaced everywhere by the "int64_t" on all architectures.
- The objects of the OpenSCADA treads are rigidly linked with their thread. The load and periodic threads' calls statistics is added.
- The possibility of checking the loaded objects for their absence in the database and deleting is added. Check function is activated only in the case of direct loading from the database.
- The perSYSCall() system periodic function for the call of subsystems' and their modules' objects is added. It is used for service purposes of unloaded and rare task of the modules and subsystems.
- The test function of the expression by the template is moved to the "TRegExp" object.
- XMLNode:
- The code of "Expat" XML-parser using is completely removed.
- The ability to load text parts of the tag to the separate specific tags in full mode is added. It is designed for full storage the configuration of the tag.
- The ability to load and store the comments blocks into the separate specific tags in full mode is added.
- The built-in function of enabling the generation of a memory dump (removal of restrictions on file size) by setting the start OpenSCADA --CoreDumpAllow option is added.
- The automatic memory dump file processing procedure (the creation of the stack reversal - backtrace) is added to all the starting scripts of OpenSCADA. A memory dump file is expected to be in the working directory as a "core".
- The ability to include (embed) modules to the kernel library of OpenSCADA is added.
- The version of the module API of all subsystems is increased to 6.
- TConfig, TValFunc, TVal: The storage the string configuration fields is moved to the "ResString" object of the resource string , and then it is returned with the use of internal resource.
- TVariant: The storage mechanism for the string is changed in the storage of the pointer to an array of "union" with an adaptive mechanism for memory allocation (simple one, up to 7 characters is stored statically, but for the longer ones the more memory is allocated dynamically).
- The building system has been significantly updated:
- The check and disabling of the "Iconv" and "Intl" (I18N) API using is added.
- The automatic detection and enabling of the --enable-CrossCompile configuration parameter for cross-compilation environment is added.
- The --enable-CoreLibStatic configuration option is added to disable the OpenSCADA core shared library build and static linking of the call-start program.
- The summary configuration table is added.
- Moving the I18N processing code to the I18N.mk file and including it directly to the Make-files, if it is necessary, on the last stage of the configuration is added.
- The general macro AX_MOD_EN() is added for the unified modules control.
- The installation of the included files (headers) is added.
- The openscada.pc file to check the OpenSCADA configuration in the construction of external modules is added.
- The global version of the OpenSCADA source files version is changed to 0.8.0 and the OpenSCADA core library version is changed to 2.0.0.
- Implementation of the manipulation with objects through the parameters' attributes:
- The overall threading safety for the "TVarObj", "TArrayObj" and "XMLNodeObj" user's API objects is implemented: The automatic removal of the object in the "AutoHD" at the "true" AHDDisConnect() function's return.
- The reverse serialization (parsing of the object's XML representation) is added for the "TVarObj", "TArrayObj" and "XMLNodeObj" objects. It is enabled for the "TVariant", "TVal", "TValFunc", "UI.VCAEngine.Widget", that allows you to save and load a value of the object type to/from the database.
- TVal, DAQ.{BlockCalc,JavaLikeCalc,LogicLev,ModBus,Siemens}, UI.VCAEngine: The support of the a "Object" value's type is added. It is enabled for general use.
- DOC:
- Check and repair of the English texts in the OpenSCADA core are made. The translations for the OpenSCADA core to German, Russian and Ukrainian languages are updated.
- Check and repair of the English texts in the OpenSCADA modules are made. The translations for the OpenSCADA modules to German, Russian and Ukrainian languages are updated.
- The all key documents in accessible languages are updated: openscada.pdf, build.pdf, properties.pdf, "OpenSCADA API", "About OpenSCADA", "TechApp Library", "Quick Start", "WLib Main", "WLib Mnemo Elements".
- Libraries databases:
- The library of the main visual elements is appended by:
- the frames of the implementation editing and execution of "Prescriptions" - "User's programs";
- selection and configuration dialog of the the "Graphics group" frame parameter;
- some improvements are added to the "Graphics group" frame for the selection of the parameters by the user and for other purposes;
- the horizontal scroll bar is added to the "Graphics group" frame for the comfortable viewing the archives.
- The library of the electrical elements is added to the kit of libraries package.
- The frame of the main page is appended by the mechanism of "playing" the models of technological processes (TP).
- The industrial boiler unit model is translated to English and Ukrainian languages.
- The library of the main visual elements is appended by:
- DB: The time limit of 5 seconds and the field of specifying the starting offset are added for the request of the large tables' contents.
- Transport:
- The function TTransportS::traf2str() is added to convert the value of the traffic's counter to the string like "12.5KiB".
- Types of formats for output requests are expanded with versions of the text with a different end of line: LF, CR, CR/LF.
- DAQ:
- The ability to select the type of the "object" template's attribute is added.
- DiamondBoards, ModBus, LogicLev: The ability to change the type of the parameter for the disabled parameters of multi-type modules of "Data acquisition" subsystem is added.
- LogicLev, ModBus, Siemens:
- In the case of the scheduled implementation the time after the last calculation is written in the "f_frq" attribute as the negative one.
- The initialization and stop calls are added at the start/stop of the parameter.
- The update of the boolean parameter's attributes when changing the type, the "ReadOnly" flag or the name in the template.
- TArchives:
- The ability to use regular expressions when searching by category with the help of "/match/" is added.
- DBArch, FSArch: The time border when requesting messages from the archive is added.
- The link's address on the parameter's attribute is simplified to the "DAQMod.Cntr.Prm.attr" form. Support of the old address is stored.
7 Publication of OpenSCADA solutions
During the work on this version the solutions, based on the OpenSCADA, have been presented at various conferences and exhibitions:
- FOSS Sea 2011 — the report about the solutions, based on the OpenSCADA was read at the conference and in the hall there was made the mini-stand with the live solutions, based on OpenSCADA.
- International Innovation Forum 2011 — at the stand of "DІYA" Ltd and Dneprodzerzhinsk State University (DSTU) the equipment and materials on the solution, based on OpenSCADA were presented.
- 10 Ukrainian Conference for Free Software Developers and Users — the report about the solutions, based on the OpenSCADA was read at the conference and in the hall there was made the mini-stand with the live solutions, based on OpenSCADA.
- Qt Developer Days 2011 in Munich and San Francisco: there were made the demonstration of OpenSCADA solutions Dynamic model of the DMKD multifuel steam boiler unit #9 on the PC and The dynamic model of real-time of the Anastasievskaja GLKS on Nokia N9 in the Qt Demo Pavilion.
8 Conclusion
During the creation the new stable 0.8.0 release for industrial use with long-term support a lot of work to stabilize, enhance the functionality and adapt for running on the alternative hardware platforms (on the ARM architecture) is done. All this is in general make it possible to extend the sphere of OpenSCADA using on all levels of automation from the PLC, SCADA-systems server to the distributed visualization systems.
The following people took an active part in the appearance of the new industrial 0.8.0 version of the OpenSCADA system:
- Roman Savochenko: The bulk of the work on developing, documenting, and testing.
- Maxim Lysenko: Maintenance and stabilization of the "Elementary figure" primitive of the visual control area (VCA), as well as translation and update much of the documentation in English.
- Irina Popkova: Translation and update of the OpenSCADA system interface and its modules in German language.
- Almaz Karimov: Expansion of the DCON protocol module support and active testing.
- Aleksey Popkov: Building packages for Fedora-based distributions.
- Many other OpenSCADA users through comprehensive testing.
Further development efforts will be directed to the software multiplatform implementation, and expanding of functionality by creating new interfaces support modules, including the advanced development scheme, with the implementation costs distribution for the sold copies (for the modules, which interact with the commercial systems and interfaces). In order to implement a centralized distribution of solutions, services and enhancements based on OpenSCADA the creation of the store is planned within the main information OpenSCADA resource (http://oscada.org).
9 Updates
9.1 [06.06.2018] The TWENTIETH (20) last update
This update is the last one update of the the 0.8 LTS release which mostly means as a transitional one for updating to 0.9 LTS. Have fixed about 30 bugs and append some improvements, which you can read wholly in the update ChangeLog.
API
!!!!:Changes:
- SYS.*: Command line help unified in the function optDescr() for getting the hierarchical help in a string and for its printing in single place of the function TSYS::load_().
- DAQ.JavaLikeCalc: The function String.toInt() of the user API set to the base "10" by default.
- UI.{VCAEngine,Vision}: The term "quittance" renamed to "quietance", from the word "quiet" which is a logical one for the alarms, but the user API is remained compatible. Backported for implementing the modes "Load", "Save", "Menu" of the view "Button" of the primitive "FormEl" and the attribute "checkable" renamed to "mode"!
- TFunction,TPrmTmpl,DAQ.JavaLikeCalc.FLib: Some control interface properties (ID, NAME, DESCR) set to relation with the DB configuration.
Appends:
- SYS:
- The function cmdOptPresent() added and used only for the parameter presence checking.
- DB.DBF,Archive.FSArch,UI.Vision: Added for generic control for permition of created files by OpenSCADA, by the command-line parameter "--permCrtFiles" and the function TSYS::permCrtFiles().
- TRegExp: Backported for UTF8 flag support, unset by default. The attribute "err" added to the result array of the match() request.
- The virtual functions TSubSYS::optDescr() and TModule::optDescr() added for the unified command line help.
- Generic labels appended for messages categories by the function TMess::labMessCat().
- DAQ.JavaLikeCalc: The user API expanded by the casting functions {Boolean,Integer,Real}.{toReal,toInt}().
SYS
- *: Most original messages are revised and improved. All command line help messages of the core library and modules of OpenSCADA fully revised for the original texts and their translation to Ukrainian, Russian and German. "Template library" renamed to "Templates library", "Archives" renamed to "Archives-History", "ID" renamed to "Identifier".
- TCntrNode: The node's disabling/disconnecting timeout is based on the standard STD_WAIT_TM(10) and, when it is exit it is set to STD_WAIT_TM*5, instead of DEF_TIMEOUT.
- A new command-line argument --consoleCharSet added for control the console charset, for messages and help.
- The command-line argument --modDir was added as a copy of the configuration file parameter "ModDir".
DB
- {SQLite,MySQL,PostgreSQL,FireBird}: Translation columns creation at the table fixing added for already and partial translated tables into the non multi-language mode.
DAQ
- {TPrmTempl,JavaLikeCalc}: Finished and tested at the implementing the class TPrmTempl::Impl of the using unification of the DAQ templates.
- SNMP: Expanded for the connection error control at the parameter level.
Archives-History
- The archivers' objects copying prevented from copy the configuration field "ADDR", prevented from startup and fixed for copying addition properties.
- Fixed for archivers loading at some archive module missing.
- FSArch: Cache access moved under a critical section, for preventing crashes at high load. Hardly prevented from the configuration field "ADDR" changing in the running, both for messages and values. A procedure of the configuration field "ADDR" checking for duplicates added. Archive files renamed to the format "%F %H.%M.%S" to allow their creation on FAT.
- DBArch: Fixed for single-value request of the value archive.
Transports
- Serial: Added for measuring of the maximum char symbol time of the output transports in the requesting and debugging mode.
UI
- {VCAEngine,Vision,WebVision}: The primitive "Text" was appended by an attribute "inHtml" and the support of display HTML.
- FIX:{QTStarter,QTCfg,Vision}:
- Most Qt objects removing moved to use deleteLater(), for safe removing under processEvents() call.
- Size of icons and fonts made adaptive from the main-system font real size by the new function icoSize(), for: the main window initial size, the title font, toolbars' icons, the navigation tree's icons, the control tree view, the splitter width.
- The QTStarter menu forming changed for make the actions independent but the problem of the native menu bar forming in Unity.
- Force switching to the style QPlastiqueStyle() (Qt4) or QCommonStyle() (Qt5) was removed by the implementing the control of the look and feels in OpenSCADA.
- {VCAEngine,Vision}: Some measures were performed to allow the full-featured "hot" development for already running and remote sessions:
- The projects expanded by the using sessions accounting for new pages hot enabling on the sessions.
- FIX: The attribute "value" of the primitive "FormEl" prevented from the modification flag set at the type change.
- FIX: Restored and fixed for hot tracing into sessions of changes into widget's links.
- Implemented for hot update of the widget procedures of the runtime mode.
- ElFigure: Some properties of the common part of the developing mode were moved to the private widget part.
- QTStarter: Expanded by the Look and Feel control itself and its profiles support from the configuration file table "LookFeel" of the module, for: Generic font, Widgets style, Palette, CSS style.
- QTCfg:
- Fixed, in the closing mostly, for processing of requests into the different threads and for crashes at opened warning-error dialogs.
- Forming item's WhatsThis, ToolTip and StatusTip is unified moving to one function setHelp().
- The fitting mechanism of the vertically-scalable items was made: reseting for the previous fitting, faster and more precision.
- VCAEngine:
- Prevented from saving not enabled yet items at "enableByNeed".
- Archive mode of the primitive "Document" improved by the specific attributes set to the new mode Attr::NotStored. Prevented from the missing attributes warnings at switching the primitive "Document" to the dynamic mode.
- Vision:
- Scaling the main runtime window made absolute, from the window original size.
- The InputDlg widget expanded for controlled save and restore the window size, for very expanded ones on the example of the fullsized text edition.
- WebVision: The modes "Menu", "Load" and "Save" of the view "Button" of the primitive "FormEl" are implemented.
9.2 [29.12.2017] The NINETEENTH (19) update
This update of the 0.8 LTS release fixes about 30 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
API
!!!!:Changes:
- SYS.*: The flag TCfg::TransltText was moved to TFld::TransltText and used instead TFld::NoStrTransl also which removed.
- Transports: The generic accessing lock of the outgoing transport was moved to mutex and the argument "noRes" was removed from the function messIO() to prevent from unexpected outcomes from the critical section of requests. Resource lock object nRes and its function nodeRes() removed for the input transport object.
Appends:
- SYS:
- strEncode() expanded by the mode "ToLower" for conversion to lower register.
- Command-line options preloading and direct access-modification added by a new function cmdOpt(), full switch to cmdOpt() from getCmdOpt().
- Binaries decoding into strDecode() expanded by the argument's value "<text>" for text field in right forming.
- XMLNodeObj: Appended by an user API function getElementsBy() of XML nodes list obtaining by tag name or some attribute value.
- TArrayObj: arSet() adapted to the array end appending by a negative index.
- DAQ.{AMRDevs,ICP_DAS},Special.FLibSYS: A self implementation of the function atof() and strtod() in the function TSYS::str2real() and its shortcut s2r() and for understand both radix symbols of float point value that is "." and ",". DAQ.OPC_UA.libOPC_UA: Function TSYS::str2real() placed and used into the independent library. Disabled now!
- Transports: Generic IO log for both input and output transports was added into the core and all transports modules.
- UI.VCAEngine: Appended by user functions of the session space: reqTm(), reqUser(), userActTm().
SYS
- XMLNode
- Fixed from spare string size reserving in encoding of the serialization which caused to its performance significant degradation especially on big trees. It must significant rise overall performance in network interaction by XML.
- Unified and fixed in serialization to XHTML for: preventing self-finished tags for "script", "div; preventing of symbols "'" and '"' encoding into text (also for generic XML); UTF8 symbol 0xA0 encoding to " ".
- TRegExp fix in function match(), for hang and crash prevent.
- The core library version set to 2:6:0. Modules version of the subsystem "Transports" rose to 10.
- TConfig: Prevented from recursive entry to cfgChange() by a flag mInCfgCh.
- XMLNodeObj,XMLNode: Full children clear set from the end for much speed up of the operation.
DB
- Tables' content display set to configurable limited, by default it is 100 rows.
- {SQLite,MySQL,PostgreSQL,FireBird}: Preloading of fieldSeek() set limited on 100 records, for long unterminated hangs prevent.
DAQ
- {DCON,ModBus,Siemens}: Mutex objects "enRes" and "reqRes" set to recursive ones by Oleksiy Bondarchuk.
- SoundCard: Significant revised and fixed for work with the real hardware and virtual ones like PulseAudio and tested on sample rates up to 192000.
Archives
- Values and messages archivators appended by the maximum value of measuring of the processing time.
- FSArch: Archive files multiple pack-unpack prevented. Added checking and clearing for zero archive files. Buffers of archivation of messages and of info-files of values set safer, for possible random data reading.
- DBArch: Appended by wrong archives pass of the values.
Transports
- {SSL,Sockets}.out: Transport's functional lock of resources was merged with reqRes().
- Input transports appended by measurement of the current and maximum time of requesting to protocol, in the "Debug (0)" mode. Output transports were appended by the responsible time measurement in the "Debug (0)" mode.
Protocols
- HTTP: Expanded by a list of users allowed for auth. mNoFull renamed to mNotFull.
UI
- {QTCfg,Vision}: Main window and main dialogs (developing for Vision) size and splitter's properties storing and restoring were added.
- QTCfg: Fix vertical scalable widgets "Tables" and "Lists" by their placing at the end of the widgets stack. Prevented from high load at the respond waiting progress dialog.
- VCAEngine: Different big (from the main task of the session) perioded widgets processing adapted to execution into different phases then to make the main task loading plainer and lesser at all. Added control for user action by its last action time.
- QTStarter: Expanded for close (windows) and starting into the system tray. Significantly revised for the interface fully creation into the Qt events loop of exec() and WinControl functions moved to the StApp descendant of QApplication. Self menu of QTStarter with the Qt modules list was unified as the static storage of the actions for extending menus and toolbars of windows of the Qt modules and the system tray icon, placed also into the property "menuStarterAddr" of the application main object.
- Vision:
- The main window size was set to fit the master page size after return from maximizing or the full-screen and opening in the original size.
- Runtime menu creation moved to whole mode that is full creation at needs and full clearing at not needs, for prevent the menu show at its inactive mode into some environments like Maemo and Unity.
- Added control for the runtime user by a visualizer specific attribute "userSetVis" of the main page and by expanding of the user's status widget and the selection dialog.
Special
- FLibSYS: VArch::set() expanded for single value writing to the archiver of the archive.
9.3 [02.07.2017] The EIGHTEENTH (18) update
This update of the 0.8 LTS release fixes about 30 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
API
!!!!:Changes:
- SYS:
- XMLNode: Functions save() and saveNode() set to constant ones.
- XMLNodeObj: User API function text() was expanded by argument "full" for all child's texts combine.
- ModSchedule: Function ScanDir() and CheckFile() were renamed to dirScan() and fileCheck() respectively.
- Transport.out: User API function messIO() was expanded for return string type everywhere.
- Special.FLibSYS: The user API function dbReqSQL() was moved to the features of the function SYS.BD["TypeDB"]["DB"].SQLReq().
Appends:
- SYS: TMess::getUTF8() function was added and used for UTF-8 symbols detect into XMLNode::encode(). TCntrNode: Expanded by a user API function "messSys".
- Archive.Value: User API functions were appended by setVal().
SYS
- More original messages were fixed.
- ModSchedule: Modules closing at exit was set to all the modules closing firstly and next all the module's libraries unlinking. Modules scanning procedure was expanded by the module's name template into the end of the path.
- Significant changes into the build system.
- XMLNode: The serializer was expanded to true check for UTF-8 symbols and " " processing in function encode() and the parser, for entity " ".
- Protocol.HTTP,UI.{WebUser,WebVision}: ACL support was added to control access and visibility of items of indexes of Web resources.
- An command-line option "lang" was added.
DAQ
- ModBus: Managing of duplicate attributes of the standard parameter was fixed.
- DAQGate: Requests were fixed after moving to different station. Expanded for allow write to configure's attributes "NAME" and "DESCR".
Archive
- Fixed for checking for a proper archivator by its periodicity, allow for correct selection archivators in periodicity more then one minute in graphics building.
- FSArch:
- Function of archivators checking is fixed for correct processing of the capacity limit of the values archiving by the archives sorting to remove its files at maximum quantity.
- Fixed for too long messages back reading and wrong messages reading was prevented at all.
- Expanded for INFO files store into a standalone DB file of SQLite into the archivator's folder.
Transport
- SSL:
- Fixed into client's part for correct free which caused for crashes and blockings, for SSL_free() missing and variables "ctx", "ssl", "conn" clean at second start, into the output part. Wide tested on browsers Chrome, Firefox; for file handlers free and into Valgrind.
- The method "SSLv2" was finally removed but it is not secured and fully removed from OpenSSL 1.1.
- SSLv3_server_method() and SSLv3_client_method() functions were set to disabled by OPENSSL_NO_SSL3 definition.
Protocol
- OPC_UA{*.libOPC_UA}: The resource "mtxData" added to object Server and used for the security channels container management.
UI
- {VCAEngine,Vision,WebVision}: An attribute "mult" was added to view "List" of the primitive "FormEl" to able multiple lines selection.
- QTStarter: Fully merged from the Work branch.
- QTCfg: Scalable vertically items were finished to implement their true fitting for: texts, tables and lists. sizeHint() and minimumSizeHint() processing was fixed for "Text" and "List" items.
- VCAEngine: Links checking for activity was added to the dynamic linking mechanism.
- Vision:
- Images of primitive "Media" clean at an empty string set was added.
- Separator "\n" was set for encoding by TSYS::base64 to storages.
- Fixed for opened to edition widgets size on big screens, the fitting was set conditional for an active and maximized window miss but there has a problem in Qt.
- FormEl.Table: Fixed for properties of columns. Expanded for field "width" equal to 0 processing to hide the column. X scaling used into result column width.
- WebCfgD:
- The "Table" element processing for big content was some improved and fixed for key items edition.
- Fitted to allowed space for scalable by vertical elements: texts, tables, lists.
- GD library was replaced by the CSS filters and set optional by --enable-LibGD.
- The navigation tree and dialogs forming were some improved, by drop shadow and a transparent background for disable access to the main area.
- Item copy was expanded by it copy to its root through self.
- Generic improvement.
- WebVision:
- Width of the popupmenu was fixed for context menus.
- Behaviour of the primitive "Media" for not "Fit" mode was fixed to prevent the scale problems in way of full removing the tag <img>. Vertical alignment was added to images of the primitive.
- Dialogs, small built-in windows, forming was some fixed and improved, font of title was set to 12pt.
- System context menu oppressed for active widgets.
- Borders and transparent backgrounds processing was fixed. Background of the primitives processing was moved to common and after the ones processing and the background transparency-opaque support was added by a separated block (div) creation with the opaque level.
- Primitive "Text": spaces processing was set to "white-space: pre-wrap", the property "wordWrap" support was added.
- The view "Button" of the primitive "FormEl": was fixed for words wrap on Chrome browser, switched to use filters for display inactive images.
- The views "Spin bar", "Scroll bar", "Table", "Tree" were implemented. The view "Scroll bar" is equal to "Spin bar" now.
- View "Line" of the primitive "FormEl" was expanded by the calendar dialog for date variants.
- The visualizer specific attributes support was added through its activation.
- Main page scaling to fit to the window of the browser allowed space was added, only to grow and with the aspect ratio control.
- The XHTML part of page was moved to an separated file like the JavaScript one. All generic CSS rules were moved to the XHTML file.
- Generic improvement.
9.4 [12.02.2017] The SEVENTEENTH (17) update
This update of the 0.8 LTS release fixes about 60 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
API
!!!!:Changes:
- SYS: More functions set to constant after some objects appending by a copy constructor.
- TConfig::cfgChange() expanded by previous configuration value argument "pc".
- TVariant: It's expanded in string type for STL-string using always except fields marked as "stdStringOmit", mostly for TCfg as a constant.
- Node's function load() and load_() expanded by argument TConfig *cfg for allow direct loading after the seeking request. Argument "force" of node's function load() was removed and replaced by modifG() pre-call.
- The RW resources allocation object "Res" renamed to "ResRW".
- TModule::modFunc() of declared functions pointer getting was expanded by no exceptional calls and a result.
- Function strNoSpace() expanded for processing symbols control and renamed to strTrim(). Default processing symbols set to " \n\t\r".
- time2str() and tm2s() of the astronomic time were renamed to atime2str() and atm2s() and the relative time were moved from microseconds to seconds origin.
- taskSleep() in the cron argument is moved to pure (string) representing for the origin point hold for the astronomic clock changing detect and cron's target correction then and also for the consumption measuring by the taskUtilizTm().
- TVariant::propClear() expanded to single property clean.
- taskUtilizTm() expanded by the argument "max" to obtain the maximum value and the value changed to seconds.
- The function taskDescr() added to get a link to the current task description structure.
- DAQ: Template's configure's field variant "Constant" renamed to "Variable" and "Public constant" to "Constant" respectively.
- Archive: Value archivator is expanded for the accumulation mode support, mostly for Archive.DBArch. Attribute "tm" of the Array result of user API function "getMess" changed to type "int".
- Protocol: Input part's API moved for the Work branch kind one by the functions srcAddr(), setSrcAddr() appending and mess() changing.
Appends:
- SYS: The system option clockRT is added for select the tasks planning clock as CLOCK_REALTIME but else it's CLOCK_MONOTONIC (default now).
- Conditional variable management object "CondVar" is added.
- Function mess_sys() is added to the object TCntrNode to create system messages with the node path into the category and the node's location into the message begin, by the new function nodeNameSYSM().
- Function err_sys() is added to object TCntrNode to create error objects with the node path and the node's location.
- The functional templates fmin() and fmax() added.
- For function strTrim() created a short call sTrm() and its used everywhere.
- TSecurity: User API function User::groups() and Group::user() added.
- New user API function TVal::isCfg() added.
- DB: Errors placing to result's Array attribute "err" from exceptions are added for user API function SQLReq().
- DAQ.JavaLikeCalc: String functions list expanded by a function trim().
- Transport: User API function messIO() expanded by the input buffer size.
- Transport.Serial: User API function sendbreak() is added to output transport.
- UI: Expanded by function mimeGet() to detect mime type by the original info, file extension and this content.
- Special.FLibSYS: Appended by function the Message Digest 5 (MD5) calculation function by OpenSSL and by function floatExtract() for extract exponent and mantissa from that float value.
SYS
- TCntrNode: Moved to the stabilized resources managing conception from the Work branch.
- More errors and warnings fix from PVS-Studio report, thanks to Maksim Kochetkov.
- All parts adapted to the new argument "cfg" of loading functions, preloaded dataSeek() and the direct loading after the seeking request.
- New TCntrNode object's functions mess_sys(), err_sys() have used everywhere into the OpenSCADA core and modules.
- Modules version of the subsystem "DB", "DAQ", "Archive", "Transport" rose to 9 and the subsystem "Protocol", "UI" rose to 8. Library version set to 2:5:0.
- LibZ functions were rewrote for some unification and the used memory optimization.
- Adapted and some fixed to build by GCC v6 with C++11 by default.
- Minimal messages level for all configurations set to "Info(1)".
DB
- {.,FireBird,MySQL,PostgreSQL,SQLite}: Preloading scanning mode added for functions fieldSeek() and dataSeek() for significant performance rise here.
- *: getVal() expanded and unified.
- {SQLite,MySQL,PostgreSQL,FireBird}: Expanded to NULL using for generic EVAL store/represent.
- PostgreSQL: DB object expanded by a statistic to control the activity and lags.
DAQ
- The task's execution status was expanded by the maximum consumption value.
- DAQGate: Adapted to store parameters' assignment for stations to allow its for early restoring without need to sync. Control for automatic removing parameters and attributes added by an option.
- LogicLev: Moved for set the attribute "f_frq" to the real frequency, taken from the task description structure.
- OPC_UA.libOPC_UA: Chunks support was added to server's part. Tested on chunks into input requests for insecure and secure connections. Publish requests, and messages in general, queuing and next its processing fixed for secure connections and for Acknowledges for insecure ones after in direct processing.
- JavaLikeCalc: Support of the dynamic linking to external functions added in way: function {nm} = "{addr}"; {nm}();. Object's functions call was optimized for the name direct pass into the calling command. Expanded by operator "delete" for objects or its properties free.
- System: Expanded by "FS" data source. Automatic creation of sources expanded to modes of the sources "Fast" and "Slow".
Archive
- Spare writings direct to the archivators prevented for TVArchive::setVals(). getMess() fix for double call modules' function get(), by fmin() using.
- {.,FSArch}: Last read buffer information is added and the property using fix. Exceptions into archivatorAttach() at the archivator's object stopping are prevented for allow the archive early start.
- DBArch: Messages archivation part fixed for "needMeta" and to deny an access to the archivator before the successful meta get. Reading of the value archives set optimal for the request time, up to ten times, through using the "MARK" key and the seek request. The value archivation part expanded by the archives grouping into one group table, mostly for the archivation performance rise.
Transport
- The input buffer size added to the manual request dialog of the output transports.
- Serial: Output transport expanded to check and use I2C. Appended by RTS toggle (true/false) flow control and echo filtering.
- Sockets: Output transport's reading for reply in check to SO_ERROR moved to step 2 to take some time for delayed reading but same SO_ERROR reading sometime long. Reading reply of the output transport after FD_ISSET is false expanded by reading socket's SO_ERROR and waiting interruption on any socket error. Early broken pipe detection and like ones for sockets allowed.
- SSL: Expanded by the direct methods TLSv1.1, TLSv1.2, DTLSv1.
Protocol
- SelfSystem: XML loading expanded by option LD_NoTxtSpcRemEnBeg using to allow for spaces at begin and end of the text items.
- HTTP: Significant unified into service pages creation by the single function pgCreator(). The function pgCreator() primarily implemented as an user API function of HTTP module's object for allow its using into WEB-submodules for self but single-style service pages. External calls to the WEB submodules expanded by functions HTTP_GET(), HTTP_POST() with an argument TProtocolIn *iprt, but the old calls HttpGet(), HttpPost() also continued to check and support. Expanded for the main selection dialog with images and context help for allowing WWW-modules. The main page's template splited from the generic template for allow absolutely custom main pages.
UI
- {WebUser,WebVision}: Expanded to using the unified service interface from Protocol.HTTP by pgCreator() and the new HTTP call functions HTTP_GET, HTTP_POST.
- QTStarter: X Session manager disabled from restart the closed at exit programms. Expanded by a command line argument "--noX11" for allow the Qt disabling.
- QTCfg: Dangerous missed page refreshing prevented into applying changes on widgets of the replacing page, "Apply dialog for changes missing prevent". Moved from QMutex and QWaitCondition to ResMtx and CondVar, mostly to prevent here hangs on the system time changing.
- VCAEngine: FuncM resources lock set for a recursive to prevent dead locks. Session calculation time expanded by its maximum value. Adapted to TUIS::mimeGet() using.
- Vision: Visualizer specific attributes are alowed for the primitives and an attribute "sclWin" added and used to primitive "Diagram" for trends view in scale by window drawn by mouse. To primitive "Diagram" of the mode "Trend" the sliding by mouse is added in the time axis. Widget's tooltip and statustip set to show at not full transparent widget's parts.
- WebVision: Adapted to asynchronous calls for all regular updatings by servGet() and makeEl() adapting to it. SVG images show fixed by correct mime processing into UI.VCAEngine and TUIS::mimeGet() using. View "Button" of primitive "FormEl": fixed for next line processing, fixed for true text and image represent. For primitive "Text" set "line-height" for prevent upper font's padding and its representing for rotated texts moved to use CSS property "transform: rotate({X}deg)". * The prototype "Media" processing some fix for "fit" toggle and container's scale changing. Font's behaviour was expanded to support for text decorations "underline" and "line-through".
- WebUser: Semantics of the page's function expanded by two objects' arguments "This object" and "Protocol's object".
- WebCfgD: A new design created.
9.5 [28.06.2016] The SIXTEENTH (16) update
This update of the 0.8 LTS release fixes about 35 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
API
!!!!:Changes:
- SYS,Transport,DAQ.DAQGate,UI.{QTCfg,Vision,WebCfgD}: External host upraise is implemented by the function extHostList() extension, the requests reforwarding by function cntrIfCmd() and the input part of the self-system protocol. *: pthread_mutex, MtxAlloc and MtxString moved to the mutex wrapper object ResMtx.
- DAQ: API functions tplE(), tplIOE(), errE() renamed to elTmpl(), elTmplIO(), elErr().
- Archive: m_start, run_st, m_db were renamed to mStart, runSt, mDB.
Appends:
- SYS: Resources locking in RW object "Res" expanded by the functions (synonyms) lock(), tryLock() and unlock().
- Additional managing time macro FTM2 is added.
- TFunction: Virtual function prog() and setProg() is added for allow it's control through an abstract object.
- User API function SYS.sleep() expanded to accept first argument of time in seconds as float and allow to set here up to nanoseconds.
- DB: Resource's of the DB allocation TBD::resTbls is added.
- DAQ.BlockCalc: User API functions cntr(), cfg(), cfgSet() for blocks are added.
- Archive: messPut(), messGet() and same user API function expanded by the argument "arch" to allow direct to the pointed archivators requesting.
- User API function messGet() expanded by argument "upTo", for the timeout direct control allow.
- To messages get functions added a time result of the finished processing. Mostly for allow fast continue from the point after long terminated by the timeout requests.
- Values archivation a global option is added for time of taken values force to current and override it's source from.
- To values archive object an option is added for pass values fill to last value.
- Transport: Starting-connection time is added to the output transports.
- UI.VCAEngine: User API functions mess{Debug,Info,Note,Warning,Err,Crit,Alert,Emerg}() appended to the run-time widget and included the widget path as the category.
- Special.FLibSYS: The time functions are appended by tmSleep() for faster access to the short sleeping provides.
SYS
- CoreLib version rise to 2.4. DB,DAQ,Archive,Transport: Module's subsystems' version set to 8.
- TCntrNode: Free of locked nodes and attach to disabled ones are prevented by propper resource locking to mUse.
- {DAQ,Transport}.*: Tasks priorities range expanded up to 199 where 100-199 used for SCHED_FIFO tasks planing policy.
- System configuration fields "workdir", "moddir", "icodir" set to readonly from the configuration interface, mostly for wrong changes prevent and the changes allow only by the configuration file edit.
- Security: Adapted to prevent passwords storing in open view as hash instead, for: OpenSCADA host (Transports), Protocol.SelfSystem, UI.Vision. crypt_r() using enabled only for "__USE_GNU" and the open passwords store instead.
- data/debian: the service's script openscada.init moved to separated package openscada-server.
DB
- All DB modules rewrote to open table without exceptions into the table object constructor.
- FIX:MySQL,SQLite,PostgreSQL: Prevented the "BEGIN;" and "COMMIT;" request's sequence breakage on high concurrency access activity.
- FIX:DB.PostgreSQL: Fixed for symbols "'" '"' encoding by it replace to the doubling method. FIX: Fix cycling after unsuccessful a table's structure correction.
DAQ
- User API function funcCall() significant expanded to fix the result function for reusing and then significant performance rise.
- *,LogicLev,ModBus: DAQ redundancy of the dynamic attributes is added.
- ModBus,Siemens,DCON: Pass of real requests at the first and last iterations, only the procedures execution.
- FIX:OPC_UA: Module for client renamed to "Client OPC-UA" and for server to "Server OPC-UA".
- Protocol: Works into the poll mode of input transport are allowed and enabled by default. The Publish service now allowed on the LTS!
- FIX:libOPC_UA: Packages sequence number managing for server part is fixed by separating from the value of input packages.
- FIX: Packages sequence number managing for the client part also unified and fixed to prevent the value repeats.
- Early Acknowledgements processing in request "Publish" is added.
- TimeStamps into the "Write" client request's are disabled but some servers tell 0x80730000 (OpcUa_BadWriteNotSupported).
- Successful adapting to work with UAExpert 1.4.
- JavaLikeCalc: Support of included functions definition and it's call is added. Operation "||" and "&&" formal set to equal priority. Checking for IO moved before constants for it's override. Constant "EVAL" as a synonym to EVAL_REAL is added.
- FIX:Siemens: A crash problem at high and frequent interaction is fixed, fragments changing (by assign) is moved to replace everywhere. FIX:LibnoDave: gethostbyname() replaced to it's reentrant variant.
- BlockCalc: Special attribute "this" of the object access set to processing into blocks.
Archive
- messPut() expanded to write messages independent to the alarms table.
- DBArch,FSArch: Get messages request for equal begin and end time is allowed.
- FIX:FSArch: Check for duplicate as equal time, category, level (by the option "prevDblTmCatLev") and it prevent is added.
- Expanded for early limits check and it's check at unpack errors and then prevent storages overfull at close limits and small storages.
- Check for duplicated at all fixed. Time into cache changed from time_t to int64_t (in microseconds).
- Get from XML set some optimal. Get from plain allowed for the messages time equal to end.
- FIX:DBArch: Get messages algorithm is rewrote to request by minutes.
- Table structure's for value and messages set adaptive and moved to the objects TMArchivator and ModVArchEl.
- New option of the messages archiver are added: "Store time as pure integer".
- "Archive size (days)" for both values and messages adapted for set to zero (<0.1) and disable the limit at all.
- The used table closing after any put request is disabled.
Transport
- FIX:SSL,Sockets: gethostbyname() and getservbyname() replaced to it's reentrant variants.
- FIX:Serial,Sockets: For result's reading, into output transport, added waiting for data at zero or/and EAGAIN error. FIX: Errors on writing in the output part is fixed. Possible wrong readings after the select() wrong termination, with marking as a data present (some caused), is unified and better adjusted for different modes of the requesting and the not requesting mode of output transport.
Protocol
- SelfSystem: Force authentication update by attribute "rqAuthForce" is added. Reforwarding of host's requests by attribute "reforwardHost" into the input part is added.
UI
- VCAEngine,Vision: Logical groups separator of Widget's attributes is changed from ":" to ": " everywhere, mostly for allow the user attribute value's items separation and description it with the symbol ":". To view "Table" of the primitive FormEl into root tag "tbl" added attribute "sortEn" to direct sorting by columns and header's item option "sort" for point to initiate sorting column.
- FIX:Vision,WebVision: Mode "XY" of the primitive "Diagram" fixed for build by sorting by 'X' disable, only the hierarchical order. For primitive "Diagram" to data block "data:<dt/>" option "Approximation (aprox)" is added.
- FIX:UI.QTCfg: External host's status processing mostly improved and fixed. FIX: Timeouts of external host are set configurable by the option "TmConChk". FIX: The options StartUser and StartPath are moved under a resource allocation by the type MtxString.
- FIX:VCAEngine: The function's resources locking is added for SesPage::setEnable().
- FIX: setNoTransl() at the attributes loading disabled by some problematic and no a sene.
- Force inheritance of links types is added, independent from the attribute local modification.
- To project objects were added a property "EnableByNeed" to control the projects ready after start and prevent long connection by the deferred enabling.
- Try to enable for disabled pages, at an alarm set action, is prevented by some strange crash here observed, only into LTS.
- The runtime note messages are added: "User is changed to ...", "User is connected ...", "User is disconnected ...".
- FIX:Vision:
- FIX: Too important fixes made in way of adapting to stable work with remote VCA servers:
- The module's attributes VCAStation, UserStart, UserPass and UserStBar::{user,pass,VCAStation} were moved under resources locking by the MtxString.
- To both runtime and development parts were added an initial connection with the restore connection timeout, for allow to load the VCA-server resources.
- Processing of the information dialog about a connection lost was moved to a single request (and thread) from updatePage().
- FIX: View "Table" of the primitive "FormEl" significant expanded by: global table's attributes: "hHdrVis", "vHdrVis"; row attributes "colorText", "font"; column attributes "color", "colorText", "font".
- FIX:Included to container's pages align processing rewrote to trace on the widget's geometry update and to the misaligned scroll-bars appearing sometime prevent.
- FIX: The palette restoring to visibleCheck function is added for prevent FormEl's artifacts at last.
- FIX: Mouse events at all enabled for "FormEl" primitive and some artifications like ticks lost into Slider fixed.
- FIX: Context menu problem for views List, Tree and Table of the primitive FormEl is fixed.
- Requests to an external host moved to using cntrIfCmd().
- Remote authentication moved to allow use the host authentication by default and the same connection for check it.
- Timeout of tries of restoring connection to a remote station set to progressive up to the pointed one and the error message display after the timeout value in 3 seconds.
- FIX: Too important fixes made in way of adapting to stable work with remote VCA servers:
Special
- SystemTests: The DB tests are expanded by a seek test.
9.6 [12.01.2016] The FIFTEENTH (15) update
This update of the 0.8 LTS release fixes about 20 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
API
!!!!:Changes:
- SYS.TModule: The info attributes like m{Name} renamed to mMod{Name}. Function modInfoMainSet() added and used into all modules for main info attributes of module set.
- TProtocolIn, Protocol.UserProtocol, Transport.*, DAQ.{ModBus,OPC_UA}: The input transport store by locked header instead the path for faster access, API functions changed: open(), srcTr(), setSrcTr().
Appends:
- SYS: Object ResMtx is added for gather all platform specific mutex implementation. Function TSYS::taskUtilizTm() added for get utilize time by the pointed tasks. TElem: Item's resource mResEl moved from Res to pthread_mutex_t, and it allowed for public access. Hardware platform endian specific conversion function's implementation placed, for: i16_LE(), i32_LE(), i64_LE(), i16_BE(), i32_BE(), i64_BE(), floatBE(), floatBErev(), doubleBE(), doubleBErev().
- DAQ.{LogicLev,ModBus}: Appended by user API functions to the parameter object attrAdd() and attrDel() for attributes free management.
- Transports: User API function {TrOut}.start() added for fast control for the output transport state.
- Protocol.{*,UserProtocol},Transport.{Sockets,SSL}: Function Protocol::waitReqTm() added for polling mode control of input protocols.
SYS
- FIX:TVarObj: Object's twice free possibility prevented. TVarObj::propGet() EVAL result fix.
- Core library version rose to 2:3:0. DB, DAQ, Archive, Protocol, Special, Transports, UI subsystem type modules version rose to 7.
- Archive.FSArch,DB.DBF,DAQ.{Comedi,SMH2Gi}: readdir_r() using rewrote to "dirent" structure direct malloc and prevent problems on other OS, like QNX.
DAQ
- FIX:OPC_UA:
- FIX:libOPC_UA: All wrong empty strings (-1) replaced by empty array (0). FIX: Empty Read service list cycling fix. FIX: Authenticate processing for client fixed to storing current endpoint description for next actual "policyId" obtain and using to the authenticate service. To server part new default name spaces added: 2-"http://opcfoundation.org/UA/DI/, 3-"http://PLCopen.org/OpcUa/IEC61131-3/". libOPC_UA independent version control is added. Specific value types OpcUa_IntAuto and OpcUa_UIntAuto added for adaptive integer type selection, mostly for provide integer into not fixed int32 (int64). Virtual function connect() into client is added for the connection control, used into service "CloseSecureChannel" for close connection.
- FIX:Client: Status codes display fix for the controller's attributes. Appending information by: applicationUri(), productUri(), applicationName(). For empty "browseName" browsed nodes using "displayName" set. Test client's source code some cleaned and expanded.
- Server: OpenSCADA DAQ name space set to index 4.
- Siemens: Self implementing for ISO-TCP is added and tested, mostly by Proviron Holding NV request. Restoring timeout is added. Significant re-factoring for the resources lock, error messages and other.
Transport
- FIX:{Sockets,Serial,SSL}: Resource of output transport lock into messIO() fixed, by no real a lock hold. Polling mode of the input protocol support is implemented. No request mode support is added and all modules adapted to it, in way of time argument less to zero set into the {TrOut}.messIO() function.
- Serial: Disconnect (transport stop) from output port added on read <= 0, which points to the device lost at all.
Protocol
- UserProtocol: For input requests expanded to try enable, mostly for allow to use static functions into the procedures.
UI
- FIX:UI.{Vision,WebVision}: Crash into trend's data loading fix for no a value present (time = 0).
- QTCfg: Busy progress bar dialog adapted for first range set and it updating as maximum to current.
- Vision: Adapted for build with libphonon4qt5 and Qt5. Deprecated functions using is resolved for Phonon and Qt5.
9.7 [07.11.2015] The FOURTEENTH (14) update
This update of the 0.8 LTS release fixes about 35 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
API
!!!!:Changes:
- SYS.TUI: Attribute run_st is renamed to runSt.
Appends:
- SYS: User API object Array expanded by function sum() for the array's pointed items sum allow. User API function SYS.fileRemove(string file) is added.
SYS
- FIX: User API function system() fixed for full reading popen's pipe, up to EOF.
- FIX: Only one processor, number 1, set at the multiprocessing checking fix by the real available processors get.
- FIX: Config-file loading and user API function load() rewrote for prevent access behind allocated memory.
- FIX: Security: standard users "root", "user" and groups "root", "user" creation added only after the subsystem loading and its lack. Function access() expanded for requested group presence checking and exception prevent.
- FIX:debian.openscada.init,data.{oscada_ALT.init,oscada_gentoo.init}: "export" keyword miss before LANG=en_US.UTF-8 fixed.
- TRegExp: To replace() added checking to nozero replace range for hangs prevent.
- Command-line options set to not case sensitive: coreDumpAllow, pidFile, h, help, log, messLev, modPath, config, station, statName. Some command-line options renamed and appended by the synonyms: demon + daemon, CoreDumpAllow to coreDumpAllow, pid-file + pidFile, MessLev to messLev, ModPath to modPath, Config to config, Station to station, StatName to statName.
- All modules version rose to actual changes and will next trace the changes.
- debian: Significant cleaned for most lintian's errors and warnings resolve. openscada.init: Default-Start levels set to 2 3 4 for autostart with GUI prevent, level 5.
- Main CPUs set appended as configuration field for allow generic processors select, include information about current processors set. The information about current processors set to a task's thread is added, into generic tab "Tasks".
- Addressing to the config file properties set to not case sensitive for attribute "id" value, especially for: Workdir to WorkDir.
DB
- FIX:DB removing from config file fixed, by set "ForceCfg".
DAQ
- FIX:{DCON,ModBus}: Error messages expanding to addition different errors per tries fixed.
- FIX:ICP_DAS: I-8017 fast acquisition task turn to use TSYS::taskSleep() instead clock_nanosleep() for hangs prevent at wTm overfull. Build on ARM fixed.
- FIX:DAQGate: Removing archives at the parameter removing disabled for possible archives lost prevent, at the sync. Fixed for prevent SHIFR and other attributes lost at the parameter restore, by lock, after it deletion try.
- FIX:JavaLikeCalc: Function {Integer}.toString() fixed for set to signed only the decimal base 10.
- FIX:SoundCard: Locked resources left prevented for not disabled parameters.
Archive
- FIX: Value's field "Source" set from the control interface (configurators) fixed.
- FIX:{*,FSArch}: prev_val unified to double type for all operations like average.
- FIX:FSArch: VFileArch::setVals() rewrote for integer and real data types rounding for prevent wrong access here to not allocated memory.
- Archive.DBArch: Back reading for long periodic archives, like minutes and hours added, at its starting.
Transport
- {Sockets,SSL}: Statistic information per active connection is added, include: socket FD, client host address, connection and last request time, IO traffic. Maximum clients per host limit is added.
Protocol
- FIX:OPC_UA: Possible processing for wrong certificates writing fixed. Library COPYING file replaced to "GNU LESSER GENERAL PUBLIC LICENS" content and the file GPL-3 also added. libOPC_UA appended by function Server::clientAddr() for the opened connection re-establish detection by the Secure Channel reusing.
- FIX:ModBus: Generic prefix 'i' and string processing fix.
UI
- FIX:{QTCfg,Vision}: Fixed for font get into the text edit syntax higligting and more, by Vision::getFont(), from the default font base (system font).
- {VCAEngine,Vision}: Visualizer specific control attributes support is added. "User's status line items" UI.Vision specific attribute implemented. Old fassion access to the permissions removed.
- QTCfg:
- FIX: Checking for no apply editable widgets rewrote to direct checking.
- Requests to hosts processing moved to different threads and the interface made responsible at whole.
- Integer edition fields expanded for adaptive processing to dec, hex and oct representation.
- List view widget is moved to ListView class, inherited from QListWidget for sizeHint() set to 5 rows for height.
- FIX:VCAEngine: Using into user attributes symbol '|' fixed for types no TFld::Integer, TFld::Real and selected. Inline helps for attributes of all primitives mostly updated.
- FIX:Vision: Build for Qt 5.4 fix. Check and notify about mime loading try to a selected item added.
Special
- FIX:FLibSYS: VArchObj::FFT(): Potential crash prevented. Expand for check to EVAL and replace that to adaptive <vlOnEVAL>, new last argument. To Array result added object's attributes "bufSize" and "bufEVAL" for some the data quality control.
9.8 [14.05.2015] The THIRTEENTH (13) update
This update of the 0.8 LTS release fixes about 50 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
API
!!!!:Changes:
- SYS: Configuration resource moved to different cfgRes(). ModSched: Moved to different resources locking "schM".
- FIX:SYS: User API function SYS.strDecode() fixed for argument 2 using by default.
- TCntrNode: Flags MkDisable, Disable, MkEnable, Enable renamed to DoDisable, Disabled, DoEnable, Enabled. The shift delete mode removed as flag NodeShiftDel, functions nodeDel() and chldDel() last argument removing.
Appends:
- SYS: Short global function-link rRnd() (into namespace OSCADA) to TSYS::realRound() is added. Static function TSYS::getCmdOpt_() variant is added for the using allow from the main start program. User API object XMLNodeObj expanded by function clear() for allow fast a node clean up from childs, text and/or attributes.
- TRegExp: expanded by option 'u' for UTF-8 symbols allow and sets the force for UTF-8 locale.
- Transport: User API objects are appended by functions: In::{status,addr}(), Out::{status,addr,timings}().
- Archive: User API objects are appended by functions: TVArchive::{status,archivatorList,getVal}(), TVArchivator::status().
SYS
- Switch to building by the OpenSCADA automatic packages builder and moving for the service updates providing "0.8.13.{S}" to signed for the technical support users, oscada.org/en/services/technical-support.
- Main start program "openscada" mostly rewrote for preferable demon mode produce: check and switch to the demon mode first; CoreDumpAllow process for left for the work process; check and create PID-file for the work process; same OpenSCADA core start.
- FIX:TCntrNode: For Disabled nodes allowed to list also as checking for present.
- FIX: The functions libraries early starting into load_() prevented by crashing at "openscada --help", into DAQ.JavaLikeCalc. DAQ subsystem set to ordered and to the modules priority property "HighPriority" added to place the first allow.
- FIX: debian/rules made simplify and unified. "dh_installinit --no-start" set for prevent the service automatic start. debian/control: Depends for build with Qt5 is added.
- FIX:Init scripts:
- FIX:Debian: mostly improved, simplified, adapted to PID and fixed by remove force LC_ALL set and that break down individual LC_NUMERIC=C setting for different to C, POSIX or English locales.
- ALTLinux: mostly improved, simplified, adapted to PID using and expanded by argument "--retry TERM/30/KILL/5".
- Gentoo: mostly improved, simplified, adapted to PID and cleaned.
- RH: mostly improved, simplified, adapted to PID and expanded by argument "-d 30".
- TVarObj: The User API generic object's data resource locking Res replaced by pthread_mutex_t and the also used for connections to the objects.
- signal() replaced by sigaction() and restoring original handlers at the TSYS destroy is added.
- TArchives,TCntrNode,UI.VCAEngine: All remains operations with TArrayObj moved to arGet() and arSet().
DB
- FIX:FireBird: Prevent a table fix for key row as blr_varying. Configure template AX_LIB_FIREBIRD some adapted for configure and build that with headers into */include/firebird, like SuSE, and 64bit libraries, like Mandriva64.
- MySQL: Address field "names" sense changed to "sets" (charset-collation-engine) for the append to DB creation and SET commands.
- FIX:PostgreSQL: Entries duplicates and other ones miss for request fieldSeek() workaround is added by "ORDER BY" to the request append and the entries force sort. The build dependencies checking macros AX_LIB_POSTGRESQL some fixed for the results.
- FIX:SQLite: Adapted to the keys description as the key position number.
DAQ
- FIX:ModBus,DAQGate,OPC_UA: Fix for return after the condition "!p->enableStat() || !p->owner().startStat()" into the value set function, for next and real writing prevent.
- FIX:OPC_UA:
- FIX: libOPC_UA: TranslateBrowsePathsToNodeIdsRequest service fixed for processing not OK paths, addition debug messages are added.
- FIX: Big message's parts into the input protocol's part merge and wait fix.
- FIX: Input: Possible spare requests part drop fix after no need for now and no error full requests.
- FIX: OpcUa_Int64 type fixed by expand iN{u}() and oN{u}().
- The type Array of simple types support added, AId_DataType processing for type Array into the server part is added.
- For all limits control tab "Data" with the limits is added, limit limRetrQueueTm() for retransmission queue time control added.
- OpcUa_BadMessageNotAvailable to the service "RepublishRequest" error is added and used.
- Main integer changed from OpcUa_Int32 to OpcUa_Int64.
- FIX:Siemens: LibnoDave version updated to 0.8.5 (last from 05/17/13), pointer to int cast fixed by replace the cast to long.
- ICP_DAS: libi8k.a and the headers updated, watchdog for LP-8x81 by EnableWDT() replaced by EnableSysWDT().
- FIX:JavaLikeCalc: Expanded by VM commands AddAss, SubAss, MulAss, DivAss for make optimal operations ++, --, +=, -=, *=, /=, with assigning; mostly for the operations to type "String" and spare memory reallocation prevent here for any appends. FIX: Equal and NotEqual the virtual machine functions adjusted for undefined object's properties correct processing by the processing generic as Real for not String types. Set for binary operations like "a = b+c+d+e;" using single temporary register and allow speed optimization for strings append mostly.
Transport
- Sockets: Property MSS is added for control TCP-segment size for bad channels.
Archive
- FIX: mLastGet of values processing fixed to inactive (without buffer) archives for only direct writing here.
- FIX:FSArch: Repair values file's procedure fixed for fix value types and appended at last by not fixed type (like string) repairing code. Full tests chain passed for all fixing types to the sequential packing mechanism and the archive files errors repairing. The command line property "copyErrValFiles" replaced by directory "errors" present for copy the errors here.
- FIX: Processing for remove the files by limits fixed for prevent fresh-new archive file removing for two archive files.
- FIX: Strings archiving final fixed after last incomplete the string archiving fix into last value.
- FIX: Free storage space lack checking added for prevent hang and data lost for messages and values.
- The messages limits into the plain format archive expanded to 100000 symbols.
- Tab "Files" is added for the messages and the values with detailed information about the archive's files.
Protocol
- SelfSystem: SingleUserHostLimit property added for the limit control and error message by the reach is added. Expanded by status - Active authentication sessions.
- HTTP: Expanded by status - Active authentication sessions.
UI
- FIX:VCAEngine,Vision,WebVision:
- FIX: For primitive "Diagram" expanded address variant "data:{XMLNodeData}" for allow miss "tm", "tm_grnd" and possibility set that in seconds by attribute 's'. Fix assigning loaded values but not the append to the values buffer for direct address variants "line:{value}" and "data:{XMLNodeData}".
- FIX: View "Button" of the primitive FormEl adapted to the image scale for all the widget size and allowing cover all it space by the image.
- Type "XY" to primitive "Diagram" support is added, by Y into unpaired and X into paired parameters.
- True included widgets size scaling is added by scale edged point, for correct fit each to other at any scale.
- To primitive ElFigure attribute "mirror" is added for providing the primitive's shapes mirroring. For UI.Vision implemented only main functions and some problems present now for arcs.
- FIX:QTStarter: For main UI task destroy set timeout to 60 seconds and an execution generation allowed at the destroying timeout.
- FIX:QTCfg:
- FIX:LineEdit: The view "Integer" fixed to set allowed values limit [-2147483647:2147483647]
- TextEdit: Strong words wrap set, mostly for long descriptions. The fields vertical fitting to full page added, for busy. Rewrote for internal layout remove.
- FIX:VCAEngine:
- FIX: Link to a widget's attribute from the widget by "wdg:a_XXX" fixed and prevented from crash into generic status.
- FIX: User API operations mime() and mimeSet() used, tested and fixed for primitive "Diagram" source edition, storing into the session table and the result display, for SVG.
- The function resource locking to a widgets library and a project loading and the enabling by need multiple entry and perform prevent. Some crashes and not full the data access prevent for the remote project's session executers.
- FIX:Vision:
- FIX:FormEl: Fixed sometime difference between real and seen value, mostly for discrete views ComboBox and CheckBox.
- FIX:ElFigure: Prevented hangs at zero length from center to first radius of Arcs. Appending remnant from the widget placing into parent container temporary removed from scaleRotate() and unScaleRotate() for prevent flaws between inundations into some cases. Source code significant cleaned for next step. Some bugs fixed. Starting implement for mirroring. Some smarter control for control point 1 and 2 of Arc is added.
- FIX: Prevented double free by later restoring user and the password after changing an user to unallowed for reading an user for the project's session.
- FIX: Remote projects and sessions list obtain fixed to proper users for the started user's field.
- FIX: Allowed coordinates value limited to [-1000000:1000000] by figures updating freeze into Qt for too big the values.
- FIX: The primitive "Document" text global styles "font-weight" and "font-style" forcing removed and set only for the properties allows into the font widget's attribute, for allow working tags "<B>" and "<I>".
- FIX: "Timeouted" messages at the running session restoring try, by the background project's data loading wait, oppressed and the main window closing ceased.
- Primitive "Document" printing and exporting allowed from the context menu. Default printing set for alone and big (not lesser twice to main page) documents. Default exporting set for alone and big (not lesser twice to main page) documents or diagrams.
- The main opened windows list to the module configure page status added, for remote control.
- WebVision: "root" user or users into group "root" allowed for multiple sessions open into any cases.
9.9 [27.12.2014] The TWELFTH (12) update
This update of the 0.8 LTS release fixes about 30 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
API
!!!!:Changes:
- TConfig,DB.*: Global noTransl() flag is removed as deprecated.
- Security: Functions lName() and descr() is renamed to descr() and longDescr() accordingly to the DB fields for users and the groups.
- TElem: Expand for create TFld from example-pattern of present TFld but different ID. TElem::fldClear() for fields clean up is added.
- TVarObj: Expanded functions propGet() and propSet() for hierarchical access by the path.
Appends:
- TConfig,DB: For key detect addes and used isKey().
- DB: Method TTable::fullDBName() is added.
- DAQ.JavaLikeCalc: Built-in user API function tr() is added for call to translation of base constant string, the terminator for compatibility.
SYS
- FIX:TCntrNode::chldPresent() set to detect as present all nodes, and that disabled now also. Mostly for detection by name set correct.
- FIX: Task and the record force created for errors like the timeout start. Some crashes prevent.
- FIX: Disable exeptions for the attribute's value set into NoWrite mode, simple return at that. Mostly for fix problems into DAQ.BlockCalc.
- FIX: Security: Password size expand to more 8 symbols by switch to crypt MD5. Backward compatibility saved for stored passwords. Detected by Vasilij Grigoriev.
- CntrIf,UI.{QTCfg,WebCfgD}: To table and further result flag "noReload" is added to "SET" request for control to reload big tables, also used into "Table" object of DB.
- DAQ, DAQ.JavaLikeCalc, UI.{QTCfg,Vision}: Attribute "font" is added to syntax highlight rules root node for set default font config. Default font for JavaLikeCalc programms is set to "Courier".
- To task status maximum call lag and consume is added for RT properties problems detect better.
- XMLNode::childGet(): negative index support is added for count from end.
- Using "LibGD" into OpenSCADA core disabled by default and instead used "SVG" mostly.
DB
- FIX: TBDS::dataDel() fix for remove records from config file after DB try, mostly for same DB records remove fix.
- FIX:SQLite,MySQL,PostgreSQL,FireBird: Fixed for prevent load translation from no empty translation's DB field but disabled to translation.
- FIX:FireBird: dataSeek() fix for no SELECT fields set.
- MySQL,PostgreSQL,FireBird: Uses for zero length default TEXT type.
DAQ
- FIX: Flag "prcStRd" early set into redundant task is added for prevent wrong the task starting at the connection to remote station miss and crash at stop.
- FIX:JavaLikeCalc: To function compileFunc() the resource added at "<auto>" function ID generation and prevent multiple attach to one.
- FIX: Early start, at load, for function's libraries is added. Mostly for make allow the functions before DAQ.BlockCalc start.
- Func::SysAttr flag removed for IOs "f_frq", "f_start", "f_stop", "this" and allow the storring by the libraries priority start.
- FIX:Siemens: Resources allocation mostly revised and added global API resource for prevent crashes at the reconnection by parallel access and remaping the connections index. Source code mostly cleaned.
- FIX:BlockCalc: Sort blocks procedure mostly rewrote for fix. Blocks table copy into BLOCK_SH prevent at the controller object copy.
- DCON,ModBus: Tries apply for connections set by possible the send request breakdown and no response.
- LogicLev: Link to object's property by path "{ModType}.{Cntr}.{Prm}.{Attr}#{ObjPath}" is added.
- FIX:DAQGate: Processed parameters list cleaning moved from stop to disable stage. Pass empty parameter into separated attributes request mode is added, for traffic and overall request time decrease.
- SoundCard: Expand for X86_64 specific with short framesPerBuffer call to CallBack function.
Archive
- FIX:FSArch: Fixed for prevent doubles and wrong archives connection for later appended data sources and checking before new created is added. Point to the data area for last value index prevented for the type String.
Transport
- FIX:TTransportIn: Early stop into postDisable() is added for prevent crash at stop into the destructor with freed data into heir object.
Protocol
- FIX:ModBus: Inconsistent diagnostic format of node to real counters fix.
UI
- FIX:VCAEngine,Vision: Changes down procedure mostly fixed and adapted for update the parent widget into open for edit state. Cells edition to view "Table" of primitive "FormEl" support is added.
- QTCfg,Vision: Wait cursor set moved to already set and restore only after timeout 50 ms, for blink prevent and some DE load by that.
- FIX:WebUser: Crash at new HTTP variable processing into a respond prevented.
- FIX:QTCfg: Size policy for Boolean value into RO mode fixed. Table widget significant expanded by:
- Enable vertical scrolling by pixels.
- resizeRowsToContents expanded by rows height limit to 0.9 table height and call on header section mouse press, for refit.
- String represent for multiline texts into ItemsDelegate rewrote for prevet wrong Qt eliding to line and other.
- FIX:VCAEngine: Double set the pages to processing and the firstinited context lost prevented. Double call the pages to first execution from processing procedure and cascade from the top-level page is prevented.
- FIX: Mime download expanded and fixed for projects.
- Access to project's session time table unified by append the session attributes access functions sessAttr(), sessAttrSet(). The functions used to: primitive "Document", session's Style, edited resources by user's API functions "mime()" and "mimeSet()", "fromSess" and "toSess" user's API functions "attr()" and "attrSet()". Service "/serv/attrSess/" is added for access to session's attributes.
- Inheritance support is added for owner and permition of the widgets.
- Automatic sessions creation update at the module enable is added.
- Access to DAQ properties of Object's type by path into links like "/DAQ/{Cntr}/{Prm}/{Attr}#/{oAttr1}/{oAttr2}" is added.
- FIX:Vision: Set focus proxy from the edited widget container to the widget into development mode for allow the single focus source and included widgets selection lost at some cases.
- FIX: Primitive "Diagram" fix for actual cursor set and the parameters value into the cursor position for significant time difference between the session server host and the session visualiser host, for arrears the cursor position to one period.
- FIX: LineEdit widget some fix for apply real button size obtain and prevent the window size float.
- FIX: Ticks lost for Slider view and related views deffects of primitive FormEl at press to the elements' container widget by prevent that's QEvent::MouseButtonPress and QEvent::MouseButtonRelease events global process.
- FIX: Changes update after that apply into attributes manager of the widgets into group mode fixed to update different widget's attributes into the group and on the contrary for first widget into the group.
- Resources cache mostly improved for make faster for access and update.
- Run time window's position control and save is added by option "winPosCntrSave" enable and using new service "/serv/attrSess/". Screen number expanded for not only assign to different physical display and for independent position control and save.
- Session set for automatic starting is added into parameter "Run projects list", mostly for connect to already started or background sessions.
- Restore connection time control is added for remote connection to visualisation server hang prevent and display update.
- WebVision: Scroll for the included containers correct for different variants. Images cache expanded clean up like to UI.Vision.
- WebCfgD: Expanded for loading files WebCfgDVCA.html and WebCfgDVCA.js from work directory try. JavaScript code mostly cleaned and Table expanded for simplify control and exit from cells edit mode.
Special
- FIX:FLibSYS: strDec4Bin() function fix and expand by separator argument into default value " ", for compatibility restore.
9.10 [21.07.2014] The ELEVENTH (11) update
This update of the 0.8 LTS release fixes about 20 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
API
!!!!:Changes:
- SYS: Enum TSYS::Errors (mostly DB Errors) is removed as deprecated.
- TSYS::modifCfg() expanded for WR access check.
- Primitive of functions strEncode() and strDecode() set unified.
- XMLNode: Function childIns() and childDel() position argument's type set to signed (integer) for allow insert and delete by count from end (negative value).
- TCntrNode: To functions TCntrNode::load() and TCntrNode::save() argument "string *errs = NULL" is added for place all loading and saving errors into the objects.
- DB: Expanded functions TBDS::dataGet(), TBDS::dataSet() and TBDS::dataDel() by argument "noEx = false" and exceptions generate at access to storage errors.
- Transport: setAddr() set no virtual, instead global cfgChange() used. To output transport's function "start()" argument time is added, which no zero value controls connection timeout.
- DAQ: TTipDAQ::compileFunc() argument "maxCalcTm" set to 0, for sign to use default-configurable for the module.
- Archive: TArchive, TMArchivator and TMArchivator moved to use TConfig::cntrCmdMake(). setValPeriod() and setArchPeriod() set no virtual, instead global cfgChange() used.
Appends:
- SYS: Zero initial error object "TError() : cod(0)" is added. Added new global simple function s2ll() into OSCADA namespace. Function TSYS::strMess() variant is added for length control and wrap by set "...".
- Archive: Selection priority to the value archivator object is added for provide order control and disable at all into sources selection mode "All", used for function getVal(), getVals() and archive service "/serv/val". Function selPrior() and setSelPrior() added.
DB
- AGLKS.St.db: ModBus.testTCP, DAQGate.test and OPC_UA.test set for start by default. FIX: Messages archivators "FSArch.NetRequsts" and "FSArch.StatErrors" fix.
SYS
- User API functions strEncode() and strDecode() is added. Access to storage problems notify is added. Complex tests for problems notify for storages: SQLite, MySQL, PostgreSQL, FireBird, DBF, Cfg; results: wiki.oscada.org/Works/Tests/DB.
- FIX:TFunction, TValue, UI.VCAEngine.Attr: Set TEValObj() to object type attribute by EVAL scalar set is added.
DB
- Prevent exceptions at the DB object disable, mostly after connection wrong for the network DB. Decreased wait for free tables timeout to 1 second on the DB stop, for lost connection to network DB cases fast.
- DBF: Periodic (10 seconds) sync changes from memory to file is added. Inline DB folder selection for DB object is added. RO access and errors is added.
- SQLite: Binary string write to DB support is added by "#'XXXXXX'" form. Adapted for work into RO mode.
- FireBird: Managed types expand to: blr_varying, blr_varying2, blr_text, blr_text2, blr_blob, blr_short, blr_long, blr_int64, blr_float, blr_double and blr_d_float. FIX: Internal API data clean up is added at wrong connection. fieldSet() and fieldDel() mostly rewrote for typical.
- MySQL: Adapted for work into RO mode, fieldDel() mostly rewrote for RO process. CR_CONNECTION_ERROR process at connection lost is added.
- PostgreSQL: Managed types expand to: text. character varyin, character(%d), character varying(%d), smallint, integer, bigint, real, double precision, timestamp with time zone. FIX: Connection lost processing move to after the request. Transaction processing rewrote for typical. Adapted for work into RO mode, fieldDel() mostly rewrote for RO process.
DAQ
- FIX:JavaLikeCalc: "Error constant after constant" error fix by append position. Append default safe timeout set into the module tab.
- FIX:ModBus: Write to complex type like "_f", "_i4" for write-only mode is fixed. Complex types expand by "u2" - uint16, "d" - Double.
- SNMP: Mostly expand for OIDs browser implement, MIB Tree using for access mode and enums obtain.
- OPC_UA: Inline browser by OPC UA nodes tree to the parameter object configuration is added. FIX: Input packages' size and header control is expanded for broken packages process and early drop.
- DAQGate: Inline browsing by external hosts and remote parameters tree is added. Expanded for allow the paramter's identifiers independent namespace and the assign to remote parameter's ID. Allow for pass "/prm/*" variables for some global lists process. Expand for bind hierarchic parameters (from OpenSCADA 0.9).
Archive
- FIX: Lost archive's connection to archiver after the archiver restart is fixed.
- FIX: Service "/serv/mess" on request direct to alarms set negative level fix for prevent storage data modify.
- Set archiver period expanded for allow set zero value and disable the values buffer processing for only direct write there.
- Adapted for writing unaligned to the period values and buffers.
- FIX:DBArch: Reread meta data for value archives is force set after wrong that read at start with unaccessible network DB. Disconnecting archivers to DB detect is added and instead uses next priority archiver.
- {DBArch,FSArch}: Default priority set to 1 for DBArch and 1000 for FSArch.
Transport
- Meassured request's result after termination by an exception is added to "Sent" tab of output transport. FIX: TTransportOut, TTransportIn fix for sets values check and process.
- Sockets: Default timeouts of output transport set return to "5:1".
Protocol
- ModBus: Functions 0x2 (CI) and 0x4 (RI) support is added. Classic form for registers added and complex types expand by "d" - Double.
- SelfSystem: The protocol implement improved for check and wait the header entirety. Argument "conTm" to output protocol's part is added. SES_OPEN limited by 10 for one source and user. Sessions moved to std::map for some access acceleration.
UI
- QTCfg: Check and warning about no apply changes at the page change is added. Added and used function getPrintVal() for check and encode straight binaries. Selected group nodes commands "load" and "save" support is added.
- VCAEngine: User API session area functions attr() and attrSet() expanded by argument "bool fromSess" and "bool toSess" respectively for set the attributes to the session table. FIX: Change parent trace for project and widget's library fix. VCAEngine: geomZ for widgets allows to negative.
- Vision: geomZ manage changed to changing only for single widget and rip from real work position, mostly for prevent group widget's geomZ change and collisions to no changed widgets position. Included widgets order updating function expand for prevent system widget's reorder and allow after sort by ID for equal Z. FIX: For included to container's pages set attribute Qt::WA_WindowPropagation for allow true transparent by palette propagation, mostly for Slider hide. FIX: Widgets order update fix after manual "geomZ" set into development mode.
- {QTCfg,Vision}: For wait cursor uses QApplication::setOverrideCursor(Qt::WaitCursor).
- {VCAEngine,Vision}: Changes into visual items put down to the parent function is added. Check and warning about no apply changes into item's configure dialogs is added.
9.11 [09.05.2014] The TENTH (10) update
This update of the 0.8 LTS release fixes about 50 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
API
!!!!:Changes:
- Archive: Result to function TMArchivator::put() is added for accomplish writing control.
- SYS.Mess,Archive.DBArch: The messages level type into structure TMess::SRec changed from Type to int8_t for fix negative level into DB.MySQL.
- SYS.XMLNode: Into function load() argument "full" replaced "flg" with flags: 0x01 - full mode; 0x02 - no remove spaces for begin and end tag's text.
- Transport: External hosts configuration improved for allow modes "User", "System", "User and System" select into single table. Functions removed: sysHost(), setSysHost(). Functions change: extHostList(), extHostGet(), extHostSet(), extHostDel().
- DAQ: API function "void vlSet();" expanded for same set value pass and prevent lost values.
Appends:
- SYS: New resources allocation objects MtxAlloc and MtxString is added.
- To ResAlloc is added lock() and unlock().
- TCntrNode: Base function _ctrMkNode() and specific for arguments set function ctrMkNode2() to original ctrChkNode() is added.
- "TSYS::i{bits}_LE()", "TSYS::i{bits}_BE()", "floatBE{rev}()", "doubleBErev()" functions is added for endians processing.
- Added new global simple functions into OSCADA namespace: tm2s(), s2i() and s2r().
- TArrayObj: New direct access functions arGet() and arSet() is added, for fast access from internal.
- XMLNodeObj: New function "childGet( string name, int num = 0 )" is added.
- Transport,Transport.*: To output transports virtual functions timings() and setTimings() is added.
DB
- AGLKS.St.db: KeepAlive timeout of input transport OPC_UA set to 60, Client's and Server's certificate is generated for all demands resolve and address set to 127.0.0.1.
SYS
- *.core files process adapted.
- TConfig,TValue,UI.{VCAEngine,Vision}: Editable listed configure fields and DAQ attributes by TFld::SelEdit support is added.
- User's API functions gmtime(), timegm(), strftimegm(), strptimegm() for time into GMT(UTC) processing allow.
- DB,TVariant,DAQ.JavaLikeCalc,Special.FLibSYS: Direct access, into backend, to user space object TArrayObj is set.
DB
- FIX:DB.{SQLite,MySQL,PostgreSQL,FireBird}: Keys miss into DB check is fixed for fieldSeek() and fieldSet().
- DB.{SQLite,FireBird,PostgreSQL,MySQL}: Connection for network DB restore mechanism is changed to enabling for toEnable() and disabled DB into transactions check cycle.
- Complex tests pass for lost connections restore and generic test of module Special.SystemTests.
- MTable::fieldDel() is adapted to remove fields with keys real miss into the DB's table.
- MySQL: Transaction support and using is added, for performance rise on some DB storages.
DAQ
- BlockCalc: To blocks' output links optional writing by changes is added. Field "VAL" size for block's IO table increased from 20 to 10000 and "LNK" from 50 to 100.
- JavaLikeCalc.Array: Direct access to object's properties set for some performance rise. FIX: Insert object's item to Array into this creation by "new Array(0, 1, 2, ar[0])" is fixed.
- FIX:LogicLev: Reflection type is fixed and expanded for connection to target parameter, update and attributes list sync into calc period.
- ModBus: Remove connection try from controller's object start().
- OPC_UA.{*,LibOPC_UA}: LGPL COPYING file is added to the library.
- FIX: libOPC_UA is fixed for client's service Write respond and yet ten of other critical fixes.
- OPC_UA namespaces made unified and NS_OPC_UA(0), NS_SERVER(1), OpenSCADA_DAQ_NS(2) is added.
- Session lifetime process is added.
- SubscriptionId and MonitoredItemId grow start from '1', for exclude invalid value '0'.
- User and password auth data set is added to client part and test program. Secure policy set is added to test program.
- Inline nodes browser is added to client's parameter object for insert selected nodes to processing list.
- FIX:System: New DA-type "UPS", by NUT-protocol is added. Active DA check and creation is fixed for same origin parameters test, no the parameter identifiers.
- BFN,DAQGate,ModBus,OPC_UA: Alarms for connection state to remote sources is made unified.
Archive
- TMArchivator: Reimplemented messages archivation for allow the messages into the buffer resend at the messages storage connection restore.
- FIX:Archive.*,Special.FLibSYS: Prevent for set negative period values into buffer. TValBuf::vOK() expand for check aligned to the buffer period. setVals() is adapted for allow write unaligned border [beg:end] to period by round here.
- *,DBArch: To TVArchEl::setValsProc() added result for allow archive's buffer's part write control, used for rewrite to network DB by DBArch. Allow start Values and Messages archivators for DB error, predict restore the connection.
- *,UI.{Vision,WebVision}: Service "/serv/val" is adapted for return EVAL_STR as EVAL for all string representing data modes.
Transport
- {SSL,Sockets}: KeepAlive parameters of input transport is made unifical and descriptions append. Default value of KeepAliveTm set to 60 for prevent input connections hang.
UI
- QTCfg: Check and change current page at it rename. Rows and collumns of a table adjust mechanism set like from UI.Vision primitive FormEl view "Table". Group-selected fields set support is added.
- Vision:
- FIX: "Text" primitive update font size is fixed at it's scale change.
- To session object plain resources allocation dataM (pthread_mutexattr_t) is added and used for mOpen, mStProp.
- FIX: Service <openlist path="/serv/pg"> is fixed for errors at page's widgets miss and recreate session try.
- Set transparent background palette for the pages included to container.
- UI.{QTStarter,QTCfg,Vision}: Adapted for Qt5, exclude Phonon.
- VCAEngine,Vision,WebVision: The primitives "Text", "Protocol", "Document", "Diagram" are moved to indexes from types.h.
- VCAEngine,Vision: New view "Table" of primitive "FormEl" is added.
- Vision,WebVision: To primitive "Diagram" and "Protocol" set trace time to real data time is allowed.
Special
- FLibSYS: Unified CRC() calculation function is added.
9.12 [21.12.2013] The NINTH (9) update
This update of the 0.8 LTS release fixes about 40 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
- SYS:Modification controlled writing to the config file is added for prevent writing unmodified fields dependent from system environment. Global definitions OBJ_ID_SZ and OBJ_NM_SZ is added and used for all configuration's ID and NAME. Field's NAME limit length pass to configurators by field "idm", through OpenSCADA control interface.
- DB: To functions TBDS::dataGet() and TBDS::dataSet() "forceCfg" flag is added for allow system data storing priority into config file. MySQL: MULTI_STATEMENTS requests is enabled, but process and return only first result.
- Protocol.UserProtocol: To input transport's process procedure context is added attribute "tr" for input transport object represent.
- DAQ.{BlockCalc,LogicLev,ModBus},Archive,UI.VCAEngine: Links to DAQ parameters and attributes is adapted for parameters to parameters including path like "{Mod}.{Cntr}.{Prm1}.{PrmN}.{Attr}".
- DAQ: Functions TDAQS::ctrListPrmAttr(), TDAQS::prmAt() and TDAQS::attrAt() are unified for no depending from order. Function TDAQS::daqAt() is added for access to any DAQ path's items by TCntrNode, also used into TDAQS::prmAt() and TDAQS::attrAt().
- LogicLev: Empty parameters as clean container creation allow.
- FIX:DAQ.ModBus: No lost connection restore for synchronous write mode and bits from register using is fixed. Node's lock attributes into the protocol Node's mode "Data" is fixed.
- OPC_UA: Publish, RePublish, Subscribe, MonitoredItem and related services support for input protocol's part is added (No Publish responds for LTS). Service "BrowseNext" and ContinuationPoints for it is added. Server part function reqData() is separated for OPC_UA binary encoding part into library and same data request depend from the server data model specific for data services "Browse", "Read" and "Write". Secure channel's TokenId renew support into server part is implemented and some fixed into client part. All library's files moved to separated folder libOPC_UA. Server's services Browse, Read and Write is mostly rewrited. Server's services Browse and Read is set for field "Name" of nodes return for OPC UA "BrowseName" request.
- TArchVal: LibGD2 using into core is fixed by set variable HAVE_GD_CORE. Value archive's trend build is implemented through SVG for LibGD2 into core disable.
- FIX:TArchVal: allow access to next level archive into single request, like from 1m to 10m.
- UI:
- {VCAEngine,Vision}: Group attributes setting function Vision::attrsSet() is rewrited for strong ordering for fix unordered writing to some yet missed attributes that appeared after upper changes; detected on primitive "ElFig".
- FIX:{Vision,WebVision}: Two method applied for prevent primitive "Diagram" possible hung on some data combination begin from different archivators.
- {QTCfg,WebCfgD}: Field "NAME" limit length apply to nodes append dialog is added.
- QTCfg: Copy a node into the branch and no select direct the parent node, by copy to self, support is added.
- VCAEngine: Negative widget's position coordinate is allowed. Map areas limit for primitive "Media" is expanded to 20. FIX: Lost attribute "name" the global ability to see after change primitive "FormEl" view from "Button" to "Tree", "List" and other is fixed.
- Vision: Tool windows centering is disabled and new pages loading by load("") is moved to constructor RunPageView for allow DE for custom control to the windows placing behavior. GeomZ set to UP for the widget copy is added.
- ElFig: Next code clean and refactoring, mostly for moveItemTo().
- FIX: Reloading is fixed after some figures append.
- FIX: Bordered figures width scale is fixed.
- FIX: Color's and Image's indexes copy on inundations copy is added.
- FIX: Some checks to allowing the indexes is added for prevent different crashes by out of range.
- ElFig: Next code clean and refactoring, mostly for moveItemTo().
9.13 [16.09.2013] The EIGHTH (8) update
This update of the 0.8 LTS release fixes about 10 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
- SYS: User API function XMLNodeObj::childIns() is fixed for XMLNodeObj argument 1.
- DAQ.Templates,Protocol.ModBus: Previous row using as template at one new creation is added. String labels enumeration is added by strLabEnum().
- SYS.{WorkDir,IcoDir,ModDir},Archive.FSArch,DB.SQLite,Protocol.HTTP,Transport.Serial: Function ctrListFS() is added and used for directories and files browsing into configure items allow.
- DAQ.ModBus: Wrong EVAL set by link id on error writing by output link is fixed. Complex type "String", registers block, support is added to DAQ by suffix "_s" to the register "R[I]". Complex types "Integer" (32 bit signed), "Float" and "String" (registers block) support is added to Node object of input protocol.
- DAQ.{BlockCalc,LogicLev,ModBus},Archive.TArchVal,UI.VCAEngine: DAQ parameters' attributes and the parameters browsing is moved to generic function TDAQ::ctrListPrmAttr() and used everywhere.
- DAQ.OPC_UA,{Lib,Protocol}.OPC_UA: OPC UA protocol's part for Client and Server is moved to LGPL v3 library for allow and simplify using by other projects. Controller's object is made simply for EndPoints and transports selection and configuration; you can set only EndPoint and the transport will created from it. For the controller object enabled you will take list for browsed and allowed endpoins. TokenId and SessionId allowed for complex NodeId processing and tested on Ignition OPC UA server. OPC UA server fix for merged input messages processing. Generic node's attributes processing mostly improved and expanded.
- TVal: Stop archive is added on the object disable for unlock it and allow to finish act.
- Archive.FSArch: Messages to plain archive placing is fixed for big, on string buffer size limit.
- UI.{VCAEngine,Vision,WebVision}: Into primitives "FormEl", "ElFigure", "Media", "Box" are used indexes definitions from "types.h".
- UI.{Vision,WebVision}: Items configuration loading of primitive "ElFigure" is fixed for demand to all points present. The function attr{s}Set() of primitive "ElFigure", and "FormEl" into UI.Vision, full revised and set optimal. Primitive "Diagram" fix to fill the trend buffer for duplicates on request to the archive for single value and the requests moved to single request for current.
- UI.{Vision,VCAEngine}: View items variant "Tree" is added to primitive "FormEl". Resources list and files in-line browsing is added for image/media attributes. Mime table of containers is allowed for direct download, not only to selected, and mime detect from extension; mime also used for unload files. Set limit for downloaded files size.
- UI.VCAEngine: Archive's limit for primitive "Document" is fixed for expand to 1000000. Export symbols moved to file types.h and it allowed for include from visualizers. The include widgets to box change parent on widget library's or page's parent change is added, on the enable.
- UI.Vision: Vector index_array reforming fixed for points 1 and 2 for place only common figures and once (exclude Arc, for connection points 1 and 2). Fix crash on Lines and Arcs (previous wrong fix). Primitive "ElFigure" fixed for scale and unscale widths by move scaling direct to the figures paint.
- UI.WebCfg: Date fields display for table and other is fixed.
9.14 [11.07.2013] The SEVENTH (7) update
This update of the 0.8 LTS release fixes about 10 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
- UI.Vision: Primitive "ElFigure" crash on click to common point for arc's points 1,2 and line point 1 is fixed and significant code clear.
- DB.SQLite: Opened transaction close on the module stop is added for prevent data lost after crash on some other module detach.
- UI.Vision: Function WdgView::attrsSet() is added and used for group attributes set into one request, for prevent several linked events lost on processing and general performance rise on network.
- UI.{VCAEngine,Vision,WebVision}: To primitive "Diagram" trends building from direct data is added, by prefix "data:" and "line:".
- DAQ.Template,DAQ.{JavaLikeCalc,ModBus},Protocol.UserProtocol,UI.WebUser: Procedure's source text limit for the DB field is expand to 1000000.
- DAQ.{ModBus,LogicLev,BlockCalc,Siemens}: Prevent executable context reload from DB on the controller run.
- DAQ.SoundCard: Acquisition task, from PortAudio, priority set is provided. Some error messages is added. Some performance is rose.
- UI.WebVision: Session object's ID is renamed to PATH and nodeName() set to separated string by "." path. PNG compression level option is added for some performance control on images build and default value set to "1".
- Transport.{Serial,Sockets}: Errno EAGAIN process is added to write() for output transport for prevent errors on big data transfer.
- UI.{Vision,WebVision}: The primitive "Diagram" data buffer's loading by current values and lost old visible values by limit is fixed by writing current values to pixel-size alignment time.
- DAQ.JavaLikeCalc: Remove wrong grammar rule "expr OR CONST{" but finite action to first constant independent next operations of the expression. Conditional logical commands '||' and '&&' is fixed for constants.
9.15 [12.05.2013] The SIXTH (6) update
This update of the 0.8 LTS release fixes about 20 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
- UI.WebVision: External JS file "WebVisionVCA.js" loading try from current directory is added. JS code changes:
- mostly clean and fix;
- zero opacity checking is added for background disable;
- asynchronous main cycle requests try;
- primitives 'ElFigure', 'Media', 'FormEl' mostly adapted for prevent non full context replacing on single dynamic properties change;
- drag for images is disabled for FireFox.
- ModShedul,Archive.FSArch,DB.DBF: The hidden problematic readdir() function is replaced to reentrant variant readdir_r().
- UI.Vision: Primitive "ElFigure" changes and fixes:
- Value range define is added and used.
- ShapeItem::Type enumeration for figures "Line", "Arc" and "Bezier" is added.
- Widths, Styles and Colors indexes copy on the figures copy is added.
- Several arcs' point 5 separating is fixed on keyboard and mouse move.
- Mouse cursor moving according to keyboard moving is added.
- Circle contour gap by moving from keyboard is added.
- Significant code clear.
- UI.{VCAEngine,Vision,WebVision}: Expanded upper limit for primitive's "Diagram" parameters number to 20. Scales separation for different parameters of primitive "Diagram" is implemented.
- DAQ.DCON: Significant changes from Almaz Karimov:
- analog inputs reading of one methods is added;
- the method 1AO (#AA) (blocks NL-1AO, I-7021, ADAM-4021) working is fixed;
- the method 4AO (#AACN) is added for working with block ADAM-4024;
- the digital inputs reading methods @AA is replaced to $AA6 for compatibility with ADAM blocks;
- the digital outputs writing methods 4DO (#AA000F), 8DO (#AA00FF), 12DO (#AA000FFF) is added for working with ADAM blocks.
- DAQ.JavaLikeCalc: Assigns separating by symbol ',' is added to the language for like the constructions:
- var1=1, var2=3, var4=var1+var2;
- for(var1=0, var2=0, var3=-1; var1 < 10; var1++, var2++) var3++;
- SYS: User API function SYS.mktime() is added for get time since the Epoch 1.1.1970 converted from broken-down time.
9.16 [02.02.2013] The FIFTH (5) update
This update of the 0.8 LTS release fixes about 20 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
- UI.WebVision: Update period time calculation is rewrote for provide more responsibility and adaption to real network channel properties.
- To task create function added control and freeing for finished but the object present and not detached tasks.
- Archive.FSArch: Value archive data corruption into some cases by index buffer memory overlap is prevented, detected by "ValGrind".
- Memory leak for objects into destructor TVal::~TVal() is fixed, detected by "ValGrind".
- System function "getopt" for command line parsing full replaced to self implementing function TSYS::getCmdOpt() on reason the system getopt() is not reentrant nature and wrong processing for independent calls from different OpenSCADA parts.
- Adapting to one symbol system charsets support, tested on KOI8-R.
- UI.Vision: Real visible a widget part (by pixel) checking is added and used for events generate and context menu call, mostly used for "Box" and "ElFigure" primitives.
- UI.VCAEngine: Primitive "Diagram" field "Parameters number" limit expand to 20.
- Transport.Serial: Configure field "Priority" for input transport's task is added.
- Editable control for several object's configuration fields depends from "Enable" and "Start" stats is added.
- SYS:ModSched: Fields "ModAllow" and "ModDeny" open for edit and save its to config-file.
9.17 [13.11.2012] The FOURTH (4) update
This update of the 0.8 LTS release fixes about 15 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
- DAQ.SoundCard: Rewrited acquisition for realtime provide and control for samplerate and lost frames.
- System attributes MessLev, LogTarget, Lang, Lang2CodeBase, WorkDB, Workdir, IcoDir, ModDir allowed for read and write only to configuration file.
- Archive: Request only need period is added for allow fast access to high precision value archives but by need frame size and period.
9.18 [08.09.2012] The THIRD (3) update
This update of the 0.8 LTS release fixes about 30 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
- Value into Object's type set to string is fixed by recursion prevent.
- Significant value archives fixes and for some crashes.
- XMLNodeObj: Parent link storing is changed to direct pointer for prevent self lock, allow remove and exclude memory leak.
- Real task creation from high priority thread at some Linux kernels, for example 2.6.29, is fixed by replace wait call sched_yield() to TSYS::sysSleep(1e-3).
- UI.VCAEngine: Widgets of library and project on demand loading/enable is added.
- The object TEValObj is added for like to scalar processing for EVAL.
- No reentrant password hash calculation by function crypt() is replaced by reentrant function crypt_r().
- DB: Significant expands, fixes and update for document's time generation optimal and new prescriptions concept implementation.
9.19 [09.07.2012] The SECOND (2) update
This update of the 0.8 LTS release fixes about 5 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
9.20 [09.06.2012] The FIRST (1) update
This update of the 0.8 LTS release fixes about 30 bugs and appends some improvements, which you can read wholly in the update ChangeLog.
10 Links
- Tests report of the industrial release 0.8.0 LTS.