Alcuni protocolli di comunicazione industriale si impongono nel settore senza un motivo specifico, compaiono improvvisamente sul mercato senza essere spinti da alcun venditore o lobby che sia e vengono semplicemente riconosciuti per il loro valore, sostituendo tutto ciò che c’era prima del loro arrivo.
Questo è il caso ad esempio del protocollo Modbus, il quale una volta scoperto nel settore, è stato riconosciuto per le sue qualità al di sopra degli standard antecedenti, tant’è che i manifatturieri hanno deciso di implementarne l’utilizzo e accettarlo come il nuovo standard per i bus di comunicazione in ambito industriale.
La storia del protocollo Modbus
Modbus affonda le sue radici nella fine degli anni settanta, nel 1978 per l’esattezza, quando l’allora azienda produttrice di PLC (per i non addetti ai lavori, una sigla inglese traducibile come: “Controllore logico programmabile”) la Modicon (oggi Schneider Automation) la quale pubblicò per la prima volta l’interfaccia Modbus per reti di comunicazione multi-drop basati su un sistema di tipo master/slave.
La comunicazione tra i nodi Modbus, fu raggiunta grazie ai messaggi seriali, i quali erano supportati da una struttura aperta, mentre il livello fisico dell’interfaccia Modbus era selezionabile liberamente. L’interfaccia Modbus originale girava principalmente sul protocollo RS-232, ma successivamente fu implementato su larga scala l’utilizzo del protocollo RS-485, poiché questo aveva il pregio di poter permettere la comunicazione ad alta velocità tra nodi assai distanti tra loro.
Non è un caso quindi se in pochissimo tempo furono in tantissimi ad adottare il sistema di comunicazione industriale Modbus per i propri dispositivi, rendendo di fatto Modbus il nuovo protocollo standard per questo tipo di sistemi.
Struttura della comunicazione seriale Modbus
Nella sua versione originale, la struttura di comunicazione seriale Modbus permette la comunicazione su reti seriali di tipo RS-232 e RS-485 tramite una serie di bit dati, i quali vengono rappresentati sui terminali Rx e Tx della porta seriale con bit in forma di tensioni positive e negative. Questo tipo di interazione tra i vari dispositivi è basata sul modello master-slave, prevede specificamente due tipologie di trasmissioni: la trasmissione Ascii e la trasmissione RTU.
Utilizzando la modalità di tipo Ascii, ogni singolo byte dal peso di 8 bit che va a costituire il messaggio viene trasmesso sotto forma di due caratteri Ascii (il Codice Standard Americano per lo Scambio di Informazioni) che stanno a rappresentare la codifica esadecimale del valore.
Nella trasmissione RTU (acronimo inglese stante in italiano per: “Unità Terminale Remota”) invece, la trasmissione invia la rappresentazione binaria del valore, rendendo ovviamente quest’ultima modalità quella ottimale per inviare una maggiore quantità di informazioni se si mettono sullo stesso piano le due modalità con la stessa velocità di trasmissione. Ciononostante, l’ASCII ha il vantaggio di evitare errori di comunicazione, poiché nelle trasmissioni Ascii sono ammesse pause anche di un secondo tra un carattere e l’altro.
Durante la fase di configurazione dei nodi, l’utilizzatore sceglie il tipo di codifica dati da implementare sul Modbus in concomitanza con l’impostazione dei parametri di comunicazione della porta seriale. Questa struttura è stata implementata ed adattata anche su altri mezzi di trasmissione oltre al rame, permettendo trasmissioni tramite collegamenti radio e fibra ottica.
Un capitolo a parte va aperto invece per il protocollo Modbus TCP, il quale è sempre più utilizzato oggigiorno e che affronteremo successivamente.
Unità dati PDU e unità dati ADU
Una comunicazione via Modbus si suddivide tendenzialmente in tre stadi:
- Formulazione della richiesta da parte di un dispositivo ad un altro;
- Esecuzione di tutte le azioni necessarie per soddisfare la richiesta ricevuta;
- La restituzione al dispositivo da cui è partita la richiesta delle informazioni risultanti, a prescindere dal fatto che esse siano un risultato elaborato o un codice di errore a seguito dell’impossibilità di svolgere il compito richiesto.
Queste informazioni vengono quindi scambiate in forma di unità di unità dati indipendenti dai livelli sottostanti nella pila ISO/OSI. Fondamentale è in questo processo di scambio dati Modbus la PDU (Protocol Data Unit), la quale è composta da un campo contenente il codice funzione codificato sotto forma di un solo byte, e un campo dati di lunghezza variabile contenente il corpo del messaggio. Per integrarla poi all’interno di altre reti potrebbe esserci bisogno di campi aggiuntivi, raccolti eventualmente nella ADU (Application Data Unit). In genere, si denota la presenza di un campo indirizzi atto ad identificare il dispositivo da cui è partita la richiesta e un campo con all’interno i codici per la correzione degli errori.
Il protocollo prevede tre tipi diversi di PDU:
- Richiesta (mb_req_pdu);
- Risposta (mb_rsp_pdu);
- Risposta con eccezione (mb_excep_rsp_pdu).
Quindi, in base a questa modalità di comunicazione un dispositivo client inoltra la sua richiesta a un altro dispositivo server per l’esecuzione di una data azione, integrandola a sua volta con una serie di informazioni aggiuntive che saranno presenti nel campo dati, come ad esempio la richiesta di lettura di un valore dato da uno specifico sensore connesso ad una sottorete gestita dal server. Il server, una volta convalidata la richiesta del codice funzione, esegue quanto contenuto nell’operazione richiesta.
Nel caso di esito positivo, vi è la generazione di un frame contenente le informazioni volute (il valore registrato dal suddetto sensore dopo essere stato codificato e salvato, ad esempio) con il codice funzione relativo successivamente immesso sul bus. Nel momento in cui la verifica dei dati, o se l’operazione non viene portata propriamente a termine generando errori, all’interno del campo del codice funzione viene restituito un codice di errore (il quale sarà pari al codice funzione relativo alla chiamata ma incrementato di 127), mentre all’interno del campo dati viene riportata l’eccezione che ha provocato l’impossibilità a rispondere sotto forma di codice dell’eccezione.
Modbus TCP: le differenze nella variante
Modbus TCP è una variante della versione originale particolarmente in auge in questo periodo il quale si appoggia su uno stack TCP-IP, rendendo in grado Modbus di comunicare anche sulle reti Ethernet.
Il Modbus TCP IP opera perciò un tipo di comunicazione client/server il cui unico requisito è che i nodi uniti alla rete siano nello stesso campo dell’indirizzo IP. La latenza intrinseca però della comunicazione su una rete e altri aspetti simili hanno inevitabilmente reso necessarie delle modifiche sul come mantenere richieste e risposte in sincronia in modo da garantire che dati errati non vengano ricevuti da un dispositivo slave.
Nel protocollo Modbus TCP IP si segnala inoltre una differenza nel modo in cui viene racchiusa la PDU se rapportata a come questo viene eseguito nel Modbus RTU: il frame TCP contenente la PDU infatti inizia con un identificatore di transizione del Protocollo d’applicazione di MODBUS (MBAP di 2 byte al posto dell’ID del dispositivo slave). Oltretutto, il CRC (dall’inglese, il “controllo di ridondanza ciclico”) non ha bisogno di eseguire il controllo degli errori poiché è il livello TCP a gestire questa funzione.
Si segnala infine il fatto che dal 2007 il protocollo MODBUS TCP è stato standardizzato secondo la norma IEC 61158 ed è stato citato nella norma IEC 61784-2 con sigla CPF 15/1.