Релиз открытой SCADA(Supervisory control and data acquisition) системы версии 0.6.3 является плановым релизом ветки 0.6.0. В рамках этой версии проделана большая работа по стабилизации и адаптации к практическим задачам.
Данный документ является обработкой(компиляцией) документа <ChangeLog> системы OpenSCADA версии 0.6.3, который призван вкратце и наглядно осветить новые возможности и изменения системы OpenSCADA. Детально ознакомиться со всеми изменениями в системе OpenSCADA можно в файле ChangeLog из пакета дистрибутива системы или здесь: http://diyaorg.dp.ua/oscadawiki/Works/ChangeLog.
Ключевыми особенностями данной версии являются:
Реализация плановых задач.
Повышение стабильности, устойчивости и производительности системы.
Усовершенствование и стабилизация СВУ.
Общесистемные расширения.
В процессе работ над релизом были внесены следующие изменения в модули OpenSCADA:
Archive.FSArch (1.0.1) -- Стабилизация. Перевод интерфейса на Немецкий.
Archive.DBArch (0.7.1) -- Стабилизация. Перевод интерфейса на Немецкий.
DB.DBF (1.9.1) -- Перевод интерфейса на Немецкий.
DB.MySQL (1.4.1) -- Стабилизация. Добавление возможности хранения даты и времени в поле MySQL с типом DATETIME. Перевод интерфейса на Немецкий.
DB.SQLite (1.4.1) -- Стабилизация. Обеспечение возможности работы с файлами БД только для чтения. Перевод интерфейса на Немецкий.
DB.FireBird (0.8.1) -- Перевод интерфейса на Немецкий.
DAQ.BlockCalc (1.1.1) -- Стабилизация. Перевод интерфейса на Немецкий.
DAQ.JavaLikeCalc (1.3.0) -- Стабилизация. Добавление поддержки областей имён функций пользовательского API. Добавление ключевых слов using и return.
DAQ.SNMP (0.3.3) -- Стабилизация.
DAQ.LogicLev (0.9.2) -- Стабилизация.
DAQ.ModBus (0.9.1) -- Стабилизация.
DAQ.DCON (0.1.0) -- Новый модуль: В дерево исходных текстов проекта включен модуль реализации источника данных по протоколу DCON (Almaz Karimov).
DAQ.Siemens (1.1.1) -- Стабилизация.
DAQ.System (1.6.2) -- Стабилизация. Адаптирован к поддержке библиотеки libsensors версии 3 (API версии 4).
DAQ.Transporter (0.3.3) -- Стабилизация.
Transport.Sockets (1.3.6) -- Стабилизация. Добавлено поле статуса для транспортов.
Transport.SSL (0.8.0) -- Новый модуль: Модуль транспорта “SSL”, основанный на библиотеке шифрования OpenSSL.
Special.FLibComplex1 (1.0.3) -- Стабилизация.
Special.FLibSYS (0.7.0) -- Добавлены параметры для прямого доступа к архивам в функции: varhBeg(), varhEnd(), varhGetR(), varhGetB() и varhGetS(). Добавлены новые функции: strPath2Sep(), strEnc2HTML() и real2str(). Функция tmCtime() заменена на tmFStr().
UI.QTCfg (1.7.0) -- Стабилизация. Для формирования дерева навигатора использован оптимизированный по времени запрос ветви вложенных елементов глубиной в один уровень. Добавлено ограничение размера вводимых идентификаторов объектов.
UI.VCAEngine (0.8.0) -- Стабилизация. Оптимизация производительности. Добавлен групповой запрос атрибутов виджетов ветви виджетов сеансов исполнения проектов. Реализован примитив "Документ". Поддержка динамических свойств фигур примитива "ElFigure". Множество различных улучшений.
UI.Vision (0.8.0) -- Стабилизация. Оптимизация производительности. Реализация динамизации всех параметров элементов примитива "ElFigure". Реализация примитива "Документ". Добавление функция печати и экспорта в режиме исполнения. Для запросов данных кадров использован групповой запрос, значительно повышающий производительность. Оптимизация алгоритма сортировки вложенных виджетов кадров, что значительно повысило производительность работы больших мнемосхем. Изменение концепции формирования элементов примитива "ElFigure", позволившее значительно повысить производительность. Реализация функции визуального масштабирования разрабатываемых кадров. Реализация масштаба шрифта во всех примитивах. Множество различных улучшений.
UI.WebVision (0.6.0) -- Стабилизация. Реализация динамизации всех параметров элементов примитива "ElFigure". Реализация примитива "Документ". Для запросов данных кадров использован групповой запрос, значительно повышающий производительность. Реализация примитива "Протокол". Множество различных улучшений.
UI.WebCfg (1.5.2) -- Стабилизация модуля. Добавление действий загрузки и сохранения текущей страницы.
UI.WebCfgD (0.5.0) -- Новый модуль: Реализация динамического Web-конфигуратора OpenSCADA.
UI.WebDbg -- Удаление модуля: Модуль отработки взаимодействия с Web-интерфейсами.
1 Реализация плановых задач
В соответствии с планом релиза были выполнены следующие задачи:
Реализация поддержки групповых запросов в языке контроля и управления OpenSCADA, а также оптимизация на его основе сетевых коммуникаций различных подсистем OpenSCADA. -- В соответствии с этим заданием было выполнено:
Реализация сервисного запроса ветви атрибутов виджетов '/serv/attrBr'. Запрос призван оптимизировать обмен между визуализатором и движком визуализации путём замены множества мелких запросов одним крупным. В случае обмена по сетевым высоколатентным каналам данный механизм существенно повышает производительность. Запрос был использован в модулях UI.Vision и UI.WebVision.
Реализован групповой запрос дерева библиотек виджетов UI.Vision. Позволил повысить производительность загрузки и обработки больших деревьев библиотек виджетов, особенно по сети.
Реализован и использован оптимизированный по времени запрос дочерних элементов дерева навигации в UI.QTCfg и UI.WebCfgD. Позволил исключить лишние, фрагментированные, запросы, повысив тем самым общую скорость формирования дерева объектов, особенно по сети.
Разработка и реализация концепции примитива СВУ “Документ”, предназначенного для формирования отчётной документации. -- Концепция примитива "Документ" была разработана и реализована. Реализация затронула обеспечения поддержки на стороне движка СВУ (UI.VCAEngine) и визуализаторов UI.Vision и UI.WebVision.
Миграция модуля конфигурации системы OpenSCADA UI.WebCfg на динамический интерфейс DHTML. -- Была выполнена не миграция, а создание нового модуля конфигурации OpenSCADA на основе Web DHTML. Модуль получил название UI.WebCfgD. На данный момент в дистрибутиве OpenSCADA присутствуют оба модуля.
Реализация безопасного транспорта на основе OpenSSL. -- Результатом реализации транспорта на основе OpenSSL стал модуль подсистемы "Транспорты" OpenSCADA - Transport.SSL. Данный модуль реализует стандарты шифрования трафика SSL v2, SSL v3 и TLS v1 как для входящих, так и для исходящих транспортов.
Реализация примитивов СВУ “Link” и “Function”. -- Данная работа не была выполнена и перенесена к следующему релизу.
2 Повышение стабильности, устойчивости и производительности системы.
В процессе работ над данной версией, а также её практической адаптации, было обнаружено и исправлено около 120 ошибок. Большинство ошибок было обнаружено в компонентах среды визуализации и управления (90 ошибок).
Кроме исправления множества ошибок была проделана работа по оптимизации различных компонентов OpenSCADA. Особенно заметной оптимизации подверглась среда визуализации и управления (СВУ) и её визуализаторы. Основным вектором в оптимизации была оптимизация на производительность.
Перечислим наиболее существенные ошибки исправление которых значительно отразилось на повышении стабильности:
Использована функция QWidget::deleteLater() для удаления виджетов и устранения проблемы падения OpenSCADA в некоторых ситуациях удаления виджетов QT4.
Некорректное удаление элементов std::map в примитиве "ElFigure" модуля UI.Vision и UI.WebVision приводящее к падению системы под нагрузкой, после суток работы.
Отсутствие ресурса на доступ к строковым атрибутам параметров подсистемы "Сбор данных". На нагруженных системах с конкурентным доступам к общим данным, например при запуске нескольких сеансов одного проекта визуализации происходила ошибка памяти.
Окончательно исключено падение системы при смене связи в модуле UI.Vision, после закрытия диалога с уведомлением об установке не всех связей.
Исправлена нечувствительность к регистру строковых ключевых полей БД MySQL, что приводило к пересечению свойств элементов визуализации.
Добавлена поддержка символов перевода строк в атрибутах и именах тегов XML, что исключило проблемы при передаче больших текстов в атрибутах.
Пересмотрен механизм доступа к отладочным сообщения. Теперь отладка включается определением переменной OSC_DEBUG с уровнем от 0 до 5. Где 5 уровень наиболее детализирующий и должен использоваться с осторожностью.
Реализован механизм ограничения ввода количества символов идентификаторов объектов OpenSCADA в соответствии с размерностью значений их как ключей БД.
Добавлено кодирование идентификаторов объектов OpenSCADA для предотвращения ввода недопустимых в идентификаторе символов.
Увеличение производительности:
Реализован сервисный запрос ветви атрибутов виджетов '/serv/attrBr'. Запрос призван оптимизировать обмен между визуализатором и движком визуализации путём замены множества мелких запросов одним крупным. В случае обмена по сетевым высоколатентным каналам данный механизм существенно повышает производительность.
Использован бинарный алгоритм сортировки кучи при сортировке вложенных виджетов учитывая их порядок. Проблема старого алгоритма начала заметно сказываться после 500 вложенных виджетов.
Добавлен и использован групповой запрос дерева библиотек виджетов UI.Vision.
Реализован и использован новый, оптимизированный по времени, запрос дочерних элементов дерева навигации в UI.QTCfg и UI.WebCfgD.
3 Усовершенствование и стабилизация СВУ.
Наиболее значимые изменения были выполнены в рамках среды визуализации и управления (СВУ), а именно в модулях движка СВУ UI.VCAEngine, визуализаторов UI.Vision и UI.WebVision. Внесённые изменения были направленны на стабилизацию, оптимизацию производительности и улучшение пользовательских свойств СВУ.
Улучшения СВУ:
Для примитива "ElFigure" добавлена поддержка динамических и статических точек; динамических ширин, цветов, и изображений; динамических стилей линий. Всё это предоставило возможность создавать очень сложные динамические фигуры в рамках одного виджета, а также исключило избыточность в наличии отдельных атрибутов координат точек для больших и сложных статических изображений.
Реализована поддержка примитива «Документ» в UI.VCAEngine, UI.Vision и UI.WebVision. Реализация примитива документа предоставила возможность создавать отчётную документацию различной сложности и свойств в окружениях библиотеки QT и Web-технологий системы OpenSCADA.
Добавлена реализация функций печати и экспорта в окне исполняемого проекта. Печать и экспорт реализованы для: страниц, диаграмм и документов. Экспорт страниц и диаграмм осуществляется в изображения, а документа в XHTML.
Изменена концепция отображения примитива "ElFigure" с целью значительного повышения производительности в режиме разработки и исполнения. Изменение заключается в предварительной прорисовке на изображении, и последующей его отправки на экран при запросе на обновление. В случаях формирования больших статических изображений, а поверх них размещения динамики общая производительность интерфейса значительно повышается.
Реализована функция свободного визуального масштаба редактируемых кадров визуального интерфейса модуля UI.Vision. Функция призвана облегчить разработку как мелких, но сложных элементов, так и больших панорамных кадров.
Реализована функция масштабирования шрифта всех примитивов модулей визуализации UI.Vision и UI.WebVision. Масштабирование всех примитивов стало более адекватным в широком диапазоне значений.
Доработано полноценное масштабирование примитива "Диаграмма" модулей визуализации UI.Vision и UI.WebVision.
UI.WebVision: Значительное расширение функциональности модуля, а именно:
Реализовано использование шрифтов TTF и FontConfig для доступа к ним. TTF шрифты использованы для формирование надписей примитива "Диаграмма", что сделало тренды более схожими с ними-же в UI.Vision.
добавлена проверка прав доступа;
реализовано открытие страниц интерфейса в отдельных, всплывающих, окнах;
реализован контроль активного режима в элементах примитива "FormEl";
добавлено блокирование обновления элементов примитива "FormEl", на момент редактирования пользователем;
реализован примитив «Протокол».
Добавлена поддержка типов иконок OpenSCADA “png”, “gif”, “jpg” и “jpeg”.
4 Общесистемные расширения.
К данному релизу было внесено достаточно много общесистемных изменений направленных на расширение функциональности.
Изменения сборочной системы и файла спецификации для формирования RPM-пакета:
Файл спецификации создания RPM пакетов адаптирован для формирования noarch пакетов на ALTLinux. Создан собственный скрипт 'mkdist' для создания «чистого» архива дистрибутива, с коррекцией функционирования команды 'make dist'.
Пакеты документации унифицированы. Информационная документация помещена в бинарный пакет, а документация на программу выделена в отдельный пакет.
Исправлено размещение библиотек и их ссылок по пакетам.
Изменена версия библиотеки ядра OpenSCADA на "0:10:0".
Изменения конфигурации OpenSCADA и демонстрационной БД:
Добавлена поддержка работы OpenSCADA в директории пользователя. Для запуска в пользовательском режие добавлен скрипт 'openscada_start'.
Для QT конфигуратора (UI.QTCfg) пользователь по умолчанию установлен в 'root'.
Добавлена конфигурация собственного интерфейса OpenSCADA на порту 10005 в конфигурационные файлы дистрибутива.
Добавлено конфигурационное поле пути к иконкам OpenSCADA. Поле конфигурации пути к модулям OpenSCADA перемещено на главную страницу системы.
Обновлена демонстрационная БД:
файл БД среды визуализации разделён на файлы БД: vcaBase, vcaTest и vcaAGLKS;
добавлены кадры динамических отчётов на основе примитива «Документ»;
добавлены отчёты в архивном режиме;
страница группы графиков обновлена и исправлена;
добавлена мнемосхема и группа графиков во второй сигнальный объект;
панель управления параметрами расширена для поддержки дискретных параметров (отсекатели);
краны подключены к реальным устройствам динамической модели КС на основной мнемосхеме;
демонстрационная БД разделена по языковому признаку, точнее в дистрибутив была добавлена демонстрационная БД на английском.
Расширение API пользовательского программирования:
Special.FLibSYS:
функция пользовательского API для преобразования даты и времени в строку tmCtime() заменена на функцию представления даты и времени в произвольном формате tmFStr();
в функции пользовательского API: varhBeg(), varhEnd(), varhGetR(), varhGetB() и varhGetS() добавлен параметр прямого доступа к архиву;
добавлены функции: strPath2Sep(), strEnc2HTML() и real2str().
Добавлена поддержка областей имён для пользовательских функций. В модуле DAQ.JavaLikeCalc добавлено ключевое слово “using”, для указания области имён, и ключеве слово “return”.
Разное:
Реализован интерфейс статуса транспортов. Предназначен для детализации текущего состояния и предоставления статистики обмена.
Добавлена возможность хранения и доступа к исполняемым инструкциям XML-узла.
Добавлен шаблон модуля (src/moduls/ui/=Tmpl=) подсистемы «Пользовательские интерфейсы». Шаблон предназначен для создания модулей данной подсистемы на его основе и следуя комментариям в исходном тексте.
Добавлены переводы Ирины и Алексея Попковых на Немецкий язык для модулей: Archive.DBArch, Archive.FSArch, DB.SQLite, DB.MySQL, DB.FireBird, DB.DBF, DAQ.BlockCalc.
Модуль DAQ.System адаптирован к поддержке libsensors версии 3.
5 Планы дальнейшего развития
К релизу следующей версии запланированы решения таких задач:
Расширение API пользовательского программирования функциями:
управления сеансом среды визуализации и управления (СВУ);
управления подсистемой "Сбор данных" (DAQ);
Вынос транспортной и протокольной части модуля DAQ.ModBus в подсистемы "Транспорты" и "Транспортные протоколы". Реализация режима "Slave" сети ModBus.
Создание интерфейса статуса контроллеров подсистемы DAQ для контроля за состоянием источника данных и статистикой сбора данных.
Реализация примитивов "Связь" и "Функция" СВУ.
Реализация стилей и менеджера тем в СВУ.
Реализация поддержки массивов в языке пользовательского программирования JavaLikeCalc и OpenSCADA в целом.