Un contatore su una linea RS-485 e lo stesso modello con porta Ethernet rispondono alle stesse richieste Modbus secondo la stessa mappa dei registri. Cambia solo il trasporto: Modbus RTU sulla linea seriale, Modbus TCP sulla rete IP. In un sito esistente, la scelta segue di norma l'interfaccia già disponibile sull'apparecchiatura.
Questa guida fa parte della serie su Modbus e RS-485.
Confronto diretto
| Modbus RTU | Modbus TCP | |
|---|---|---|
| Trasporto | Linea seriale: RS-485, o RS-232 per un solo dispositivo | TCP/IP su Ethernet o Wi-Fi |
| Indirizzo del dispositivo | Da 1 a 247 sul bus; 0 per il broadcast | Indirizzo IP, più identificativo unità per i dispositivi dietro un gateway |
| Trama | Indirizzo, codice funzione, dati, CRC a 16 bit | Intestazione MBAP (7 byte), codice funzione, dati |
| Controllo errori | CRC in ogni trama | Checksum TCP; nessun CRC Modbus |
| Separazione delle trame | Silenzio di almeno 3,5 tempi di carattere | Campo lunghezza nell'intestazione |
| Richieste in corso | Una per volta sul bus | Più connessioni; l'identificativo di transazione associa ogni risposta |
| Impostazioni tipiche | Velocità in baud, parità, bit di stop, indirizzo | Indirizzo IP, porta 502, identificativo unità |
| Cablaggio | Coppia intrecciata in linea, terminata alle due estremità | Rete del sito |
La guida RS-485 e Modbus spiega il livello seriale sotto Modbus RTU e la differenza con RS-232. I codici funzione (03 lettura dei registri holding, 04 lettura dei registri di ingresso, 06 e 16 scrittura) sono gli stessi nelle due varianti. Anche tipi di dato, ordine delle word e fattori di scala restano gli stessi. La guida alla mappa dei registri li approfondisce.
Confronto delle trame
Ecco come appare, nelle due varianti, una richiesta al dispositivo 17 per leggere tre registri holding a partire dall'indirizzo 0x006B:
| Variante | Byte (esadecimali) |
|---|---|
| Modbus RTU | 11 03 00 6B 00 03 seguiti dal CRC di 2 byte |
| Modbus TCP | 00 01 00 00 00 06 11 03 00 6B 00 03 |
Nella trama TCP, i primi sette byte sono l'intestazione MBAP: identificativo di transazione (0x0001), identificativo di protocollo (sempre 0 per Modbus), lunghezza dei dati successivi (6 byte) e identificativo unità (0x11). L'unità dati di protocollo dopo l'intestazione è identica. Il calcolatore CRC e LRC Modbus ricava i byte di controllo della trama RTU:
Tempi e capacità del bus
Su un bus RTU c'è una sola richiesta in corso alla volta. Il tempo per richiesta comprende il tempo di trasmissione della richiesta e della risposta, il tempo di risposta del dispositivo e l'intervallo tra le trame. A 9.600 baud con parità pari, ogni carattere richiede 11 bit: un byte impiega quindi circa 1,15 ms. La guida Modbus seriale fissa l'intervallo tra le trame a 1,75 ms sopra 19.200 baud. Il calcolatore dei tempi Modbus RTU somma questi tempi per un intero bus:
La guida a interrogazione e ritentativi mostra l'effetto di un dispositivo offline su ogni ciclo. Con Modbus TCP la rete raramente è il limite. Di solito contano di più il tempo di elaborazione del dispositivo e il numero di connessioni simultanee che accetta. Molti contatori ne accettano solo poche, alcuni una sola. Verifica il limite prima che più sistemi interroghino lo stesso contatore.
Identificativi unità e gateway
Un gateway seriale-Ethernet consente ai client Modbus TCP di raggiungere dispositivi RTU. Il client invia una richiesta TCP all'indirizzo IP del gateway e mette l'indirizzo del dispositivo seriale nell'identificativo unità. Il gateway inoltra la richiesta sul bus, attende la risposta e la restituisce via TCP.
Tre punti richiedono attenzione:
- Identificativo unità dei dispositivi TCP diretti. La guida Modbus TCP dice che l'identificativo unità non viene usato quando il server è raggiunto tramite il suo indirizzo IP e raccomanda 0xFF. Molti dispositivi lo ignorano; alcuni richiedono 1 o il proprio indirizzo seriale. Usa il valore indicato nel manuale del dispositivo.
- Timeout. Il timeout TCP del client deve superare il timeout seriale del gateway più il tempo che il gateway impiega ad attendere le altre richieste sul bus. Altrimenti il client rinuncia mentre il gateway sta ancora aspettando.
- RTU su TCP. Alcuni convertitori trasportano su una connessione TCP le trame RTU complete di CRC, senza intestazione MBAP. Questo non è Modbus TCP: il client va configurato nella modalità corretta. La guida a gateway di protocollo e bridge trasparente spiega la differenza.
Per ogni punto, registra indirizzo IP, porta, identificativo unità e dispositivo fisico che risponde. Dopo la sostituzione di un gateway, controlla per prima cosa questo instradamento.
Scelta per un sito
Scegli il trasporto che le apparecchiature già offrono:
| Situazione | Scelta abituale |
|---|---|
| Contatori con soli morsetti RS-485, in uno o due quadri | Modbus RTU su un bus corto, o un'interfaccia locale |
| Apparecchiatura con porta Ethernet su una rete gestita | Modbus TCP, con un piano degli indirizzi concordato con l'IT del sito |
| Bus RTU esistente già interrogato da un BMS | Leggi dal BMS o da un gateway; non aggiungere un secondo master |
| Molti dispositivi seriali che più sistemi devono leggere | Un gateway Modbus TCP davanti al bus |
| Contatori seriali lontani dal Gateway e senza percorso per un cavo | Un'interfaccia Modbus wireless vicino ai contatori |
Per entrambe le varianti, procurati la mappa dei registri del modello e del firmware esatti prima di scegliere l'hardware. «Supporta Modbus» non dice quali valori il dispositivo rende disponibili.
Sicurezza
Modbus TCP e Modbus RTU non prevedono autenticazione né cifratura. Qualsiasi client che raggiunge la porta 502 può leggere e, se il dispositivo lo consente, scrivere. Proteggili con la progettazione della rete: rete o VLAN separata per le apparecchiature di controllo, regole firewall che ammettano solo i sistemi necessari e nessuna esposizione a Internet.
La Modbus Organization pubblica un protocollo Modbus Security separato, che incapsula Modbus in TLS con certificati X.509 sulla porta 802. Devono supportarlo entrambe le estremità. Un gateway davanti a un dispositivo Modbus senza protezione non rende sicuro quel dispositivo: sposta soltanto il confine di sicurezza.
Prova le letture prima di qualsiasi scrittura. Tratta le scritture come una fase separata, approvata dal proprietario dell'apparecchiatura.
Modbus TCP e RTU con Edge
Edge sul Gateway ZGW-20 opera come client Modbus per entrambe le varianti. Interroga dispositivi Modbus TCP sulla rete del sito, compresi convertitori RTU su TCP, e dispositivi Modbus RTU su una porta seriale del Gateway. Ogni connessione ha una coda, timeout e frequenza di interrogazione propri. Se un contatore è irraggiungibile con un cavo dati, un'interfaccia Modbus ZMB lo legge su RS-485 e invia i registri attraverso la rete mesh Zigbee. Edge include anche un server Modbus: un BMS o un sistema SCADA può leggere dal Gateway i dati del sito come registri Modbus TCP. La guida alla messa in servizio di Modbus RS-485 tratta in dettaglio il lato seriale.
Domande frequenti
Qual è la differenza tra Modbus TCP e Modbus RTU?
Modbus RTU usa una linea seriale come RS-485: trame binarie, CRC per il controllo degli errori e un master che interroga i dispositivi per indirizzo. Modbus TCP usa una rete IP: le stesse richieste in una trama con intestazione MBAP di 7 byte, inviate via TCP alla porta 502, con il controllo degli errori affidato a TCP. Codici funzione e mappe dei registri sono gli stessi.
Quale porta usa Modbus TCP?
La porta TCP 502. Il protocollo Modbus Security, che incapsula Modbus in TLS, usa la porta 802.
Che cos'è l'identificativo unità in Modbus TCP?
È un campo di un byte nell'intestazione MBAP. Un gateway lo usa per inoltrare la richiesta al dispositivo seriale dietro di sé, quindi contiene l'indirizzo di quel dispositivo. Per un dispositivo Modbus TCP diretto, la guida raccomanda 0xFF, ma molti dispositivi richiedono 1 o accettano qualunque valore.
Che cos'è Modbus RTU su TCP?
È una trama RTU completa di indirizzo e CRC, inviata senza modifiche su una connessione TCP e senza intestazione MBAP. Alcuni convertitori seriale-Ethernet funzionano così. Non è Modbus TCP: il client deve usare la modalità corretta per ciascun dispositivo.