Цей реліз є запланованим випуском робочої версії системи 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" або "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.