GENNAIO-FEBBRAIO 2016
AUTOMAZIONE OGGI 387
117
Il modello di comunicazione è di tipo editore-abbo-
nato in cui viene introdotta la figura dell’intermedia-
rio, il broker, che si occupa di raccogliere i messaggi
inviati dai nodi sorgente e di ridistribuirli a tutti i
nodi abbonati a un determinato argomento o ‘topic’.
Dato che il broker si fa carico di tutte le complessità
connesse alla distribuzione, il pacchetto dati Mqtt ri-
sulta particolarmente semplice: un identificatore di
pacchetto, una stringa che descrive i topic secondo
una gerarchia ad albero, il livello di QoS, una flag da
settare per istruire il broker di salvare il messaggio, il
contenuto vero e proprio del messaggio e una flag
che indichi se il messaggio sia o meno un duplicato.
Le dimensioni del payload possono arrivare a 256
MByte; la produzione di un sensore sarà tipicamente
una successione di stringhe del tipo ‘campo:valore’.
Esistono diverse implementazioni open source di
broker per Mqtt e Mqtt-SN; all’interno dell’ecosi-
stema di Eclipse, Mosquitto si distingue per legge-
rezza ed efficienza. Scritto in C per renderne possibile
l’esecuzione su hardware limitato (sono ad esempio
disponibili versioni per Raspberry Pi, Beaglebone, Intel
Edison, Arduino Yun, Arduino con ‘shield’ Ethernet o
wi-fi ed Esp8266), Mosquitto si presenta come un ese-
guibile dell’ordine del centinaio di kB. Anche il progetto Paho della
fondazione Eclipse offre implementazioni open source dei client per
Mqtt e Mqtt-SN per applicazioni m2m e IoT.
La raccolta dei dati
Le applicazioni di controllo e supervisione hanno bisogno di soft-
ware che si occupi della raccolta e organizzazione dei dati che
sono stati inviati dai nodi sul canale di comunicazione. Nei sistemi
Scada, in particolare, l’archivio storico rappresenta il punto di par-
tenza per effettuare analisi, visualizzare trend e generare report.
Per quanto sia teoricamente possibile utilizzare un database rela-
zionale tramite SQL per gestire i dati provenienti da un sistema di
automazione, nel mondo in rapida evoluzione delle applicazioni
web si stanno affermando soluzioni cosiddette ‘no-SQL’, con ca-
ratteristiche di leggerezza e scalabilità che ben si sposano alle esi-
genze delle comunicazioni m2m in ambito IoT e industriale. E così,
anche se
Node.jsmette a disposizionemoduli driver per i principali
motori SQL, strumenti più indicati risultano essere i gestori di basi
dati orientate ai documenti come MongoDB e Influxdb.
MongoDB
è un database multipiattaforma open source (con li-
cenza Agpl e Apache) orientato ai documenti e progettato per es-
sere estremamente veloce, altamente scalabile e facile da usare.
Rende particolarmente efficiente gestire enormi moli di dati,
come quelle prodotte dai sensori del mondo IoT e sfruttate dalla
applicazioni Big Data. I dati sono trattati utilizzando una variante
binaria della rappresentazione Json (JavaScript Object Notation),
il formato Bson, che aggiunge efficienza all’integrazione con gli
altri elementi dello stack basati su Javascript.
InfluxDB
è invece un’applicazione database espressamente
pensata per gestire dati in forma di serie temporali, successioni
di ‘punti’ costituiti da marcatura temporale, descrizione del tipo
di misura e coppie chiave-valore. E se questo lo rende la solu-
zione ideale per l’implementazione di archivi storici nei sistemi
Scada, è anche vero che influxDB è comunque in grado di gestire
dati di altro tipo, come allarmi, eventi e log. Distribuito con una
permissiva licenza MIT, InfluxDB è scritto in Go (altro linguaggio
open source sviluppato nei laboratori Google) e si presenta sotto
forma di un singolo file binario senza dipendenze esterne che ne
semplifica l’installazione.
Visualizzazione e HMI
Dato che pannelli operatore e sistemi di monitoraggio e supervi-
sione sono tipicamente implementati su hardware che non soffre
delle limitazioni che caratterizzano sensori e attuatori, la scelta
del software, la rappresentazione dei dati raccolti, la visualizza-
zione dei trend, la generazione di report e l’interazione HMI pre-
sentano solo l’imbarazzo della scelta.
In uno stack imperniato attorno al linguaggio Javascript tutte
queste operazioni possono essere gestite direttamente dal client
sotto forma di un browser in grado di interpretare il linguaggio
Html5, eventualmente appoggiandosi a opportune librerie e fra-
mework per semplificare la gestione degli input, l’elaborazione
dei risultati e la rappresentazione degli elementi grafici.
jQuery ad esempio è una libreria JavaScript dalla dimensioni par-
ticolarmente contenute che offre funzioni per la manipolazione
degli eventi e l’animazione degli elementi grafici di una pagina
Web.
Angular.JSoffre invece un vero e proprio framework per
eseguire funzioni complesse sul lato client, mettendo a disposi-
zione strumenti per la creazione di vere e proprie applicazioni che
trascendono la natura dichiarativa del linguaggio Html.
Per quanto riguarda la generazione di elementi grafici, la comu-
nità open source mette a disposizione la libreria JavaScript
D3.jsche accetta dati in vari formati (tra cui json e csv) e produce grafici
e animazioni per mezzo di canvas Html5, fogli di stile e istruzioni
vettoriali SVG.
Integrando opportunamente queste librerie con il linguaggio
Html5 diventa possibile sviluppare client HMI flessibili e dal look
moderno, senza uscire dal dominio del software OSS.
Il mondo open source mette a disposizione anche i componenti
per gestire, organizzare e rappresentare i dati raccolti da un sistema
di automazione e controllo