Цей реліз є плановим випуском робочої версії системи OpenSCADA, який за звичай здійснюється з періодичністю 3-4 місяці. Основною метою цього релізу є стабілізація та опрацювання ключових функцій перед випуском наступної версії OpenSCADA тривалої підтримки (LTS) 0.8.0. Крім основних задач у межах цього релізу здійснено велику роботу зі стабілізації, чистки вихідного коду, всебічного розширення можливостей, а також опробування на вбудованих пристроях архітектури ARM.
Цей документ є обробкою(компіляцією) документа "ChangeLog" системи OpenSCADA версії 0.7.2, який призначено коротко та наочно освітлити нові можливості. Детальніше ознайомитися із змінами у системі OpenSCADA можна у файлі "ChangeLog" із дистрибутиву системи або тут: http://wiki.oscada.org/Works/ChangeLog (RU).
Ключовими особливостями цієї версії є:
Реалізація планових завдань.
Оптимізація, підвищення стабільності, стійкості та продуктивності системи.
Удосконалення та стабілізація графічної підсистеми.
Розширення 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, 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".
Додано функцію повнотекстового редагування тексту комірок таблиць.
Повністю переписано механізм виконання правил підсвічування синтаксису.
Всі вікна діалогів реалізовано у вигляді 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: Додано межу часу під час запиту повідомлень із архіву.
SYS.TConfig, Archives, DAQ, Security, Transports, Archive.*, DAQ.*, Protocol.UserProtocol, Transport.*, UI.VCAEngine, UI.WebUser: Збереження строкових конфігураційних полів переведено у об'єкт ресурсної строки "ResString".
6 Публікація рішень OpenSCADA
В процесі здійснення робіт над цим релізом на різних конференціях та виставках були представлені рішення на основі проекта 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.