Данный релиз является плановым выпуском рабочей версии системы OpenSCADA, которые обычно осуществляются с периодичностью 3-4 месяца. Основной целью данного релиза является реализация коммерческого сервиса на основе OpenSCADA и адаптации к аппаратной платформе ARM. Кроме основных задач, в рамках данного релиза проделана большая работа по стабилизации, чистке исходного кода, а также всестороннему расширению возможностей.
Данный документ является обработкой(компиляцией) документа <ChangeLog> системы OpenSCADA версии 0.7.1, который призван вкратце и наглядно осветить новые возможности системы OpenSCADA. Детально ознакомиться с изменениями в системе OpenSCADA можно в файле ChangeLog из дистрибутива системы или здесь: http://wiki.oscada.org/Works/ChangeLog.
Ключевыми особенностями данной версии являются:
Реализация плановых задач.
Оптимизация, повышение стабильности, устойчивости и производительности системы.
Усовершенствование и стабилизация графической подсистемы
Формирование и стабилизация API пользовательского программирования.
Общесистемные расширения.
Значительные улучшения и исправления отдельных модулей.
Новые и обновленные модули:
Archive.FSArch (1.4.5) - Значительная стабилизация.
DB.MySQL (1.7.0) - Стабилизация. Добавлена возможность указания таймаутов подключения.
DB.SQLite (1.6.3) - Стабилизация.
DB.FireBird (0.9.6) - Стабилизация.
DB.PostgreSQL (0.9.1) - Стабилизация.
DAQ.DiamondBoards (1.2.2) - Стабилизация.
DAQ.System (1.7.3) - Стабилизация. Зависимость от библиотеки "Libsensors" сделана опциональной.
Special.SystemTests (1.5.1) - Небольшие улучшения.
UI.QTStarter (1.6.1) - Стабилизация. Адаптация для ARM.
UI.QTCfg (2.0.0) - Стабилизация. Использован групповой запрос к интерфейсу управления с целью оптимизации удалённого доступа к OpenSCADA станциям. Адаптация для ARM. Добавлена функция ручного изменения высоты для элементов текста и таблиц (схватил за нижний край и потащил). Добавлена многоуровневая подсветка синтаксиса.
UI.WebCfg (1.5.5) - Стабилизация.
UI.WebCfgD (0.6.6) - Стабилизация.
UI.VCAEngine (1.1.0) - Стабилизация. Добавлена контекстная подсказка к атрибутам примитивов виджетов. Добавлена подсветка синтаксиса к текстовым атрибутам примитивов виджета.
UI.Vision (1.1.0) - Значительная стабилизация. Заметные улучшения. Адаптация для ARM. Добавлено отображение и восстановление потери связи при удалённом исполнении сеанса. Добавлен отдельный полнотекстовый редактор для текстовых атрибутов. Добавлена контекстная подсказка к атрибутам примитивов виджетов. Добавлена подсветка синтаксиса к текстовым атрибутам примитивов виджета.
UI.WebVision (0.9.1) - Значительная стабилизация. Небольшие улучшения.
В соответствии с планом релиза были выполнены следующие задачи:
Формирование предоставления коммерческих услуг на основе OpenSCADA. - Выстроена концепция и созданы механизмы предоставления коммерческих услуг на основе OpenSCADA.
Адаптация системы OpenSCADA для работы на аппаратной платформе ARM. - Осуществлена сборка, адаптация и полномасштабное тестирование OpenSCADA на интернет планшете фирмы Nokia - N800 (http://wiki.oscada.org/Works/Tests/ARM ). А также частные мероприятия по адаптации:
DAQ.JavaLikeCalc: Виртуальная машина переписана для прямого использования структур команд, с целью исключения проблемы выравнивания.
DAQ.Siemens: Исправлена проблема библиотеки NoDave на предмет глобального вызова команды упаковки структур "#pragma pack(1)".
SYS.TVariant, DAQ.AMRDevs, DAQ.OPC_UA: Исправлен невыравненный доступ к данным.
SYS.TCntrNode: Исправлено использование беззнакового "char" в ARM как знакового.
SYS: Прототипы функций TMess::put(), TMess::get(), TCntrNode::grpSize(), TCntrNode::grpId(), TCntrNode::grpAt() изменены для исправления использования беззнакового типа "char" на ARM как знакового.
Archive: Прототипы функций TArchiveS::messPut() и TArchiveS::messGet() изменены для исправления переменной уровня сообщения как знакового числа.
UI.QTCfg: Добавлено кратковременное засыпание, после закрытия всех окон, в функции отключения. С целью дать время окончательно разрушиться объектам всех окон и предотвратить падение.
2 Оптимизация, повышение стабильности, устойчивости и производительности системы
В процессе работ над данной версией, а также её практической адаптации, было обнаружено и исправлено в общей сложности около 90 ошибок. В целом была проделана работа по чистке кода от предупреждающих сообщений компилятора с флагом "-Wall": удаление неиспользованных переменных, добавление возврата во всех функциях, инициализация переменных с возможностью её использования неопределённой, исключение неполной обработки перечислимых типов в операции выбора, сравнение знакового с беззнаковым целым.
Перечислим наиболее существенные ошибки, исправление которых значительно отразилось на повышении стабильности:
Общесистемные:
Команда сборочной системы "$ make dist" исправлена и адаптирована для корректного создания дистрибутивов OpenSCADA.
Функция TSYS::cron(), для вызова по графику, неоднократно исправлена.
Тип переменной для хранения результата функции find() строки везде изменён на корректный "size_t".
Function: Исключена возможность утечки памяти в случае попытки установить объект в необъектный параметр функции.
Базы данных:
DB.PostgreSQL: Исправлена обработка адреса БД на предмет определения пустых полей.
Транспорты и протоколы:
Transport.Sockets, Transport.SSL: Добавлена очистка входного буфера для предотвращения повторного использования на высоколатентных каналах, после таймаута.
Transport.Sockets: Исправлено закрытие клиентского соединения по таймауту времени жизни для подключений но отсутствия данных.
Transport.Sockets: Unix-сокет установлен в неблокирующий режим посредством флага O_NONBLOCK. Исправлено формирование сообщений об ошибках для исходящих транспортов.
Transport: Исправлена загрузка всех транспортов из БД, в случае наличия записей про транспорт, модуль которого отсутствует.
Transport.Serial: Установлен флаг O_NONBLOCK для функции open() последовательного устройства с целью предотвращения зависания на некоторых USB->RS485 преобразователях.
Protocol.HTTP, UI.WebCfg, UI.WebCfgD, UI.WebVision, UI.WebUser: Исправлен разбор элементов POST запроса на предмет разбора всех атрибутов каждого элемента.
Сбор данных и архивы:
Archive.FSArch: Исправлено создание файлов архива сообщений при помещении множества старых сообщений. Добавлен параметр предотвращения дубликатов.
Archive.FSArch: Результат функции fgetc() записан в целочисленную переменную вместо символьной, что исправило обнаружение "EOF".
Archive: Исправлено использование буфера мягкой сетки с низким и высоким разрешением времени в архивах значений.
DAQ.System: Исправлено падение при выходе для источника "Hddtemp".
DAQ.ModBus: Режим установки значений атрибутов параметров изменён на активный и улучшена обработка ошибок.
DAQ.JavaLikeCalc: Добавлена проверка индекса при доступе к символу строки по индексу, с целью предотвращения выхода за диапазон.
Интерфейсы визуализации:
UI.VCAEngine: Исправлено блокирование сеанса для динамически активных проектов, при динамическом доступе к собственным атрибутам.
UI.Vision: Исправлено падение сеанса для проектов с периодом исполнения более 500 мс.
UI.WebVision, UI.Vision: Исправлено обновление изображения примитива "Элементарная фигура" при изменении масштаба.
UI.WebVision: Удалена проверка попадания точек фигур в область отображения примитива "Элементарная фигура". Функция переложена на библиотеку GD.
UI.WebVision: Исключена возможность падения, для примитивов "Diagram" or "ElFigure", в случае передачи некорректных значений атрибутов изображения "xSc" or "ySc" из Web-браузера.
Оптимизация и повышение производительности:
UI.WebCfgD: Добавлено изменение размера иконок на стороне сервера, с целью снижения трафика.
3 Усовершенствование и стабилизация графической подсистемы
Заметная работа была выполнена в рамках графической подсистемы, а именно в модулях движка СВУ UI.VCAEngine, визуализаторов UI.Vision и UI.WebVision, а также конфигураторах. Внесённые изменения были направленны на стабилизацию, оптимизацию потребления памяти и улучшение пользовательских свойств.
Улучшения графической подсистемы:
UI:WebVision: Добавлена поддержка gif и jpg изображений в элементах примитива "Элементарная фигура".
SYS, DAQ.JavaLikeCalc, UI.QTCfg, UI.VCAEngine, UI.Vision Савоченко Роман Добавлено API подсветки синтаксиса.
UI.QTCfg Савоченко Роман Добавлена возможность ручного изменения высоты текстовых и табличных полей. Изменение осуществляется схватыванием и перетаскиванием нижнего края поля.
UI.Vision Савоченко Роман Добавлена подсветка синтаксиса для атрибутов виджета.
UI.Vision Савоченко Роман Добавлено отображение помощи по атрибутам виджета.
UI.VCAEngine Савоченко Роман Добавлены специфические свойства к атрибутам примитивов, вроде помощи и подсветки синтаксиса. Добавлена подсветка синтаксиса для примитивов "ElFigure" и "Document".
SYS Савоченко Роман Добавлена новая функция TSYS::time2str() для преобразования интервалов времени в строку вроде "1час 23мин 10сек". Эту функцию использовано везде.
ransport, Transport.* Савоченко Роман Добавлена функция TTransportS::traf2str() для преобразования значения счётчика трафика в строку вроде "12.5КиБ"
DAQ.JavaLikeCalc Савоченко Роман Добавлена встроенная функция typeof() для проверки типа значения.
UI.QTCfg Савоченко Роман Групповой запрос "CntrReqs" использовано для запроса контекста страницы. Исправлен многократный запрос элементов выборных колонок таблиц. Использовано для повышения производительности на медленных и высоколатентных соединениях.
SYS.TMess Савоченко Роман Общие сообщения интерфейса управления перемещены в одну функцию TMess::lab*.
Protocol.HTTP Савоченко Роман Добавлена поддержка переменной HTTP "Transfer-Encoding=chunked" в исходящем транспорте.
Transport.Serial Савоченко Роман При инициализации порта использованы предыдущие настройки и реализована возможность опускать указание некоторых настроек.
DB Савоченко Роман Добавлены функции пользовательского API fieldStruct(), fieldSeek(), fieldGet(), fieldSet() и fieldDel() для объекта таблицы, с целью предоставить пользовательский доступ к БД посредством интерфейса OpenSCADA.
UI.Vision Савоченко Роман Добавлена индикация сообщения о потери соединения с сервером визуализации, а также восстановление, при удалённой визуализации.
Demo DB? Савоченко Роман Полное обновление из локальной Рабочей-Демо БД? My SQL?.
DAQ.DCON Савоченко Роман Включение значительных улучшений от Алмаза Каримова в дерево исходных текстов. Версия модуля повышена до 0.5.0.
SYS Савоченко Роман Добавлена реализация экспериментального XML-парсера.
DAQ.DCON Савоченко Роман Модуль полностью переписан для исправления плохого форматирования стиля написания кода.
SYS Савоченко Роман Реализована новая структура дерева исходного текста. Все ресурсы проекта перемещены в отдельный архив. Для создания архивов исходных текстов и ресурсов можно использовать команды "$ make dist-lzma" и "$ make dist-reslzma". Документация выполнена статичной, для модулей, и поделена по языкам. Для каждого языка документации формируется отдельный пакет. Добавлены пакеты библиотечных БД *-Lib DB?.Main и *-Lib DB?.VCA, помещены в data/LibsDB. Вместо Demo DB? пакета добавлены пакеты моделей "AGLKS" и "Boiler", помещены в data/ModelsDB. Конфигурационные файлы для построения RPM и DEB пакетов обновлены.
SYS Савоченко Роман Пользовательское API для объекта TArrayObj расширено на предмет возможности использования объектных свойств, если свойства не числа.
SYS Савоченко Роман Зависимость на библиотеку PCRECPP глобально заменена на PCRE.
SYS, DAQ.JavaLikeCalc Савоченко Роман Добавлена реализация поддержки пользовательского API регулярных выражений, основанной на PCRE, посредством объекта TRegExp. Реализован интерфейс функций Reg Exp?.exec() и Reg Exp?.test() в стандарте для языка Java Script?. Для DAQ.JavaLikeCalc реализована "new Reg Exp?()" инициализация для объекта TRegExp. Для DAQ.JavaLikeCalc реализованы дополнительные функции с использованием Reg Exp?: int search(); Array match(); Array split(Reg Exp? pat, int limit); string replace(string substr, string str); string replace(Reg Exp? pat, string str);
DAQ.SNMP Савоченко Роман Добавлена поддержка всех типов значений. Добавлена поддержка записи значений. Улучшена обработка ошибок. Добавлены дополнительные параметры конфигурации подключения.
TFunction, DAQ.JavaLikeCalc Савоченко Роман Добавлен объект пользовательского API "TFuncArgObj" для получения аргументов функции.
DAQ.JavaLikeCalc Савоченко Роман Добавлена возможность записи символов строки с помощью восьмеричного "\041" и шестнадцатеричного "\x21" числа.
SYS Савоченко Роман В дерево объектов OpenSCADA пользовательского API добавлена функция SYS.Security.access() для контроля доступа пользователя OpenSCADA к ресурсам с нужными правами.