Modbus — Protocollo di comunicazione industriale

Definizione e storia​

Modbus è un protocollo di comunicazione industriale pubblicato nel 1979 da Modicon (oggi Schneider Electric) per consentire la comunicazione tra il proprio controllore logico programmabile e i dispositivi di campo. Diventato uno standard aperto e libero da diritti d'autore nel 2002, Modbus è oggi il protocollo più diffuso nel settore industriale, presente su centinaia di milioni di dispositivi in tutto il mondo.

La sua popolarità si basa su tre qualità fondamentali: semplicità (facile da implementare, ben documentato), robustezza (funziona su collegamenti di scarsa qualità) e interoperabilità (standard aperto, supportato da quasi tutte le apparecchiature industriali — controllori logici programmabili, variatori di velocità, contatori di energia, sensori, regolatori).

Nonostante la sua età, Modbus rimane uno standard imprescindibile, in particolare negli impianti esistenti (brownfield) e per le apparecchiature a basso costo. Il suo principale difetto è la mancanza di sicurezza nativa (nessuna autenticazione, nessuna crittografia), il che rende necessario proteggerlo tramite una VPN quando transita su una rete non controllata.

Modbus RTU vs Modbus TCP​

Esistono due varianti principali del protocollo Modbus:

Modbus RTU (seriale)​

  • Livello fisico: RS-232 (punto-punto) o RS-485 (bus multi-drop fino a 32 dispositivi, distanza massima di 1.200 m a 9.600 baud).
  • Trasmissione: binaria, compatta. Ogni messaggio contiene l'indirizzo dello slave, il codice funzione, i dati e un CRC-16 di controllo dell'integrità.
  • Topologia: master-slave (un solo master, fino a 247 slave indirizzabili da 1 a 247).
  • Applicazioni: contatori di energia, convertitori di frequenza, sensori industriali con uscita RS-485, PLC di vecchia generazione.

Modbus TCP (Ethernet)​

  • Livello fisico: Ethernet (10/100/1000 Mbps), protocollo IP, porta TCP 502.
  • Incapsulamento: la trama Modbus RTU è incapsulata in un'intestazione MBAP (Modbus Application Protocol) di 7 byte che sostituisce il CRC (Ethernet garantisce autonomamente l'integrità).
  • Topologia: client-server (il client, ex master, interroga il server, ex slave). Più client possono interrogare contemporaneamente lo stesso server.
  • Utilizzo: controllori con porta Ethernet (Siemens S7, Schneider M340/M580, Allen-Bradley), HMI/SCADA, gateway cloud.
CriterioModbus RTUModbus TCP
Livello fisicoRS-232 / RS-485Ethernet / TCP-IP
Velocità tipicaDa 9.600 a 115.200 baud10/100 Mbps
DistanzaFino a 1.200 m (RS-485)Rete Ethernet standard
Numero di slaveDa 1 a 247Illimitato (indirizzamento IP)
Controllo di integritàCRC-16Checksum TCP
Sicurezza nativaNessunaNessuna (utilizzare VPN)

Struttura di un messaggio Modbus​

Modbus RTU — Frame​

| Indirizzo slave (1 byte) | Codice funzione (1 byte) | Dati (N byte) | CRC-16 (2 byte) |

Esempio di richiesta FC03 che legge 2 registri a partire dall'indirizzo 0x0000 sullo slave 1:

01 03 00 00 00 02 C4 0B

Modbus TCP — Framma (con intestazione MBAP)​

| ID transazione (2 byte) | ID protocollo (2 byte, = 0x0000) | Lunghezza (2 byte) | ID unità (1 byte) | Codice funzione | Dati |

Registri Modbus​

Modbus organizza i dati in quattro tipi di registri, identificati dal loro indirizzo di riferimento:

TipoIndirizzoAccessoDescrizione
Coils (bobine)0x0001–0xFFFF (base 1)Lettura / ScritturaUscite digitali on/off (bit) — stato di una valvola, di un relè
Discrete Inputs0x1001–0xFFFFSolo letturaIngressi digitali on/off (bit) — stato di un sensore on/off
Registri di memoria0x4001–0xFFFFLettura/ScritturaRegistri a 16 bit in lettura/scrittura — setpoint, parametri, valori misurati
Registri di ingresso0x3001–0xFFFFSolo letturaRegistri a 16 bit in sola lettura — misurazioni dei sensori, valori di processo

Nota: l'indirizzamento effettivo nei frame parte da 0 (offset -1 rispetto ai riferimenti documentati). Pertanto, il Holding Register con riferimento 40001 è indirizzato a 0x0000 nel frame.

Codici funzione (Function Codes) più comuni​

CodiceEsadecimaleNomeDescrizione
FC010x01Read CoilsLeggi lo stato di N bobine (uscite digitali)
FC020x02Read Discrete InputsLeggi lo stato di N ingressi digitali
FC030x03Lettura dei registri di mantenimentoLettura di N registri a 16 bit in modalità lettura/scrittura — il più utilizzato
FC040x04Lettura dei registri di ingressoLettura di N registri a 16 bit in sola lettura
FC050x05Scrittura di una singola bobinaScrivere una singola uscita digitale (0x0000 = OFF, 0xFF00 = ON)
FC060x06Scrittura di un singolo registroScrivere un singolo registro di memoria a 16 bit
FC160x10Scrittura di più registriScrivere più registri consecutivi in un'unica transazione

FC03 è di gran lunga il codice più utilizzato per il monitoraggio: consente di leggere le misurazioni, gli stati e i contatori di un'apparecchiatura.

Indirizzamento slave (ID unità)​

In Modbus RTU, ogni dispositivo sul bus RS-485 possiede un indirizzo univoco compreso tra 1 e 247. L'indirizzo 0 è riservato alla trasmissione broadcast: solo i comandi di scrittura possono essere trasmessi in broadcast.

In Modbus TCP, il campo Unit ID (precedentemente denominato Slave ID) è contenuto nell'intestazione MBAP. È generalmente impostato su 1 o 255 per i controllori con una sola entità, ma può essere utilizzato per indirizzare diversi bus RS-485 collegati a uno stesso gateway Modbus TCP/RTU.

Configurazione Modbus sul gateway Eziwan​

Il gateway Eziwan supporta nativamente Modbus RTU (tramite RS-485) e Modbus TCP (tramite Ethernet). La configurazione avviene tramite l'interfaccia web del gateway:

  1. Selezionare il protocollo: scegliere "Modbus RTU" o "Modbus TCP" dal menu "Fonte dati".
  2. Impostazioni seriali (solo RTU): velocità di trasmissione (9.600, 19.200, 38.400, 57.600 o 115.200), parità (Nessuna/Pari/Dispari), bit di stop (1 o 2).
  3. Indirizzo slave: inserire l’indirizzo dell’apparecchiatura (da 1 a 247).
  4. Definire i punti dati: per ogni valore da leggere, specificare il codice funzione (da FC01 a FC04), l’indirizzo del registro e il tipo di dati (INT16, UINT16, INT32, FLOAT32, BOOL).
  5. Periodo di acquisizione: frequenza di polling (da 1 secondo a diversi minuti a seconda delle esigenze).
  6. Verifica della connessione: utilizzare la funzione "Test di lettura" per verificare che i dati vengano letti correttamente prima di attivare l'invio al cloud.

Risorse correlate​

Domande frequenti​

Qual è la differenza tra Modbus RTU e Modbus TCP?​

Modbus RTU viaggia su un collegamento seriale RS-485 (bus multi-slave, fino a 1.200 m); Modbus TCP incapsula le stesse richieste in un frame Ethernet/IP sulla porta 502. Un gateway funge da ponte tra i due mondi.

Che cos'è un registro Modbus?​

Una cella di memoria a 16 bit identificata da un indirizzo. I registri di mantenimento (holding registers, FC03/FC06/FC16) contengono i valori di processo; le grandezze a 32 bit (numeri in virgola mobile, contatori) occupano due registri consecutivi.

Modbus è sicuro?​

No: il protocollo non prevede né autenticazione né crittografia. Non deve mai essere esposto su Internet — la regola è quella di limitarne l'uso alla rete locale e di trasferire i dati verso il cloud tramite un tunnel VPN crittografato.

Quanti dispositivi possono essere collegati a un bus Modbus RTU?​

Fino a 32 slave senza ripetitore (247 indirizzi logici possibili). Oltre tale numero, oppure per combinare frequenze di polling diverse, si procede alla segmentazione in più bus su porte RS-485 distinte.

Risorse correlate​