Download del PDF dell’intera serie di articoli sul Modbus
Il protocollo Modbus su RS485 è sicuramente una delle implementazioni più diffuse grazie alla sua semplicità, economia ma anche affidabilità in ambiente industriale.
Essa è realizzata mediante un cavo bifilare che unisce in parallelo tutti i dispositivi presenti sulla rete. Essendo un protocollo di tipo Master/Slave saranno presenti sempre un solo dispositivo Master ed uno o più dispositivi Slave:
La connessione bifilare è la più economica possibile ma al tempo stesso offre delle ottime prestazioni in termini di velocità di comunicazione ed immunità ad eventuali segnali di disturbo elettromagnetico. Questo grazie alla particolare tecnica di utilizzo dei segnali elettrici applicati alla coppia di fili che verrà descritta nel seguito.
La comunicazione dei bits 0/1 tra i dispositivi avviene applicando sui due fili della coppia una tensione continua di piccola entità la cui polarità cambia in funzione del livello logico 0/1 da trasmettere:
Normalmente, in assenza di trasmissione da parte del dispositivo, tutti quattro gli interruttori del blocco di trasmissione sono OFF e quindi entrambi i conduttori della linea RS485 non sono connessi ad alcun potenziale elettrico. Tuttavia è preferibile non lasciare la linea fluttuante e per questo si applica sempre un potenziale di default, positivo su A e negativo su B. Questa polarizzazione è ottenuta collegando due resistenze, una tra l’alimentazione +5V ed il segnale A ed un’altra tra il segnale B ed il riferimento GND.
Quando un dispositivo deve trasmettere dei bits, esso prende momentaneamente il controllo della linea accendendo i propri interruttori a due a due in diagonale. Per trasmettere uno 0 logico la linea viene forzata con A=GND e con B=+5V, mentre per trasmettere un 1 logico la linea viene forzata con A=+5V e con B=GND. In questo modo la tensione misurata tra il conduttore A ed il conduttore B sarà +5V oppure -5V rispettivamente per trasmettere il bit 1 oppure il bit 0.
Ogni dispositivo comprende anche un blocco di ricezione che può determinare la polarità del segnale A relativamente a quella del segnale B. Per questo l’interfaccia di ricezione è in grado di misurare la differenza di tensione tra il polo A ed il polo B.
Se tale differenza è positiva (A > B) la ricezione corrisponde allo stato logico 1, se la differenza è negativa (A < B) lo stato logico che si sta ricevendo è 0. Il blocco di ricezione permette quindi di eseguire il processo inverso, decodificando l’informazione 0/1 precedentemente codificata con il blocco trasmettitore.
NOTA: il blocco trasmettitore è stato rappresentato idealmente con degli interruttori. In realtà questi interruttori sono realizzati con transistors in grado di commutare i segnali ad elevata velocità. Una vasta gamma di apposti circuiti integrati sono stati sviluppati come driver di interfaccia RS485 inserendo al loro interno sia la parte di trasmissione che di ricezione.
Questa tecnica di pilotaggio della linea seriale da origine al nome di “segnale differenziale” riferendosi a quello applicato ai fili A/B della linea. Si noti che in una connessione differenziale non è strettamente necessario collegare il riferimento comune GND di un dispositivo con quello degli altri come normalmente avviene quando si connettono dei segnali tra due apparecchiature distinte. Infatti nel caso del segnale differenziale quello che conta non è la tensione di A o B rispetto a GND ma la differenza relativa tra A e B. I segnali differenziali sono molto utilizzati, come ad esempio nella connessione USB, proprio per le loro elevate prestazioni abbinate alla massima semplicità del supporto fisico.
Un grande vantaggio derivante dai segnali differenziali lo si ha realizzando il cavo mediante una coppia di conduttori tra loro strettamente intrecciati, ottenendo un elevato grado di uguaglianza dei due fili in termini di posizione fisica nello spazio. Una eventuale interferenza, causata dalla vicinanza della linea ai cavi di altri sistemi, indurrà una tensione di disturbo su entrambi i fili della coppia, sovrapponendo ad essi delle tensioni indesiderate con la stessa polarità (positiva o negativa) rispetto al riferimento:
I ricevitori di ogni dispositivo, che effettuano una valutazione della differenza di tensione tra i fili A e B, saranno quindi in grado di eliminare questa componente di disturbo proprio perché di uguale segno ed entità su entrambi i fili. Per questo è importante che l’eventuale disturbo interferisca allo stesso modo con entrambi i conduttori della linea.
Negli schemi precedenti sono state evidenziate anche due resistenze da 120 ohm poste agli estremi della linea RS485. Lo scopo di queste resistenze è di definire l’impedenza di carico nelle parti terminali della linea per evitare che, nella propagazione dei segnali lungo i cavi, si generino, in corrispondenza alle estremità aperte, delle riflessioni indietro con conseguente alterazione della forma d’onda dei segnali stessi.
Questo fenomeno è tanto più evidente quanto più alte sono le frequenze dei segnali ma già alle più basse frequenze di utilizzo del bus di campo si possono notare questi effetti. Quindi l’inserimento delle resistenze di terminazione della linea è richiesto tassativamente in tutte le applicazioni.
Oltre alla corretta terminazione della linea differenziale è molto importante che la connessione di questa ai vari dispositivi avvenga seguendo un unico percorso lineare ossia senza diramazioni. Occorre prestare attenzione a questa regola anche nel punto di connessione della linea ai due appositi morsetti di ogni dispositivo. La linea di cavo va interrotta solo in corrispondenza della morsettiera di ogni dispositivo, serrando il cavo in arrivo con quello in partenza direttamente nei stessi morsetti. Solo il primo ed ultimo dispositivo, indipendentemente se Master o Slave, devono anche avere la connessione alla resistenza di terminazione. Questa resistenza è solitamente incorporata nei dispositivi ed abilitabile da un’apposito interruttore.
La rete seriale RS485 permette di realizzare impianti distribuiti posizionando i vari dispositivi anche a notevoli distanze tra loro. La lunghezza massima della connessione dipende da molti fattori come la velocità di comunicazione (generalmente da 9600 a 115200b/s per il protocollo Modbus), dalla qualità dei cavi e dalle caratteristiche del driver hardware dei dispositivi.
Utilizzando cavi specifici per le linee differenziali, come quelli prodotti da Belden, la distanza massima raggiungibile è di 1200m con velocità di comunicazione nel range da 10Kb/s a 100Kb/s mentre con velocità crescenti fino a 1Mb/s la distanza scende proporzionalmente fino a 120m. Questi sono dati caratteristici specificati per i soli cavi ma esistono tanti altri fattori, dipendenti dalla particolare applicazione, come l’ambiente circostante e l’accuratezza dell’installazione, che possono portare ad una significativa riduzione della distanza massima raggiungibile per una determinata velocità di comunicazione.
Il numero massimo di dispositivi collegabili alla rete RS485 dipende principalmente dalle caratteristiche dei circuiti integrati driver adottati nelle interfacce dei singoli nodi.
La specifica EIA/TIA-485 richiede che il circuito trasmettitore sia capace di pilotare fino a 32 unità di carico dove una unità di carico (UL) equivale ad una impedenza di circa 12Kohm. Le tecnologie dei circuiti integrati driver, in continua evoluzione in termini di prestazioni, hanno permesso di introdurre nel mercato dispositivi capaci di corrispondere a frazioni dell’unità di carico per cui il numero massimo di dispositivi può essere maggiore di 32. Per esempio componenti con 1/2UL permettono di connettere tra loro fino a 64 dispositivi, mentre con 1/8UL si può arrivare a 256 nodi. Si consideri comunque che questi dati si basano esclusivamente sulla valutazione dell’unità di carico, senza considerare le resistenze di polarizzazione del bus e tanti altri elementi della reale applicazione, in particolare la qualità e lunghezza delle connessioni ed anche la velocità di comunicazione, che possono ridurre in modo sostanziale il numero massimo dei dispositivi.