Цей реліз є плановим випуском робочої версії системи 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: Використано груповий запит вмісту сторінок для значного підвищення продуктивності на повільних та високолатентних каналах.
UI.Vision: Підвищено продуктивність відтворення заповнень примітиву "ElFigure".
UI.VCAEngine:
Виконано заходи по підвищенню швидкості запуску сеансу проекту в числі: пропущено ініціалізацію базових атрибутів у зв'язку з їх наступного успадкування.
Виключено переклади деяких повідомлень часу виконання сеансу.
Реалізовано включення тільки потрібних сторінок під час запуску сеансу. Інші сторінки виконуваного сеансу включаються під час звернення до них. Це дозволило значно підвищити швидкість запуску сеансу, а також зменшити залежність швидкості запуску від складності проекту візуалізації.
Реалізацію архівного режиму примітиву "Документ" змінено на пряму роботу з БД, що дозволили розширити глибину архіву до 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%.
Реалізовано логарифмічну шкалу значень для графіків примітиву "Діаграма".
Реалізовано відкриття малих вікон вкладених сторінок у вигляді DIV-блоків, що вирішує проблему блокування та тривалого відкриття зовнішніх вікон багатьма браузерами.
Головну сторінку інтерфейсу відцентровано у вікні браузера.
UI.QTCfg:
Додано обмеження на висоту рядків таблиць у половину висоти таблиці.
Введено обмеження на розмір діалогу вводу та включено адаптивне визначення його розміру за вмістом.
У елементів доступних для зміни висоти користувачем, для забезпечення роботи всюди, встановлено фіксований стиль "StyledPanel".
Додано функцію повнотекстового редагування тексту комірок таблиць.
Повністю переписано механізм виконання правил підсвічування синтаксису.
Всі вікна діалогів реалізовано у вигляді 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.