Цей реліз є запланованим випуском робочої версії системи OpenSCADA, які зазвичай відбуваються з періодичністю 3-4 місяці. Основною метою цього релізу є реалізація комерційного сервісу на основі OpenSCADA та адаптація до апаратної платформи ARM. Крім основних завдань, у межах цього релізу виконано велику роботу по стабілізації, очищенню вихідного коду, а також всебічного розширення можливостей.
Цей документ є обробкою (компіляцією) документа <ChangeLog> системи OpenSCADA версії 0.7.1, який призначено коротко та наочно освітлити нові можливості системи OpenSCADA. Детально ознайомитися зі змінами у системі OpenSCADA можна у файлі ChangeLog з дистрибутива системи або тут: http://wiki.oscada.org/Works/ChangeLog (RU).
Ключовими особливостями цієї версії є:
Реалізація запланованих завдань.
Оптимізація, підвищення стабільності, стійкості та продуктивності системи.
Удосконалення та стабілізація графічної підсистеми.
Формування та стабілізація 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" зроблена необов'язковою.
DAQ.JavaLikeCalc (1.9.0) - Стабілізація. Додано підсвічування синтаксису. Виконано адаптацію до апаратної архітектури ARM. Додано реалізацію регулярних виразів та низки розширень API користувача. Додано можливість запису символів рядка за допомогою вісімкового "\041" та шістнадцяткового "\x21" числа.
DAQ.LogicLev (1.1.3) - Стабілізація. Деякі розширення.
DAQ.SNMP (0.6.0) - Стабілізація. Реалізація повної підтримки клієнтської частини протоколу. Додано підтримку всіх типів значень. Додано підтримку запису значень. Покращено обробку помилок. Додано додаткові параметри конфігурації підключення.
Protocol.ModBus (0.6.2) - Стабілізація. Деякі покращення.
Protocol.OPC_UA (0.6.1) - Стабілізація.
Transport.Sockets (1.4.6) - Стабілізація.
Transport.SSL (0.9.6) - Стабілізація.
Transport.Serial (0.7.2) - Стабілізація. Під час ініціалізації порту використано попередні налаштування та реалізовано можливість опустити встановлення окремих налаштувань.
Protocol.HTTP (1.5.1) - Стабілізація. Додано підтримку змінної HTTP "Transfer-Encoding=chunked" у вихідному транспорті.
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 (http://oscada.org/ua/poslugi ).
Адаптація системи OpenSCADA до роботи на апаратній платформі ARM. - Здійснено збірку, адаптацію та повномасштабне тестування OpenSCADA до архітектури ARM; на інтернет планшеті фірми Nokia - N800 (http://wiki.oscada.org/Works/Tests/ARM (RU)). А також приватні заходи по адаптації:
SYS: Прототипи функцій TMess::put(), TMess::get(), TCntrNode::grpSize(), TCntrNode::grpId(), TCntrNode::grpAt() змінено для виправлення використання беззнакового типу "char" на ARM як знакового.
SYS.TVariant, DAQ.AMRDevs, DAQ.OPC_UA: Виправлено невирівнюваний доступ до даних.
SYS.TCntrNode: Виправлено використання беззнакового "char" у ARM як знакового.
Archive: Прототипи функцій TArchiveS::messPut() та TArchiveS::messGet() змінено для виправлення змінної рівня повідомлення як знакового числа.
DAQ.JavaLikeCalc: Віртуальну машину переписано для прямого використання структур команд, з метою виключення проблеми вирівнювання, а також для деякого підвищення продуктивності.
DAQ.Siemens: Виправлено проблему бібліотеки NoDave на предмет глобального виклику команди пакування структур "#pragma pack(1)".
UI.QTCfg: Додано короткочасне засинання, після закриття всіх вікон, у функції виключення. З метою надати час остаточно зруйнуватися об'єктам всіх вікон та запобігти падінню.
Переклад триває...
2 Оптимизация, повышение стабильности, устойчивости и производительности системы
В процессе работ над данной версией, а также её практической адаптации, было обнаружено и исправлено в общей сложности около 90 ошибок. В целом была проделана работа по чистке кода от предупреждающих сообщений компилятора, с флагом "-Wall":
удаление неиспользованных переменных;
добавление возврата во всех функциях;
инициализация переменных с возможностью её использования неопределённой;
исключение неполной обработки перечислимых типов в операции выбора;
сравнение знакового с беззнаковым целым.
Перечислим наиболее существенные ошибки, исправление которых значительно отразилось на повышении стабильности:
Общесистемные:
Команда сборочной системы "$ make dist" исправлена и адаптирована для корректного создания дистрибутивов OpenSCADA.
Функция TSYS::cron(), для вызова по расписанию, неоднократно исправлена.
Тип переменной для хранения результата функции find(), строки, везде изменён на корректный "size_t".
Function: Исключена возможность утечки памяти в случае попытки установить объект в необъектный параметр функции.
Базы данных:
DB.PostgreSQL: Исправлена обработка адреса БД на предмет определения пустых полей.
Транспорты и протоколы:
Transport: Исправлена загрузка всех транспортов из БД, в случае наличия записей про транспорт, модуль которого отсутствует.
Transport.Serial: Установлен флаг O_NONBLOCK для функции open() последовательного устройства с целью предотвращения блокирования открытия порта на некоторых USB->RS485 преобразователях.
Transport.Sockets, Transport.SSL: Добавлена очистка входного буфера для предотвращения повторного использования на высоколатентных каналах, после таймаута.
Transport.Sockets: Исправлено закрытие клиентского соединения по таймауту времени жизни, для подключений при отсутствия данных.
Transport.Sockets: Unix-сокет установлен в неблокирующий режим посредством флага O_NONBLOCK. Исправлено формирование сообщений об ошибках для исходящих транспортов.
Protocol.HTTP, UI.WebCfg, UI.WebCfgD, UI.WebVision, UI.WebUser: Исправлен разбор элементов POST-запроса на предмет разбора всех атрибутов каждого элемента.
Сбор данных и архивы:
Archive: Исправлено использование буфера мягкой сетки с низким и высоким разрешением времени, в архивах значений.
Archive.FSArch: Исправлено создание файлов архива сообщений при помещении множества старых сообщений. Добавлен параметр предотвращения дубликатов.
Archive.FSArch: Результат функции fgetc() записан в целочисленную переменную, вместо символьной, что исправило обнаружение "EOF".
DAQ.System: Исправлено падение при выходе, для источника "Hddtemp".
DAQ.ModBus: Режим установки значений атрибутов параметров изменён на активный и улучшена обработка ошибок.
DAQ.JavaLikeCalc: Добавлена проверка индекса при доступе к символу строки по индексу, с целью предотвращения выхода за диапазон.
Интерфейсы визуализации:
UI.VCAEngine: Исправлено блокирование сеанса для динамически активных проектов, при динамическом доступе к собственным атрибутам виджета.
UI.Vision: Исправлено падение сеанса для проектов с периодом исполнения более 500 мс.
UI.Vision: Реализована доводка координат фигур примитива "Элементарная фигура" к остатку положения виджета.
UI.Vision: Масштабирование текста, примитива "Текст", изменено на изменение размера шрифта вместо масштабирования конечного изображения, что повысило общее качество отображения шрифта.
UI.Vision, UI.WebVision: Повышено разрешение координат всех виджетов до трёх знаков после запятой, с целью обеспечения нормального позиционирования на больших масштабах.
UI.WebVision, UI.Vision: Исправлено обновление изображения примитива "Элементарная фигура" при изменении масштаба.
UI.WebVision: Удалена проверка попадания точек фигур в область отображения примитива "Элементарная фигура". Данная функция переложена на библиотеку GD.
UI.WebVision: Исключена возможность падения, для примитивов "Diagram" или "ElFigure", в случае передачи некорректных значений атрибутов изображения "xSc" or "ySc" из Web-браузера.
Оптимизация и повышение производительности:
UI.WebCfgD: Добавлено изменение размера иконок на стороне сервера, с целью снижения трафика.
UI.QTCfg: Использован групповой запрос к интерфейсу управления, для повышения производительности на медленных и высоколатентных соединениях.
UI.QTCfg: Исключён многократный запрос элементов выборных колонок таблиц.
3 Усовершенствование и стабилизация графической подсистемы
Заметная работа была выполнена в рамках графической подсистемы, а именно в модулях движка СВУ UI.VCAEngine, визуализаторов UI.Vision и UI.WebVision, а также конфигураторах. Внесённые изменения были направленны на стабилизацию, оптимизацию потребления памяти и улучшение пользовательских свойств.
Улучшения графической подсистемы:
SYS, DAQ.JavaLikeCalc, UI.QTCfg, UI.VCAEngine, UI.Vision: Добавлено API подсветки синтаксиса. На основе данного API подсветка синтаксиса добавлена в:
DAQ.BlockCalc: Добавлена подсветка синтаксиса в описании атрибутов параметров.
DAQ.JavaLikeCalc: Добавлена подсветка синтаксиса к компилятору языка JavaLikeCalc.JavaScript, а также ко всем текстовым полям, использующим этот язык внутри модуля.
Protocol.UserProtocol: Добавлена подсветка синтаксиса к текстам процедур протокола.
UI.QTCfg: Добавлено отображение многоуровневой подсветки синтаксиса, передаваемой из модели данных в виде правил регулярных выражений.
UI.VCAEngine: Добавлена подсветка синтаксиса к текстовым атрибутам примитивов виджета, для которых это нужно.
UI.Vision: Добавлена подсветка синтаксиса к текстовым атрибутам примитивов виджета, а также текстам программ виджетов.
UI.WebUser - Добавлена подсветка синтаксиса процедур формирования Web-интерфейса.
UI.QTCfg:
Добавлена возможность ручного изменения высоты текстовых и табличных полей. Изменение осуществляется схватыванием и перетаскиванием нижнего края поля.
Групповой запрос "CntrReqs" использован для запроса контекста страницы.
UI.VCAEngine: Добавлены специфические свойства к атрибутам примитивов, вроде помощи и подсветки синтаксиса.
UI.Vision:
Добавлено отображение помощи по атрибутам виджета.
Добавлена индикация сообщения о потери соединения с сервером визуализации, а также восстановление, при удалённой визуализации.
Для примитива "Элементарная фигура" добавлен диалог установки свойств отдельных, выбранных, фигур
Добавлен отдельный полнотекстовый редактор для текстовых атрибутов.
UI:WebVision: Добавлена поддержка gif и jpg изображений в элементах примитива "Элементарная фигура".
4 Формирование и стабилизация API пользовательского программирования
Было продолжено формирование объектного API пользовательского программирования, которое предусматривает интеграцию пользовательских функций в дерево объектов системы OpenSCADA. Кроме этого, был внесен ряд изменений в существующие библиотеки функций пользовательского API.
В частности были осуществлены следующие изменения:
SYS: Пользовательское API для объекта TArrayObj расширено на предмет возможности использования объектных свойств, если свойства не числа.
SYS: В дерево объектов OpenSCADA пользовательского API добавлена функция SYS.Security.access() для контроля доступа пользователя OpenSCADA к ресурсам с нужными правами.
SYS, DAQ.JavaLikeCalc: Добавлена реализация поддержки пользовательского API регулярных выражений, основанной на PCRE, посредством объекта TRegExp. Реализован интерфейс функций RegExp.exec() и RegExp.test() в стандарте для языка JavaScript. Для DAQ.JavaLikeCalc реализована "new RegExp()" инициализация для объекта TRegExp. Для DAQ.JavaLikeCalc реализованы дополнительные функции с использованием RegExp: int search(); Array match(); Array split(RegExp pat, int limit); string replace(string substr, string str); string replace(RegExp pat, string str).
TFunction, DAQ.JavaLikeCalc: Добавлен объект пользовательского API "TFuncArgObj" для получения аргументов функции.
DB: Добавлены функции пользовательского API fieldStruct(), fieldSeek(), fieldGet(), fieldSet() и fieldDel() для объекта таблицы, с целью предоставить пользовательский доступ к БД посредством интерфейса БД OpenSCADA.
DAQ.JavaLikeCalc: Добавлена встроенная функция typeof() для проверки типа значения.
5 Общесистемные расширения
В общесистемное API системы OpenSCADA были внесены значительные изменения и расширения с целью общей стабилизации и в виду общих мероприятий по чистке кода, а также реорганизации дерева исходных текстов:
SYS:
Реализована новая структура дерева исходных текстов.
Все ресурсы проекта перемещены в отдельный архив.
Для создания архивов исходных текстов и ресурсов можно использовать команды "$ make dist-lzma" и "$ make dist-reslzma".
Документация выполнена статичной, для модулей, и поделена по языкам. Для каждого языка документации формируется отдельный пакет. В документации каждого языка создан индексный файл по всему перечню локальной и сетевой документации. Общий перечень локальной документации значительно расширен новыми документами, а также вспомогательной сетевой документацией.
Добавлены пакеты библиотечных БД *-LibDB.Main и *-LibDB.VCA, помещены в data/LibsDB.
Вместо DemoDB пакета добавлены пакеты моделей "AGLKS" и "Boiler", помещены в data/ModelsDB.
Конфигурационные файлы для построения RPM и DEB пакетов обновлены.
Зависимость на библиотеку PCRECPP глобально заменена на PCRE.
Добавлена новая функция TSYS::time2str() для преобразования интервалов времени в строку вроде "1час 23мин 10сек". Эту функцию использовано везде.
Добавлена реализация собственного XML-парсера, вместо Expat. Собственный XML-парсер решает проблему поддержки различных кодировок, отличных от UTF, а также безопасной обработки ситуации наличия недопустимых, для текущей кодировки, символов.
SYS.TMess: Общие сообщения интерфейса управления перемещены в одну функцию TMess::lab*.
Transport, Transport.*: Добавлена функция TTransportS::traf2str() для преобразования значения счётчика трафика в строку вроде "12.5КиБ"
Заключение
Система OpenSCADA получила толчок для осуществления реальной аппаратной многоплатформенности, посредством чего код проекта был в значительной степени вычищен и сделан многоплатформенным. Эти наработки позволят продолжить движение проекта в сторону аппаратной многоплатформенности, а также реализации программной, что запланировано после мледующего LTS релиза 0.8.0.
Также продолжена работа по улучшению общей функциональности, простоты и удобству использования с общим повышением качества предоставления услуг на основе системы OpenSCADA.