From OpenSCADAWiki
< Documents | Release 0.9
Це оновлення релізу 0.9 LTS виправляє біля 45 помилок та додає деякі удосконалення, які цілком ви можете почитати у протоколі змін оновлення.
Важливі дії користувача за оновленням
- FIX:SYS: Загальне конфігураційне поле "WorkDir" попереджено від маркування як модифіковане при перемиканні проекту, чим і від збереження у конфігураційному файлі, але відсутній механізм автоматичного видалення цього поля із конфігураційного файлу старих проектів.
- => видаліть вручну загальне конфігураційне поле "WorkDir" якщо воно з'явилося там помилково та ви маєте проблеми використання тек чужих проектів цим проектом.
Нові та значно оновлені частини
- Ядро OpenSCADA: 3:9:0 => 3:10:0
- Підсистема "Транспорти" OpenSCADA: 17 => 18
- {DAQ,Protocol}.OPC_UA,libOPC_UA: 1.7 => 2.1, 1.10 => 2.1, 1.2 => 2.1
- DAQ.ModBus: 2.12 => 3.1
- DAQ.DAQGate: 2.2 => 2.3
- DAQ.Siemens: 3.5 => 3.6
- Transport.Sockets: 4.2 => 4.3
- Transport.Serial: 2.5 => 2.6
- Transport.SSL: 3.2 => 3.3
- UI.WebCfgD: 1.5 => 2.0
- UI.VCAEngine: 6.9 => 7.1
- UI.QTStarter: 5.8 => 5.9
- UI.QTCfg: 5.1 => 5.4
- UI.Vision: 7.7 => 7.13
- UI.WebVision: 5.8 => 6.2
- LibsDB.OscadaLibs.DevLib.IEC62056: 1.0 => 1.1
- LibsDB.vcaBase.Main: 2.0 => 2.1
- storeHouse: 1.0
- RootPgSo: 2.3 => 2.4
OpenSCADA бібліотеки та проекти
- LibsDB.vcaBase,AGLKS.vca: Main.RootPgSo: Доповнено щодо:
- віджету "alarms" на основі примітиву "Протокол" із можливістю ввімкнути/вимкнути;
- додання опціональної функції повернення до типового користувача після визначеного часу неактивності у атрибуті "defUser";
- перемкнено до невідносного алгоритму обчислення вертикальної позиції та висоти головної мнемосхеми.
- LibsDB.OscadaLibs: DevLib.IEC62056: Переписано у синхронний режим (запит-відповідь) для роботи декількох пристроїв на одній послідовній шині.
- LibsDB.vcaBase:
- Бібліотеку "Основна" доповнено новою сторінкою реалізації "Складу (storeHouse)".
- Main.RootPgSo: Періодичність виконання кадру піднято до 1000 мілісекунд після додання раннього опрацювання подій. Значним чином перемкнено із клавіатурних послідовностей "Ctrl+?" на "CtrlAlt+?".
- AGLKS.vca: Сторінку проекту /prj_AGLKS/pg_so/pg_4/pg_mn/pg_1 перейменовано у /prj_AGLKS/pg_so/pg_4/pg_mn/pg_CM101 на кшталт із рештою.
API
!!!!:Зміни:
- SYS: Функцію TSYS::curTime() доповнено аргументом визначення джерела годинника із використанням функції clock_gettime(). Визначення EVAL_RFlt доповнено суфіксом "f".
- Mess: Функцію перекладу TMess::translSet() доповнено аргументом "srcFltr" фільтрації за джерелами.
- Транспорти: Функцію протоколу ВВ pushLogMess() доповнено аргументами "data" та "dataDir".
Доповнення:
- Mess: Блокування даних відокремлено від блокування всіх повідомлень у dtRes.
- SYS: Функції API користувача доповнено функцією lang() швидкого отримання системної мови.
- Доповнено функцією TSYS::curTimeN().
- .,DAQ.{LogicLev,ModBus,Siemens}: Доповнено та використано глобальну постійну DAQ_APER_FRQ представлення частоти аперіодичних викликів, на кшталт f_start, періодичних процесів.
- Безпека: Об'єкт користувача доповнено функцією Користувацького API auth() для автентифікації за паролем.
- Транспорти: Вхідні та вихідні об'єкти транспортів доповнено атрибутами протоколу ВВ: "mLogLstDt", "mLogLstDtTm".
- DAQ: Об'єкт DAQ-параметру доповнено інформаційним полем мітки часу зміни із його максимальним значенням на об'єкті контролеру, за допомогою нового конфігураційного поля БД "TIMESTAMP" об'єкту параметру.
Система
- FIX:Складання:configure.ac: Версію бібліотеки ядра збільшено до 3:10:0 та версію програми збільшено до 0.9.4.
- Повідомлення вихідного тексту та документація програми:
- rom_as@oscada.org замінено на roman@oscada.org всюди у вихідних.
- Документ "Modules/OPC_UA" цілковито відревізовано для версії модулів 2.1 та перекладу.
- Вкладку "Переклади" дещо відревізовано, доповнено актуальним статусом, доповнено контекстною допомогою та менеджер перекладів доповнено щодо:
- обмеження часу формування таблиці за prmInterf_TM (7 секунд);
- конфігураційного поля пропуску кількості верхніх повідомлень;
- встановлення перекладу лише до фільтрованих джерел;
- перевірка вмісту на збіг лише для фільтрованих джерел;
- пропуск помилок відсутності джерел.
- Функцію перекладу TMess::translSet() попереджено від розповсюдження групових повідомлень, змінених не із менеджеру перекладу.
- FIX:.,BD.LDAP,Archive.{DBArch,FSArch},DAQ.{ModBus,MMS},{DAQ,Protocol}.OPC_UA,UI.Vision: Дещо очищено від попереджень складання.
- FIX: Визначення EVAL_RFlt доповнено суфіксом "f" для попередження помилкового порівняння double EVAL_RFlt зі збереженим float значенням, виправляє роботу архіватору Archive.FSArch із типами значень float у виявлені EVAL.
- FIX:Mess: Блокування даних відокремлено від блокування всіх повідомлень у dtRes для запобігання конкурентним блокуванням при активній роботі із перекладами. Атрибути mLang2CodeBase, mLang2Code перемкнено на це нове блокування.
- data/openscada-proj.in: Перемкнено у посилання вмісту Користувацької LibsDB на системні бібліотеки, зі змістом лише на читання, замість копіювання.
Збір Даних
- ModBus,Siemens: Перемкнено, у формуванні значення "f_frq", на використання інформації реального виконання завдання.
- {DAQ,Protocol}.OPC_UA.{.,libOPC_UA} : Доповнено реалізацією сервісу Publish, підтримкою шматків (CHUNKS) на клієнтській частині Збору Даних та загальним переглядом коду в процесі цього:
- КЛІЄНТ:
- додання атрибутів (елементів моніторингу) пересунено із attrPrc() безпосередньо до enable() та яка запускається при запуску об'єкту контролеру
- ... та опрацювання елементів покращено оновленням опису, прапорців та зв'язування;
- збір даних уніфіковано опрацюванням у функції параметру upVal()
- ... та запиту значень функцією об'єкту контролеру getValMIt() із підтримкою Масивів
- ... чим впритул приготовано до вбудування логічного типу параметрів;
- об'єкти параметрів Збору Даних активовано для включення інших параметрів;
- встановлення та видалення EVAL до всіх атрибутів перевірено у всіх режимах;
- структурні змінні, у оглядачі обрання DAQ-параметру, дозволені до обрання їх елементів окремо;
- розбір переліку змінних DAQ-параметрів встановлено у цілковитий розбір із пропуском порожніх рядків;
- об'єкт DAQ-контролеру доповнено закриттям сеансу та безпечного каналу при його зупинці;
- загальний статус об'єкту контролеру доповнено деталізованою інформацією щодо використаного каналу безпеки, сеансу, підписки та опрацьованими елементами моніторингу;
- блокування запиту перейменовано у resOPC.
- СЕРВЕР:
- об'єкт OPC-UA Серверу доповнено вкладкою загального статусу серверу із інформацією щодо активності каналів безпеки;
- об'єкт Вузла EndPoint доповнено загальним статусом із інформацією щодо активності сеансів та підписок, а також періодичністю і часом виконання завдання підписок.
- БІБЛІОТЕКА:
- уніфіковано у визначені типового значення часу життя каналу безпеки, який встановлено у 300000 мс;
- типовий LifeTimeCounter підписок встановлено у 2400;
- об'єкт NodeId доповнено функцією прямого порівняння operator==();
- функцію XML_N::childClear() доповнено результатом повернення того самого об'єкту XML_N для поєднання;
- функцію curTime() доповнено аргументом визначення джерела годинника із використанням функції clock_gettime();
- короткі функції доповнено str2int() та str2uint();
- деякі поля перейменовано: publInterv у publInterval, cntrLifeTime у lifetimeCnt, cntrKeepAlive у maxKeepAliveCnt, maxNotPerPubl у maxNtfPerPubl, en у publEn;
- виправлення слова "POOL" на "POLL".
- БІБЛІОТЕКА_КЛІЄНТ:
- Client::reqService() доповнено мета-командою "CloseALL" закриття поточного сеансу та каналу безпеки;
- функцію опрацювання клієнтських сервісів protIO() адаптовано до роботи у асинхронному режимі (не запит);
- функцію Client::messIO() розширено аргументом таймауту із визначенням також режиму запиту;
- запис до каналу та читання із нього відокремлено у обробці MSG пакетів;
- адаптація повідомлень безпеки до роботи зі змішаним вхідним буфером;
- переміщення основного сервісного запиту "OPN" під опрацювання повідомлень через надсилання оновлень всередині Publish активності.
- реалізовано сервіс Publish на боці клієнту:
- об'єкт "Client" доповнено реалізацією підоб'єкту "Subscr" (але зберігається у Client::SClntSess) із функціями: activate(), monitoredItemAdd() та monitoredItemDel();
- об'єкт "Client" доповнено функцією poll() із:
- уніфікацією читання значень у обох режимах Read та Publish;
- перевіркою втрати всіх Publish запитів протягом OpcUa_ClntPublishResentCntr(2) спроб-часу збереження живим;
- відновлення пулу Publish.
- об'єкт Client::Subscr::MonitItem додано як представник елементів моніторингу із доступом з під загального блокування клієнтських ресурсів;
- сервісні запити доповнено реалізацією, включно із опрацюванням відповідей: CreateSubscription, DeleteSubscriptions, CreateMonitoredItems, Publish, Poll;
- реалізовано та перевірено у підтримці безпечних політик за Publish;
- цільовий пул Publish запитів на підписку встановлено у віртуальній функції publishReqsPool() із типовим значенням 2.
- доповнено реалізацією шматків (CHUNKS) як у запитах, так і відповідях;
- цілковито відревізовано та очищено загальну функцію запиту reqService() від дублікатів аргументів та параметрів:
- доповнено відновленням сеансів при перепідключенні каналу безпеки;
- уніфіковано очищення поточного сеансу та каналу безпеки.
- об'єкт клієнту доповнено загальним блокуванням ресурсів mtxData;
- властивість повідомлення "timeoutHint" встановлено у 0 для всіх повідомлень;
- запит Read повернуто до "плаского" запиту із обмеженням лише у CHUNKS;
- помилку OpcUa_BadSecureChannelIdInvalid додано до очищення каналу безпеки;
- Client::SClntSess::{sessOpen,lstMessReq} перейменовано у {secChnlOpenTm,secLstMessReqTm}
- ... та попереджено від очищення і відновлення сеансу та каналу безпеки;
- доповнено налагоджувальними повідомленнями помилок запитів.
- БІБЛІОТЕКА_СЕРВЕР:
- серверну частину адаптовано до роботи із UAExpert 1.5 щодо: встановлення атрибуту AId_Descr DAQ-значення у тип OpcUa_LocalizedText, додання декларації цілочисельного типу OpcUa_IntAuto та OpcUa_UIntAuto;
- опрацювання підписок повернуто до їх опрацювання у окремому завдання та функції subScrCycle() щодо:
- правильного рахування всіх таймаутів для вимкнення;
- опрацювання періодичності підписки та публікації;
- перевірки стану пов'язаних сеансів та каналів безпеки щодо закриття підписок.
- але публікацію залишено на опрацювання у активності вхідного каналу та функції Server::EP::publishCall() із попередженням опрацювання Publish для помилкових та чужих Підписок, через перевірку inPrtId, sesTokId та isSecCnlAct;
- уніфікація Сеансу щодо: пов'язання сеансів із каналами безпеки переключено на один замість масиву, перевірку сеансу всіх повідомлень доповнено попередженням використання чужих підключень;
- не останні шматки пакету переключено на відправку прямо, щоб не додавати до одного TCP-пакету;
- EP::mtxData блокування переключено у PTHREAD_MUTEX_RECURSIVE;
- канали безпеки обмежено кількістю OpcUa_SecCnlLimit(10) та чергу публікацій кількістю OpcUa_ServerMaxPublishQueue(10);
- EP::secSize() перейменовано у EP::secN() та додано EP::sessN(), EP::subscrN() і chnlList();
- Server.SecCnl.{TokenId,TokenIdPrev} перейменовано у Server.SecCnl.{tokenId,tokenIdPrev}.
- ModBus: Вихідна частина RTU варіанту протоколу доповнена раннім перериванням очікування пакетів стандартних функцій [ERR,1...6,15,16], що збільшує загальну пропускну спроможність удвічі.
- ВВ параметрів Логічного Рівня увімкнено до перекладу, для не пов'язаних рядків та на кшталт до DAQ.LogicLev.
- Розбір атрибутів Збору Даних перемкнуто на використання TSYS::strLine() та TSYS::strParse(), чим дозволено символ ':' у назві та порожні рядки у тексті.
- DAQGate: Режими синхронізації доповнено режимом запобігання синхронізації загалом для об'єктів збережених у кеші, шляхом дозволу значення -1 конфігураційного поля "Період синхронізації з віддаленою станцією, секунд".
Архіви-Історія
- FIX:FSArch: Критично виправлено опрацювання файлів архіву значень, при спробі запису їх ІД до нульового рядку.
- DBArch: Архіватори повідомлень доповнено конфігураційним полем "Унікальні та недублюючі повідомлення лише за часом та категорією".
- FIX: Виправлено падіння при опрацюванні груп архіватору значень через неочищення зв'язування конфігурації полів таблиці (TConfig) під блокуванням та неблокування функції ModVArch::grpLimits() у reqRes.
Транспорти
- Протокол ВВ, у вхідній та вихідній частинах, розширено та доповнено:
- комбінуванням даних пакетів з однаковим напрямком та адресою даних протягом prmWait_TM (5 секунд);
- мікросекундну частину часу зафіксовано у 6(шістьох) символах;
- повідомлення даних доповнено символом спрямування;
- обмеженням розміру одного блоку опрацювання новим конфігураційним полем;
- значним підвищенням продуктивності, через використання передвизначеного буферу.
- FIX:Serial: Вихідний транспорт виправлено у очікуванні між запитами щодо опрацювання reqRetrMult*wCharTm як мілісекунди.
- FIX:Sockets: Виявлено помилку "Обрив каналу (32)" при запису, після від'єднання серверу, тож спроби перепідключення встановлено у 2 за (kz <= 0).
Інтерфейс Користувача
- FIX:Загальний перегляд та переробка таблиць в Qt і Web загалом та вигляду Таблиця примітиву FormEl СВУ:
- QTStarter,QTCfg,Vision: Загальний бібліотечний клас TableDelegate значним чином покращено у роботі на QTCfg та Vision:
- доповнено власними користувацькими ролями SelectRole, TextLimRole та OneLineString;
- відображення клітинок доповнено фоновим кольором через читанням-застосування загальних ролей;
- чисельні типи (ціле та реальне) доповнено примусовим центруванням;
- строкові типи доповнено опціями вирівнювання та завертанням слів із ролі Qt::TextAlignmentRole;
- доповнено підтримкою візуального обмеження довгих текстів власною роллю TextLimRole та типове значення встановлено у 300 символів через додаткове перевизначення sizeHint().
- FIX: Вигляд "Таблиця" примітиву "FormEl":
- VCAEngine,QTStarter,Vision,WebVision: Доповнено новим типом клітинки 't'-текст, переважно для можливості підтвердження редагування типу 's'-рядок натисканням Enter.
- VCAEngine,Vision,WebVision: Доповнено опцією "prec" простору стовпчика, рядка та клітинки для контролю точності реальних значень; та реалізацією атрибуту "align" стовпчика та клітинки.
- WebVision,Vision: Доповнено перемиканням таблиць у запобігання подвійному зберіганню вихідного вмісту за його розміру більш ніж 10000.
- FIX:Vision: Використання загального делегату таблиці із можливістю багаторядкового редагування.
- Вдосконалено відображення стовпців, рядків та клітинок при оновлені та загалом:
- обмеженням візуального розміру вмісту клітинки 300 символами та висоти рядків у 70% від загального розміру таблиці;
- більш точним вирівнюванням ширини стовпців;
- підлаштуванням у режимі розробки, а також при видимості вертикального заголовку;
- щільним заповненням таблиці через врахування розміру видимої смуги вертикального гортання;
- підлаштуванням лише після цілковитої зміни розміру таблиці, чим також дозволивши ручну зміну стовпців та для надання такого-правильного підлаштування завжди.
- Реалізовано "легке" опрацювання зміни ширини та оновлення:
- "легке" редагування без перепідлаштування стовпців за кожного оновлення, лише за: появи першого рядка, зміни кількості стовпців та зміни заголовку стовпця, зміни шрифту та зміни розміру;
- застосування фіксованої ширини стовпця та вирахування висоти рядків із обмеженнями незалежно від значення загального атрибуту "colsWdthFit";
- встановлення значення, рання зміна розміру та підлаштування таблиці, перенесено у простір наявності вмісту таблиці та після сортування.
- Функцію експорту під час виконання доповнено експортом виду Таблиця примітиву "FormEl" у CSV.
- WebVision:
- Вдосконалено відображення стовпців, рядків та клітинок при оновлені та загалом:
- реалізацією режиму не підлаштування (відсутність атрибуту "colsWdthFit"), з використанням режиму автоматичного розміщення таблиці для обчислення фіксованої ширини та наступного перемикання у фіксований режим розміщення таблиці;
- багаторядковим редагуванням тексту клітинок у повну ширину та висоту клітинки, із застосуванням редагування за Ctrl+Enter;
- вигляд строкових клітинок обмежено 300 символами;
- відображення логічних клітинок зображенням стану TRUE;
- клітинки таблиці, у режимі редагування, дозволено до виклику контекстного меню системи-браузеру.
- Реалізовано "легке" опрацювання зміни ширини та оновлення:
- виявляння змін таблиці та оновлення перемкнуто у режим не зберігання вихідного вмісту двічі;
- попереджено від цілковитого оновлення за модифікації атрибуту "value".
- Доповнено підтримкою сортування за стовпцями. Встановлення у сортування за першим видимим стовпчиком при ввімкнені сортування.
- WebCfgD: Розширення таблиці щодо:
- великий видимий вміст тексту обмежено 300 символами;
- строковий тип дозволено до багаторядкового редагування використовуючи TEXTAREA;
- тип даних "bool" відображено зображенням, не "On" або "Off";
- центрування вмісту логічного, чисел, часу та обрання;
- спрощення редагування вмісту таблиці для типів час, число та рядок, через видалення кнопок застосування та прокручування.
- QTStarter,QTCfg,Vision: Розпочато перенесення спільного Qt-коду Qt-модулів OpenSCADA до файлів нової бібліотеки lib_qtgen.*, яку розташовано у теці модуля QTStarter та прив'язано у всіх Qt-модулях, та це здійснено для: зовнішній icoSize(), colorAdjToBack() та TableDelegate.
- VCAEngine:
- Доповнено, та увімкнено як опція складання, щодо механізму маркування змін атрибутів без дублювань, через запит попередніх-завершених циклів, чим також запобігаючи необхідності виявлення дублікатів у візуалізаторах та зберігання великого початкового вмісту.
- Виконання проектів покращено при зміні батька опрацьовуваних сторінок на льоту.
- Виконання завдань сеансів доповнено раннім виконанням, за наявності подій.
- FIX: СВУ-стилі виправлено при доступі до порожніх полів, які не завантажуються.
- Сторінку "Діагностика" СВУ-проектів адаптовано до відображення повідомлень рівня налагоджування при ввімкнені налагодження.
- Інформацію виконання сеансу проекту доповнено реальною періодичністю, отриманою від завдання, яку також використано при формуванні значення атрибуту "f_frq" процедури.
- Vision: Діалоги властивостей "Віджети" та "Проекти / Бібліотеки віджетів" доповнено власним рядком статусу та кнопкою виклику контекстної документації. Віджети TextEdit перемкнуто на власний рядок статусу діалогів властивостей, щодо позиції курсору та що вимкнено у Вигулькній Підказці. Віджет редагування тексту коду діалогу властивостей "Віджети" доповнено відновленням позиції курсору після застосування або скасування.
- FIX:WebVision: Доповнено виявленням зникнення сеансу виконання проекту та поверненням помилки, у загальному запиті "pgOpenList", та скидання лічильнику обчислень "tmCnt".
- Клавіатурний фокус та події значним чином покращено щодо гарантування роботи цього загалом через:
- встановлення атрибуту "tabindex" для всіх активних віджетів та специфічно для FormEl — безпосередньо у елементи форми;
- доповнення обчисленням числа "tabindex" як унікальний для цілого інтерфейсу, чим запобігаючи стрибкам фокусу;
- опрацювання події onfocus щодо встановлення власного фокусу у setFocus();
- вигляд Кнопка примітиву FormEl доповнено опрацюванням клавіатурних подій натискання та відпускання за клавішами Space та Enter;
- примітив Діаграма спрощено через видалення зайвого елементу тегу A;
- FIX: Виправлено перемикання фокусу при клацанні на кнопках із зображеннями.
- FIX: Виправлено перевірку видалених віджетів для всіх та головної сторінки.
- FIX: Виправлено нарешті множення зайвих DIV елементів при зміні сторінки у контейнері сторінок.
- FIX: Запобігання зациклюванню за наявності Web-сеансу, але відсутності відповідного СВУ-сеансу.
- FIX:WebCfgD: Цілковито відревізовано та розширено щодо:
- перенесення всіх дій внутрішніх інструментів до реалізації кнопками та розмір панелі інструментів встановлено із 25 в 30 пікселів;
- видалення фільтрації-зміни розміру зображень кнопок інструментів на боці серверу;
- встановлення відстані між іконкою сторінки та заголовком у 10 пікселів;
- цілковитого оновлення контрольованої сторінки після зміни розміру вікна;
- розширення поля загального редагування тексту TEXTAREA застосуванням та скасуванням із клавіатури;
- пов'язання функції оновлення хостів до подвійного клацання мишею на загальному просторі області дерева;
- FIX: виправлення функції оновлення хостів щодо виявлення елементів дубльованих хостів;
- FIX: примусового позначення актуальних-обраних елементів у дереві контролю після його розгортання;
- видалення nodeText() та setNodeText() через безпосереднє використання "innerText" та "textContent".