The release of an open SCADA (Supervisory control and data acquisition) system of version 0.7.0 is the first stable, industrial release, which is associated with the completion of beta testing that began from version 0.6.4.
The main purpose of this release is providing the community of users and developers of free software (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 first stable release, for which technical support is available from the developers and for which it is planned to release fixes during a long time.
This document is the processing (compilation) of <ChangeLog> document of the OpenSCADA system of 0.6.4 version, 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://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.
Formation and stabilization of the API of user programming.
System-wide expansions.
Significant improvements and fixes of individual modules.
Formation of the documentation and translations of documentation and interface.
Unification of the demo database.
New and updated modules:
Archive.FSArch - 1.3.1 -> 1.4.1, fixes and enhancements to improve performance
Archive.DBArch - 0.9.0 -> 0.9.2, fixes and some improvements
UI.WebVision - 0.7.0 -> 0.9.0, significant improvements and fixes
UI.WebUser - 0.6.0, new module
1 Implementation of planned tasks
In accordance with a plan of release the following tasks were implemented:
Implementation of the primitives "Link" and "Function" of the VCA. - In view of the unprincipled to the industrial release and unclaimed at the moment, this task has been moved beyond the first industrial release.
The stabilization and release of industrial branch of OpenSCADA. - The big work on stabilization and optimization of the industrial release was done, as detailed in the next section.
Implementation of the database ODBC module, PostgresSQL and transport module of the DB. - Maxim Lysenko has done the implementation of the "PostgreSQL" DB module. Implementing a Database "ODBC" was considered inappropriate, because the technology "ODBC" is actually the interface of SQL-queries that do not address specific SQL-dialects of the real database, and therefore can not be right, without regard to the type of database used in solving its OpenSCADA basic tasks. The prospect of using "ODBC" is to implement access to the database that have no "native" API of direct access to the database, but there is the ODBC driver, or to provide a simple interface of SQL-queries in OpenSCADA. The implementation of the transport module of DB was moved beyond the first industrial release.
Implementation of the new mechanism/module of OpenSCADA system's test. - To perform the intra-system tests of OpenSCADA the mechanism of testing module was implemented as the user's API functions, which on the one hand retains the possibility of an autonomous call of static tests and on the other it provided an opportunity to call tests one by one, manually, as well as from user's scripts in any order and with the right number of individual tasks.
2 Optimization, increasing of stability, sustainability and system's performance.
During the work on this version, as well as its practical adaptation, it was found and corrected in a total of about 200 errors.
In addition to correcting of big number of errors it had been done the work on optimization of the various OpenSCADA's components. Especially, notable optimization was made in the Visual control area (VCA) and its visualizers.
Lets list the most significant errors, correction of which significantly affected the increasing of stability:
System-wide:
The incorrect setting of policy for real-time threads is fixed. It has not been set the PTHREAD_EXPLICIT_SCHED thread flag.
The control of dual capture of the resource in the single thread and capture the resource by timeout.
Mechanism to prevent the multiple startup is corrected for verification of PID of the blocked process due to removal by the system the lock-files in the directory /tmp.
The packing of classes structure's data using the # pragma pack (push, 1) is disabled because of the appearance of implicit buzz bug of one of the threads and blocking the rest on the OpenSCADA firmware of LP8x81 PLC.
Initialization and and updating code of modules is updated to avoid the double initialization of shared libraries.
The function of the task creation is corrected to prevent crashing when creating the automatically closed tasks during the rapid closing.
Transports:
Serial, DAQ.DCON, DAQ.ModBus: Transport of the serial interface is optimized, is made the typical one and is corrected for several errors. The transport's clients are adapted to use the new mechanism.
Sockets, SSL: The possibility of incomplete recording by the write() function if fixed. When writing to the socket, this function writes only the part of the size of its buffer (50k). For complete record of large messages the repeat of record is added.
Transport.SSL: It is finally fixed the waiting for data response from the server by waiting the data processing in the BIO_read() functions.
Transport.Sockets: The processing of null result of the waiting the tail of messages is fixed to avoid hangs on the queries in DAQ.System.HDDTemp.
* Data acquisition:
ModBus: The loss of resources during the data acquisition if fixed. For this reason it is excluded the possibility of assigning of the string directly to the object of the resource string.
JavaLikeCalc: Исправлено использование функций для параметров контроллеров DAQ из IO функций для первого использования.
DAQ, BlockCalc, JavaLikeCalc, LogicLev, Siemens: The receiving of the erroneous data on the redundancy scheme in the nonredundant tasks and with the absence of backup stations is fixed.
Protocol.HTTP, UI.WebCfg, UI.WebCfgD, UI.WebUser, UI.Vision: The value of the HTTP-parameter "Content-Type" is fixed for the "Charset" element.
UI.VCAEngine: The crash of the VCA when changing the mutable attributes, that are multiply inherited, is fixed.
Optimization and performance improvement:
SYS.XML: Conversion function of an XML tree into a string is optimized over the time.
SYS.Archive: The mechanism for adaptive generation of queries to the archives of various qualities in the case of a general query is added. It prevents the long processing time in the case of requesting the large intervals of time and the availability of lower quality archives.
DAQ, DAQ.DAQGate: Optimization of queries between redundant stations to requests' size and time is done. Only archive attributes of DAQ parameters and attributes, planned to request, are requested.
Archive.FSArch: The creation of information files of the packaged archives without storing these data in the database is added. This feature allows quick connection of large archives to other stations.
UI.Vision: In the "ElFigure" primitive for the drawing it is used QPixmap instead of QImage, which greatly improved the performance.
UI.Vision: To construct the image of the "Diagram" primitive QImage is used instead of QPicture, which greatly improved the performance.
TFunction, DAQ.JavaLikeCalc: The enclosed context of the functions is added in order to improve the performance of external calls.
Optimization of the memory usage:
SYS: The system is switched to the traditional "map" instead of "hash_map" for all objects in order to reduce memory consumption.
UI.VCAEngine: The object of the "Attr" attribute is divorced from the "TCntrNode" object in order to reduce memory consumption by up to 25%.
3 Improvement and stabilization of the VCA.
Notable changes were made in the visual control area (VCA), namely, in the VCA engine (UI.VCAEngine) modules: UI.Vision and UI.WebVision visualizers. These changes were aimed at stabilizing, optimization of memory consumption and improvement of user's properties of VCA.
Improvements of the VCA:
The full support for vertical scaling of the diagrams is added.
The support for alpha channel in color attributes of all primitives is added.
UI.VCAEngine:
It is included and made safe the inheritance of the description of mutable attributes.
The new user's API functions for the sessions are added: wdgAdd(), wdgDel(), link() and linkSet(). Addition of these functions allowed to implement the concept of a fully dynamic formation of the user interface.
Properties of access rights to the widget are implemented by the attributes "owner" and "perm" to increase the flexibility of control.
The mechanism for automatically creating and running session at startup is added.
UI.Vision:
In the attributes inspector the ability of group setting of same attributes of various widgets is added. Setting is done in the group container of the properties of attributes' inspector that appears when you select multiple widgets simultaneously.
In the "ElFigure" primitive for the drawing the QPixmap is used instead of QImage, which greatly improved the performance.
To construct the image of the "Diagram" primitive The QImage is used instead of QPicture, which greatly improved performance.
The support for properties of the user interface is added. The control and changing of the size of toolbar icons is added.
The ability to copy the values of attributes and links through the context menu of attributes' and links' inspectors is added.
The search function on the "TextEdit" element is added.
UI.WebVision:
The support for turning the "Text" primitive is added.
The generation of the basic mouse events is added. For processing of some events the stack of processing functions is added.
For the sender-user the access to its session and control are adapted.
4 Formation and stabilization of API of user's programming.
Extensively it has been made the formation of new object API of the user's programming, which provides the integration of user's functions in the objects' tree of OpenSCADA. In addition, a number of changes to the existing library of functions of the user's API was made.
In particular the following changes were made:
SYS:
SYS, Special.FLibSYS: XMLNodeObj object of the user's API moved into the OpenSCADA core (tvariant.h and tvariant.cpp files).
User's system API of OpenSCADA based on the TCntrNodeObj object is expanded to control the user's access rights.
TAreaObj object is renamed to TArrayObj.
Properties of objects, functions' calls and exceptions' processing of user's API are unified.
SYS.TVarObj: The propList() function is added to provide an ability to scan the attributes.
DAQ.JavaLikeCalc:
Functions of the user's API: insert(), replace(), toReal(), toInt(), parse(), parsePath() and path2sep() are added in the object of the string type value.
The isEVal() function is added to basic types in order to detect the EVAL-values.
Special.FLibComplex1: PID function is expanded with new parameters: Kd, Tzd and followSp. The Tf parameter is removed.
Object API of the user programming:
SYS: User's API functions: system(), message(), XMLNode(), cntrReq(), time(), localtime(), strftime(), strptime(), cron(), messDebug(), messInfo(), messNote(), messWarning(), messErr(), messCrit(), messAlert(), messEmerg() и strFromCharCode() are added to the root object of the OpenSCADA core.
DB: SQLReq() user's API function is added to the database object.
Transport: messIO() user's API function is added for the object of the outgoing transport.
UI.VCAEngine:
User's API functions: user(), alrmSndPlay() and alrmQuittance() are added to the session's object of the project.
To the "Widget" object the functions of user's API were added: ownerSess(), ownerPage(), ownerWdg(), attrPresent(), attr(), attrSet(), wdgAdd(), wdgDel(), link() and linkSet().
The special attribute "this" is added into all VCA's scripts to access the widget's object and further calling of its user's API functions.
Archives: messGet() user's API function is added to the object of subsystem "Archives".
DAQ.Value: The functions of user's API get() and set() of the attribute are added.
5 System-wide expansions.
To the system-wide API of OpenSCADA system it have been made the significant changes and expansions in order to improve the functionality and overall stabilization:
SYS:
The mechanism to prevent re-run is added to the scripts: demo-start and user-start.
The global functions to create (register) taskCreate () and to close taskDestroy () of the treads are added. All components of OpenSCADA use new API.
The debian/* files for support the building of Debian packages are added.
The strParse() function is added for the expansion of the strSepParse() function in order to support of multi-character separators and for the integration of single-character ones.
The infrastructure of the debugging counters is added.
The ability to assign processors to the threads of OpenSCADA on multi-processor systems and multi-core processors is added.
The task manager is added. The id field of the thread's process is added to the task manager.
To implement specific functions the wrapper on the tasks of OpenSCADA is added. The "TError" exceptions' processing is added for the tasks inside the wrapper.
The core's code of the OpenSCADA is placed in the "OSCADA" scope. Version of the OpenSCADA's сore library is increased to 1:0:0.
The rules of access to all elements of the control interface are unified.
The check for a version 2.0 of the libtool library is added. It is enabled the build of only shared libraries for modules.
The ID of the module is placed in the class of the constructor to simplify initialization of translating the text messages of the modules.
For all translations the parameters "-C --no-location --no-wrap -k_" of the xgettext utility are used. It is used for cleaning the garbage from the translation files.
API versions of the all modular sub-systems are set to 5.
SYS.Function, DAQ.BlockCalc, DAQ.LogicLev, UI.VCAEngine: The mechanism for monitoring changes in the parameters of controller of "Data acquisition" subsystem is added.
DB:
The automatic opening of the available tables on request to them is added.
The transaction control is added to the function sqlReq(), as well as the function transCloseCheck() is added.
TFunction, DAQ.JavaLikeCalc: The enclosed сontext of functions is added in order to improve the performance of external calls.
DAQ: The error code is added to the status of the controller, which allows us to identify state and display it.
Protocol, Transport, DAQ.ModBus, Protocol.UserProtocol: The function itemListIn() is added to select elements of a protocol. The module's API of the subsystem is changed to 3. The selection of protocol's elements via the function TProtocol::itemListIn() is added.
6 Significant improvements and fixes of the individual modules.
While working on this industrial release the significant changes, improvements and stabilization were made with the individual modules of OpenSCADA:
DB.MySQL:
The support for unbounded values of data types "Real" and "Integer" is added.
The conversion of EVAL for the real type is added.
DB.SQLite: The transaction mechanism is improved to support user's SQL-queries and closing the old transactions.
DB.FireBird: The support for multilingual text variables is added. The support for transactions is unified.
DAQ:
DAQGate: The support for ability to request the individual attributes is added. It is used to request the archived and often requested attributes. All other attributes are requested with the period of synchronization by a full request. It is used to reduce the workload and time in exchange of DAQGate with remote OpenSCADA station.
ICP_DAS: The status of the DIP-switch for LP-8781 PLC is added. The functions to send the messages via the serial interface are moved into the general serReq() function and all requests use it.
ModBus: The suffixes "i2, i4, f, b0" are added to the registers (R and RI) for flexible access through a variety of data types.
JavaLikeCalc:
The support for the review loop "for( <i> in <obj> ) <code>;" to scan the object's properties is added.
Properties of objects, functions' calls and exceptions' processing of user's API are unified.
Transport:
Serial:
The ability to select the type of the thread's control is added. It is supported the hardware (CRTSCTS) and software (IXON IXOFF) thread control.
The support of the modem mode for all input and output transports is added.
SSL:
The support of KeepAlive limits is added. The support for reconnection after the connection loss and to prevent loss of messages is added.
The getting of the sender's address is added.
SSL, Sockets: In the outgoing transport it is added the timings for the individual connection time and time of the subsequent responses control.
Protocol.HTTP:
The function of the outgoing protocol is added.
The support for automatic login is added.
Archive.FSArch: The creation of information files of packaged archives is added without storing these data in the database. This feature allows quick connection of large archives to other stations.
UI.QTCfg:
The adjustment of rows for tables after adding the new rows is added. The support for copying the contents of the table to the clipboard is added.
The search function on the "TextEdit" element is added.
The ability to copy the list of selected nodes is added.
7 Formation of the documentation, translation of documentation and interface.
Поскольку данный релиз позиционируется как промышленный релиз с продолжительным периодом поддержки? то к его выходу было закончено написание на Русском языке, а также перевод на Английский язык всей основной документации. Кроме того, завершён перевод интерфейса программы на Английский, Русский, Украинский и Немецкий языки:
Добавлен перевод README на Украинский.
Добавлен перевод документа DAQ и обобщающего документа на Английский.
Добавлен документ "Быстрый старт".
Выполнен перевод документа "Быстрый старт" на Английский язык.
Общий документ "OpenSCADA" на Английском обновлен для включения частей "Быстрый старт" и DAQ.OPC_UA.
Обновлен перевод интерфейса ядра системы на Русский, Украинский и Немецкий языки.
Для всех переводов использовано параметры утилиты xgettext "-C --no-location --no-wrap -k_". Использовано для очистки от мусора файлов переводов.
8 Унификация демонстрационной БД.
В процессе подготовки промышленного релиза значительное внимание было уделено улучшению демонстрационной БД как яркой демонстрации функций системы OpenSCADA:
Значительное обновление для поддержки новых возможностей и включения новых улучшений из системы автоматизации шаровых мельниц.
Добавлена поддержка пользовательского вызова демонстрационной БД в полноценном режиме на запись.
Добавлено масштабирование существующих элементов в случае отсутствия строк и колонок для обзорного кадра и сводной таблицы.
Обновлено для включения новых моделей аппаратов технологических процессов и адаптации всех остальных моделей.
Обновлено для:
Добавления объектов сигнализации компрессоров: KM201, KM301, KM202 и KM302.
Поддержки ручного ввода переменных с панели управления.
Обновления перевода.
Исправления нескольких ошибок.
Скрипт главной страницы проекта переписан для использования новых функций пользовательского API.
Использован новый механизм доступа к элементам пользовательского интерфейса. Предоставлен реальный доступ на чтение для простого пользователя ("user").
9 Решения, построенные на основе OpenSCADA
На основе проекта OpenSCADA построен фактически весь спектр решений автоматизации, которые ярко демонстрируют возможности, а также являются сигналом готовности системы для широкого промышленного применения.
В целом, на основе OpenSCADA авторами проекта решались задачи: полного динамического моделирования технологических процессов (ТП), управление ТП на уровне программируемого логического контроллера (ПЛК) и формирование человеко-машинного интерфейса ТП.
Моделирование ТП представлено решениями: «Библиотека моделей аппаратов технологических процессов», «Динамическая модель реального времени Анастасиевской ГЛКС» и «Динамическая модель парового котла №9 ДМК». Причём решение «Динамическая модель реального времени Анастасиевской ГЛКС» было положено в основу демонстрационной БД проекта и распространяется со всеми дистрибутивами OpenSCADA.
Сфера управления ТП на уровне программируемого логического контроллера (ПЛК) представлена решениями: «OpenSCADA в программируемом логическом контроллере (ПЛК)» и «Среда исполнения ПЛК LP-8x81 фирмы ICP DAS на основе OpenSCADA».
Сфера формирование человеко-машинного интерфейса ТП представлена решениями: «Библиотеки графических элементов пользовательских интерфейсов» и «АСУ ТП шаровых мельниц ШБМ 287\410 котлоагрегата БКЗ 160–100 ПТ».
Нужно также отметить наличие ряда решений, не вошедших в вышеприведенный перечень, и выполненных разработчиками системы для третьих лиц или непосредственно её пользователями.
Заключение
Система OpenSCADA готова для практического использования в сложных промышленных условиях и выполнения широкого спектра задач автоматического управления технологическими процессами.
С целью предоставления качественного сервиса на основе решений OpenSCADA, а также развития в направлении поддержки специализированного оборудования, протоколов и интерфейсов; разработчиками планируется и активно ведётся работа по формированию политики предоставления услуг на коммерческой основе. В число коммерческих услуг будет входить: техническая поддержка, консультации и целевая разработка расширений, интеграция и внедрение решений, а также разработка специализированных решений и продуктов на основе OpenSCADA.
Версия 0.7.0 предоставляет решения OpenSCADA только для платформы Linux x86 и x86_64. Для осуществления поддержки других аппаратных и программных платформ, запланированных проектом, работа будет продолжена. Так, к версии 0.8.0 планируется расширить поддержку аппаратных платформ минимум на платформу АРМ, как представителя RISC архитектур.
В появлении первой промышленной версии системы OpenSCADA активное участие приняли:
Савоченко Роман: Основной объём работ по проектированию, разработке, документированию и тестированию.
Лысенко Максим: Разработка примитива "Элементарная фигура" среды визуализации и управления (СВУ), создание модуля поддержки БД PostgreSQL и перевод большей части документации на Английский язык.
Яшина Ксения: Разработка примитива "Элементарная фигура" СВУ.
Попкова Ирина: Перевод интерфейса системы OpenSCADA и её модулей на Немецкий язык.
Алмаз Каримов: Разработка модуля поддержки протокола DCON и активное тестирование.