Funzionalità

Sono stati sviluppati due codici sorgenti: uno per la centralina e uno per il client. I due codici condividono parte delle strutture e funzioni.

Sorgente Client:

Ogni client è già a conoscenza del suo programma di lavoro.

Si è ipotizzato un programma di lavoro suddiviso in quattro fasi (ad esempio: riscaldamento, mantenimento temperatura, regolazione successiva e raffreddamento) nelle quali viene definita la potenza massima e il corrispettivo tempo di esecuzione.

Nel Grafico 1 riportato qui sotto, viene rappresentato il ciclo di funzionamento di un dispositivo.

Grafico 1: programma tipo di un generico dispositivo.

Una volta avviato il client, questo invierà alla centralina un pacchetto contenente i suoi dati di riconoscimento ed i relativi dati di funzionamento. Di seguito vengono riportati i campi del pacchetto.

Numero di serie dispositivo

Potenza media

[Watt]

Delta

[Watt]

Delta percetuale

Durata processo

[secondi]

Stato del dispositivo

Comando della centralina

7byte

es: SN_alfa

4 byte

es: 1000[W]

4 byte

es: 200 [W]

4 byte

es: 10

4 byte

es: 500 [s]

1 byte

1 byte

Tabella 1: Contenuto pacchetti informativi inviati dai client

Fatto ciò il dispositivo resterà in attesa di una conferma all'avvio da parte della centralina.

Durante tutta l'operatività del client, questo rimarrà comunque in ascolto di eventuali aggiornamenti sui suoi parametri, in particolare quello della potenza massima di fase.

Che dati manda la centralina in questo caso? Analizziamo il comportamento del codice lato centralina. (centralina.cpp)

Sorgente Centralina:

Una volta avviata la centralina, questa resterà in ascolto di eventuali richieste di accensione o modifica da parte dei client.

Ogni qualvolta dovesse ricevere un nuovo pacchetto, dovrà analizzare il campo serial_number e lo confronterà con quelli già presenti nella lista di tutti i dispositivi di tipo client.

Il client che ha stabilito la comunicazione, potrebbe infatti essere sia un nuovo dispositivo, che vuole comunicare la richiesta di accensione, sia uno già noto, che ha la necessità di comunicare con il nodo centrale, ad esempio per chiedere l'autorizzazione a modificare uno o più parametri.

Ci sono dunque due casi, qui descritti e in seguito schematizzati nel flow chart:

1) Dispositivo non presente nella lista:

Per prima cosa la centralina lo inserirà di default nella classe Wait: questa classe contiene l'insieme dei dispositivi ancora in attesa di accensione. La classe che contiene i dispositivi già in esecuzione è denominata Active.

Dopodich&ecute eseguirà un controllo sulla possibilità di accendere il nuovo dispositivo.

In particolare, ricevuti i dati riguardanti la potenza e il Delta, la centralina sarà in grado di prevedere se in una qualsiasi delle quattro fasi programmate del client, la potenza richiesta sommata a quella totale dei dispositivi già accesi, eccederà il limite (nel caso studio di 4000 Watt).

Per fare tale previsione è sufficiente il valore centrale delle potenze che il dispositivo può richiedere nell'intero processo e, da questo, ricavare il Delta tra valore massimo/minimo e centrale.

La centralina, in seguito, calcola la potenza in eccesso e la confronta con il delta degli n dispositivi attivi. Cercherà poi nella classe Active un dispositivo il cui Delta risulti maggiore uguale alla potenza in eccesso (questa è la potenza che “manca” al nuovo client). Se la verifica avrò successo, sarà inviato al dispositivo trovato il comando di riduzione della potenza (non compromettendone la funzionalità).

Verrà infine data conferma al nuovo dispositivo, che potrà ora accendersi.

Abbiamo ottenuto un nuovo dispositivo attivo e un contestuale abbassamento di potenza di uno dei dispositivi attivi, ottenendo un risparmio energetico e una migliore ridistribuzione della potenza disponibile.

Inotre, abbiamo massimizzato il numero di elementi in grado di lavorare contemporaneamente.

2) Dispositivo presente nella classe List:

In questa situazione la centralina si limiterà a ricevere un pacchetto che conterrà informazioni relative al funzionamento del dispositivo già in funzione. Ad esempio, ogni volta che un dispositivo passerà da una fase all'altra, ne darà comunicazione alla centralina. Un altro caso in cui il dispositivo acceso potrebbe voler comunicare è alla fine del processo: manderà, infatti, una conferma di fine ciclo.

Segue ora un diagramma degli stati in cui vengono mostrate le fasi di funzionamento dal lato centralina; tale diagramma sarà poi riproposto anche in versione esempio, in modo che ci sia anche una versione più realistica di quanto succede all'interno del programma.

Figura 5: Generico flusso di esecuzione della centralina

Figura 6: Esempio di flusso quando un nuovo client si connette