Реліз відкритої SCADA(Supervisory control and data acquisition) системи версії 0.6.3 є плановим релізом гілки 0.6.0. У межах цієї версії виконано велику роботу по стабілізації та адаптації до практичних завдань.
Цей документ є обробкою (компіляцією) документа <ChangeLog> системи OpenSCADA версії 0.6.3, який призначено коротко та наочно освітлити нові можливості та зміни системи OpenSCADA. Детально ознайомитися зі всіма змінами у системі OpenSCADA можна у файлі ChangeLog з пакету дистрибутива системи або тут: http://wiki.oscada.org/Works/ChangeLog (RU).
Ключовими особливостями цієї версії є:
Реалізація планових задач.
Підвищення стабільності, стійкості та продуктивності системи.
Удосконалення та стабілізація СВК.
Загальносистемні розширення.
У процесі робіт над релізом було внесено наступні зміни у модулі OpenSCADA:
Archive.FSArch (1.0.1) - Стабілізація. Переклад інтерфейсу на Німецьку.
Archive.DBArch (0.7.1) - Стабілізація. Переклад інтерфейсу на Німецьку.
DB.DBF (1.9.1) - Переклад інтерфейсу на Німецьку.
DB.MySQL (1.4.1) - Стабілізація. Додання можливості зберігання дати та часу у полі MySQL з типом DATETIME. Переклад інтерфейсу на Німецьку.
DB.SQLite (1.4.1) - Стабілізація. Забезпечення можливості роботи з файлами БД тільки для читання. Переклад інтерфейсу на Німецьку.
DB.FireBird (0.8.1) - Переклад інтерфейсу на Німецьку.
DAQ.BlockCalc (1.1.1) - Стабілізація. Переклад інтерфейсу на Німецьку.
DAQ.JavaLikeCalc (1.3.0) - Стабілізація. Додання підтримки областей найменувань функцій API користувача. Додання ключових слів using та return.
DAQ.SNMP (0.3.3) - Стабілізація.
DAQ.LogicLev (0.9.2) - Стабілізація.
DAQ.ModBus (0.9.1) - Стабілізація.
DAQ.DCON (0.1.0) - Новий модуль: У дерево вихідних текстів проекту включено модуль реалізації джерела даних за протоколом DCON (Almaz Karimov).
DAQ.Siemens (1.1.1) - Стабілізація.
DAQ.System (1.6.2) - Стабілізація. Адаптовано до підтримки бібліотеки libsensors версії 3 (API версії 4).
DAQ.Transporter (0.3.3) - Стабілізація.
Transport.Sockets (1.3.6) - Стабілізація. Додано поле стану для транспортів.
Transport.SSL (0.8.0) - Новий модуль: Модуль транспорту “SSL”, базований на бібліотеці шифрування OpenSSL.
Special.FLibComplex1 (1.0.3) - Стабілізація.
Special.FLibSYS (0.7.0) - Додано параметри для прямого доступу до архівів у функції: varhBeg(), varhEnd(), varhGetR(), varhGetB() та varhGetS(). Додано нові функції: strPath2Sep(), strEnc2HTML() и real2str(). Функцію tmCtime() замінена на tmFStr().
UI.QTCfg (1.7.0) - Стабілізація. Для формування дерева навігатору використано оптимізований за часом запит гілки вкладених елементів глибиною у один рівень. Додано обмеження розміру ідентифікаторів об'єктів, які вводяться.
UI.VCAEngine (0.8.0) - Стабілізація. Оптимізація на продуктивність. Додано груповий запит атрибутів віджетів гілки віджетів сеансів виконання проектів. Реалізовано примітив "Документ". Підтримка динамічних властивостей фігур примітиву "ElFigure". Багато різних удосконалень.
UI.Vision (0.8.0) - Стабілізація. Оптимізація продуктивності. Реалізація динамізації всіх параметрів елементів примітиву "ElFigure". Реалізація примітиву "Документ". Додання функції друку та експорту у режимі виконання. Для запиту даних кадрів використано груповий запит, значно підвищуючий продуктивність. Оптимізація алгоритму сортування вкладених віджетів кадрів, що значно підвищили продуктивність роботи великих мнемосхем. Зміна концепції формування елементів примітиву "ElFigure", яка дозволила значно підвищити продуктивність. Реалізація функції візуального масштабування розроблюваних кадрів. Реалізація масштабу шрифту у всіх примітивах. Багато різних удосконалень.
UI.WebVision (0.6.0) - Стабілізація. Реалізація динамізації всіх параметрів елементів примітиву "ElFigure". Реалізація примітиву "Документ". Для запитів даних кадрів використано груповий запит, який значно підвищуєпродуктивність. Реалізація примітиву "Протокол". Багато різних удосконалень.
UI.WebCfg (1.5.2) - Стабілізація модуля. Додання дій завантаження та збереження поточної сторінки.
UI.WebCfgD (0.5.0) - Новий модуль: Реалізація динамічного Web-конфігуратора OpenSCADA.
UI.WebDbg - Видалення модуля: Модуль відпрацювання взаємодії з Web-інтерфейсами.
1 Реалізація планових задач
У відповідності з планом релізу було виконано наступні завдання:
Реалізація підтримки групових запитів у мові контролю та керування OpenSCADA та оптимізація на його основі мережевих комунікацій різних підсистем OpenSCADA. - У відповідності з цим завданням було виконано:
Реалізація сервісного запиту гілки атрибутів віджетів '/serv/attrBr'. Запит призначено оптимізувати обмін між візуалізатором та рушієм візуалізації шляхом заміни багатьох дрібних запитів одним великим. У випадку обміну за посередництвом мережевих високолатентних каналів даний механізм суттєво підвищує продуктивність. Запит було використано у модулях UI.Vision та UI.WebVision.
Реалізовано груповий запит дерева бібліотек віджетів UI.Vision. Дозволив підвищити продуктивність завантаження та обробки великих дерев бібліотек віджетів особливо у мережі.
Реалізовано та використано оптимізований за часом запит елементів нащадків дерева навігації у UI.QTCfg та UI.WebCfgD. Дозволив виключити зайві, фрагментовані, запити, підвищивши тим самим загальну швидкість формування дерева об'єктів особливо через мережу.
Розробка та реалізація концепції примітиву СВК “Документ”, призначеного для формування звітної документації. - Концепція примітиву "Документ" була розроблена та реалізована. Реалізація зачепила забезпечення підтримки на боці рушія СВК (UI.VCAEngine) та візуалізаторів UI.Vision та UI.WebVision.
Міграція модуля конфігурації системи OpenSCADA UI.WebCfg на динамічний інтерфейс DHTML. - Було виконано не міграцію, а створення нового модуля конфігурації OpenSCADA на основі Web DHTML. Модуль отримав назву UI.WebCfgD. На цей час у дистрибутиві OpenSCADA присутні обидва модулі.
Реалізація безпечного транспорту на основі OpenSSL. - Результатом реалізації транспорту на основі OpenSSL став модуль підсистеми "Транспорти" OpenSCADA - Transport.SSL. Цей модуль реалізує стандарти шифрування трафіку SSL v2, SSL v3 та TLS v1 як для вхідних, так і для вихідних транспортів.
Реалізація примітивів СВК “Link” та “Function”. - Ця робота не була виконана та перенесена до наступного релізу.
2 Підвищення стабільності, стійкості та продуктивності системи.
У процесі робіт над цією версією, а також її практичної адаптації, було виявлено та виправлено біля 120 помилок. Більшість помилок було виявлено у компонентах середовища візуалізації та керування (90 помилок).
Окрім виправлення багатьох помилок було виконано роботу по оптимізації різних компонентів OpenSCADA. Особливо помітної оптимізації піддалося середовище візуалізації та керування (СВК) та його візуалізатори. Головним вектором у оптимізації була оптимізація на продуктивність.
Перелічимо більш суттеві помилки, виправлення яких значно відобразилося на підвищенні стабільності:
Використана функція QWidget::deleteLater() для видалення віджетів та усунення проблеми падіння OpenSCADA у деяких ситуаціях видалення віджетів QT4.
Некоректне видалення елементів std::map у примітіві "ElFigure" модуля UI.Vision та UI.WebVision, яке приводило до падіння системи під навантаження після доби роботи.
Відсутність ресурсу на доступ до строкових атрибутів параметрів підсистеми "Збір даних". На навантажених системах з конкуруючим доступом до загальних даних, наприклад, при запуску декількох сеансів одного проекту візуалізації відбувалася помилка пам'яті.
Остаточно виключене падіння системи під час зміни зв'язку у модулі UI.Vision після закриття діалогу з повідомленням про встановлення не всіх зв'язків.
Виправлена нечутливість до регістру строкових ключових полів БД MySQL, що призводило до перетинання властивостей елементів візуалізації.
Додана підтримка символів переводу строк у атрибутах та іменах тегів XML, що виключило проблеми при передачі великих текстів у атрибутах.
Переглянуто механізм доступу до налагоджувальних повідомлень. Тепер налагоджування включається визначенням змінної OSC_DEBUG з рівнем від 0 до 5. Де 5 рівень більш деталізуючий та має використовуватися з обережністю.
Реалізовано механізм обмеження вводу кількості символів ідентифікаторів об'єктів OpenSCADA у відповідності з розміром значень їх як ключів БД.
Додано кодування ідентифікаторів об'єктів OpenSCADA для запобігання вводу недозволених у ідентифікаторі символів.
Підвищення продуктивності:
Реалізовано сервісний запит гілки атрибутів віджетів '/serv/attrBr'. Запит призначено оптимізувати обмін між візуалізатором та рушієм візуалізації шляхом заміни багатьох дрібних запитів одним великим. У випадку обміну через мережевий високолатентний канал цей механізм суттево підвищує продуктивність.
Використано бінарний алгоритм сортування купи під час сортування вкладених віджетів, враховуючи їх послідовність. Проблема старого алгоритму почала помітно позначатися після 500 вкладених віджетів.
Додано та використано груповий запит дерева бібліотек віджетів UI.Vision.
Реалізовано та використано новий, оптимізований за часом, запит елементів нащадків дерева навігації у UI.QTCfg та UI.WebCfgD.
3 Удосконалення та стабілізація СВК.
Більш значні зміни було внесено у межах середовища візуалізації та керування (СВК), а саме у модулях рушія СВК UI.VCAEngine, візуалізаторів UI.Vision та UI.WebVision. Внесені зміни було спрямовано на стабілізацію, оптимізацію продуктивності та покращення користувальницьких властивостей СВК.
Покращення СВК:
Для примітиву "ElFigure" додано підтримку динамічних та статичних точок; динамічних ширин, кольорів, та зображень; динамічних стилів ліній. Все це надало можливість створювати дуже складні динамічні фігури у межах одного віджета, а також виключило надмірність у наявності окремих атрибутів координат точок для великих та складних статичних зображень.
Реалізовано підтримку примітиву «Документ» у UI.VCAEngine, UI.Vision та UI.WebVision. Реалізація примітиву документа надала можливість створювати звітну документацію різної складності та властивостей в оточені бібліотеки QT та Web-технологій системи OpenSCADA.
Додана реалізація функції друку та експорту у вікні виконуваного проекту. Друк та експорт реалізовано для: сторінок, діаграм та документів. Експорт сторінок та діаграм виконується у зображення, а документу - у XHTML.
Змінено концепцію відображення примітиву "ElFigure" з метою значного підвищення продуктивності у режимі розробки та особливо у режимі виконання. Зміни полягають у попередньому формувані зображення та наступної відправки його на екран під час запиту на оновлення. У випадку формування великих статичних зображень, а зверху них розміщення динаміки, загальна продуктивність інтерфейсу значно підвищується.
Реалізовано функцію вільного візуального масштабу редагованих кадрів візуального інтерфейсу модуля UI.Vision. Функцією призначено полегшити розробку як дрібних, але складних елементів, так і великих панорамних кадрів.
Реалізовано функцію масштабування шрифту всіх примітивів модулів візуалізації UI.Vision та UI.WebVision. Масштабування всіх примітивів стало більш адекватним у широкому діапазоні значень.
Допрацьоване повноцінне масштабування примітиву "Діаграма" модулів візуалізації UI.Vision та UI.WebVision.
UI.WebVision: Значне розширення функціональності модуля, а саме:
Реалізоване використання шрифтів TTF та FontConfig для доступу до них. TTF шрифти використані для формування надписів примітиву "Діаграма", що зробило тренди більш схожими на них-же у UI.Vision.
додана перевірка прав доступу;
реалізоване відкриття сторінок інтерфейсу у окремих спливаючих вікнах;
реалізовано контроль активного режиму у елементах примітиву "FormEl";
додано блокування оновлення елементів примітиву "FormEl" під час редагування користувачем;
реалізовано примітив «Протокол».
Додано підтримку типів іконок OpenSCADA “png”, “gif”, “jpg” та “jpeg”.
4 Загальносистемні розширення.
До цього релізу було внесено достатньо багато загальносистемних змін направлених на розширення функціональності.
Зміни збіркової системи та файлу специфікації для формування RPM-пакету:
Файл специфікації створення RPM пакетів адаптовано для формування noarch пакетів на ALTLinux. Створено власний скрипт 'mkdist' для формування «чистого» архіву дистрибутиву, з корекцією функціонування команди 'make dist'.
Пакети документації уніфіковано. Інформаційна документація розміщена у бінарному пакеті, а документація на програму відокремлена у власний пакет.
Виправлено розміщення бібліотек та їх посилань за пакетами.
Змінено версію бібліотеки ядра OpenSCADA на "0:10:0".
Зміни конфігурації OpenSCADA та демонстраційної БД:
Додано підтримку роботи OpenSCADA у директорії користувача. Для запуску у режимі користувача додано скрипт 'openscada_start'.
Для QT конфігуратору (UI.QTCfg) користувача по замовченню встановлено у 'root'.
Додано конфігурацію власного інтерфейсу OpenSCADA на порту 10005, у конфігураційний файл дистрибутиву.
Додано конфігураційне поле шляху до іконок OpenSCADA. Поле конфігурації шляху до модулів OpenSCADA переміщено до головної сторінки системи.
Поновлено демонстраційну БД:
файл БД середовища візуалізації поділено на файли БД: vcaBase.db, vcaTest.db та vcaAGLKS.db;
додано кадри динамічних звітів на основі примітиву «Документ»;
додано звіти у архівному режимі на основі примітиву «Документ»;
сторінку групи графіків оновлено та виправлено;
додано мнемосхему та групу графіків до другого сигнального об'єкту;
панель керування параметрів розширено для підтримки дискретних параметрів (відсічних кранів);
крани підключено до реальних пристроїв динамічної моделі компресорної станції (КС) на основній мнемосхемі;
демонстраційну БД поділено за мовною ознакою, точніше у дистрибутив було додано демонстраційну БД на Англійській мові.
Розширення API програмування користувача:
Special.FLibSYS:
функцію API користувача для перетворення дати та часу у строку tmCtime() замінено на функцію надання дати та часу у довільній формі tmFStr();
у функцію API користувача: varhBeg(), varhEnd(), varhGetR(), varhGetB() та varhGetS() додано параметр прямого доступу до архіву;
додано функції: strPath2Sep(), strEnc2HTML() та real2str().
Додано підтримку областей найменувань для функцій користувача. У модулі DAQ.JavaLikeCalc додано ключове слово “using”, для визначення області найменувань, та ключове слово “return”.
Різне:
Реалізовано інтерфейс стану транспортів. Призначено для деталізації поточного стану та надання статистики обміну.
Додано можливість схову та доступу до виконуємим інструкціям XML-вузлу.
Додано шаблон модуля (src/moduls/ui/=Tmpl=) підсистеми «Інтерфейси користувача». Шаблон призначено для створення модулів даної підсистеми на його основі та слідуючи коментарям у вихідному тексті.
Додано переклади Ірини та Олексія Попкових на Німецьку мову для модулів: Archive.DBArch, Archive.FSArch, DB.SQLite, DB.MySQL, DB.FireBird, DB.DBF та DAQ.BlockCalc.
Модуль DAQ.System адаптовано до підтримки libsensors версії 3.
5 Плани подальшого розвитку
До релізу наступної версії заплановане вирішення таких завдань:
Розширення API програмування користувача функціями:
керування сеансом середовища візуалізації та керування (СВК);
керування підсистемою "Збір даних" (DAQ);
Винос транспортної та протокольної частини модуля DAQ.ModBus до підсистем "Транспорти" та "Транспортні протоколи". Реалізація режиму "Slave" мережі ModBus.
Створення інтерфейсу стану контролерів підсистеми DAQ для контроля за станом джерела даних та статистикою збору даних.
Реалізація примітивів "Зв'язок" та "Функція" СВК.
Реалізація стилів та менеджеру тем у СВК.
Реалізація підтримки масивів у мові програмування користувача JavaLikeCalc та OpenSCADA в цілому.