Цей реліз є плановим випуском робочої версії системи 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:
Реализовано включение страниц сеанса проекта по надобности, с целью повышения скорости запуска и оптимизации использования оперативной памяти.
Примитив "Документ" переделан для ведения архивов, архивного режима, полностью в БД, а также добавлена функция пользовательского API для доступа к элементам архива.
Добавлена периодическая (30 минут) проверка и закрытие уже неиспользованных (потерянных) сеансов проектов.
Исправлена возможность потери некоторых изменений в модели, при отображении их в визуализаторах.
Удалён предыдущий (противоречивый) механизм отката удаления вложенных виджетов и заменён полноценным механизмом откатов в визуализаторе UI.Vision.
Добавлено свойство ширины графика, примитива "Диаграмма".
Добавлена периодическая проверка дерева виджетов страницы с целью обнаружения факта удаления виджетов.
Выполнена оптимизация использования памяти элементами сеанса до 20%.
Удалена поддержка первой, устаревшей, версии структуры БД среды визуализации.
Добавлено ограничение на время генерации документов в примитиве "Документ" 5 секунд.
Добавлена поддержка типа атрибутов "Объект" и "Текст".
Добавлена возможность выбора режима подтверждения для элементов редактирования строки и текста примитива "Элементы формы".
Отключена принудительная инициализация новых пользовательских атрибутов в EVAL.
Добавлено свойство количества значений на пиксел в графиках примитива "Диаграмма", с целью управления детализацией экспорта в CSV и т.д.
Примитив "Документ" переключен в режим полного разбора XML с целью полноценного сохранения разметки XHTML.
Добавлено свойство сохранения соотношения сторон главной страницы при разворачивании главного окна исполнения сеанса проекта.
Добавлена индикация состояния корректности ссылок в виде "(+)" в конце.
UI.Vision:
Добавлена реализация полноценных откатов и повторов изменений при визуальном редактировании виджетов.
Улучшения в отзывчивости и обновлении изменений в сеансе исполнения проекта: оптимизирована производительность отрисовки примитива "ElFigure", обработка изменения уровня виджета "geomZ".
Добавлен экспорт в CSV формат из примитивов "Диаграмма" и "Документ".
Исправлено обращение за границы массива (вектора) при построении трендов, примитива "Диаграмма".
Реализовано свойство ширины графика, примитива "Диаграмма".
Добавлена периодическая проверка дерева виджетов страницы с целью обнаружения факта удаления виджетов, путём запроса полного перечня виджетов.
Реализовано отображение графиков, группы графиков примитива "Диаграмма" в шкале значения в случае отличия шкал всех графиков не более чем на 20%.
Реализована возможность выбора режима подтверждения для элементов редактирования строки и текста, примитива "Элементы формы".
Введено ограничение на размер диалогов ввода и включено адаптивное определение их размеров по содержимому.
Реализована логарифмическая шкала значений для графиков примитива "Диаграмма".
Реализовано свойство количества значений на пиксел в графиках примитива "Диаграмма", с целью управления детализацией экспорта в CSV и т.д.
Реализовано свойство сохранения соотношения сторон главной страницы при разворачивании главного окна исполнения сеанса проекта.
Полностью переписан механизм исполнения правил подсветки синтаксиса.
Добавлено создание нового сеанса после восстановления удалённого подключения и отсутствии предыдущего сеанса.
Выполнена реорганизация операций из диалога свойств и контекстного меню с динамическими и статическими свойствами примитива элементарной фигуры.
В процессе добавления фигуры примитива элементарной фигуры реализована её отрисовка при перемещении курсора мыши.
Фон окна редактируемого виджета установлен в шаблон QT::Dense7Pattern с целью устранения возможного перекрытия по цвету.
Добавлена обработка событий выбора виджета при нажатии в области скролинга, но за пределами виджета.
UI.WebVision:
Исправлено обращение за границы массива (вектора) при построении трендов, примитива "Диаграмма".
Исправлена обработка масштаба вложенных кадров, а также пересмотрен механизм формирования-включения скрола.
Реализовано свойство ширины графика примитива "Диаграмма".
Добавлена периодическая проверка дерева виджетов страницы с целью обнаружения факта удаления виджетов путём запроса полного перечня виджетов.
Добавлена функция преобразования изображений на стороне сервера. Функцию преобразования использовано для изменения размера и обесцвечивания изображений неактивных кнопок.
Реализовано отображение графиков группы графиков примитива "Диаграмма" в шкале значения в случае отличия шкал всех графиков не более чем на 20%.
Реализована логарифмическая шкала значений для графиков примитива "Диаграмма".
Реализовано открытие малых окон вложенных страниц в виде 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() and 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. К версии 0.8.0 также планируется добавить страницы помощи в дереве конфигурации OpenSCADA.