ADR-001 — OPC UA come standard di interfaccia impianto ⇄ twin¶
Stato: accettato (2026-07-10, decisione del founder). Ambito: tutte le interfacce fra impianto (virtuale o reale), controllori di cella, SCADA/HMI e ingestione dati del closed-loop.
Decisione¶
Ogni scambio impianto⇄twin passa per OPC UA. Il namespace è definito in un solo posto
(digital_twin/plc/contract.py) e vale identico per il mondo virtuale e per quello reale.
Motivazioni¶
- Simmetria virtuale/reale — il gemello espone lo stesso contratto che esporrà l'impianto: il ramo top-down (ingestione IoT → ricalibrazione) si sviluppa e si collauda contro il virtuale prima che l'impianto esista; poi si cambia endpoint, non architettura.
- Lingua franca industriale — parlano OPC UA: PLC/soft-PLC (Siemens PLCSIM Advanced, Beckhoff TwinCAT, CODESYS, OpenPLC), SCADA (FUXA, Ignition), Omniverse/Isaac (connettore), storici di fabbrica. Nessun adattatore proprietario nostro.
- Modello informativo tipizzato — nodi con tipi/gerarchia (non byte grezzi): il contratto è auto-documentante e versionabile in git.
Regole del contratto¶
Sensors/*scrive solo l'impianto;Actuators/*scrive solo il controllore;Control/*= telemetria del controllore (ResetCmd: scritto da HMI, consumato dal controllore);Test/*esiste solo nel mondo virtuale (fault injection).- Tempo scalato: il virtuale espone
SimTime(minuti simulati); i timer dei controllori contano su quel clock (principio del virtual-time-sync). Sull'impianto realeSimTime= wall clock. - Evoluzione: aggiunte retro-compatibili libere; rinomini/rimozioni = nuova versione del namespace.
Sicurezza (esplicitamente rimandata)¶
Prototipo: endpoint locale non cifrato. Prima di qualsiasi esposizione di rete: certificati + utenti/ruoli OPC UA, e l'endpoint mai pubblico (VPN/rete di impianto). Da riaprire in fase deploy.
Conseguenze¶
- Prima implementazione:
digital_twin/plc/(cella pressa: impianto server + PLC MIL client, collaudo con fault injection — PASS). - Un futuro SCADA web (es. FUXA/Grafana) si aggancia allo stesso endpoint senza codice nostro.
- Alternative valutate: MQTT (ottimo transport, ma senza modello informativo → eventualmente come complemento per telemetria leggera), ROS 2 (per la robotica in Isaac, non per l'I/O di cella), API proprietarie dei singoli emulatori (lock-in).