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 stabilization and testing of key functions before releasing the next long term support (LTS) version of OpenSCADA 0.8.0. In addition to the main purposes within the limits of this release a great work for stabilization, cleaning the source code, full empowerment and testing on the embedded and mobile ARM devices is made.
This document is the processing (compilation) of <ChangeLog> document of the OpenSCADA system of 0.7.2 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://oscada.org/websvn/filedetails.php?repname=OpenSCADA&path=%2Ftrunk%2FOpenSCADA%2FChangeLog .
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.
Expansion of 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.0) — 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. Some extensions. A significant stabilization.
DB.FireBird (0.9.7) — Stabilization.
DB.MySQL (1.7.1) — Stabilization.
DB.PostgreSQL (0.9.2) — Stabilization.
DB.SQLite (1.6.4) — Stabilization.
DAQ.BFN (0.5.1) — Stabilization.
DAQ.BlockCalc (1.5.0) — The CRON scheduling of calls is added. The start and stop blocks' call is added. Stabilization.
DAQ.DAQGate (0.9.5) — The CRON scheduling of calls is added. Stabilization.
DAQ.DCON (0.5.1) — Stabilization.
DAQ.DiamondBoards (1.2.5) — The ability to change the parameter's type is added. 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. Stabilization.
DAQ.JavaLikeCalc (1.9.5) — 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). The significant stabilization. Some extensions.
DAQ.LogicLev (1.2.0) — Stabilization. The ability to change the parameter's type is added. The CRON scheduling of calls is added. Some extensions.
DAQ.ModBus (1.2.0) — 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. Added function and used the formation of alleged violations of the controller. The support of the function for group record (0x0F, 0x10) is added. The significant stabilization.
DAQ.OPC_UA (0.6.2) — Stabilization. The adaptation of storing and reading the floating to the ARM FPA.
DAQ.SNMP (0.6.1) — Stabilization. Some improvements.
DAQ.Siemens (1.3.0) — Significant stabilization. Library LibnoDave is updated to the 0.8.4.6 version. The CRON scheduling of calls is added. The function for reconnection for the "Industrial Ethernet" connections is added. Some extensions.
DAQ.System (1.7.5) — Stabilization. The CRON scheduling of calls is added.
Transport.SSL (1.0.0) — Stabilization. Some improvements.
Protocol.HTTP (1.6.0) — The support of user's templates for internal contents of the module is added. The generation of the user's authentication messages is added. The support of all major versions of the completion the string during HTTP-request parsing is added.
Protocol.ModBus (0.6.3) — Stabilization. Some improvements.
Protocol.OPC_UA (0.6.2) — Stabilization.
Protocol.SelfSystem (0.9.5) — Stabilization.
Protocol.UserProtocol (0.6.2) — Stabilization.
Special.FLibComplex1 (1.1.0) — The direct, dynamic call of library functions is added.
Special.FLibMath (0.6.0) — The direct, dynamic call of library functions is added.
Special.FLibSYS (1.0.0) — The direct, dynamic call of library functions is added.
UI.QTCfg (2.1.0) — Stabilization. Significant extensions and improvements. The implementation of a number of features to enhance comfort.
UI.QTStarter (1.6.2) — Stabilization. The font of message in splash is fixed at 10 pixels to ensure the uniform representation.
UI.VCAEngine (1.2.0) — Stabilization. Significant extensions and improvements.
UI.Vision (1.2.0) — Significant stabilization. Significant extensions and improvements.
UI.WebCfg (1.5.6) — Stabilization.
UI.WebCfgD (0.8.0) — Stabilization. Significant extensions and improvements.
UI.WebUser (0.6.2) — Stabilization.
UI.WebVision (1.0.0) — Significant stabilization. Significant extensions and improvements.
1 Implementation of planned tasks
In accordance with the plane of the release there were made the following tasks:
The implementation of the undo/redo editing changes mechanism in the Vision. — As part of the widget's visual editing window the multi-level changes' undo/redo mechanism is implemented for all basic operations: a visual change in the geometry, changing the value of the widget's attribute, add/remove the widget, copy of the widget and editing of the widgets based on the primitive "ElFigure".
Adaptation of OpenSCADA to work on the ARM hardware platform. — In addition to the primary adaptation, in the last release for the N800 tablet (http://wiki.oscada.org/Works/Tests/ARM ) the buid and adaption of OpenSCADA for the complex (very old) program environment of the LP-5451 controller was made, and also the build for the SMH2Gi controller and for the Nokia smartphones: N900, N950, N9. As part of the build and adaptation to different mobile devices the following tasks were implemented:
DAQ.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.
SYS, DAQ.OPC_UA: The system functions floatLE(), floatLErev(), doubleLE(), doubleLErev() are added to convert the storage format of a real number on different architectures.
SYS: The adaptation is made to build with the GLibC version less than 2.5 (2.3.2).
Archive.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.
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 170 error. Also the work on cleaning code from the compiler's warnings with the "-Wall" flag was continued.
Lets list the most significant errors correction of which significantly affected the increasing of stability:
SYS:
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.
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.
Archive.FSArch:
The reading data from the archive's buffer in accordance with the buffer's size in the algorithm of fast calculation of the bits' number is fixed.
The placement of the offset in the cache from the algorithm of fast calculation of the bits' number.
The incorrect handling of the end of not aligned blocks of the fast algorithm for calculation of the bits' number is fixed.
The exclusive resource to the calcVlOff() function's call is added in order to prevent the incorrect operation with cache.
Transport, DAQ.AMRDevs, DAQ.DCON, DAQ.ICP_DAS, DAQ.ModBus, DAQ.OPC_UA, Protocol.HTTP: The usage of the TTransportOut::messIO() function at the request of the tail and getting the zero response is fixed.
DAQ.ModBus, Transport.Serial, UI.WebCfg, UI.WebCfgD, UI.WebUser, UI.WebVision: The incorrect using of the string terminator '\n' for a variety of software platforms UNIX, MAC, DOS/Windows is fixed, by replacing it with "\x0A".
Transport.*: The using of unsigned type int the return of the read() and write() functions is fixed. The resources for the counters of the i/o requests are added.
Transport.Sockets: The missing of the initialization of the size of the return value of the getsockopt() function is fixed.
DAQ.JavaLikeCalc: The crash of the replace() function of the "RegExp" object is fixed.
DAQ.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 size property of the integer, real and string is fixed. The cleaning of the parameter's links at its disabling is added.
UI.Vision, UI.WebVision: The access abroad the vector's size during the rendering of the primitives "FormEls" graphics.
UI.VCAEngine: 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.
UI.WebVision:
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.
Optimization and performance improvement:
SYS: The mechanism of the "ResString" object resource is replaced from the RW-locks on mutex, in order to improve performance and reduce memory consumption.
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 group request of the page's contents is used to greatly improve the performance on slow and high latency channels.
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:
UI.VCAEngine, UI.Vision, UI.WebVision:
Исправлено обращение за границы массива (вектора) при построении трендов, примитива "Диаграмма".
Добавлено и реализовано свойство ширины графика, примитива "Диаграмма".
Добавлена периодическая проверка дерева виджетов страницы с целью обнаружения факта удаления виджетов, путём запроса полного перечня виджетов.
Реализовано отображение графиков, группы графиков примитива "Диаграмма" в шкале значения в случае отличия шкал всех графиков не более чем на 20%.
Добавлена и реализована возможность выбора режима подтверждения для элементов редактирования строки и текста примитива "Элементы формы".
The possibility of loosing of some changes in the model, when displayed in the visualizers is fixed.
Добавлено и реализовано свойство количества значений на пиксел в графиках примитива "Диаграмма", с целью управления детализацией экспорта в CSV и т.д.
Реализована логарифмическая шкала значений для графиков примитива "Диаграмма".
Добавлено и реализовано свойство сохранения соотношения сторон главной страницы при разворачивании главного окна исполнения сеанса проекта.
UI.VCAEngine:
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.
Удалён предыдущий (противоречивый) механизм отката удаления вложенных виджетов и заменён полноценным механизмом откатов в визуализаторе UI.Vision.
Выполнена оптимизация использования памяти элементами сеанса до 20%.
Удалена поддержка первой, устаревшей, версии структуры БД среды визуализации.
Добавлено ограничение на время генерации документов в примитиве "Документ" в 5 секунд.
Добавлена поддержка типа атрибутов "Объект" и "Текст".
Отключена принудительная инициализация новых пользовательских атрибутов в EVAL.
Примитив "Документ" переключен в режим полного разбора XML с целью полноценного сохранения разметки XHTML.
Добавлена индикация состояния корректности ссылок в виде "(+)" в конце.
UI.Vision:
Добавлена реализация полноценных откатов и повторов изменений при визуальном редактировании виджетов.
Улучшения в отзывчивости и обновлении изменений в сеансе исполнения проекта: оптимизирована производительность отрисовки примитива "ElFigure", обработка изменения уровня виджета "geomZ".
Добавлен экспорт в CSV формат из примитивов "Диаграмма" и "Документ".
Введено ограничение на размер диалогов ввода и включено адаптивное определение их размеров по содержимому.
Полностью переписан механизм исполнения правил подсветки синтаксиса.
Добавлено создание нового сеанса после восстановления удалённого подключения и отсутствии предыдущего сеанса.
Фон окна редактируемого виджета установлен в шаблон QT::Dense7Pattern с целью устранения возможного перекрытия по цвету.
Добавлена обработка событий выбора виджета при нажатии в области скролинга, но за пределами виджета.
Примитив "Элементарная фигура":
Выполнена реорганизация операций из диалога свойств и контекстного меню с динамическими и статическими свойствами.
В процессе добавления фигуры реализована её отрисовка при перемещении курсора мыши.
UI.WebVision:
Исправлена обработка масштаба вложенных кадров, а также пересмотрен механизм формирования-включения скрола.
Добавлена функция преобразования изображений на стороне сервера. Функцию преобразования использовано для изменения размера и обесцвечивания изображений неактивных кнопок.
Реализовано открытие малых окон вложенных страниц в виде DIV-блоков, что решает проблему блокировки и продолжительного открытия внешних окон многими браузерами.
Главная страница интерфейса отцентрована в окне браузера.
UI.QTCfg:
Добавлено ограничение на высоту строк таблиц в половину высоты таблицы.
Введено ограничение на размер диалога ввода и включено адаптивное определение его размера по содержимому.
У элементов доступных для изменения высоты пользователем, для обеспечения работы везде, установлен фиксированный стиль "StyledPanel".
Добавлена функция полнотекстового редактирования текста ячеек таблиц.
Движок воспроизведения правил подсветки синтаксиса полностью переписан для упрощения и предотвращения скрытых ошибок.
UI.WebCfgD:
Уменьшена яркость обесцвеченных-пассивных кнопок.
Все окна диалогов реализованы в виде DIV-блоков с целью исключить проблемы и задержки в открытии внешних окон различными браузерами.
Использован групповой запрос содержимого страниц для значительного повышения производительности на медленных и высоколатентных каналах.
Добавлена информация в строке статуса о текущем пользователе и возможность его смены.
Выполнена адаптация для работы в полную ширину экрана.
4 Расширение API пользовательского программирования
Было продолжено формирование объектного API пользовательского программирования, которое предусматривает интеграцию пользовательских функций в дерево объектов системы OpenSCADA. Кроме этого был внесен ряд изменений в существующие библиотеки функций пользовательского API.
В частности были осуществлены следующие изменения:
SYS:
Добавлены функции работы с файлами: SYS.fileRead() и SYS.fileWrite().
К API объекта XMLNodeObj добавлена функция getElementBy() для поиска вложенных узлов по значению атрибута.
Добавлена функция осуществления кодирования текста между различными символьными кодировками.
Добавлена функция NodeObj.nodePath().
TConfig, TBD, TTransportIn, TTransportOut, TUser, TGroup, TPrmTmplLib, TPrmTempl, TParamContr, TController, TVArchive, TVArchivator, TMArchivator: Добавлены функции пользовательского API cfg() и cfgSet() для доступа к конфигурации объектов (хранящейся в БД).
DAQ:
Добавлена функция TController::alarmSet() для генерации типовых нарушений в объекте контроллера модулей подсистемы "Сбор данных".
Добавлена функция SYS.DAQ["Modul"]["Controller"]["Parameter"]["Attribute"].arch() для прямого обращения к объекту архива, связанного с атрибутом параметра.
Добавлены функции пользовательского API enable() и start() для прямого контроля за состоянием объекта контроллера.
DAQ.JavaLikeCalc, Special.FLibComplex1, Special.FLibMath, Special.FLibSYS: Добавлена функция динамического вызова библиотечных функций SYS.DAQ.JavaLikeCalc["lib_{Lib}"].funcId(prms, ...).
Archive: Добавлены функции пользовательского API status(), end() и begin() для доступа к состоянию и свойствам объекта архиватора сообщений.
DAQ.JavaLikeCalc:
Для типа данных "null" добавлена функция isEVal(), которая всегда возвращает "true".
К объектам библиотечных функций добавлена функция пользовательского API call().
DAQ.ModBus: Добавлена функция пользовательского API messIO() в объект контроллера "ModBus" с целью предоставления возможности отправки нестандартных ModBus-запросов прямо из шаблона параметра.
5 Общесистемные расширения
В общесистемное API системы OpenSCADA были внесены значительные изменения и расширения с целью общей стабилизации и расширения:
SYS:
Объект хранения строки с ресурсом "ResString" значительно расширен на предмет прозрачного преобразования из/в тип std::string.
Добавлена возможность сохранения в конфигурационный файл:
Добавлен префикс БД "<cfg>" для представления конфигурационного файла в роли источника загрузки/сохранения конфигурации.
Функции TDBS::dataSeek() и TDBS::dataDel() обновлены для строгой обработки конфигурационного файла.
Функция chkSelDB() адаптирована для поддержки записи в конфигурационный файл.
Добавлено сохранение больших и многострочных значений полей конфигурации в текстовом поле отдельного тега конфигурационного файла.
Тип "long long", обычно 64-рязрядное целое заменён везде на более определённый "int64_t" на всех архитектурах.
Объекты потоков OpenSCADA жёстко слинкованы со своим потоком. Добавлена статистика загрузки и вызовов периодичных потоков.
Реализована возможность проверки загружаемых объектов на их отсутствие в БД и удаление. Функция проверки активируется только в случае прямой загрузки из БД.
Добавлена системная периодическая функция perSYSCall() вызова объектов подсистем и их модулей. Используется для сервисных целей ненагруженных и редких задач модулей и подсистем.
Функция тестирования выражения по шаблону перемещена в объект TRegExp.
SYS.XMLNode:
Полностью удалён код использования XML-парсера "Expat".
Добавлена возможность загрузки текстовых частей тега в отдельные-специальные теги, в полном режиме. Предназначено для полного сохранения конфигурации тега.
Добавлена возможность загрузки и сохранения блоков комментариев в отдельные-специальные теги, в полном режиме.
DOC:
Выполнена проверка и исправление Английских текстов в ядре OpenSCADA. Обновлены переводы ядра OpenSCADA на Немецкий, Русский и Украинский языки.
Выполнена проверка и исправление Английских текстов модулей OpenSCADA. Обновлены переводы модулей OpenSCADA на Немецкий, Русский и Украинский языки.
Обновлены все основные документы на доступных языках: openscada.pdf, build.pdf, properties.pdf, "OpenSCADA API", "Про OpenSCADA", "Библиотека TechApp", "Quick Start", "WLib Основные", "WLib Элементы мнемосхем".
Базы данных библиотек: Библиотека основных визуальных элементов дополнена кадрами реализации редактирования и исполнения "Рецептов"-"Пользовательских программ", а кадр главной страницы дополнен механизмом "проигрывания" моделей технологических процессов (ТП).
DB: Добавлено временное ограничение в 5 секунд и поле указания начального смещения для запроса содержимого больших таблиц.
DAQ: Добавлена возможность выбора типа атрибута шаблона "Объект". Предназначено в первую очередь для хранения внутренних данных в объекте и не может быть использовано как тип атрибута параметра объекта контроллера источника данных.
TArchives: Добавлена возможность использования регулярных выражений при поиске по категории посредством "/match/"
Transport: Типы форматов исходящих запросов расширены вариантами текста с разным завершением строки: LF, CR, CR/LF.
DAQ, DAQ.DiamondBoards, DAQ.ModBus, DAQ.LogicLev: Добавлена возможность смены типа параметра для отключенных параметров многотиповых модулей подсистемы "Сбор данных".
DAQ.LogicLev, DAQ.Siemens, DAQ.ModBus: В случае выполнения по расписанию в атрибут "f_frq" записывается время после последнего вычисления в отрицательном значении. Добавлены инициализирующие и останавливающие вызовы при включении/выключении параметра.
TArchives, Archive.DBArch, Archive.FSArch: Добавлена временная граница при запросе сообщений из архива.
В процессе осуществления работ над данным релизом на разных конференциях и выставках были представлены решения на основе проекта OpenSCADA:
FOSS Sea 2011 — на конференции был зачитан доклад о решениях на основе OpenSCADA, а в холе был организован мини-стенд с решениями на основе OpenSCADA вживую.
Международный инновационный форум 2011 — в составе стенда OOO НИП "ДІЯ" и Днепродзержинского Государственного Университета (ДГТУ) было представлено оборудование и материалы с решениями на основе OpenSCADA.
Данным релизом системы OpenSCADA фактически завершена работа по адаптации на аппаратную архитектуру ARM, что выразится в предоставлении и публикации официальных сборок релиза 0.7.2 для мобильных устройств.
Хотя выпуск данного релиза несколько запоздал и затянулся он всё же был тщательно подготовлен и станет хорошей основой для доводки кодовой базы проекта к предстоящему ответственному релизу 0.8.0 LTS. Кроме этого данный релиз можно использовать и для повсеместного внедрения и применения в ответственных задачах с последующим плавным переходом на 0.8.0 LTS после его выхода.
Последующие усилия разработчиков будут направлены на завершения плановых заданий и подготовке к выпуску релиза OpenSCADA продолжительной поддержки (LTS) версии 0.8.0.