GENNAIOFEBBRAIO 2016
AUTOMAZIONE OGGI 387
116
AO
TUTORIAL
viene messo a disposizione un ragionevolmente completo stack
software (ambiente di esecuzione in tempo reale, webserver, stack
di comunicazione, gestione di database, visualizzazione) per l’im-
plementazione di soluzioni di automazione e controllo che sconfi-
nano nello Scada.
È noto come una buona fetta della rete Internet si appoggi, oltre
che allo stack di comunicazione TCP/IP, a quello che è conosciuto
come stack Lamp: Linux, Apache, MySQL e Php. Si tratta di soft-
ware estremamente potenti e flessibili, che però mal si sposano
con le ridotte risorse hardware e le caratteristiche di snellezza ed
efficienza tipiche di una rete di automazione. Le esigenze di svi-
luppo rapido delle applicazioni web del nuovo millennio hanno
portato più di uno sviluppatore open source a proporre nuove so-
luzioni che, specialmente alla luce dell’evoluzione IoT dei sistemi
di controllo e supervisione, si sono rivelate in grado di soddisfare
anche i bisogni degli utilizzatori industriali.
Qui di seguito illustriamo
brevemente una possibile,
ma non unica, combina-
zione di tecnologie OSS per
il mondo dell’automazione:
node.jsper il webserver,
Mqtt e Mosquitto per le
comunicazioni, influxDB o
MongoDB per la gestione
dei dati e Html5 con rela-
tive estensioni per la visua-
lizzazione e la realizzazione
di interfacce HMI.
Il web server
leggero
La chiave per realizzare un
webserver leggero risiede,
paradossalmente, nel lin-
guaggio per lato client
JavaScript. Nonostante le
umili origini di linguaggio
client-side in stile Visual
Basic, JavaScript è un lin-
guaggio flessibile e po-
tente le cui potenzialità sul
lato server sono state evidenziate per la prima volta nel 2009 con
il rilascio di
Node.js(in breve, Node).
Node rappresenta un’alternativa ultraleggera sotto forma di
scripting al potente webserver Apache. Basato sull’efficiente mo-
tore JavaScript V8 sviluppato da Google e pubblicato come open
source nel 2008, Node è scritto interamente in C++ e può essere
eseguito come un processo (peraltro arrestabile e ripristinabile in
maniera automatica in caso di errore) sumacchine dalle risorse par-
ticolarmente limitate. A contribuire all’efficienza di V8 è anche la
compilazione Just-In-Time del codice Javascript che viene trasfor-
mato, in maniera trasparente all’utente, in codice macchina man
man che viene eseguito. A farne un ideale candidato per la realizza-
zione di sistemi a bassa latenza è però la caratteristica delle funzioni
di I/O di non bloccare l’esecuzione fino al loro completamento.
Viene invece impiegato un meccanismo di callback che notifica al
chiamante l’avvenuto completamento del task, così diventa possi-
bile accodare più compiti in parallelo senza doversi preoccupare
di gestirne esplicitamente il threading. Di fatto Node è un sistema
a singolo thread, circostanza che semplifica enormemente lo svi-
luppo delle applicazioni di retema non costituisce una limitazione;
è infatti possibile lanciare istanze multiple di Node delegando al
sistema operativo la gestione del multi-threading.
Node è inoltre dotato di una libreria predefinita di moduli per la
gestione del file system, dei protocolli di comunicazione (Http,
TCP, UDP, DNS, TSL/SLL), dell’interfacciamento con WebSocket e
Mqtt, degli stream e dei buffer dati, e ha anche un set di funzioni
per crittografia.
Il transito lungo il canale
I dati relativi al funzionamento di sensori e attuatori sono veicolati
da e verso i sistemi di supervisione e controllo attraverso un ca-
nale di comunicazione. Per ricevere e trasmettere dati sul canale,
le applicazioni client e server
hanno bisogno di accordarsi
su un protocollo di comunica-
zione.
Una prima proposta open
source è rappresentata da
WebSocket, un protocollo e
famiglia di API (Application
Programming Interface) che
rende possibile instaurare tra
generici dispositivi client e
server una connessione TCP
stabile per comunicazioni bi-
direzionali full-duplex. Inizial-
mente sviluppata per essere
usata nei browser web, la
tecnologia WebSocket è sup-
portata da qualsiasi client ba-
sato su browser, in particolare
Html5, mentre è disponibile
all’interno di
node.jsgrazie al
modulo
Socket.IO.Per le applicazioni in ambito
IoT, domotico, automotive,
Scada e di automazione indu-
striale, risulta più interessante
il protocollo Mqtt (MQ Telemetry Transport). Messo a punto da
IBM alla fine degli anni ‘90 per trasferire i dati dei sensori degli
oleodotti attraverso reti a elevata latenza e banda ridotta, è un
protocollo che si appoggia a TCP/IP che è stato reso pubblico nel
2010 e successivamente standardizzato da Oasis per le applica-
zioni IoT. Nel 2008 è stata introdotta la variante Mqtt-SN che si
applica alle reti prive di connessione basate sul protocollo UDP.
Rispetto a OPC (Open Platform Communications, precedente-
mente noto come OLE for Process Control), Mqtt è completa-
mente gratuito ed esente da royalty. Inoltre è estremamente
leggero in termini di risorse hardware e overhead dati, così da
risultare una scelta appropriata per le reti con numerosi nodi di ri-
dotta complessità computazionale quali sono sensori e attuatori.
Invece di utilizzare un dispendioso meccanismo di polling per
l’interrogazione dei nodi, il protocollo Mqtt prevede che i dati
vengano inviati non appena disponibili a tutti i nodi interessati.
Webserver e gestione delle comunicazioni con protocolloMqtt
richiedono poche risorse con i software open source
node.jse
Mosquitto