|
Серія значних вдосконалень модуля {DAQ,Protocol}.OPC_UA
|
|
DAQ.OPC-UA
{DAQ,Protocol}.OPC_UA доповнено реалізацією сервісу Publish, підтримкою шматків (CHUNKS) на клієнтській частині Збору Даних та загальним переглядом коду в процесі цього.
Після випуску 0.9.4 LTS його вже доповнено підтримкою Логічного типу DAQ-Параметрів та Стандартний тип DAQ-Параметрів доповнено режимом не запиту цільових даних на сервері та прямими ІД і назвою атрибутів.
Спонсорування, роботу з UAExpert 1.5, реалізації клієнтського Publish та Chunks, значної уніфікації, підтримки Логічного Рівня та цілковитої ревізії документу на 10.4 ЛД: Фонд
КЛІЄНТ: - доповнено підтримкою Логічного типу DAQ-Параметрів;
- Стандартний тип DAQ-Параметрів доповнено режимом не запиту цільових даних на сервері та прямими ІД і назвою атрибутів;
- додання атрибутів (елементів моніторингу) пересунено із 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}.
|
|
|