Il protocollo Modbus

By DanAn at 17 marzo, 2010, 2:32 pm

Il protocollo MODBUS definisce il formato e la modalità di comunicazione tra un “master” che gestisce il sistema ed uno o più “slave” che rispondono alle interrogazioni del master.
Si possono connettere un master e un massimo di 247 slave su un’unica linea; tale limite è un limite logico del protocollo, l’interfaccia fisica può peraltro limitare ulteriormente il numero di dispositivi, per esempio l’interfaccia standard RS-485 prevede un massimo di 31 slave connessi alla linea.
Sostituendo l’ultimo elemento della linea con un apposito “bridge o ripetitore”, si possono connettere altri 31 slave e così via sino al raggiungimento del numero massimo logico di dispositivi applicati.
Il master l’unico che può iniziare una “transazione”. Con questo termine viene indicato lo scambio di infromazioni tra una unità “master” ed una o più unità “slave”.
Una transazione può avere il formato domanda/risposta diretta ad un singolo slave o broadcast. Una transazione è composta da una struttura singola domanda/singola risposta o una struttura singolo messaggio broadcast/nessuna risposta.
Alcune caratterisitiche del protocollo sono definite e sono riassumibili in: interfaccia standard, parità, numero di stop bit ed il formato RTU (binario).
Nonostante esista anche il protocollo di tipo ASCII, il modo RTU è quello implementato normalmente. Esiste inoltre il protocollo JBUS che è funzionalmente identico al MODBUS, ma se ne differenzia per la diversa numerazione degli indirizzi:

  • nel MODBUS l’indirizzamento parte da zero (0000 = primo indirizzo)
  • nel JBUS l’indirizzamento parte da uno (0001 = primo indirizzzo)

Formato dei Messaggi

Il pacchetto di trasmissione del protocollo MODBUS è così composto:

  • indirizzo del dispositivo (ADDRESS) con cui il master ha stabilito la comunicazione (l’indirizzo 0 corrisponde ad un messaggio broadcast inviato a tutti i dispositivi slave)
  • il codice della funzione che deve essere o è stata eseguita
  • i dati che devono essere scambiati
  • il controllo d’errore composto secondo l’algoritmo CRC16 (vedi seguito)

Se un dispositivo individua un errore nel messaggio ricevuto (errore di formato, di parità o nel CRC16) il messaggio viene considerato non valido e scartato, uno slave che rilevi un errore nel messaggio quindi non eseguirà l’azione e non risponderà alla domanda, così come se l’indirizzo non corrisponde ad un dispositivo in linea.

Formato dei caratteri
Normalmente i dispositivi che adottano il protocollo MODBUS utilizzano in formato 8, N, 1. Ovvero: 8 bit di dati, senza alcun controllo di parità e con 1 bit di stop.

L’indirizzzo
Le comunicazione MODBUS coinvolgono sempre il master, che gestisce la linea, ed uno slave per volta (tranne nel caso di messaggi broadcast).
Per identificare il destinatario del messaggio viene trasmesso come primo carattere un byte che contiene l’indirizzo numerico del dispositivo slave selezionato.
Ogni slave quindi avrà assegnato un differente numero di indirizzo che lo identifica in modo univoco.
Gli indirizzi ammissibili sono quelli compresi tra 1 e 247, mentre l’indirizzo 0, che non può essere assegnato ad uno slave, posto in testa al messaggio trasmesso dal master, indica che questo è di tipo “broadcast”, cioè diretto a tutti gli slave contemporaneamente.
Possono essere trasmessi come broadcast solo messaggi che non richiedano risposta per assolvere alla loro funzione, quindi solo le assegnazioni.

Il codice funzione
Il secondo carattere del messaggio identifica la funzione che deve esssere eseguita nel messsaggio trasmesso dal master, al quale lo slave deve rispondere a sua volta con lo stesso codice ed indicare che la funzione è stata eseguita.
Normalmente le funzioni MODBUS maggiormente utilizzate sono quelle riportare di seguito:

Il CRC16
Gli ultimi due caratteri del messaggio contengono il codice di ridondanza ciclica (Cyclic Redundancy Check) calcolato secondo l’algoritmo CRC16.
Per il calcolo di questi due caratteri il messaggio (indirizzo, codice funzione e dati scartando i bit di start, stop e l’eventuale parità) viene considerato come un unico numvero binario continuo di cui il bit più significativo (MSB) viene trasmesso prima.
Il messaggio viene innanzitutto moltiplicato per 216 (traslato a sinistra di 16 bit) e poi diviso per 216+215+22+1 espresso come numero binario (1100000000000101). Il quoziente intero viene poi scartato ed il resto a 16 bit (inizializzato a 0xFFFF all’inizio per evitare il caso di un messaggio di soli zeri) viene aggiunto di seguito al messsaggio trasmesso. Il messaggio risultante, quando diviso dal dispositivo ricevente per lo stesso polinomio (216+215+22+1) deve dare zero come resto se non sono intervenuti errore (il dispositivo ricevente ricalcola il CRC).
La procedura passo-passo per il calcolo del CRC16 è la seguente:

  1. caricare un registro a 16 bit con 0xFFFF (tutti i bit ad 1)
  2. eseguire l’OR esclusivo del primo carattere con il byte superiore del registro, porre il risultato nel registro
  3. spostare il registro a destra di un bit
  4. se il bit uscito a destra dal registro (flag) è un 1, eseguire l’OR esclusivo del polinomio generatore 1010000000000001 con il registro
  5. ripetere per 8 volte i passi 3 e 4
  6. eseguire l’OR esclusivo del carattere succcessivo con il byte superiore del registro, porre il risultato nel registro stesso
  7. ripetere i passi da 3 a 6 per tutti i caratteri del messaggio
  8. il contenuto del registro a 16 bit è il codice di ridondanza CRC che deve essere aggiunto al messaggio

Sincronizzazione dei messaggi
La sincronizzazione del messaggio tra trasmettitore e ricevitore viene ottenuta interponendo una pausa tra i messaggi pari ad almeno 3.5 volte il tempo di un carattere.
Se il dispositivo ricevente non riceve per un tempo di 3.5 caratteri, ritiene completato il messaggio precedente e considera che il successivo byte ricevuto sarà il primo di un nuovo messaggio e quindi un indirizzo.

Considerazioni

Le principali ragioni di un così elevato utilizzo del MODBUS rispetto agli altri protocolli di comunicazione sono:

1. È un protocollo pubblicato apertamente e royalty-free
2. Può essere implementato in pochi giorni, non in mesi
3. Muove raw bits e words senza porre molte restrizioni ai venditori

MODBUS consente la comunicazione fra diversi dispositivi connessi alla stessa rete, per esempio un sistema che misura la temperatura e l’umidità e comunica il risultato a un computer. MODBUS è spesso usato per connettere un computer supervisore con un’unità terminale remota (RTU) nel controllo di supervisione e sistemi di acquisizione dati (SCADA).

Limitazioni

Il protocollo è nato nel lontano 1970 per comunicare con i PLC quindi i tipi di dati sono limitati a quelli supportati dai PLC a suo tempo. Oggetti binari di grandi dimensioni non sono supportatie non esiste un metodo standard per un nodo di trovare la descrizione di un tipo di dato; per esempio, determinare se un valore registro rappresenta una temperatura fra i 30 e i 175 gradi.

Categories : Articoli | Didattica | Prodotti


Non c'è ancora nessun commento.

Lascia un commento