Sviluppo di un sistema SCADA custom in .NET - ALTEN Italy

Sviluppo di un sistema SCADA custom in .NET

Scopo del progetto

ALTEN ha portato a termine un progetto di R&D per sviluppare un sistema di controllo custom per impianti fotovoltaici, basato su un approccio Framework .NET, con la massima configurabilità come obiettivo base.

.NET è una ambiente di sviluppo software che permette la creazione di applicazione Desktop e Web ad alto livello di prestazioni.

L’applicazione sviluppata appartiene alla categoria Desktop Windows WPF (Windows Presentation Foundation). Per la logica di comunicazione BackEnd, è stato impiegato il linguaggio C#, mentre per la realizzazione dell’interfaccia utente HMI si è utilizzato XAML (eXtensible Application Markup Language).

Lo scambio di dati tra il sistema e i dispositivi di campo è stato implementato tramite un sistema di comunicazione basato sul protocollo OPC UA client-server. Questo protocollo rappresenta un insieme di standard aperti progettati per facilitare la comunicazione tra sistemi di automazione industriale e dispositivi di campo, con l’obiettivo principale di assicurare la compatibilità e l’interoperabilità tra diversi sistemi, promuovendo una comunicazione efficiente e affidabile.

In particolare, per simulare la comunicazione con i nodi di campo, si fa uso del server di simulazione Prosys OPC-UA.

Architettura e funzionamento dell’applicazione

Lettura dei dati dal server OPC

La gestione dei dati avviene attraverso l’utilizzo estensivo di eventi e asincronicità.

Durante la fase di inizializzazione, l’applicazione legge i nodi di interesse da un file di configurazione XML, creando dinamicamente liste di eventi pronti per essere richiamati durante l’esecuzione. 

Per rendere la lettura dei dati efficiente, l’applicazione impiega threads in parallelo, che periodicamente leggono i valori dei nodi di comunicazione dal server. Quando avviene la lettura di un nodo, un evento viene generato, successivamente viene catturato in varie parti del programma attraverso Task asincroni in ascolto. L’utilizzo del Dispatcher è infine fondamentale per aggiornare in modo efficiente l’interfaccia grafica, garantendo una risposta fluida e reattiva.

Questo approccio permette una lettura continuativa e non bloccante anche in situazioni di errore di comunicazione con uno dei nodi. 

Tipologie di Utente

L’applicazione permette il login a 3 tipologie di utenti con differenti permessi:

  1. User (Visualizzazione di base):
    • Accesso limitato alle funzionalità di visualizzazione di base.
    • Capacità di monitorare lo stato generale del sistema fotovoltaico.
    • Nessuna autorizzazione per eseguire azioni avanzate o modifiche.
  2. Operator (Visualizzazione + Conferma ACK):
    • Accesso alle funzionalità di visualizzazione estese.
    • Possibilità di confermare allarmi e notifiche (ACKnowledge).
    • Capacità di intervenire in modo limitato per gestire situazioni critiche.
  3. Supervisor (Visualizzazione avanzata):
    • Privilegi di accesso avanzati per una visione completa del sistema.
    • Autorizzazione per eseguire azioni avanzate come la gestione delle risorse e la configurazione di nuovi pannelli o inverter.
    • Possibilità di analizzare dettagli specifici del sistema fotovoltaico.
    • Capacità di supervisionare e coordinare attività a livello più ampio.

Gestione degli allarmi

L’applicazione consente la gestione degli allarmi di campo. Ogni allarme può trovarsi in uno dei due stati: ACK o UNACK. Quando un allarme è in stato UNACK, esso lampeggia, indicando che l’operatore non ha ancora preso visione dell’evento. Una volta che l’allarme è stato riconosciuto e preso in considerazione dall’operatore, passa allo stato ACK, cessando il lampeggio e indicando che è stato visionato.

Questo meccanismo di gestione degli allarmi contribuisce a fornire un feedback visivo immediato agli operatori sullo stato corrente degli allarmi di campo. 

Gli allarmi si dividono in:

  • Superato limite potenza: Indica che la produzione di energia ha superato un livello predefinito.
  • Pannello sporco: segnala la presenza di sporcizia sui pannelli solari, compromettendo l’efficienza.
  • Sezionatore aperto: avverte che l’interruttore di sezionamento, necessario per la sicurezza, è aperto.
  • Basso irraggiamento: indica una radiazione solare insufficiente
  • Rischio neve: avviso relativo a condizioni meteorologiche nevose che potrebbero impattare sul funzionamento dell’impianto
  • Rischio grandine: Avviso di possibili grandinate che potrebbero danneggiare i pannelli solari.

Gestione DB e storici

I dati delle grandezze campionate vengono esaminati dall’applicazione nel backend C#. Vengono eseguiti calcoli sui dati per generare indici di produzione, come la Performance Ratio %, e poi archiviati su SQL Server. Questo processo consente un accesso efficiente e ben organizzato alle informazioni. Grazie all’utilizzo di librerie C#, è possibile gestire in modo flessibile la lettura, la scrittura e l’interrogazione del database.

Vista degli storici

Gli utenti possono visualizzare i dati storici attraverso grafici costruiti mediante la dll esterna OxyPlot, ottenendo una rappresentazione visiva dei trend nel tempo. 

Configurazione a Run Time

L’applicazione consente di aggiornare dinamicamente il numero di pannelli e inverter durante l’esecuzione senza la necessità di mettere l’applicazione off-line come succede nella maggior parte dei software commerciali. Gli indirizzi di comunicazione dei nodi di campo sono memorizzati in sottocartelle attraverso file XML. Se vengono installati nuovi pannelli nell’impianto, il Supervisor SCADA può autenticarsi e aggiornare il software per includere i nuovi nodi creati.

Per effettuare l’aggiornamento, il supervisor carica il file di configurazione specifico nella zona designata dell’applicazione. Una volta caricato, il file viene scomposto e le informazioni aggiunte si integrano con quelle già esistenti. Dopo l’aggiornamento della sottocartella dei file, l’applicazione viene reinizializzata, l’interfaccia grafica viene aggiornata e si è pronti a ricevere i nuovi dati dai pannelli appena installati.

Interfacce utente

L’applicazione si apre con una mappa geografica dove è possibile scegliere l’impianto di interesse da analizzare.

Riusabilità dei componenti WPF 

I componenti dell’applicazione WPF possono essere esportati e riutilizzati sotto forma di librerie DLL esterne, qualsiasi altra applicazione che supporta .NET può utilizzare queste DLL come componenti grafici o logici aggiuntivi, diminuendo in maniera drastica il tempo di sviluppo.

Tecnica di sviluppo software

Un design pattern di codice è una soluzione generale e riutilizzabile a un problema ricorrente nell’ambito del design del software.
Per la realizzazione del progetto sono stati utilizzati, in combinazione, due design pattern: MVP e Singleton.

MVP è un design pattern che permette di separare il codice dell’interfaccia grafica.

(View) dalla logica di business (Model) e dalla gestione degli eventi (Presenter). In particolare, l’utilizzo di questo pattern in WPF C# ha numerosi vantaggi, consentendo di scrivere codice più modulare e testabile.

Il pattern Singleton è un design pattern che assicura l’esistenza di una sola istanza di una classe e fornisce un punto di accesso globale a tale istanza. Le classi ad adeguarsi a tale pattern sono state quelle classi che dovevano essere richiamate frequentemente da diverse parti del codice, avere un’unica istanza della classe genera un minor impiego di risorse.

Vantaggi della soluzione proposta

  • Personalizzazione: HMI avanzato e migliaia di librerie open source
  • Basso effort riguardo system integrator: Riduzione dello sforzo di integrazione grazie alle potenti librerie e strumenti di sviluppo di .NET
  • Ottimizzazione del codice: tramite costrutti a basso livello quali thread, task e async
  • Bassi costi di aggiornamento
  • Uso illimitato di librerie e codice esterno in .NET
  • Compatibilità con vari linguaggi e framework
  • Componenti HMI esportabili tramite DLL

Sviluppi futuri

  • Trasformazione dell’applicazione in WEB APPLICATION tramite ASP.NET per garantire l’accesso da remoto con integrazione di microservizi
  • Implementazione di algoritmi di intelligenza artificiale di previsione energetica in base agli storici
  • Ampliamento dell’applicativo per consentire monitoraggio di impianti eolici

Articolo a cura di L. Venturi