Данный релиз является плановым выпуском рабочей версии системы OpenSCADA, которые обычно осуществляются с периодичностью 3-4 месяца. Основной целью данного релиза является стабилизация и отработка ключевых функций перед выпуском следующей версии OpenSCADA продолжительной поддержки (LTS) 0.8.0. Кроме основных задач в рамках данного релиза проделана большая работа по стабилизации, чистке исходного кода, всестороннему расширению возможностей, а также опробование на встраиваемых и мобильных устройствах архитектуры ARM.
Данный документ является обработкой(компиляцией) документа "ChangeLog" системы OpenSCADA версии 0.7.2, который призван вкратце и наглядно осветить новые возможности. Детальнее ознакомиться с изменениями в системе OpenSCADA можно в файле "ChangeLog" из дистрибутива системы или здесь: http://wiki.oscada.org/Works/ChangeLog.
Ключевыми особенностями данной версии являются:
Реализация плановых задач.
Оптимизация, повышение стабильности, устойчивости и производительности системы.
Усовершенствование и стабилизация графической подсистемы.
Расширение API пользовательского программирования.
Общесистемные расширения.
Публикация решений OpenSCADA.
Новые и обновленные модули:
Archive.DBArch (0.9.5) — Добавлены лимиты запроса данных по времени запроса и ещё некоторые расширения.
Archive.FSArch (1.5.0) — Повышение производительности чтения индексов файлов архивов значений. Адаптация хранения и чтения вещественного к ARM FPA. Добавлены лимиты запроса данных по времени запроса. Некоторые расширения. Значительная стабилизация.
DB.FireBird (0.9.7) — Стабилизация.
DB.MySQL (1.7.1) — Стабилизация.
DB.PostgreSQL (0.9.2) — Стабилизация.
DB.SQLite (1.6.4) — Стабилизация.
DAQ.BFN (0.5.1) — Очистка кода.
DAQ.BlockCalc (1.5.0) — Добавлено планирование вызовов по CRON. Добавлен запускающий и останавливающий вызов блоков. Стабилизация.
DAQ.DAQGate (0.9.5) — Добавлено планирование вызовов по CRON. Стабилизация.
DAQ.DCON (0.5.1) — Стабилизация.
DAQ.DiamondBoards (1.2.5) — Добавлена возможность смены типа параметра. Стабилизация.
DAQ.ICP_DAS (0.8.0) — Добавлена библиотека API "ICP DAS" libi8k.a для архитектуры ARM и включена возможность сборки модуля для ARM. Стабилизация.
DAQ.JavaLikeCalc (1.9.5) — Добавлен прямой, динамический вызов библиотечных функций. Добавлено прямое объединение строковых констант. Добавлен условный вызов аргументов выражения (второго аргумента) с логическими операциями ||(OR) и &&(AND). Значительная стабилизация. Некоторые расширения.
DAQ.LogicLev (1.2.0) — Стабилизация. Добавлена возможность смены типа параметра. Добавлено планирование вызовов по CRON. Некоторое расширение.
DAQ.ModBus (1.2.0) — Добавлена поддержка типа параметра "Логический" для работы по шаблону параметра, а также функции пользовательского API для отправки произвольных-нестандартных ModBus-запросов из шаблонов. Добавлена и использована функция формирования сообщений о нарушениях в контроллере. Добавлена поддержка функций групповой записи (0x0F, 0x10). Значительная стабилизация.
DAQ.OPC_UA (0.6.2) — Стабилизация. Адаптация хранения и чтения вещественного к ARM FPA.
DAQ.SNMP (0.6.1) — Стабилизация. Некоторые улучшения.
DAQ.Siemens (1.3.0) — Значительная стабилизация. Версия библиотеки LibnoDave обновлена до 0.8.4.6. Добавлено планирование вызовов по CRON. Добавлена функция переподключения для "Industrial Ethernet" соединений. Некоторые расширения.
DAQ.System (1.7.5) — Стабилизация. Добавлено планирование вызовов по CRON.
Transport.SSL (1.0.0) — Стабилизация. Некоторые улучшения.
Transport.Serial (0.7.3) — Стабилизация.
Transport.Sockets (1.5.0) — Значительная стабилизация.
Protocol.HTTP (1.6.0) — Добавлена поддержка пользовательских шаблонов для внутреннего содержимого модуля. Добавлена генерация сообщений аутентификации пользователей. Добавлена поддержка всех основных вариантов завершения строки при разборе HTTP-запроса.
Protocol.ModBus (0.6.3) — Стабилизация. Некоторые улучшения.
UI.QTCfg (2.1.0) — Стабилизация. Значительные расширения и улучшения. Реализация ряд функций для повышения удобства.
UI.QTStarter (1.6.2) — Стабилизация. Шрифт сообщение в "сплеше" зафиксирован в размере 10 пикселов, для обеспечения единообразного отображения.
UI.VCAEngine (1.2.0) — Стабилизация. Значительные расширения и улучшения.
UI.Vision (1.2.0) — Значительная стабилизация. Значительные расширения и улучшения.
UI.WebCfg (1.5.6) — Стабилизация.
UI.WebCfgD (0.8.0) — Стабилизация. Значительные расширения и улучшения.
UI.WebUser (0.6.2) — Стабилизация.
UI.WebVision (1.0.0) — Значительная стабилизация. Значительные расширения и улучшения.
1 Реализация плановых задач
В соответствии с планом релиза были выполнены следующие задачи:
Реализация механизма откатов изменений редактирования в Vision. — В рамках окна визуального редактирования виджетов реализован многоуровневый механизм отката изменений для всех основных операций: визуальное изменение геометрии, изменение значения атрибута виджета, добавление/удаление виджета, копирование виджета и редактирование виджетов на основе примитива "ElFigure".
Адаптация системы OpenSCADA для работы на аппаратной платформе ARM. — В дополнении к первичной адаптации, в прошлом релизе, для планшета N800 (http://wiki.oscada.org/Works/Tests/ARM ) была выполнена сборка и адаптация OpenSCADA для сложного (очень старого) программного окружения контроллера LP-5451, а так-же сборка для контроллера SMH2Gi и смартфонов фирма Nokia: N900, N950, N9. В рамках сборки и адаптации на различные мобильные устройства были выполнены следующие задачи:
DAQ.ICP_DAS: Добавлена библиотека API "ICP DAS" libi8k.a для архитектуры ARM и включена возможность сборки модуля для ARM.
SYS, DAQ.OPC_UA: Добавлены системные функции floatLE(), floatLErev(), doubleLE(), doubleLErev() для преобразования формата хранения вещественного числа на различных архитектурах.
SYS: Выполнена адаптация для сборки с GLibC версии меньше 2.5 (2.3.2).
Archive.FSArch:
Исправлено хранение вещественного числа формата LE в архиве, на архитектуре ARM.
В алгоритме быстрого подсчёта количества битов использовано функцию невыравненного чтения TSYS::getUnalign32().
Размер поля кодировки в плоском архиве сообщения расширен с 9 до 99 символов.
2 Оптимизация, повышение стабильности, устойчивости и производительности системы
В процессе работ над данной версией, а также её практической адаптации, было обнаружено и исправлено в общей сложности около 170 ошибок. Так-же была продолжена работа по чистке кода от предупреждающих сообщений компилятора, с флагом "-Wall".
Перечислим наиболее существенные ошибки, исправление которых значительно отразилось на повышении стабильности:
SYS:
Исправлены внеплановые вызовы по расписанию, связанные с рассинхронизацией значений функций time() и clock_gettime(CLOCK_REALTIME,&sp_tm).
Исправлена проверка и ожидание потоков на доступность при перекрытии с остановкой предыдущего, одноимённого потока.
Отключено ожидание инициализации для отсоединяемых задач с целью предотвращения зависания на ожидании быстро закрываемых задач.
Исправлена работа функций невыравненного чтения getUnalign*() на ARM. Проблема обнаружена на PXA270.
Archive.FSArch:
Исправлено чтение данных из буфера архива в соответствии с размером буфера в алгоритме быстрого вычисления количества битов.
Исправлено помещение смещения в кеш из алгоритма быстрого вычисления количества битов.
Исправлена некорректная обработка конца невыравненных блоков быстрого алгоритма подсчёта количества битов.
Добавлен монопольный ресурс к вызову функции calcVlOff() с целью предотвращения некорректной работы с кешем.
Transport, DAQ.AMRDevs, DAQ.DCON, DAQ.ICP_DAS, DAQ.ModBus, DAQ.OPC_UA, Protocol.HTTP: Исправлено использование функции TTransportOut::messIO() при запросе хвоста и получении нулевого ответа.
DAQ.ModBus, Transport.Serial, UI.WebCfg, UI.WebCfgD, UI.WebUser, UI.WebVision: Исправлено ошибочное использование символа завершения строки '\n' для множества программных платформ UNIX, MAC, DOS/Windows, путём замены на"\x0A" .
Transport.*: Исправлено использование беззнакового типа в возврате функций read() и write(). Добавлены ресурсы к счётчикам входных/выходных запросов.
Transport.Sockets: Исправлен пропуск инициализации размера возвратного значения для функции getsockopt().
DAQ.JavaLikeCalc: Исправлено падение функции replace(), объекта "RegExp".
DAQ.Siemens: Исправлено получение и запись значений вещественных типов. Исправлено переподключение в случае ошибки. Исправлено использование свойства размера целого, вещественного и строкового типов. Добавлена очистка связей параметра при его выключении.
UI.Vision, UI.WebVision: Исправлен доступ за границу вектора при отрисовке графиков примитива "FormEls".
UI.VCAEngine: Предотвращена возможность потери изменений в сервере визуализации при отображении в визуализаторах путём предварительного сохранения значения тактового счётчика в сервисном запросе "openList".
UI.WebVision:
Исправлено открытие и замена корневой страницы.
Исправлена обработка масштаба вложенных страниц, с учётом масштаба корневой.
Оптимизация и повышение производительности:
SYS: Механизм ресурса объекта "ResString" заменён с RW-блокировок на мютекс, с целью повысить производительность и сократить потребление памяти.
Archive.FSArch: Обработка индексной таблицы архива значений значительно ускорена посредством использования быстрого алгоритма вычисления количества битов в 32-разрядном целом.
UI.WebCfgD: Использован групповой запрос содержимого страниц для значительного повышения производительности на медленных и высоколатентных каналах.
Выполнены мероприятия по повышению скорости запуска сеанса проекта в числе: пропущена инициализация базовых атрибутов ввиду их последующего наследования.
Удален перевод некоторых сообщений времени исполнения сеанса.
Реализовано включение только нужных страниц при запуске сеанса. Остальные страницы исполняющегося сеанса включаются по мере обращения к ним. Это позволило значительно повысить скорость запуска сеанса, а также уменьшить зависимость скорости запуска от сложности проекта визуализации.
Реализация архивного режима примитива "Документ" изменена на прямую работу с БД, что позволило расширить глубину архива до 1000000 документов и без ущерба для оперативной памяти.
3 Усовершенствование и стабилизация графической подсистемы
Заметная работа была выполнена в рамках графической подсистемы, а именно в модулях движка СВУ UI.VCAEngine, визуализаторов UI.Vision и UI.WebVision, а также конфигураторах. Внесённые изменения были направленны на стабилизацию, оптимизацию потребления памяти и улучшение пользовательских свойств.
Улучшения графической подсистемы:
UI.VCAEngine, UI.Vision, UI.WebVision:
Исправлено обращение за границы массива (вектора) при построении трендов, примитива "Диаграмма".
Добавлено и реализовано свойство ширины графика, примитива "Диаграмма".
Добавлена периодическая проверка дерева виджетов страницы с целью обнаружения факта удаления виджетов, путём запроса полного перечня виджетов.
Реализовано отображение графиков, группы графиков примитива "Диаграмма" в шкале значения в случае отличия шкал всех графиков не более чем на 20%.
Добавлена и реализована возможность выбора режима подтверждения для элементов редактирования строки и текста примитива "Элементы формы".
Исправлена возможность потери некоторых изменений в модели, при отображении их в визуализаторах.
Добавлено и реализовано свойство количества значений на пиксел в графиках примитива "Диаграмма", с целью управления детализацией экспорта в CSV и т.д.
Реализована логарифмическая шкала значений для графиков примитива "Диаграмма".
Добавлено и реализовано свойство сохранения соотношения сторон главной страницы при разворачивании главного окна исполнения сеанса проекта.
UI.VCAEngine:
Реализовано включение страниц сеанса проекта по надобности, с целью повышения скорости запуска и оптимизации использования оперативной памяти.
Примитив "Документ" переделан для ведения архивов, архивного режима, полностью в БД, а также добавлена функция пользовательского API для доступа к элементам архива.
Добавлена периодическая (30 минут) проверка и закрытие уже неиспользованных (потерянных) сеансов проектов.
Удалён предыдущий (противоречивый) механизм отката удаления вложенных виджетов и заменён полноценным механизмом откатов в визуализаторе 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.