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