This release is a planned one of a working version of OpenSCADA, which are usually made at intervals of 3-4 months. The main purpose of this release is the implementation of commercial service on the OpenSCADA basis and adaptation to the ARM hardware. In addition to the main purposes within the limits of this release a great work for stabilization, cleaning the source code, as well as for the full empowerment is made.
This document is the processing (compilation) of <ChangeLog> document of the OpenSCADA system of 0.7.1 version, which is designed for briefly and clearly covering the new features and changes 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 graphics subsystem.
Formation and stabilization of user programming API.
DB.MySQL (1.7.0) - Stabilization. The ability to specify connection timeouts is added.
DB.SQLite (1.6.3) - Stabilization.
DB.FireBird (0.9.6) - Stabilization.
DB.PostgreSQL (0.9.1) - Stabilization.
DAQ.DiamondBoards (1.2.2) - Stabilization.
DAQ.System (1.7.3) - Stabilization. Dependence on the library "Libsensors" is made optional.
DAQ.BlockCalc (1.4.1) - Stabilization. The syntax highlighting is added.
DAQ.JavaLikeCalc (1.9.0) - Stabilization. The syntax highlighting is added. The adaptation to the ARM architecture hardware is made. The implementation of regular expressions and a number of extensions of user API is added. The ability to write characters in a string using octal "\041" and hex "\x21" numbers is added.
DAQ.LogicLev (1.1.3) - Stabilization. Certain extension.
DAQ.SNMP (0.6.0) - Stabilization. Implementation of the full support of the client-side of protocol. The support for all types of values is added. The support for writing values is added. Errors handling is improved. Additional connection configuration options are added.
DAQ.Siemens (1.2.4) - Stabilization.
DAQ.ModBus (1.1.2) - Stabilization. The syntax highlighting of the attributes' list is added. Some improvements.
DAQ.DCON (0.5.0) - The module is completely rewritten for support of mixed modules by selecting the query command.
DAQ.ICP_DAS (0.7.3) - Stabilization.
DAQ.DAQGate (0.9.2) - Stabilization. The parameters' cache for their initialization during the autonomous operation is added.
DAQ.SoundCard (0.6.2) - Stabilization.
DAQ.OPC_UA (0.6.1) - Stabilization. he syntax highlighting of the attributes' list is added.
Protocol.ModBus (0.6.2) - Stabilization. Some improvements.
Protocol.OPC_UA (0.6.1) - Stabilization.
Transport.Sockets (1.4.6) - Stabilization.
Transport.SSL (0.9.6) - Stabilization.
Transport.Serial (0.7.2) - Stabilization. При инициализации порта использованы предыдущие настройки и реализована возможность опускать указание некоторых настроек. During initialization of the port the previous settings are used and an opportunity to omit some of the settings is implemented.
Protocol.HTTP (1.5.1) - Stabilization. The support for HTTP variable "Transfer-Encoding = chunked" in the outgoing transport is added.
Protocol.SelfSystem (0.9.4) - Stabilization.
Protocol.UserProtocol (0.6.1) - The syntax highlighting is added.
Special.SystemTests (1.5.1) - Some improvements.
UI.QTStarter (1.6.1) - Stabilization. Adaptation for the ARM.
UI.QTCfg (2.0.0) - Stabilization. The group request to the control interface is used to optimize the remote access to OpenSCADA stations. Adaptation for the ARM. The function for the manual change the height of the elements of the text and tables (grabbed the bottom edge and dragging) is added. The multi-level syntax highlighting is added.
UI.WebCfg (1.5.5) - Stabilization.
UI.WebCfgD (0.6.6) - Stabilization.
UI.VCAEngine (1.1.0) - Stabilization. The tooltip for the attributes of widget's primitives is added. The syntax highlighting to the text attributes of widget's primitives is added.
UI.Vision (1.1.0) - Significant stabilization. Notable improvements. Adapted for the ARM. The display and restoration of lost communication are added during the remote execution of the session. The separate full-text editor for text attributes is added. The tooltip for the attributes of widget's primitives is added. The syntax highlighting for text attributes of the widgets primitives is added. The dialog of the set properties adjustment of separately selected figures is added.
UI.WebVision (0.9.1) - Significant stabilization. Small improvements.
UI.WebUser (0.6.1) - Stabilization. The syntax highlighting of the procedures is added.
1 Implementation of planned tasks
In accordance with the /HomePageEn/Works/RoadMap of the release there were made the following tasks:
Formation of the provision of commercial services based on OpenSCADA. - The concept is built and the mechanisms are created to provide commercial services by the developers based on OpenSCADA (http://oscada.org/en/services/).
Adaptation of OpenSCADA to work on the ARM hardware platform. - The building, adaptation and full testing of OpenSCADA on the ARM architecture is made on the N800 Internet tablet of the Nokia company. (http://wiki.oscada.org/Works/Tests/ARM ). As well as private activities for adaptation:
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.
SYS.TVariant, DAQ.AMRDevs, DAQ.OPC_UA: The not aligned access to data is fixed.
SYS.TCntrNode: The usage of an unsigned type 'char' on the ARM as a signed is fixed.
Archive: Functions' prototypes TArchiveS::messPut() and TArchiveS::messGet() are changed to correct variable of the message level as a signed number.
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.
DAQ.Siemens: The problem of the NoDave library for a global packing structures command calling '#pragma pack(1)' is fixed.
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.
2 Optimization, stability, sustainability and system performance increasing
During the work on this version, as well as its practical adaptation, it was discovered and corrected in a total of about 90 errors. In general, work has been done on cleaning code from the compiler's warnings with the '-Wall' flag:
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 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'.
Function: The possibility of a memory leak when attempting to set the object to a non-object function's parameter is excluded.
Data bases:
DB.PostgreSQL: The handling of database address to determine the empty fields is fixed.
Transports and protocols:
Transport: The loading of transports from the database is fixed, if there are records about the transport the module of which is missing.
Transport.Serial: Установлен флаг O_NONBLOCK для функции open() последовательного устройства с целью предотвращения блокирования открытия порта на некоторых USB->RS485 преобразователях.
Transport.Sockets, Transport.SSL: Добавлена очистка входного буфера для предотвращения повторного использования на высоколатентных каналах, после таймаута.
Transport.Sockets: Исправлено закрытие клиентского соединения по таймауту времени жизни, для подключений при отсутствии данных.
Transport.Sockets: Unix-сокет установлен в неблокирующий режим посредством флага O_NONBLOCK. Исправлено формирование сообщений об ошибках для исходящих транспортов.
Protocol.HTTP, UI.WebCfg, UI.WebCfgD, UI.WebVision, UI.WebUser: Исправлен разбор элементов POST-запроса на предмет разбора всех атрибутов каждого элемента.
Сбор данных и архивы:
Archive: Исправлено использование буфера мягкой сетки с низким и высоким разрешением времени в архивах значений.
Archive.FSArch: Исправлено создание файлов архива сообщений при помещении множества старых сообщений. Добавлен параметр предотвращения дубликатов.
Archive.FSArch: Результат функции fgetc() записан в целочисленную переменную, вместо символьной, что исправило обнаружение "EOF".
DAQ.System: Исправлено падение при выходе для источника "Hddtemp".
DAQ.ModBus: Режим установки значений атрибутов параметров изменён на активный и улучшена обработка ошибок.
DAQ.JavaLikeCalc: Добавлена проверка индекса при доступе к символу строки по индексу, с целью предотвращения выхода за диапазон.
Интерфейсы визуализации:
UI.VCAEngine: Исправлено блокирование сеанса для динамически активных проектов при динамическом доступе к собственным атрибутам виджета.
UI.Vision: Исправлено падение сеанса для проектов с периодом исполнения более 500 мс.
UI.Vision: Реализована доводка координат фигур примитива "Элементарная фигура" к остатку положения виджета.
UI.Vision: Масштабирование текста примитива "Текст" изменено на изменение размера шрифта вместо масштабирования конечного изображения, что повысило общее качество отображения шрифта.
UI.Vision, UI.WebVision: Повышено разрешение координат всех виджетов до трёх знаков после запятой, с целью обеспечения нормального позиционирования на больших масштабах.
UI.WebVision, UI.Vision: Исправлено обновление изображения примитива "Элементарная фигура" при изменении масштаба.
UI.WebVision: Удалена проверка попадания точек фигур в область отображения примитива "Элементарная фигура". Данная функция переложена на библиотеку GD.
UI.WebVision: Исключена возможность падения для примитивов "Diagram" или "ElFigure", в случае передачи некорректных значений атрибутов изображения "xSc" или "ySc" из Web-браузера.
Оптимизация и повышение производительности:
UI.WebCfgD: Добавлено изменение размера иконок на стороне сервера с целью снижения трафика.
UI.QTCfg: Использован групповой запрос к интерфейсу управления для повышения производительности на медленных и высоколатентных соединениях.
UI.QTCfg: Исключён многократный запрос элементов выборных колонок таблиц.
3 Усовершенствование и стабилизация графической подсистемы
Заметная работа была выполнена в рамках графической подсистемы, а именно в модулях движка СВУ UI.VCAEngine, визуализаторов UI.Vision и UI.WebVision, а также конфигураторах. Внесённые изменения были направленны на стабилизацию, оптимизацию потребления памяти и улучшение пользовательских свойств.
Улучшения графической подсистемы:
SYS, DAQ.JavaLikeCalc, UI.QTCfg, UI.VCAEngine, UI.Vision: Добавлено API подсветки синтаксиса. На основе данного API подсветка синтаксиса добавлена:
DAQ.BlockCalc: подсветка синтаксиса в описании атрибутов параметров.
DAQ.JavaLikeCalc: подсветка синтаксиса к компилятору языка JavaLikeCalc.JavaScript, а также ко всем текстовым полям, использующим этот язык внутри модуля.
Protocol.UserProtocol: подсветка синтаксиса к текстам процедур протокола.
UI.QTCfg: отображение многоуровневой подсветки синтаксиса, передаваемой из модели данных в виде правил регулярных выражений.
UI.VCAEngine: подсветка синтаксиса к текстовым атрибутам примитивов виджета, для которых это нужно.
UI.Vision: подсветка синтаксиса к текстовым атрибутам примитивов виджета, а также текстам программ виджетов.
UI.WebUser: подсветка синтаксиса процедур формирования Web-интерфейса.
UI.QTCfg:
Добавлена возможность ручного изменения высоты текстовых и табличных полей. Изменение осуществляется схватыванием и перетаскиванием нижнего края поля.
Групповой запрос "CntrReqs" использован для запроса контекста страницы.
UI.VCAEngine: Добавлены специфические свойства к атрибутам примитивов, вроде помощи и подсветки синтаксиса.
UI.Vision:
Добавлено отображение помощи по атрибутам виджета.
Добавлена индикация сообщения о потери соединения с сервером визуализации, а также восстановление при удалённой визуализации.
Для примитива "Элементарная фигура" добавлен диалог установки свойств отдельно выбранных фигур.
Добавлен отдельный полнотекстовый редактор для текстовых атрибутов.
UI:WebVision: Добавлена поддержка gif и jpg изображений в элементах примитива "Элементарная фигура".
4 Формирование и стабилизация API пользовательского программирования
Было продолжено формирование объектного API пользовательского программирования, которое предусматривает интеграцию пользовательских функций в дерево объектов системы OpenSCADA. Кроме этого, был внесен ряд изменений в существующие библиотеки функций пользовательского API.
В частности были осуществлены следующие изменения:
SYS: Пользовательское API для объекта TArrayObj расширено на предмет возможности использования объектных свойств, если свойства не числа.
SYS: В дерево объектов OpenSCADA пользовательского API добавлена функция SYS.Security.access() для контроля доступа пользователя OpenSCADA к ресурсам с нужными правами.
SYS, DAQ.JavaLikeCalc: Добавлена реализация поддержки пользовательского API регулярных выражений, основанной на PCRE, посредством объекта TRegExp. Реализован интерфейс функций RegExp.exec() и RegExp.test() в стандарте для языка JavaScript. Для DAQ.JavaLikeCalc реализована "new RegExp()" инициализация для объекта TRegExp. Для DAQ.JavaLikeCalc реализованы дополнительные функции с использованием RegExp: int search(); Array match(); Array split(RegExp pat, int limit); string replace(string substr, string str); string replace(RegExp pat, string str).
TFunction, DAQ.JavaLikeCalc: Добавлен объект пользовательского API "TFuncArgObj" для получения аргументов функции.
DB: Добавлены функции пользовательского API fieldStruct(), fieldSeek(), fieldGet(), fieldSet() и fieldDel() для объекта таблицы, с целью предоставить пользовательский доступ к БД посредством интерфейса БД OpenSCADA.
DAQ.JavaLikeCalc: Добавлена встроенная функция typeof() для проверки типа значения.
5 Общесистемные расширения
В общесистемное API системы OpenSCADA были внесены значительные изменения и расширения с целью общей стабилизации и ввиду общих мероприятий по чистке кода, а также реорганизации дерева исходных текстов:
SYS:
Реализована новая структура дерева исходных текстов.
Все ресурсы проекта перемещены в отдельный архив.
Для создания архивов исходных текстов и ресурсов можно использовать команды "$ make dist-lzma" и "$ make dist-reslzma".
Документация выполнена статичной для модулей и поделена по языкам. Для каждого языка документации формируется отдельный пакет. В документации каждого языка создан индексный файл по всему перечню локальной и сетевой документации. Общий перечень локальной документации значительно расширен новыми документами, а также вспомогательной сетевой документацией.
Добавлены пакеты библиотечных БД *-LibDB.Main и *-LibDB.VCA, помещены в data/LibsDB.
Вместо DemoDB пакета добавлены пакеты моделей "AGLKS" и "Boiler", помещены в data/ModelsDB.
Конфигурационные файлы для построения RPM и DEB пакетов обновлены.
Зависимость на библиотеку PCRECPP глобально заменена на PCRE.
Добавлена новая функция TSYS::time2str() для преобразования интервалов времени в строку вроде "1час 23мин 10сек". Эта функция использована везде.
Добавлена реализация собственного XML-парсера, вместо Expat. Собственный XML-парсер решает проблему поддержки различных кодировок, отличных от UTF, а также безопасной обработки ситуации наличия недопустимых для текущей кодировки символов.
SYS.TMess: Общие сообщения интерфейса управления перемещены в одну функцию TMess::lab*.
Transport, Transport.*: Добавлена функция TTransportS::traf2str() для преобразования значения счётчика трафика в строку вроде "12.5КиБ"
Заключение
Система OpenSCADA получила толчок для осуществления реальной аппаратной многоплатформенности, посредством чего код проекта был в значительной степени вычищен и сделан многоплатформенным. Эти наработки позволят продолжить движение проекта в сторону аппаратной многоплатформенности, а также реализации программной, что запланировано после следующего LTS релиза 0.8.0.
Также продолжена работа по улучшению общей функциональности, простоты и удобству использования с общим повышением качества предоставления услуг на основе системы OpenSCADA.