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.
В значительной степени было произведено формирование нового объектного API пользовательского программирования, которое предусматривает интеграцию пользовательских функций в дерево объектов системы OpenSCADA. Кроме этого был внесен ряд изменений
в существующие библиотеки функций пользовательского API.
В частности были осуществлены следующие изменения:
SYS:
SYS, Special.FLibSYS: Объект пользовательского API XMLNodeObj перемещён в ядро OpenSCADA (файлы tvariant.h, tvariant.cpp).
Пользовательское системное API OpenSCADA основанное на объекте TCntrNodeObj расширено для контроля прав доступа пользователя.
Объект TAreaObj переименован в TArrayObj.
Свойства объектов, вызовы функций и обработка исключений пользовательского API унифицировано.
SYS.TVarObj: Добавлена функция propList() для возможности сканирования атрибутов.
DAQ.JavaLikeCalc:
Функции пользовательского API добавлены: insert(), replace(), toReal(), toInt(), parse(), parsePath() и path2sep() в объект значения строкового типа.
Добавлена функция isEVal() к базовым типам, для обнаружения EVAL-значений.
Special.FLibComplex1: Функция ПИД расширена новыми параметрами: Kd, Tzd и followSp. Удалён параметр Tf.
Объектное API пользовательского программирования:
SYS: Функции пользовательского API: system(), message(), XMLNode(), cntrReq(), time(), localtime(), strftime(), strptime(), cron(), messDebug(), messInfo(), messNote(), messWarning(), messErr(), messCrit(), messAlert(), messEmerg() и strFromCharCode() добавлены в корневой объект ядра OpenSCADA.
DB: Функция пользовательского API SQLReq() добавлена в объект БД.
Transport: Функция пользовательского API messIO() добавлена для объекта исходящего транспорта.
UI.VCAEngine:
Функции пользовательского API: user(), alrmSndPlay() и alrmQuittance() добавлены в объект сеанса проекта.
В объект "Widget" добавлены функции пользовательского API: ownerSess(), ownerPage(), ownerWdg(), attrPresent(), attr(), attrSet(), wdgAdd(), wdgDel(), link() и linkSet().
Добавлен специальный атрибут "this" во все скрипты СВУ для доступа к объекту виджета и последующего вызова его функций пользовательского API.
Archives: Функция пользовательского API messGet() добавлена для объекта подсистемы "Архивы".
DAQ.Value: Добавлены функции пользовательского API get() и set() атрибутов.
5 Общесистемные расширения.
В общесистемное API системы OpenSCADA были внесены значительные изменения и расширения с целью повышения функциональности и общей стабилизации:
SYS:
Добавлен механизм предотвращения повторного запуска в скрипты: demo-start и user-start.
Добавлены глобальные функции для создания (регистрации) taskCreate() и закрытия taskDestroy() потоков. Все компоненты OpenSCADA используют новое API.
Добавлены файлы debian/* для поддержки построения Debian пакетов.
Добавлена функция strParse() для расширения функции strSepParse() на предмет поддержки многосимвольных разделителей и объединения односимвольных.
Добавлена инфраструктура счётчиков отладки.
Добавлена возможность назначения процессоров для потоков OpenSCADA на много-процессорных системах и много-ядерных процессорах.
Добавлен менеджер задач. Добавлено поле идентификатора процесса потока в менеджер задач.
Для реализации специфических функций добавлена обёртка над задачами OpenSCADA. Добавлена обработка исключений "TError" для задач внутри обёртки.
Код ядра системы OpenSCADA помещён в область имён "OSCADA". Версия библиотеки ядра OpenSCADA повышена до 1:0:0.
Унифицированы права доступа ко всем элементам интерфейса управления.
Добавлена проверка на версию более 2.0 утилиты сборки libtool. Включена сборка только разделяемых библиотек для модулей.
Идентификатор модуля помещён в класс конструктора для упрощения инициализации перевода текстовых сообщений модулей.
Для всех переводов использовано параметры утилиты xgettext "-C --no-location --no-wrap -k_". Использовано для очистки от мусора файлов переводов.
Версии API всех модульных подсистем установлено в 5.
SYS.Function, DAQ.BlockCalc, DAQ.LogicLev, UI.VCAEngine: Добавлен механизм контроля за изменениями параметров контроллеров подсистемы "Сбор данных".
DB:
Добавлено автоматическое открытие доступных таблиц по запросу к ним.
Добавлено управление транзакциями в функцию sqlReq(), а также добавлена функция transCloseCheck().
TFunction, DAQ.JavaLikeCalc: Добавлен вложенный контекст функций с целью повышения производительности внешних вызовов.
DAQ: Код ошибки добавлен в статус контроллера, что позволяет идентифицировать состояние и отображать его.
Protocol, Transport, DAQ.ModBus, Protocol.UserProtocol: Добавлена функция itemListIn() для выбора элементов протокола. Версия API модулей подсистемы изменена на 3. Добавлен выбор элементов протокола посредством функции TProtocol::itemListIn().
6 Значительные улучшения и исправления отдельных модулей.
В процессе работы над данным промышленным релизом значительных изменений, улучшений и стабилизации претерпели отдельные модули OpenSCADA:
DB.MySQL:
Добавлена поддержка неограниченных значений типов данных "Вещественное" и "Целое".
Добавлено преобразование значения EVAL для вещественного типа.
DB.SQLite: Улучшен механизм транзакций для поддержки внутрипользовательских SQL-запросов и закрытия старых транзакций.
DB.FireBird: Добавлена поддержка многоязыковости текстовых переменных. Унифицирована поддержка транзакций.
DAQ:
DAQGate: Добавлена поддержка возможности запроса отдельных атрибутов. Использовано для запроса архивируемых и часто запрашиваемых атрибутов. Все остальные атрибуты запрашиваются с периодом синхронизации путём полного запроса. Используется для уменьшения нагрузки и времени при обмене DAQGate с удалённой OpenSCADA станцией.
ICP_DAS: Добавлен статус DIP-переключателя для ПЛК LP-8781. Функции отправки сообщений по последовательному интерфейсу перемещены в общую функцию serReq() и все запросы используют её.
ModBus: Добавлены суффиксы "i2,i4,f,b0" к регистрам (R и RI) для гибкого доступа посредством различных типов данных.
JavaLikeCalc:
Добавлена поддержка обзорного цикла для сканирования свойств объекта "for( <i> in <obj> ) <code>;".
Свойства объектов, вызовы функций и обработка исключений пользовательского API унифицировано.
Transport:
Serial:
Добавлена возможность выбора типа управления потоком. Поддерживается аппаратное (CRTSCTS) и программное (IXON IXOFF) управление потоком.
Добавлена поддержка режима модема для всех входных и выходных транспортов.
SSL:
Добавлена поддержка KeepAlive лимитов. Добавлена поддержка переподключения после потери соединения и для предотвращения потери сообщений.
Добавлено получение адреса отправителя.
SSL, Sockets: В исходящий транспорт добавлены тайминги для отдельного управления временем соединения и временем последующих ответов.
Protocol.HTTP:
Добавлена функция исходящего протокола.
Добавлена поддержка автоматического входа.
Archive.FSArch: Добавлено создание информационных файлов упакованных архивов без хранения этих данных в БД. Эта функция позволяет обеспечить быстрое подключение больших архивов к другим станциям.
UI.QTCfg:
Добавлена подстройка строк для таблиц, после добавления новых строк. Добавлена поддержка копирования содержимого таблицы в буфер обмена.
Добавлена функция поиска по элементу "TextEdit".
Добавлена возможность копирования списка выбранных узлов.
7 Формирование документации и переводы документации и интерфейса.
Поскольку данный релиз позиционируется как промышленный релиз с продолжительным периодом поддержки? то к его выходу было закончено написание на Русском языке, а также перевод на Английский язык всей основной документации. Кроме того, завершён перевод интерфейса программы на Английский, Русский, Украинский и Немецкий языки:
Добавлен перевод 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 и активное тестирование.