Architettura OPC UA: Modello informativo, sicurezza, sessioni e trasporto
OPC UA (IEC 62541) è uno standard in 13 parti che definisce un'architettura orientata ai servizi, indipendente dalla piattaforma, per la comunicazione nell'automazione industriale e negli edifici. A differenza del suo predecessore OPC Classic (che era solo Windows COM/DCOM), OPC UA funziona su qualsiasi sistema operativo, incorpora un modello di sicurezza completo e fornisce un modello informativo unificato che rende ogni server auto-descrittivo – eliminando la necessità di dizionari di dati esterni quando si integrano piattaforme BMS, SCADA e IoT.
Struttura dello standard IEC 62541
IEC 62541 è composta da 13 parti numerate. Le parti 1–7 definiscono l'architettura principale; le parti 8–14 coprono mapping, sicurezza e profili. Per gli integratori di automazione degli edifici, le parti più rilevanti sono 1 (Concetti), 3 (Modello dello spazio degli indirizzi), 4 (Servizi), 6 (Mapping — codifica e trasporto), 7 (Profili) e la specifica complementare IEC 62541-100 (OPC UA per edifici).
| Parte | Titolo | Rilevanza |
|---|---|---|
| IEC 62541-1 | Concetti e panoramica | Architettura fondamentale, modello di servizio, concetto di modello informativo |
| IEC 62541-3 | Modello dello spazio degli indirizzi | Tipi NodeClass, riferimenti, attributi — la spina dorsale del modello dati |
| IEC 62541-4 | Servizi | Set di servizi Read, Write, Browse, Subscribe, Call — tutte le API del server |
| IEC 62541-6 | Mapping | Codifica binaria (UA Binary), codifica XML, trasporto opc.tcp, HTTPS, WebSockets |
| IEC 62541-7 | Profili | Profili server, client e trasporto per test di conformità |
| IEC 62541-12 | Scoperta e servizi globali | Server di scoperta locale (LDS), Server di scoperta globale (GDS) per la gestione dei certificati |
| IEC 62541-100 | OPC UA per edifici | Modello informativo mappato IFC per spazi, zone, HVAC, misurazione energia |
Modello informativo: tipi NodeClass e riferimenti
Ogni dato in un server OPC UA è rappresentato come un nodo nello spazio degli indirizzi. I nodi hanno un attributo NodeClass che ne definisce il ruolo. I nodi sono collegati tra loro da riferimenti tipizzati – ad esempio, HasComponent, HasProperty, Organizes, HasSubtype. Questo crea un grafo orientato che i client possono esplorare per scoprire il contenuto del server senza conoscere preventivamente la struttura dei dati.
| NodeClass | Scopo | Esempio nel BMS |
|---|---|---|
| Oggetto | Contenitore che raggruppa nodi correlati; nessun valore proprio | Oggetto AHU_01 che raggruppa tutte le variabili dell'UTA |
| Variabile | Contiene un valore tipizzato; leggibile e opzionalmente scrivibile | SupplyAirTemp (Float, °C), FanSpeed (UInt16, RPM) |
| Metodo | Funzione richiamabile; argomenti di input e output | ResetAlarm(), SetOperatingMode(mode: Int32) |
| Vista | Sottoinsieme denominato dello spazio degli indirizzi per navigazione filtrata | EnergyMeteringView che mostra solo nodi kWh |
| Tipo di dato | Definisce il tipo scalare o strutturato utilizzato dalle variabili | EnumHvacMode {Auto=0, Heating=1, Cooling=2} |
| ObjectType | Modello per nodi oggetto (come una definizione di classe) | HVACUnitType con componenti standard |
| VariableType | Modello per nodi variabile con attributi predefiniti | AnalogItemType con proprietà EngineeringUnits |
| ReferenceType | Definisce la semantica di un riferimento tra nodi | HasComponent, HasProperty, Organizes |
Spazio degli indirizzi: namespace e albero navigabile
Lo spazio degli indirizzi è strutturato come un albero navigabile. Ogni nodo è identificato da un NodeId composto da un indice di namespace e un identificatore (numerico, stringa o GUID). Il namespace 0 (ns=0) è sempre il namespace standard OPC UA contenente i tipi incorporati e i nodi standard. I namespace 1+ sono assegnati dal server per contenuti specifici del fornitore o dell'applicazione. I client scoprono la tabella dei namespace tramite la chiamata al servizio GetNamespaceArray.
Spazio degli indirizzi OPC UA — esempio BMS
Objects (ns=0;i=85) ← OPC UA standard root
├── Server (ns=0;i=2253) ← always present, server diagnostics
└── Building_01 (ns=1;s=Building_01) ← application namespace
├── Floor_02 (ns=1;s=Building_01/Floor_02)
│ ├── AHU_01 (ns=1;s=AHU_01) [Object]
│ │ ├── SupplyAirTemperature (ns=1;s=AHU_01.SAT) [Variable, Float]
│ │ │ ├── EngineeringUnits [Property: "°C"]
│ │ │ ├── EURange [Property: Low=0, High=60]
│ │ │ └── StatusCode [Property: Good/Bad/Uncertain]
│ │ ├── FanSpeed (ns=1;s=AHU_01.FanRPM) [Variable, UInt16]
│ │ ├── DamperPosition (ns=1;s=AHU_01.Damper) [Variable, Byte, 0–100%]
│ │ └── ResetAlarm (ns=1;s=AHU_01.ResetAlarm) [Method]
│ └── VAV_Zone_2A (ns=1;s=VAV_2A) [Object]
│ ├── RoomTemperature (ns=1;s=VAV_2A.RoomTemp) [Variable, Float]
│ └── Setpoint (ns=1;s=VAV_2A.SP) [Variable, Float, writable]
└── Meters (ns=1;s=Meters)
└── Main_kWh (ns=1;s=Meter.kWh) [Variable, Double]I client navigano dalla radice Objects utilizzando il servizio Browse, seguendo i riferimenti gerarchici (HasComponent, Organizes, HasProperty) per scoprire i nodi. Il servizio TranslateBrowsePathsToNodeIds consente ai client di saltare direttamente a un percorso noto senza attraversare l'intero albero — utile per il polling sensibile alle prestazioni di variabili note.
Opzioni di trasporto
OPC UA definisce tre binding di trasporto. La scelta influisce su latenza, attraversamento firewall e overhead del protocollo. OPC UA Binary su TCP è il default per l'integrazione BMS a livello di impianto; HTTPS e WebSocket sono utilizzati per interfacce cloud o accessibili dal browser.
| Trasporto | Prefisso URI | Porta predefinita | Overhead | Note |
|---|---|---|---|---|
| OPC UA TCP | opc.tcp:// | 4840 | Il più basso – framing binario | Ottimo per l'officina; connessione TCP persistente; non amico dei firewall |
| OPC UA HTTPS | opc.https:// | 443 | Medio — HTTP/1.1 + TLS | Amico dei firewall; può attraversare proxy; latenza più alta per richiesta |
| OPC UA WebSockets | opc.wss:// | 443 | Basso — framing WebSocket | Compatibile con browser; persistente; utilizzato per Web SCADA e gateway cloud |
Raccomandazione per il livello di stabilimento: Utilizzare sempre opc.tcp:// all'interno di una LAN dell'edificio o VLAN OT. La connessione TCP persistente elimina il sovraccarico dell'handshake TLS per richiesta e offre la latenza di notifica di sottoscrizione più bassa. Riservare HTTPS per integrazioni cross-site o cloud dove la porta firewall 4840 non può essere aperta.
Modalità di sicurezza e politiche di sicurezza
La sicurezza OPC UA viene negoziata a livello di Secure Channel prima dello scambio di messaggi applicativi. Il server pubblica i suoi EndpointDescriptions supportati (combinazioni di MessageSecurityMode e SecurityPolicyUri). Il client ne seleziona uno all'apertura di una connessione. Non utilizzare mai None in un ambiente di produzione – trasmette tutti i dati in chiaro senza protezione dell'integrità.
| MessageSecurityMode | Protezione | Caso d'uso |
|---|---|---|
| Nessuno | Nessuna firma, nessuna crittografia | Solo laboratorio/sviluppo – mai in produzione |
| Firma | Integrità HMAC dei messaggi; nessuna crittografia del payload | SCADA critico per le prestazioni su LAN chiusa affidabile |
| FirmaECrittografa | HMAC + crittografia AES di tutti i payload dei messaggi | Standard per tutte le integrazioni BMS e cloud |
SecurityPolicyUri seleziona gli algoritmi crittografici. Le politiche attualmente raccomandate (secondo IEC 62541-7:2022) sono:
| SecurityPolicyUri | Asimmetrico (scambio di chiavi) | Simmetrico (dati) | Stato |
|---|---|---|---|
| Basic128Rsa15 | RSA-PKCS1-v1.5 / 1024 bit | AES-128-CBC | Deprecato — non utilizzare |
| Basic256 | RSA-OAEP / 1024 bit | AES-256-CBC | Deprecato — non utilizzare |
| Basic256Sha256 | RSA-OAEP / 2048 bit + SHA-256 | AES-256-CBC + SHA-256 HMAC | Corrente – ampiamente supportata |
| Aes128Sha256RsaOaep | RSA-OAEP / 2048 bit + SHA-256 | AES-128-CBC + SHA-256 HMAC | Corrente – carico CPU inferiore |
| Aes256Sha256RsaPss | RSA-PSS / 2048 bit + SHA-256 | AES-256-CBC + SHA-256 HMAC | Consigliata – la più forte, da usare dove supportata |
Avviso di deprecazione: Basic128Rsa15 e Basic256 utilizzano chiavi RSA a 1024 bit e SHA-1, entrambi considerati crittograficamente deboli. IEC 62541-7:2022 li segna come deprecati. Kepware KEPServerEX 6.x e Siemens DESIGO CC supportano Basic256Sha256 e Aes256Sha256RsaPss. Disabilitare le politiche deprecate nella configurazione del server di produzione per prevenire attacchi di downgrade.
Metodi di autenticazione
L'autenticazione viene eseguita a livello di sessione (sopra il canale sicuro). OPC UA definisce tre tipi di token di identità ActivateSession. L'autenticazione basata su certificato è la più sicura ed è richiesta per gli standard di sicurezza industriale come IEC 62443-3-3 Security Level 2.
| Tipo di token | Descrizione | Raccomandazione |
|---|---|---|
| AnonymousIdentityToken | Nessuna credenziale – qualsiasi client può creare una sessione | Disabilitare in produzione; accettabile solo per dashboard pubbliche di sola lettura |
| UserNameIdentityToken | Nome utente e password; password crittografata con chiave pubblica del server | Accettabile per accesso operatore; utilizzare con trasporto Sign+Encrypt |
| X509IdentityToken | Il client presenta un certificato X.509 valido; il server lo convalida rispetto alla lista di fiducia | Richiesto per integrazione macchina-macchina e conformità IEC 62443 SL-2 |
Sessioni e sottoscrizioni
Una sessione viene stabilita sul canale sicuro dopo l'autenticazione. Le sessioni hanno un RequestedSessionTimeout (tipicamente 60–3600 secondi); se il client non invia un keep-alive prima della scadenza, il server elimina la sessione e tutte le sue sottoscrizioni. I client dovrebbero gestire la riconnessione con ripristino o trasferimento della sessione.
Le sottoscrizioni sono il meccanismo principale per il monitoraggio efficiente dei dati. Invece di interrogare ripetutamente le variabili (che genera traffico inutile), i client creano una sottoscrizione con un PublishingInterval e aggiungono MonitoredItems. Il server campiona ogni MonitoredItem all'intervallo SamplingInterval e accoda le modifiche dei valori; quando scatta il PublishingInterval, tutte le notifiche in coda vengono inviate in un unico messaggio PublishResponse.
Parametri della sottoscrizione — campi chiave
CreateSubscription request:
RequestedPublishingInterval: 1000 // ms — how often server sends Publish
RequestedMaxKeepAliveCount: 10 // Publish cycles before keep-alive sent
RequestedLifetimeCount: 30 // LifetimeCount × PublishingInterval = session timeout
MaxNotificationsPerPublish: 1000 // cap notifications per PublishResponse
PublishingEnabled: true
MonitoredItem parameters:
SamplingInterval: 500 // ms — server samples item at this rate
// must be ≥ server MinSupportedSampleRate
QueueSize: 10 // buffer for overrun; 1 = last value only
DiscardOldest: true // discard oldest on queue overflow
DeadbandType: None / Absolute / Percent
DeadbandValue: 0.5 // Absolute: only report if change > 0.5 units
// Percent: only report if change > 0.5% of EURangeFiltro deadband per sensori HVAC: Impostare un deadband assoluto di 0,2–0,5°C sulle variabili di temperatura impedisce al server di inondare la sottoscrizione con aggiornamenti banali dovuti al rumore. Per i contatori di energia, è tipico un deadband percentuale dell'1% sui contatori kWh. Il filtraggio deadband avviene lato server, riducendo sia il carico della CPU che il traffico di rete.
Specifiche companion OPC UA
Le specifiche companion estendono lo standard base OPC UA con modelli informativi specifici del dominio. Definiscono ObjectTypes, VariableTypes e URI di namespace standard in modo che dispositivi di diversi produttori espongano i dati in una struttura coerente e interoperabile. Gli ingegneri di automazione degli edifici dovrebbero conoscere le seguenti specifiche companion:
| Specifica | Ambito di applicazione | Tipi di oggetti chiave |
|---|---|---|
| IEC 62541-100 (OPC UA per edifici) | Automazione degli edifici: spazi, zone, apparecchiature, misurazione dell'energia | BuildingType, SpaceType, HVACSystemType, EnergyMeterType |
| OPC UA per FDI (Integrazione dei dispositivi di campo) | Dispositivi di campo: sensori, attuatori, strumenti di processo | DeviceType, FunctionBlockType, ParameterType |
| OPC UA per PLCopen | Elementi del programma PLC: blocchi funzione, allarmi, task | FunctionBlockType, AlarmType, TaskType |
| OPC UA per I4.0 Asset Administration Shell | Gemello digitale: metadati dell'asset, sottomodelli, proprietà | AssetAdministrationShellType, SubmodelType |
| OPC UA per dispositivi (DI) | Informazioni di base sui dispositivi hardware | DeviceType, ComponentType, SoftwareType |
Hai bisogno di una configurazione del server OPC UA per il tuo progetto BMS?
Configuriamo e proteggiamo server OPC UA su Siemens DESIGO CC, Beckhoff TwinCAT e Kepware KEPServerEX – inclusa la gestione dei certificati, l'indurimento delle policy di sicurezza e la messa a punto delle sottoscrizioni per distribuzioni di sensori ad alta densità.
Richiedi un preventivo →