Repository navigation
it Architecture
English · Deutsch · Français · Italiano · Русский · Українська
Questo capitolo offre a un nuovo sviluppatore un rapido modello mentale del programma: i moduli principali, il modo in cui l’interfaccia raggiunge il backend, i confini di thread e processo e come fluiscono dati e comandi. Ogni classe nominata rimanda alla sua pagina nel OpcUaManager API Reference.
L’applicazione è costruita a partire da tre librerie statiche, due eseguibili e due moduli QML (vedi Struttura del progetto):
- OpcUaCore — il nucleo del client OPC UA, i modelli di elementi, la persistenza e il livello del progetto client. Collega Qt Core, Network, OpcUa e Sql.
-
ServerProjectCore — il modello di dominio del progetto server (
.uaserver), il serializzatore, il validatore e l’I/O NodeSet2. Collega solo Qt Core affinché il runtime headless possa riutilizzarlo senza lo stack client. - OpcUaQmlApi — le facciate rivolte a QML. Dipende da OpcUaCore e ServerProjectCore.
-
appOpcUaManager — l’eseguibile dell’interfaccia (
app/). -
OpcUaServerRuntime — l’eseguibile server open62541 headless (
runtime/). - i moduli QML OpcUaManager (schermate) e Base (controlli riutilizzabili).
Il backend C++ è esposto a QML tramite proprietà di contesto, non tramite tipi QML registrati. Il motore dell’applicazione le imposta sul contesto radice:
-
cppManagerOpcUa→OpcUaManager(operazioni client e modelli) -
cppServerStudio→ServerStudio(progettazione del server e controllo del runtime) -
cppProjectManager→ la facciata del progetto client -
cppAppEngine→AppEngine(servizi dell’applicazione) -
cppAppInfo→AppInfo,cppLocale→LocaleController,cppLicenseModel→LicenseModel,cppUpdate→UpdateController
Poiché le proprietà di contesto non richiedono alcun import, i componenti riutilizzabili Base restano privi di qualsiasi import C++; solo il livello applicativo li collega alle facciate. In questo codice sorgente non esistono deliberatamente moduli QML Cpp.*.
Il client è suddiviso su due thread per mantenere reattiva l’interfaccia:
-
OpcUaManagerviene eseguito sul thread dell’interfaccia. Possiede i modelli (OpcUaModel,DataAccessModel,AttributesModel,TrendModel) ed è l’unico oggetto con cui QML dialoga. -
OpcUaServiceviene eseguito su un thread di lavoro dedicato creato daAppEngine. Possiede ilQOpcUaCliented esegue discovery, connessione/disconnessione, navigazione, letture, scritture e sottoscrizioni.
I due comunicano tramite segnali in coda, così il lavoro rivolto a rete e PKI non blocca mai il rendering. La decodifica dei valori strutturati (in stile CODESYS) è gestita da un helper che esplora il sottoalbero di istanza.
Il server progettato viene eseguito come processo separato, non all’interno dell’interfaccia:
-
ServerStudio(interfaccia) possiede il progetto server in memoria e i modelli di editing e pilota il runtime. -
ServerRuntimeControllerpossiede unQProcessche esegue OpcUaServerRuntime. Il runtime integra open62541, costruisce lo spazio degli indirizzi dal progetto, applica la sicurezza, simula i valori ed esegue regole di comportamento. - I due comunicano tramite un contratto semplice: il runtime stampa una riga
READYcon il proprio endpoint su stdout e accettaSTOPsu stdin. Un canale laterale di diagnosticaQLocalSocketseparato trasmette in streaming il JSON di sessione/tempo di attività in tempo reale.
Open in Client connette il client integrato al server locale in esecuzione passando il suo URL di discovery a OpcUaManager.
- QML chiama un metodo su
cppManagerOpcUa(OpcUaManager). -
OpcUaManagerinoltra la richiesta aOpcUaServicetramite un segnale in coda. -
OpcUaServiceesegue la chiamata OPC UA sul thread di lavoro. - Il risultato torna come segnale in coda;
OpcUaManageraggiorna il modello interessato (OpcUaModel/DataAccessModel), a cui QML è collegato.
-
AppPathsdecide le posizioni installato/portable e inizializza l’archiviazione scrivibile alla prima esecuzione. - Le impostazioni risiedono in un archivio INI; i progetti client (
.uaproj) e i progetti server (.uaserver) sono in JSON, scritti in modo atomico dai loro serializzatori. - I nodi monitorati sono conservati in un database SQLite (
NodeDatabase). -
LocaleControllerinstalla e cambia in tempo reale la lingua dell’interfaccia.
OpcUaManager 1.3.1 · generated from doc/manual/ · Project home