• 1
  • info@lungolagocapodimonte.it

    Le interfacce seriali RS422 ed RS485 Cenni ai protocolli di trasmissione Master-slave Multi-master Codifica ASCII 9 bit Arduino Uno Duemilanove

    Le Interfacce Seriali - Cenni ai Protocolli di Trasmissioni - Parte 11°




    Cenni ai Protocolli di Trasmissioni

    Esistono numerosi protocolli che utilizzano come layer fisico lo standard RS485: per tutti cito il CAN (originariamente pensato per applicazioni automobilistiche ma poi affermatosi anche in ambito industriale) e il profibus (uno standard di fatto in ambito industriale). La descrizione di questi protocolli va oltre gli scopi di questo tutorial ed in questo paragrafo mi limiterò a presentare tre tipologie che spesso si incontrano in applicazioni industriali.

    Master-slave

    Questa è la configurazione più semplice da gestire quando si lavora con molti dispositivi connessi alla rete. La struttura è caratterizzata da un master e numerosi slave, ciascuno individuato da un proprio indirizzo; tutti i dispositivi sono elettricamente identici e deve esistere un accordo preventivo sulla velocità di trasmissione ed il formato dei byte e dei pacchetti di dati. Tutti i dispositivi slave sono permanentemente in ascolto sulla rete. Il dispositivo master (per esempio un PC) è l'unico che può iniziare la trasmissione di dati, inviando un pacchetto contenente l'indirizzo del nodo slave di destinazione ed il comando. Lo slave a cui il comando è indirizzato leggerà l'intero pacchetto, eseguirà il comando ed eventualmente risponderà al master. Gli slave a cui il pacchetto non è indirizzato semplicemente ignoreranno il pacchetto. Non è ammessa la comunicazione diretta tra due slave ed i pacchetti broadcast (cioè diretti contemporaneamente dal master a tutti gli slave, quale potrebbe essere un comando di inizializzazione) sono possibili solo a condizione che non richiedano risposte.

    Questo protocollo ha lo scopo di impedire che due trasmettitori vengano attivati contemporaneamente causando conflitti e, se non ci sono errori di trasmissione o interpretazione, lo scopo è raggiunto grazie al fatto che il master coordina tutte le attività.

    Purtroppo sono sempre possibili malfunzionamenti: per esempio, a causa di un errore di trasmissione, uno slave potrebbe interpretare scorrettamente un indirizzo oppure leggere come indirizzo ciò che in realtà è un comando o una risposta di un altro slave. È anche possibile che a causa di un errore di configurazione due slave abbiano lo stesso indirizzo. Per questo è opportuno prevedere alcune strategie di controllo:

    • evidenziare se un byte rappresenta un indirizzo oppure un comando, per esempio imponendo che uno dei bit di ogni byte trasmesso sia 1 se si tratta di un indirizzo e 0 in tutti gli altri casi
    • inserire in ogni pacchetto un byte di controllo del tipo CRC oppure checksum: questo permette di identificare e scartare pacchetti difettosi. È possibile anche l'utilizzo per ciascun byte di un "bit di parità" anche se non è una pratica frequente.
    • inserire in ogni pacchetto trasmesso l'indirizzo del mittente oltre che del destinatario, al fine di permettere al master di identificare risposte non richieste.
    • se non ci sono particolari problemi di efficienza, utilizzare pacchetti di lunghezza omogenea (oppure includere un byte di conteggio) al fine di identificare i frammenti dei pacchetti "spezzati".

    Multi-master

    Questa struttura è finalizzata a realizzare nodi tra loro equivalenti dal punto di vista logico: ciascun nodo è identificato da un indirizzo univoco e può inviare un pacchetto a qualunque altro nodo in qualunque momento. Visto che non esiste nessun controllo centralizzato dell'accesso alla linea sono sempre possibili conflitti nel caso in cui due dispositivi decidano di inviare dati nello stesso momento.

    Al fine di evitare un numero eccessivo di conflitti e comunque ridurre al minimo i danni è necessario:

    • adottare tutti gli accorgimenti di cui al paragrafo precedente
    • prima di iniziare una trasmissione verificare che la linea non sia già occupata, verificando che non ci traffico. Questo metodo produce in ambienti ad alto traffico l'effetto secondario di picchi di trasmissioni dopo la fine di un pacchetto di grosse dimensioni: è quindi necessario attendere un certo tempo, possibilmente casuale, dopo la fine di un pacchetto prima di iniziare una nuova trasmissione.
    • è utile "ascoltare" la linea durante la propria trasmissione al fine di identificare sul nascere eventuali conflitti. L'ideale sarebbe verificare condizioni di corto-circuito misurando la corrente ma spesso è una soluzione troppo complessa.

    Quello appena descritto assomiglia all'algoritmo CSMA/CD utilizzato sulle reti Ethernet ma è possibile anche implementare un algoritmo ispirato al Token Ring o ad altri protocolli di gestione dei conflitti.

    Codifica ASCII

    I segnali usati per trasmettere un byte su una rete RS485 in genere hanno un formato uguale a quello usato nella trasmissione seriale asincrona RS232 tipica p.e. dei personal computer: ciascun gruppo di 8 bit è preceduto da un singolo bit di start e seguito da almeno un bit di stop, oltre un eventuale bit di parità. Una delle esigenze che possono nascere nella realizzazione di un protocollo di comunicazione è la possibilità di identificare facilmente se un byte rappresenta un indirizzo, un comando o un dato generico. La tecnica spesso adottata è quella di codificare ciascun byte che deve essere trasmesso attraverso due o tre byte che rappresentano ciascuno il codice ASCII di un carattere. Si consideri per esempio il numero decimale 163 (rappresentato in esadecimale da 0xA3): per trasmettere questo numero possono essere inviati i tre byte corrispondenti 0x31, 0x36 e 0x33 (oppure i due byte 0x41 e 0x33). In questo modo tutti i byte generici occupano i soli sette bit meno significativi, rendendo disponibile l'MSB per identificare gli indirizzi. I caratteri non utilizzati in questa codifica sono disponibili per indicare comandi o delimitatori dei pacchetti. Lo svantaggio di tale tipo di codifica è l'occupazione di banda almeno doppia dello stretto necessario.

    9 bit

    Lo scopo di questo protocollo è quello di identificare in modo immediato i byte che rappresentano un indirizzo pur mantenere i dati lunghi 8 bit: l'idea è quella di utilizzare per la codifica di ciascun byte un blocco costituito da 9 bit: otto sono quelli effettivi, il nono indica se si tratta di un byte generico oppure di un indirizzo. Questa tecnica di codifica permette alle UART dotate della possibilità di gestire in hardware questa modalità di generare un interrupt solo in presenza di un indirizzo: in questo modo il processore non deve esaminate ogni singolo byte trasmesso sulla linea per riconoscere pacchetti destinati al proprio indirizzo.

    Purtroppo questa tecnica è incompatibile con le UART normalmente installate nei personal computer.


    Le Interfacce Seriali - Le Interfacce Seriali RS422 ed RS485 - Parte 1°

    Le Interfacce Seriali - Tipologie di Segnali Digitali - Parte 2°

    Le Interfacce Seriali - Lo Standard RS422 - Parte 3°

    Le Interfacce Seriali - Lo Standard RS485 - Parte 4°

    Le Interfacce Seriali - Adattamento di Impedenza - Parte 5°

    Le Interfacce Seriali - Valutare la Qualità della Trasmissione - Parte 6°

    Le Interfacce Seriali - La Polarizzazione - Parte 7°

    Le Interfacce Seriali - La Protezione - Parte 8°

    Le Interfacce Seriali - La Selezione dei Cavi - Parte 9°

    Le Interfacce Seriali - La Conversione da RS232 a RS422 e RS485 - Parte 10°

    Le Interfacce Seriali - Cenni ai Protocolli di Trasmissione - Parte 11°

    Le Interfacce Seriali - Dispositivi Integrati e Risorse in Rete - Parte 12°

    Le Interfacce Seriali - Appendice: Caratteristiche Elettriche - Parte 13°

    Aggiungi commento


    Codice di sicurezza
    Aggiorna