Виконання OpenSCADA на N950 Виконання OpenSCADA на N900 Запис, відміна та повтор змін Виконання рецепту/програми користувача
Основною метою цього релізу є стабілізація та опрацювання ключових функцій перед випуском наступної версії OpenSCADA тривалої підтримки (LTS) 0.8.0. Крім основних задач у межах цього релізу здійснено велику роботу зі стабілізації, чистки вихідного коду, всебічного розширення можливостей, а також опробування на вбудованих пристроях архітектури ARM.
OpenSCADA 0.7.2 Вступ
Цей реліз є плановим випуском робочої версії системи OpenSCADA, який за звичай здійснюється з періодичністю 3-4 місяці. Основною метою цього релізу є стабілізація та опрацювання ключових функцій перед випуском наступної версії OpenSCADA тривалої підтримки (LTS) 0.8.0. Крім основних задач у межах цього релізу здійснено велику роботу зі стабілізації, чистки вихідного коду, всебічного розширення можливостей, а також опробування на вбудованих пристроях архітектури ARM.
Цей документ є обробкою(компіляцією) документа "ChangeLog" системи OpenSCADA версії 0.7.2, який призначено коротко та наочно освітлити нові можливості. Детальніше ознайомитися із змінами у системі OpenSCADA можна у файлі "ChangeLog" із дистрибутиву системи або тут: 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) — Стабілізація. Деякі удосконалення.
- Protocol.OPC_UA (0.6.2) — Стабілізація.
- Protocol.SelfSystem (0.9.5) — Стабілізація.
- Protocol.UserProtocol (0.6.2) — Стабілізація.
- Special.FLibComplex1 (1.1.0) — Додано прямий, динамічний виклик бібліотечних функцій.
- Special.FLibMath (0.6.0) — Додано прямий, динамічний виклик бібліотечних функцій.
- Special.FLibSYS (1.0.0) — Додано прямий, динамічний виклик бібліотечних функцій.
- 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 (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".
- Додано функцію повнотекстового редагування тексту комірок таблиць.
- Повністю переписано механізм виконання правил підсвічування синтаксису.
- UI.WebCfgD:
- Зменшено яскравість обезбарвлених-пасивних кнопок.
- Всі вікна діалогів реалізовано у вигляді 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 Елементи мнемосхем".
- Бази даних бібліотек:
- Бібліотеку основних візуальних елементів доповнено кадрами реалізації редагування та виконання "Рецептів"-"Користувацьких програм".
- До комплекту пакета бібліотек додано бібліотеку елементів Електричних схем(RU).
- Кадр головної сторінки доповнено механізмом "програвання" моделей технологічних процесів (ТП).
- Модель промислового котлоагрегату(RU) перекладено на Англійську та Українську мови.
- 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:
Заключення
Цим релізом системи OpenSCADA фактично завершено роботу по адаптації на апаратну архітектуру ARM, що відіб'ється у наданні та публікації офіційних збірок релізу 0.7.2 для мобільних пристроїв.
Хоча випуск даного релізу дещо запізнився та затягнувся його все ж було ретельно підготовлено та він стане доброю основою для доведення кодової бази проекту до майбутнього відповідального релізу 0.8.0 LTS. Крім того цей релиз можна використовувати і для повсюдного впровадження та застосування у відповідальних задачах з наступним плавним переходом на 0.8.0 LTS після його вихода.
Подальші зусилля розробників будуть направлені на завершення планових завдань та приготування до випуску реліза OpenSCADA тривалої підтримки (LTS) версії 0.8.0.
|
|