FUNZIONAMENTO DELLA COMUNICAZIONE MODBUS

Comunicazione MODBUS

Benvenuti (o bentornati) su questo sito dove parliamo di automazione industriale, apparecchiature, plc e sistemi di supervisione. Oggi ci occupiamo della comunicazione Modbus, uno dei protocolli più diffusi e longevi che possiamo impiegare nelle reti in ambito industriale e civile.

In particolare ci soffermeremo sulla comunicazione analizzando come sono fatti i pacchetti dei messaggi Modbus, quali funzioni si possono svolgere e le aree dati che si possono scambiare.

NOVITÀ!
Tra i corsi che trovi su questo sito, c'è anche il nuovo corso di progettazione domotica con il PLC e integrazione con apparecchiature Modbus.
Clicca sull'immagine quì sotto per dare un'occhiata a tutti i corsi disponibili.

Novità automazione e plc

Ecco gli argomenti di oggi:

Il Modbus.

La struttura del messaggio Modbus.

Le apparecchiature Modbus e la mappa della memoria (registri).

Il messaggio Modbus PDU.

Come funziona il codice funzione (function code) Modbus.

Gestione degli errori nella messaggistica Modbus.

I codici di funzione del Modbus più comuni.

Il Modbus.

Nell’articolo precedente a questo riguardo al Modbus abbiamo visto che esso rappresenta uno dei protocolli di comunicazione più diffuso al mondo. Il Modbus permette di comunicare su diverse reti come le seriali RS-232 (oggi di più con la RS-485) e nei sistemi più moderni anche con protocolli di trasporto più evoluti come il TCP.

Nella lezione di oggi ci occupiamo di vedere come avviene la comunicazione tra le apparecchiature su queste reti, partendo dalla struttura del messaggio.

La struttura del messaggio Modbus.

Tutti i messaggi Modbus hanno la stessa struttura formata da quattro elementi. La posizione di questi elementi nel messaggio è sempre la stessa, e questo garantisce che la comunicazione avvenga sempre in modo preciso anche tra apparecchiature di tipo e fornitore differente.

Ogni apparecchio sulla rete Modbus ha un indirizzo univoco, e la conversazione è sempre iniziata dal Master. L’apparecchio invia le richieste al destinatario specificando nel messaggio l’indirizzo dello slave di destinazione, e il destinatario risponde; tutti gli altri slave sulla rete ignorano la richiesta.

Nella prossima immagine vediamo il funzionamento appena descritto, possiamo notare i quattro segmenti che formano il messaggio Modbus, così come la ricezione del messaggio solo dallo slave interessato.


Messaggio MODBUS ricevuto solo dal destinatario

Il master Modbus può anche inviare messaggi broadcast, che sono indirizzati a tutti gli slave; in questo caso l’indirizzo del destinatario nel messaggio generato sarà zero.

Tutti gli slave ricevono e leggono i messaggi di tipo broadcast, tuttavia non rispondono.

Ecco nella prossima immagine un esempio di questo tipo di messaggio pubblico.

Messaggio MODBUS di tipo broadcast

Le funzioni specificate nell’apposita sezione del messaggio Modbus lavorano sulla memoria interna degli slave, per configurare, leggere e scrivere gli ingressi e le uscite degli stessi, così come i registri interni.

Le apparecchiature Modbus e la mappa della memoria (registri).

Ogni apparecchio interfacciabile sulla rete Modbus contiene al suo interno delle zone di memoria (registri) per mappare gli ingressi, le uscite, e le informazioni di configurazione.

Per operare correttamente con le varie apparecchiature è bene consultare sempre la documentazione riguardo alla mappa di memoria.

La memoria dei device contiene quattro aree: l’area delle uscite discrete, quella degli ingressi discreti, quella dei registri di input, e l’ultima che contiene i registri di holding. In inglese queste aree si chiamano Coils Outputs, Discrete Inputs, Input Registers e Holding Registers.

Nella prossima immagine vediamo queste aree di memoria con gli indirizzi per accedervi.

Mappa della memoria dei registri MODBUS

Come si vede nell’immagine sopra, i registri di ingressi e uscite digitali sono rappresentati da bit, mentre i registri di Input e di Holding (uscite) sono a 16 bit.

Il messaggio Modbus PDU.

Nella prossima figura vediamo nel dettaglio com’è strutturato il messaggio Modbus (RTU) e come viene incapsulato nel protocollo di trasporto TCP, nel caso il Modbus sia applicato in una rete di questo tipo.

Notiamo che nel Modbus TCP viene tolto il campo di controllo, inoltre viene sostituito lo “slave ID” con lo “Unit ID”; il protocollo TCP ha già il suo header per gestire la comunicazione.

Struttura del messaggio MODBUS RTU e TCP

Il messaggio PDU è composto di diverse parti: l’indirizzo del destinatario, il codice della funzione da eseguire e i dati richiesti; l’ultima parte del messaggio è destinata a un codice di controllo errori.

Lo slave destinatario riceve il messaggio e risponde eseguendo i comandi e fornendo nel campo “dati” le informazioni richieste dal master; lo slave utilizza il campo di controllo errori per confermare la ricezione del messaggio al master stesso.

Per quanto riguarda l’indirizzamento delle aree di memoria da leggere e scrivere, abbiamo il numero di partenza che è implicito a seconda del tipo di registro, per esempio:

zero (0) per lettura o scrittura del registro delle uscite (coils).

uno (1) per lettura del registro degli ingressi (input).

tre (3) per la lettura dei registri di ingresso (input registers).

quattro (4) per la la lettura o scrittura dei registri di uscita (output o holding register).

Come funziona il codice funzione (function code) Modbus.

Per comprendere meglio come funziona il messaggio Modbus possiamo osservare la seguente immagine.

Messaggio MODBUS per lettura registri di mantenimento (holding)

Analizzano il messaggio nella figura sopra abbiamo che l’indirizzo dello slave di destinazione è il 13 e il codice della funzione da svolgere è la 3 (lettura dei registri holding), che avverrà agli indirizzi 4xxx. L’indirizzo di partenza della lettura sarà 4001, e questo è implicito.

Il codice funzione è rappresentato da un byte di dati e può assumere un valore compreso tra 1 e 255, questo significa che fino a 255 funzioni diverse possono essere svolte con uno slave; naturalmente non tutte le apparecchiature risponderanno a tutte le funzioni possibili.

Nel campo “data” il master specifica anche la quantità di dati da inviare oppure i dati da scrivere nel caso che la funzione riguardi questa operazione.

Gestione degli errori nella messaggistica Modbus.

Normalmente gli slave rispondono semplicemente copiando e inviando il codice funzione ricevuto dal master, in caso di errore però lo slave modifica il bit più significativo del valore ponendolo a 1.

Per esempio se abbiamo una richiesta di lettura con codice 03, questa in binario viene espressa come 0000 0011. Se lo slave esegue tutto correttamente lo stesso codice viene inviato al master, altrimenti il bit più a sinistra viene alzato, e viene inviato quindi il codice 1000 0011. Insieme a questa operazione, in caso di errore lo slave valorizza il campo “data” per fornire al master anche informazioni riguardo alla causa dell’errore o al tipo dello stesso.

I codici di funzione del Modbus più comuni.

Vediamo ora quali sono i più comuni e utilizzati codici di funzione nei messaggi inviati sulle reti Modbus.

Codice 01: lettura dello stato delle bobine (coils) o registri interni.

Codice 02: lettura dello stato degli ingressi digitali.

Codice 03: lettura dello stato dei registri interni Holding (a blocchi contigui).

Codice 04: scrittura dello stato dei registri interni (a blocchi contigui).

Codice 05: forzamento di una singola uscita.

Codice 06: scrittura di un singolo registro.

Codice 15: forzatura di uscite multiple.

Codice 16: scrittura di registri multipli.

Tutti i codici funzione di cui sopra li troviamo nella prossima immagine.

Tabella con i codici funzione più utilizzati con il MODBUS

Copyright(C) automazione-plc.it
P. IVA: 11676200964
Sito di informazione e didattica sull'automazione industriale, il mondo dei PLC e dei sistemi di supervisione.
Programmazione PLC.
Programmazione SCADA e HMI.
Apparecchiature e hardware industriale.
Strumentazione da campo.
Policy sulla Privacy e utilizzo dei Cookies