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.
| Criterio | Modbus RTU | Modbus TCP |
|---|---|---|
| Livello fisico | RS-232 / RS-485 | Ethernet / TCP-IP |
| Velocità tipica | Da 9.600 a 115.200 baud | 10/100 Mbps |
| Distanza | Fino a 1.200 m (RS-485) | Rete Ethernet standard |
| Numero di slave | Da 1 a 247 | Illimitato (indirizzamento IP) |
| Controllo di integrità | CRC-16 | Checksum TCP |
| Sicurezza nativa | Nessuna | Nessuna (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:
| Tipo | Indirizzo | Accesso | Descrizione |
|---|---|---|---|
| Coils (bobine) | 0x0001–0xFFFF (base 1) | Lettura / Scrittura | Uscite digitali on/off (bit) — stato di una valvola, di un relè |
| Discrete Inputs | 0x1001–0xFFFF | Solo lettura | Ingressi digitali on/off (bit) — stato di un sensore on/off |
| Registri di memoria | 0x4001–0xFFFF | Lettura/Scrittura | Registri a 16 bit in lettura/scrittura — setpoint, parametri, valori misurati |
| Registri di ingresso | 0x3001–0xFFFF | Solo lettura | Registri 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
| Codice | Esadecimale | Nome | Descrizione |
|---|---|---|---|
| FC01 | 0x01 | Read Coils | Leggi lo stato di N bobine (uscite digitali) |
| FC02 | 0x02 | Read Discrete Inputs | Leggi lo stato di N ingressi digitali |
| FC03 | 0x03 | Lettura dei registri di mantenimento | Lettura di N registri a 16 bit in modalità lettura/scrittura — il più utilizzato |
| FC04 | 0x04 | Lettura dei registri di ingresso | Lettura di N registri a 16 bit in sola lettura |
| FC05 | 0x05 | Scrittura di una singola bobina | Scrivere una singola uscita digitale (0x0000 = OFF, 0xFF00 = ON) |
| FC06 | 0x06 | Scrittura di un singolo registro | Scrivere un singolo registro di memoria a 16 bit |
| FC16 | 0x10 | Scrittura di più registri | Scrivere 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:
- Selezionare il protocollo: scegliere "Modbus RTU" o "Modbus TCP" dal menu "Fonte dati".
- 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).
- Indirizzo slave: inserire l’indirizzo dell’apparecchiatura (da 1 a 247).
- 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).
- Periodo di acquisizione: frequenza di polling (da 1 secondo a diversi minuti a seconda delle esigenze).
- 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
- Guida completa a RS-485 e Modbus
- Collegare un PLC alla piattaforma Eziwan
- Articolo del blog: Modbus TCP vs RTU — quando usare l'uno e quando l'altro?
- PLC / API — Controllore logico programmabile
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
- Modbus verso il cloud — raccolta dati e monitoraggio delle apparecchiature Modbus
- Gateway Modbus RTU / TCP — il ponte seriale ↔ IP
- Modbus RTU vs TCP — il confronto dettagliato
- Guida completa a Modbus — configurazione e risoluzione dei problemi
- Protocolli industriali — l'hub dei protocolli OT