Production release of OpenSCADA 0.8.0 LTS

Production release is targeted for wide implementation to automations solutions for platforms Linux x86, x86_64 and ARM. The version is followed by long term support (LTS).

OpenSCADA on ARM PLC LP-5xxx

OpenSCADA on ARM board Tion-Pro270

OpenSCADA on ARM PLC Segnetics SMH-2Gi

OpenSCADA on Internet tablet Nokia N800

OpenSCADA on mobile phone Nokia N900

OpenSCADA on mobile phone Nokia N950

Record, UnDo and ReDo changes

Value archives select and browse

OpenSCADA 0.8.0 LTS

Changes

29.12.2017 — The nineteen planed update of the production release. Have fixed about 30 bugs and append some improvements. Significant changes:

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.

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.

{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 archivator of the archive.

2.07.2017 — The eighteen planed update of the production release. Have fixed about 30 bugs and append some improvements. Significant changes:

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 "&nbsp;" processing in function encode() and the parser, for entity "&nbsp;".

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.

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.

Behavior 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.

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.

{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".

{.,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.

28.06.2016 — The sixteenth planed update of the production release. Fixed about 35 bugs and append some improvements. Significant changes:

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.

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: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.

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: 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().

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:{Sockets,Serial,SSL}: Resource of output transport lock into messIO() fixed, by no real a lock hold. Pool mode of 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.

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.

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:Special.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.

14.05.2015 — The thirteenth planed update of the production release. Fixed about 50 bugs and append some improvements. Significant changes:

API:

Changes:

SYS: Configuration resource moved to different cfgRes(). ModSched: Moved to different resources locking "schM".

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.

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: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.

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: 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: 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.

27.12.2014 — The twelfth planed update of production release. Fixed about 30 bugs and append some improvements. Significant changes:

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.

SoundCard: Expand for X86_64 specific with short framesPerBuffer call to CallBack function.

FIX:Archive.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.

FIX:Transport.TTransportIn: Early stop into postDisable() is added for prevent crash at stop into the destructor with freed data into heir object.

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.

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: 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.

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.

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.

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.

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.

21.12.2013 — The ninth planed update of production release. Fixed about 40 bugs and append some improvements. Significant changes:

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.

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: 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.

16.09.2013 — The eighth planed update of production release. Fixed about 10 bugs and append some improvements. Significant changes:

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.

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.

11.07.2013 — The seventh planed update of production release. Fixed about 10 bugs and append some improvements. Significant changes:

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.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".

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.

12.05.2013 — The sixth planed update of production release. Fixed about 20 bugs and append some improvements. Significant changes:

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.

DB: Significant expands, fixes and update for document's time generation optimal and new prescriptions concept implementation.

09.07.2012 — The second unplanned update of production release. Fixed about 5 bugs and append some improvements. Archives enabling from DAQ parameters is fixed and its processing is significant improved. Module DAQ.System is significant updated and improved for new source's objects create at it appear.

09.06.2012 — The first planed update of production release. Fixed about 30 bugs and append some improvements. The document "Manual for the creation of modules for OpenSCADA" is finished. The document "Quick start" is significant updated and appended and video-addon to it created.

06.04.2012 — Production release 0.8.0.

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 (RU): wiki.oscada.org/Works/ChangeLog.

The key features of this version are:

Implementation of 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.

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.HTTP (1.6.0) — Significant stabilization. The set of extensions, including:

The support for HTTP variable "Transfer-Encoding = chunked" in the outgoing 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.

UI.WebUser (0.6.2) — Stabilization. The syntax highlighting in the procedures is added.

1 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 (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 (wiki.oscada.org/Works/Tests/ARM (RU)). 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.

The implementation of the editing changes rollbacks mechanism in the Vision. — As part of the widgets' visual editing window the multi-level changes rollback mechanism is 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.

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.

Lets 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 outgoing 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 outgoing 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.

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.

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.

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.

3 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.

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.

4 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).

DB: The following functions of the user's API are added: fieldStruct(), fieldSeek(), fieldGet(), fieldSet() and fieldDel() for thetable 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.

5 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.

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:

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 (oscada.org).