Repository navigation
uk Architecture
English · Deutsch · Français · Italiano · Русский · Українська
Цей розділ дає новому розробникові швидке розуміння програми: основні модулі, як інтерфейс звертається до бекенду, межі потоків і процесів та як рухаються дані й команди. Кожен згаданий клас посилається на свою сторінку в OpcUaManager API Reference.
Застосунок збирається з трьох статичних бібліотек, двох виконуваних файлів і двох QML-модулів (див. Структура проєкту):
- OpcUaCore — ядро OPC UA-клієнта, item-моделі, персистентність і шар клієнтського проєкту. Пов'язує Qt Core, Network, OpcUa та Sql.
-
ServerProjectCore — доменна модель серверного проєкту (
.uaserver), серіалізатор, валідатор та ввід-вивід NodeSet2. Пов'язує лише Qt Core, щоб автономне середовище виконання могло повторно використовувати її без клієнтського стека. - OpcUaQmlApi — фасади, звернені до QML. Залежить від OpcUaCore та ServerProjectCore.
-
appOpcUaManager — виконуваний файл GUI (
app/). -
OpcUaServerRuntime — автономний виконуваний файл сервера на open62541 (
runtime/). - QML-модулі OpcUaManager (екрани) та Base (повторно використовувані елементи керування).
C++-бекенд надається QML через контекстні властивості, а не через зареєстровані QML-типи. Рушій застосунку встановлює їх у кореневому контексті:
-
cppManagerOpcUa→OpcUaManager(операції клієнта та моделі) -
cppServerStudio→ServerStudio(проєктування сервера та керування середовищем виконання) -
cppProjectManager→ фасад клієнтського проєкту -
cppAppEngine→AppEngine(сервіси застосунку) -
cppAppInfo→AppInfo,cppLocale→LocaleController,cppLicenseModel→LicenseModel,cppUpdate→UpdateController
Оскільки контекстні властивості не потребують імпорту, повторно використовувані компоненти Base лишаються вільними від будь-якого C++-імпорту; лише шар застосунку пов'язує їх із фасадами. У цьому коді навмисно немає QML-модулів Cpp.*.
Клієнт розділений на два потоки, щоб інтерфейс лишався чутливим:
-
OpcUaManagerпрацює в потоці GUI. Він володіє моделями (OpcUaModel,DataAccessModel,AttributesModel,TrendModel) і є єдиним об'єктом, з яким говорить QML. -
OpcUaServiceпрацює в окремому робочому потоці, що його створюєAppEngine. Він володієQOpcUaClientі виконує виявлення, підключення/відключення, перегляд, читання, запис і підписки.
Обидва взаємодіють через сигнали, поставлені в чергу, тому робота з мережею та PKI ніколи не блокує відмальовування. Декодування структурованих (у стилі CODESYS) значень виконує помічник, що переглядає піддерево екземпляра.
Спроєктований сервер працює як окремий процес, а не всередині GUI:
-
ServerStudio(GUI) володіє серверним проєктом у пам'яті та моделями редагування і керує середовищем виконання. -
ServerRuntimeControllerволодієQProcess, що запускає OpcUaServerRuntime. Середовище виконання вбудовує open62541, будує адресний простір із проєкту, застосовує безпеку, симулює значення та виконує правила поведінки. - Обидва взаємодіють за простим контрактом: середовище виконання друкує рядок
READYзі своєю кінцевою точкою в stdout і приймаєSTOPзі stdin. Окремий побічний канал діагностикиQLocalSocketпередає живий JSON про сеанси та час роботи.
Open in Client підключає вбудований клієнт до працюючого локального сервера, передаючи його URL виявлення до OpcUaManager.
- QML викликає метод у
cppManagerOpcUa(OpcUaManager). -
OpcUaManagerпересилає запит доOpcUaServiceчерез сигнал, поставлений у чергу. -
OpcUaServiceвиконує виклик OPC UA в робочому потоці. - Результат повертається як сигнал у черзі;
OpcUaManagerоновлює відповідну модель (OpcUaModel/DataAccessModel), до якої прив'язаний QML.
-
AppPathsвирішує питання про встановлені проти портативних розташування та заповнює записуване сховище під час першого запуску. - Налаштування розташовані в INI-сховищі; клієнтські проєкти (
.uaproj) та серверні проєкти (.uaserver) — це JSON, що записується їхніми серіалізаторами атомарно. - Відстежувані вузли зберігаються в базі даних SQLite (
NodeDatabase). -
LocaleControllerвстановлює та перемикає наживо мову інтерфейсу.
OpcUaManager 1.3.1 · generated from doc/manual/ · Project home