3. Basi di teoria

3.1. Il modello OSI

Ogni qualvolta si parla di comunicazione in termini tecnici, si fa referenza al modello OSI. Orbene, questo modello è spesso mal capito, non conosciuto o addirittura sfruttato per indurre a credere che il sistema di comunicazione commercializzato è conforme ad uno standard internazionale. Mi sembra quindi indispensabile esporre qualche concetto a questo proposito.

Fig. 3: modello OSI

Il modello OSI (Open System Interconnection) è stato ideato in seno all’ISO (International Standard Organisation) ed è una base di referenza (un modello, appunto) per identificare e separare i vari gruppi funzionali di un ogni sistema di comunicazione. La funzione di modello, quindi serve unicamente da punto di riferimento e confronto. NON è dunque una norma alla quale un sistema di comunicazione deve aderire!

Questo modello suddivide in sette livelli (layer) le funzioni di un sistema di comunicazione. Non è comunque indispensabile di disporre di tutte e sette i livelli in ogni sistema: a seconda delle funzionalità necessarie qualche livello intermediario è spesso omesso. Vi illustro brevemente qui di seguito i ruoli che corrispondono ad ogni livello in un sistema di comunicazione:

Fig. 4: flusso dei dati e relazioni logiche

Il flusso dei dati attraverso un sistema di comunicazione subisce un trattamento a tappe simile a quello di un oggetto che si desidera inviare per posta: ad ogni livello del modello OSI corrisponde un trattamento ben preciso, simile alle diverse fasi di imballaggio dell’oggetto. La trasmissione attraverso la rete corrisponde allora alla spedizione del pacco, mentre che alla ricezione, ogni livello del modello OSI si occupa di spacchettare le informazioni aggiunte all’imballaggio, procedendo in senso inverso, come per un pacco iniziando dal cartone esterno, poi dalla carta di imballaggio, e così via. In pratica, ogni livello alla ricezione si occupa di spacchettare ciò che è stato aggiunto ai dati originali al momento della trasmissione dal livello corrispondente. Vi è dunque un flusso dei dati fisici verticale, mentre vi sono delle corrispondenze logiche orizzontali tra i livelli OSI delle due stazioni comunicanti.

3.2. Elementi di comunicazione

In una rete di telecomunicazione di una certa dimensione, non è sempre sufficiente collegare i vari nodi che partecipano alla comunicazione mediante un semplice cavo elettrico. A causa delle distanze elevate, del numero alto di nodi o per qualunque altra ragione può dunque essere necessario prendere provvedimenti affinché la comunicazione possa effettivamente aver luogo correttamente, adattando la rete alle esigenze pratiche. A questo scopo può essere necessario dover inserire dei circuiti che separano i diversi segmenti della rete in modo da migliorarne le caratteristiche. In altri casi il bus deve poter interagire anche con altri sistemi di comunicazione. Ecco allora che altri apparecchi devono essere utilizzati. Insomma, vi sono diversi accorgimenti da prendere nella pratica che si scostano leggermente dal concetto iniziale di bus visto come conduttore comune a più circuiti... Tuttavia anche qui si può avere un approccio teorico abbastanza semplice, proprio grazie al modello OSI al quale farò largamente riferimento nelle pagine che seguono.

3.2.1. Repeater

Un repeater, o amplificatore, permette di migliorare i segnali elettrici presenti sulla rete in modo da poter coprire delle distanze maggiori tra i nodi oppure per permettere di collegare un numero superiore di nodi ad una stessa rete, ripartendo il carico delle singole stazioni sui diversi segmenti di rete così realizzati. Un altro compito che spesso incombe al repeater è quello di adattare la comunicazione a dei mezzi fisici diversi. L’esempio più classico è quello della deportazione di un segmento di rete ad una relativamente grande distanza tramite fibre ottiche: da rete basata su cavi elettrici, un primo repeater converte la comunicazione in un sistema ottico. Dall’altra parte della fibra ottica un secondo repeater può effettuare la conversione inversa, oppure può essere collegato un apparecchio con interfaccia ottica.
Facendo riferimento al modello OSI, si nota come questo elemento di comunicazione si occupi unicamente di decodificare il livello 1, ovvero il livello fisico. Tutto quanto concerne il contenuto delle trame non influenza minimamente il funzionamento del repeater, rispettivamente il repeater non lo interpreta. È infatti noto che generalmente un repeater non ha una propria intelligenza ma è formato unicamente da circuiti elettronici semplici.

Fig. 5: repeater

Una variazione dei repeater più semplici, formati da due connettori per i due segmenti di rete che sono destinati a collegare, è lo splitter. Quest’ultimo è identico ad un repeater comune, ad eccezione del fatto che è munito di un numero superiore di connettori. Il principio di funzionamento è semplice: lo splitter "ascolta" tutti i segmenti di rete ad esso collegati. Non appena rileva segnali di comunicazione su uno di essi, commuta tutti gli altri in trasmissione e riporta i segnali entranti dal segmento attivo sugli altri.

Fig. 6: splitter, una variazione del repeater

3.2.2. Bridge

Il bridge, o ponte, interpreta sia il livello 1 che il livello 2 del modello OSI. Esso è quindi in grado di collegare due segmenti di reti diverse, con delle caratteristiche elettriche e di codifica distinte, pur permettendo, ovviamente, a certe applicazioni distribuite sui due segmenti di comunicare tra loro. Tuttavia la rete più rapida è costretta ad abbassarsi al livello di quella meno efficiente, simulando o emulando la comunicazione di quest’ultima. Dato che il bridge non è un apparecchio intelligente, per un messaggio ricevuto da un sistema viene generato un messaggio equivalente sull’altro.

Fig. 7: bridge

3.2.3. Router

Il router, come il suo nome lo lascia facilmente intuire, si occupa di deviare le trame di comunicazione verso i diversi segmenti di rete appropriati, definendo così l’istradamento necessario delle trame. Allo scopo di effettuare tale compito, il router deve interpretare i messaggi fino al livello 3 del modello OSI. Va da sé che i sistemi di comunicazione che prevedono l’impiego di apparecchi di questo tipo dispongono pure del livello 3 del modello OSI, nello stack di comunicazione proprio al sistema.

Fig. 8: router

3.2.4. Gateway

Il nome gateway, che in italiano potrebbe essere chiamato "passerella", fa pensare a qualche cosa di simile al bridge. Tuttavia, a differenza di quest’ultimo, il gateway ha abbastanza intelligenza per decodificare i messaggi di comunicazione fino al livello 7 del modello OSI, ovvero fino al livello dell’applicazione. Come lo vedremo più avanti, questo tipo di apparecchio permette di collegare in modo ottimale dei bus di tipo e caratteristiche completamente diversi, mantenendo pur sempre una canale di comunicazione aperto tra le applicazioni che girano sui due sistemi collegati. Il gateway, grazie alla sua configurabilità, le sue risorse e la sua "intelligenza", è in grado di ottimizzare la comunicazione da entrambi i lati, sfruttando appieno le caratteristiche tecniche dei due sistemi di comunicazione che collega.

Fig. 9: gateway

Questo tipo di apparecchio, malgrado la sua importanza ed in parte a causa della sua complessità nonché della fetta di mercato limitata che rappresenta, risulta comunque essere piuttosto raro. Spesso capita di trovare chi, sotto il nome di gateway, spaccia dei semplici bridges. Evidentemente non si tratta per nulla della stessa cosa...

3.3. Topologia di rete

La comunicazione tra due nodi si effettua attraverso una linea punto-a-punto unicamente nel caso in cui solo questi due nodi sono presenti. In tal caso la connessione avviene mediante un protocollo proprietario che sfrutta un livello basso standard quale l’RS-232 o l’RS-422 (ricordatevi il modello OSI: i tipi di comunicazione RS-232 e RS-422 definiscono unicamente il livello 1 del modello). In questo caso la topologia del sistema di comunicazione è lineare (da un punto all’altro, appunto). L’unica limitazione a cui si va generalmente in contro è la distanza tollerata che, se importante, può richiedere un adeguamento verso il basso della cadenza di trasmissione.

Tutto questo interessa però poco nel settore dei bus di campo. Qui, infatti, il numero di nodi collegati assieme dal sistema di comunicazione è generalmente superiore. Si pone allora un’altra questione, cioè quella dell’aspetto della topologia della rete. La topologia non è altro che la forma fisica che prende la rete in base agli elementi di comunicazione impiegati , ai nodi collegati ed il modo in cui tutti questi apparecchi sono interconnessi.

Esistono diversi modelli di topologie tipiche. I più ricorrenti sono i seguenti:

la struttura ad anello (ring)
la struttura a stella
la struttura ad albero

3.3.1. Struttura ad anello (Ring)

La struttura ad anello, o ring, permette di collegare in serie e successivamente tutti i nodi della rete. Tipicamente tra un nodo ed il successivo la comunicazione unidirezionale. Il nodo successivo si occupa di ripetere il segnale ricevuto, estraendone nel contempo le parti che lo riguardano ed immettendo al momento appropriato le informazioni che vuole inviare. Questa struttura presenta due vantaggi principali: innanzitutto il segnale è rigenerato in ogni nodo, per cui ogni nodo gioca anche il ruolo di repeater e permette quindi di coprire senza costi aggiuntivi delle distanze notevoli. D’altra parte la comunicazione unidirezionale è ideale per la messa in servizio di fibre ottiche, in quanto ogni segmento di rete rappresenta in pratica un collegamento punto-a-punto unidirezionale. Questo permette, in certe condizioni, pure un risparmio notevole di materiale di cablaggio.

I due svantaggi principali di questa topologia non sono tuttavia trascurabili: dapprima si deve sottolineare la difficoltà di estendere la rete. Non è infatti possibile aggiungere un nuovo nodo senza interrompere anche solo momentaneamente la comunicazione, in quanto è indispensabile aprire l’anello per inserirvi il nuovo venuto. D’altra parte se un componente del circuito non funziona più o un segmento di rete è danneggiato, tutta la rete non funziona più! Se questo è magari accettabile in una rete di PC negli uffici, dove i singoli PC possono continuare a lavorare in modo locale anche se manca per un breve tempo il collegamento con gli altri, nelle applicazioni in tempo reale legate ad automatismi e sincronismi ogni ritardo può essere causa di danni diretti o indotti notevoli. La topologia ad anello è quindi raramente utilizzata nel dominio dei bus di campo.

Fig. 10: struttura ad anello

3.3.2. Struttura a stella

La struttura a stella presenta delle caratteristiche diametralmente opposte a quelle della struttura ad anello. In effetti la struttura a stella si basa su di un punto centrale della rete dove si situa generalmente un nodo avente delle funzioni speciali (quali il ruolo di master o di server della rete) dal quale partono un numero di collegamenti bidirezionali pari al numero di nodi decentralizzati che la rete conta. Questa configurazione permette quindi facilmente e senza dover interrompere la comunicazione di aggiungere un nuovo nodo alla rete, ammesso che il nodo centrale disponga ancora di connessioni libere. Inoltre, in caso di guasto di un componente, gli altri nodi possono proseguire senza interruzione, dato che la comunicazione con gli altri nodi non viene perturbata, ammesso che il nodo guasto non sia proprio quello centrale.
Tuttavia, come è facile intuirlo, una centralizzazione dei cablaggi richiede una quantità notevole di cavi e non permette di coprire grandi distanze.

Fig. 11: struttura a stella

3.3.3. Struttura ad albero

La struttura ad albero rappresenta una specie di compromesso tra i vantaggi e gli svantaggi delle due topologie viste sopra. In linea di massima una struttura ad albero permette delle biforcazioni, dunque delle strutture simili a quella a stella. Come in questa configurazione la comunicazione sulle linee è bidirezionale. Tuttavia in una struttura ad albero sui vari segmenti creati si possono collegare più nodi. D’altra parte la struttura ad albero ideale dovrebbe essere formata da un unico troncone sul quale si collegano tutti i nodi. Questo richiama vagamente la struttura ad anello, dove però i nodi non sono allacciati in cascata e l’anello non ha bisogno di essere chiuso. I vari nodi, infatti, sono collegati in parallelo sulla stessa linea, e non in serie, come in una struttura ad anello. Quest’ultima caratteristica è fondamentale per permettere alla comunicazione di proseguire anche in caso di guasto di un nodo. Anche l’estensibilità della rete può avvenire facilmente senza dover interrompere la comunicazione. Addirittura è possibile aggiungere un intero nuovo segmento di rete con un numero anche importante di nuovi nodi, esattamente in modo analogo alla semplice aggiunta di un singolo nodo. La libertà di estensione, sia in fatto di numero di elementi connessi che in fatto di forma e distanza, risulta quindi enorme. Vedremo comunque più avanti come e con quali restrizioni tali estensioni possono essere effettuate.
Questa topologia, come senz’altro avrete già immaginato, è la più diffusa nel settore dei bus di campo, proprio per le sue caratteristiche vantaggiose. Il livello fisico impiegato in questo tipo di rete è spesso eseguito secondo la norma RS-485 o in maniera simile.

Fig. 12: struttura ad albero

3.4. Aspetti fisici

Orbene, contrariamente a quanto spesso si crede, non basta collegare in qualsiasi modo i nodi in parallelo, limitandosi a verificare la polarità delle connessioni. Esistono delle teorie abbastanza complesse sulle linee elettriche, sulla trasmissione di segnali, sulle riflessioni e su altri argomenti ancora che avrete magari già seguito in altri ambiti. Non voglio riportarle in questo testo, perché al di fuori del tema principale. Tuttavia desidero richiamare qualche indicazione utile e pratica per realizzare una rete senza intoppi. È infatti noto che la maggior parte dei problemi di messa in servizio di un impianto è causata dalla leggerezza con la quale l’aspetto fisico della rete di comunicazione viene trattato. Ecco quindi di seguito alcuni punti fondamentali da ricordare al momento della concezione e realizzazione di una rete:

Fig. 13: struttura ad albero consigliata

Prendendo in considerazione questi semplici aspetti, un cavo formato da un semplice doppino (più un conduttore per la massa di referenza) schermato è sufficiente nella maggior parte dei casi, anche in ambienti particolarmente ostili. Questo permette di evitare di ricorrere a cavi coassiali o a fibre ottiche ancor più onerose, anche in ambiti dove ci si immagina che le perturbazioni esterne sono inevitabili. Questo è stato dimostrato dalla pratica, in installazioni montate su macchine ad elettroerosione e in laboratori di elettrofisica. In quest’ultimo caso venivano generati dei fulmini artificiali che arrivavano fin a cancellare le EPROM di alcuni print disseminati nel laboratorio. Tuttavia la comunicazione attraverso il bus (si trattava del Bitbus nel caso specifico) funzionava senza problemi!

3.5. Aspetti dei protocolli

Come accennato all’inizio, vi sono numerosi sistemi di comunicazione che ricadono sotto la denominazione di bus di campo. In comune hanno praticamente ben poco. L’aspetto che forse è più marcante è quello di poter collegare con un mezzo fisico comune un numero più o meno importante di circuiti. A parte quest’aspetto si potrebbe sottolineare la nozione di tempo reale comune a tutti i bus di campo. Tuttavia a seconda del bus e dell’applicazione, anche questo concetto è molto variabile. Vi sono sistemi che considerano un tempo "reale" quando è di qualche decina di microsecondi. Altri sistemi accettano dei tempi di risposta che possono andare fino a qualche secondo.
Parlando di caratteristiche tecniche ed aspetti dei protocolli sono quindi di nuovo costretto a fare astrazione e presentare in forma teorica i concetti che più sono diffusi. Lo farò iniziando dal basso del modello OSI, ovvero dal livello 1, passando dal livello 2 e terminando con alcune referenze al livello 7.

3.5.1. Codifica dei segnali

Il concetto di comunicazione è strettamente legato all’idea di "codifica". Per poter trasmettere un’informazione, infatti, questa deve essere codificata in modo opportuno.
La codifica è l’operazione che consiste nel trasformare delle informazioni da un certo repertorio di segni verso un altro. La codifica e la relativa decodifica sono operazioni che modificano la forma dei segnali, ma non il contenuto.
All’ultimo stadio della preparazione di un’informazione da trasmettere, al momento di convertire i dati ordinati a blocchi di bit in una sequenza seriale, i singoli bit ricevono un’ultima codifica utile a facilitare il trasporto della trama dalla sorgente verso i consumatori.

Vi sono diversi modi di codificare una sequenza seriale dei bit: la più semplice è la codifica denominata NRZ (Non Return to Zero). Nel codice binario NRZ i singoli bit sono allineati successivamente e non sono separati da alcun segnale. L’aspetto della sequenza ricalca fedelmente il contenuto stesso, in quanto i bit a ‘1’ sono effettivamente rappresentati da un segnale di una certa ampiezza, rispettivamente i bit a ‘0’ vengono rappresentati da una tensione diversa. La cadenza di trasmissione prestabilita permette di individuare i singoli bit in base al tempo trascorso. Il problema principale si presenta quando una serie prolungata di bit dello stesso tipo viene trasmessa: non avendo più nessun fianco positivo o negativo, diventa difficile risincronizzare i tempi, per cui si può incappare in un conteggio errato dei bit. Gli UART tradizionali (usati su tutte le apparecchiature munite di RS-232, ma anche su altri sistemi) rimediano a questo problema introducendo alcuni limiti: i bit di dati massimi trasmessi vanno dai 5 (non più usato) ai 10 bit. Questi vengono impacchettati con un bit di start (a zero) ed uno o più bit di stop (a ‘1’). La linea, da parte sua, quando non è occupata si trova a ‘1’. Ogni invio di blocco inizia così con un fianco negativo che permette la risincronizzazione dei due apparecchi. Dato che la lunghezza del blocco è ridotta (12 bit al massimo) la tolleranza degli orologi dei due sistemi non è più così critica. Lo svantaggio è però che i dati da trasmettere devono venire frammentati (generalmente a byte) ed inviati con una aggiunta relativamente importante di segnali. Di conseguenza si ha una perdita di tempo abbastanza rilevante.

Fig. 14: codifica NRZ

Il codice RZ (Return to Zero), invece, garantisce un ritorno a zero per ogni bit. I bit ‘0’ non subiscono modifiche, mentre che i bit ‘1’ vengono accorciati nel tempo, in modo da garantire un ritorno a zero del segnale ad ogni bit. Con questa meccanica si aggiunge un numero considerevole di fianchi al segnale trasmesso, in modo da facilitare la risincronizzazione. Tuttavia un’emissione di una sequenza prolungata di zeri pone lo stesso problema visto sopra. A questo scopo, quando si utilizza questo tipo di codifica, si dispone di un dispositivo automatico che, all’emissione, inserisce automaticamente un bit a ‘1’, quando un certo numero prestabilito di zeri si sono susseguiti. Alla ricezione il corrispondente automatismo elimina automaticamente il bit a ‘1’ quando ha contato lo stesso numero di bit a zero. Questo modo di inserzione automatica è conosciuto sotto il nome di bit stuffing (inserzione di bit).
Lo svantaggio della codifica RZ è quello di causare un numero di fianchi elevato pari, nel caso di una trasmissione di soli ‘1’, al doppio dei bit inviati. Questo, come abbiamo visto, non è propriamente vantaggioso, specialmente dal profilo delle perturbazioni.

Fig. 15: codifica RZ

Proprio per ridurre il numero di fianchi si è quindi immaginato un altro sistema di codifica, chiamato NRZI (Non Return to Zero Inverted). L’NRZI è un metodo di codifica dei dati e della cadenza di trasmissione ideale per la trasmissione di trame lunghe di dati. Esso specifica infatti che il livello di tensione presente sulla linea non viene modificato se si trasmette un ‘1’, mentre che cambia alla trasmissione di uno zero. In tal modo il numero di fianchi è limitato, mentre che se si desidera inviare una sequenza prolungata di ‘1’ viene adottato anche qui il metodo di bit stuffing, dove però si inserisce automaticamente uno zero. Con questo metodo si ha nel peggiore dei casi un fianco ogni bit, dunque una frequenza pari alla metà della cadenza dei bit. In media, comunque, si ha un numero di fianchi pari alla metà dei bit trasmessi (ammettendo una probabilità del 50% di trasmissione di ‘1’ e zeri), quindi una frequenza pari ad un quarto della cadenza dei dati.

Fig. 16: codifica NRZI

Si noti comunque che la tecnica dell’inserzione automatica di bit (bit stuffing), viene sempre più comunemente utilizzata per evitare di dover usare un meccanismo del tipo start-stop tipico dell’UART. A tal proposito viene anche impiegata in taluni sistemi usando la codifica NRZ.

D’altra parte non bisogna dimenticare che se i tre sistemi di codifica illustrati sono i più diffusi, esistono pure altri metodi. Ne esistono anche diversi che utilizzano un numero superiore di potenziali elettrici per definire i singoli bit. Dato che però tali meccanismi risultano più onerosi, non vengono generalmente impiegati nei bus di campo.

3.5.2. Componentistica ed interfacce

Lo stream di bit (sequenza di bit) preparata in base ad uno di questi metodi di codifica è quindi pronto ad attraversare la rete. Tuttavia, i segnali logici 0 - 5V non sono molto appropriati per l’invio di segnali su distanze lunghe. Questo non tanto per il loro potenziale relativamente basso, ma perché soggetti a perturbazioni esterne che devono essere separate il meglio possibile dal resto dei circuiti di un apparecchio elettronico. A questo scopo esistono diversi meccanismi di codifica elettrica atta a migliorare l’affidabilità della trasmissione, da una parte, ed altri per proteggere maggiormente i circuiti che stanno a monte della comunicazione.

3.5.2.1. RS-232

Cominciamo quindi dai circuiti più vecchi (non per questo però più semplici). Ai tempi si considerò il livello di 5 Volt insufficiente per trasmettere dei dati. Partendo da questo presupposto è stato optato per una tensione di 12 Volt, generalmente già presente nelle apparecchiature. Le norme V.24 e V.28 corrispondenti all’RS-232 definiscono infatti i seguenti livelli di tensione:


segnale logico ‘0’ (stato "attivo" per i circuiti di comando): da +3 a +15 Volt segnale logico ‘1’ (stato "non attivo" per i circuiti di comando): da - 3 a - 15 Volt


Si noti che non è un errore tipografico! Il segnale logico ‘1’ è effettivamente codificato con una tensione negativa generalmente situata a -10 o -12 V.

Fig. 17: interfaccia RS-232

Nei circuiti moderni non sempre si dispone di tutte queste tensioni, per cui i produttori di circuiti integrati si sono dati da fare per produrre un integrato che, con pochi condensatori esterni, riuscisse a generare tutte le tensioni necessarie a partire da una alimentazione semplice a 5 Volt. I più famosi circuiti sono i MAX-232 della MAXIM di cui esistono comunque diversi second source.

Write me