In effetti e' l'implementazione del “Motore” di uno Scada
ma si tratta solo del "modulo" di acquisizione di Segnali dal Campo" da notificare al Programma Vero che poi in base alle segnalazioni operarà in ambiti che uno SCADA non prevede…
Premetto che sto facendo questo come esercizio per imparare la programmazione C#
in quanto non ho la possibilità di vedere da vicino programmi Completi e di una certa entità realizzati in C#
Ho la necessita di stabilire diverse connessioni con PLC o altri dispositivi per recuperare alcuni valori (pochi da ognuno, ma negli impianti più grossi posso arrivare anche a una cinquantina di PLC)
Alcuni Valori vanno letti in continuazione altri Letti/Scritti solo su richiesta dei Vari Supervisori/Gestori di Impianto
Ho implementato l'oggetto Connessione Generica (che al momento “dell'istaziamento” verrà specializzato in base al plc e alle aree di memoria da leggere su quello specifico plc) e questo per i protocolli implemntati finora funziona.
Ogni oggetto possiede un Task per la “Gestione” della Connessione in modo da essere “indipendente” una volta instanziata.
Una volta ottenute le informazioni dai PLC ho la necessità (in caso di variazione) notificarlo a tutti o solo ad alcuni dei supervisori configurati.
A tal proposito ho implementato un secondo oggetto che si dovrà occupare di di gestire la comunicazione via Socket UDP con i supervisori
Visto che sono alle prime armi sono arrivato al punto che ricevo i dati dal plc connesso e poi non sapevo piu' come fornirli al “postino”
per ovviare al problema ho istanziato una lista per telegrammi nelle classe Contenitore e passata come parametro nel costruttore di entrambi gli oggetti al momento della loro instanziazione (50 volte la prima classe per i PLC, 5 volte la seconda per i supervisori)
Quale sarebbe stata l'implementazione migliore?