cerca
Reti wireless - RS-232
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Reti wireless - RS-232

Torna alla pagina di Reti wireless


 :: Reti wireless - RS-232 ::

Appunti del 9 Marzo

Alcune immagini di questa pagina sono prese dalle slide del prof Rapacioli

RS-232

L'interfaccia seriale RS-232 (Recommended Standard 232) permette lo scambio di dati tra dispositivi digitali, ed è la più semplice possibile e la meno costosa su cavo. È stata standardizzata da diversi enti in anni successivi (RS-232 è la sigla data dall'ente di certificazione EIA, mentre per l'europeo CCITT è chiamata V.21/V.24), rimanendo sostanzialmente uguale a sé stessa. Si noti che lo standard riguarda solo le caratteristiche fisico/elettriche, e infatti contiene solo indicazioni su come deve essere modulato il segnale (forma, voltaggi, frequenze, ..) su un cavo seriale. Lo standard quindi non dice nulla sul come deve avvenire la trasmissione dei dati, anche se col tempo sono stati elaborati protocolli condivisi tra i maggiori produttori.

Con una RS-232 i singoli bit che compongono un byte sono trasmessi uno dopo l'altro in serie (da cui seriale) lungo il cavo. Esistono protocolli alternativi come il parallelo in cui i dati sono trasmessi contemporaneamente su più fili, così che possano essere inviati più byte in un colpo solo. L'interfaccia parallela comunque non ha avuto molta fortuna, mentre il seriale continua ad essere pesantemente usato, nonostante tutti i suoi limiti.

La velocità di una linea seriale si può calcolare in due modi:

  • bit per secondo (bps), che indica il numero di bit che vengono trasmessi in un secondo lungo la linea
  • baud rate, che indica il numero di transizioni del segnale che avvengono in un secondo lungo la linea. Poiché nello standard RS-232 la trasmissione è binaria (si hanno due soli livelli: uno alto ed uno basso), il baud rate e bps coincidono numericamente.

Anche la trasmissione dei dati può avvenire in due modi:

  • half-duplex, in cui la trasmissione è bidirezionale ma non avviene contemporaneamente nelle due direzioni
  • full-duplex, in cui la trasmissione è bidirezionale e contemporanea. Lo standard RS-232 permette una trasmissione di questo tipo in quanto è utilizzato un conduttore separato per ciascun verso di trasmissione delle informazioni

Ipse dixit
"Half-duplex è una discussione normale, la full-duplex è una conversazione tra suocere"


Connettore DB25

Lo standard RS-232 non obbliga all'utilizzo di uno specifico connettore. Per PC ci sono gli attuali DB9 (a 9 pin) e i vecchi DB25 (a 25 pin), mentre per applicazioni industriali ci sono altri tipi più efficienti come quelli a morsetti.
I connettori per PC sono di tipo consumer, che costano poco (sui 20 centesimi) ma che non garantiscono buone performance. Ad esempio, la maggior parte di questi non arrivano a 100 inserimenti, ma si usurano prima (soprattutto la porta femmina, che si slabbra facilmente interrompendo la continuità elettrica tra i pin dei connettori). I connettori di tipo industriale (come quello del prof a quattro fili), costano molto di più (a partire da 20 euro) ma garantiscono un numero di inserimenti noto e sono certificati.


Connettore DB9

Il costo e l'usura della cavetteria non sono aspetti da sottovalutare, e un punto di forza del wireless è che supera questi problemi. In applicazioni in cui è previsto un alto numero di inserzioni/deinserzioni basterebbero queste considerazioni per decidersi a passare da connessioni wired a quelle senza fili.
Come abbiamo già detto, lo standard RS-232 non definisce come deve essere fatta la presa di una seriale, ma i connettori consumer citati prima sono stati comunque standardizzati. Dagli schemi del DB25 e DB9 mostrati accanto si notano alcune linee rosse, che rappresentano delle ponticellature che permettono di usare solo i cavi TX, RX e GND. Il DB9 riduce drasticamente il numero di pin rispetto ai 25 del vecchio standard, così da occupare meno spazio a livello hardware e possa starci ad esempio su laptop.
Ultima nota: il motivo per cui la parte attorno i connettori è fatta in metallo, è perché ad essa si allaccia la massa del cavo schermato, così da scaricare a terra.

Osservando con un oscilloscopio il segnale seriale si osserva una forma come quella sottostante:

Il segnale è modulato in partenza e demodulato in arrivo, e sotto in blu sono riportate le tacche del tempo che indicano la velocità con cui avviene la campionatura. Il segnale oscilla tra +12 e -12 volt (è portato a questa ampiezza proprio nella fase di modulazione), che sono i valori standard stabiliti per la seriale. A -12V è associato il bit 1, mentre a +12V il bit 0. Ovviamente si tratta di valori indicativi: normalmente sono ammessi tutti i voltaggi che stiano almeno a 3 volt dallo zero. Il segnale infatti perde differenza di potenziale durante il tragitto, affievolendosi in modo direttamente proporzionale sia alla lunghezza che alla qualità del cavo. Poiché ad esempio il segnale può partire da 12V e arrivare con 7V, si mantiene un intervallo di indeterminatezza sopra e sotto i 3V, superato il quale tutti i voltaggi sono considerati validi.

Elenchiamo una serie di parametri della RS-232:

  • la velocità di una linea seriale va da un minimo di 110 bps, ad un massimo - attuale - di 115000 bps. Più aumentano le velocità e più performanti devono essere le apparecchiature ai due capi del cavo di comunicazione, o una spara così velocemente le informazioni che l'altra non ci sta dietro e va in over-run. Inoltre è interessante osservare il rapporto tra time slice (campionatura del segnale) e baud rate. Ad esempio se trasmetto a 110 ho un time slice di 9,10 secondi, che è un'eternità; mentre se trasmetto a 19200 ho 52 microsecondi di intervallo di campionamento. Si dice che l'affidabilità della linea seriale è inversamente proporzionale alla velocità a cui trasmette: più veloce vado e più errori avrò (vedi figura sotto)

In rosso il segnale ideale, mentre in blu quello reale. Nella figura di sinistra il time slice è sufficientemente ampio perché si riesca a captare un segnale reale ammissibile; mentre nella figura a destra il time slice ridotto, ad esempio tra t2-t3, fa campionare in modo errato perché il segnale non ha fatto in tempo a superare la soglia dei 3 volt
  • parità, che è l'unico controllo fatto dalla seriale sulla bontà del dato trasmesso. Può essere parità pari, dispari, o nessuna
  • bit di stop, che indicano la fine di una trama di trasmissione, e che possono essere 1, 1.5 o 2
  • numero di bit per carattere, che possono essere 5,6,7,8 (anche se normalmente è o 7 o 8)

Ipse dixit
"Se scegli meno di 5 bit per un carattere devono averti picchiato da bambino."

Ricapitoliamo le caratteristiche e i limiti della RS-232:

  • velocità di trasferimento dei dati, relativamente bassa (massimo 115000 bps)
  • lunghezza del cavo, circa 15 metri (dipende anche dalla qualità del cavo stesso)
  • resistenza al rumore di contesto, decisamente scarsa. Se il cavo passa per ambienti inquinati si lascia influenzare – e quindi sporcare – moltissimo. Basta ad esempio che il voltaggio nel cavo aumenti di 10 volt (passando ad esempio vicino a un motore), e quello che era a -12V va a -2V, e quindi sarà ignorato devastando la comunicazione. I cavi seriali RS-232 non sono quindi in grado di funzionare correttamente quando il contesto è particolarmente ostile, perché misurano la tensione rispetto ad uno zero. Se in un ambiente tranquillo/domestico come quello di ufficio la trasmissione va bene, in un ambiente industriale no, basta farlo passare vicino a dei motori perché il risultato sia pesantemente inquinato. Va ancora peggio se viene adoperato su un'automobile, un ambiente estremamente sporco: batterie, relè, motori, ..
    Concludendo, cavo seriale: poca resistenza al rumore di contesto
  • affidabilità, buona nelle condizioni ottimali, quindi in contesti non stressati
  • costo dei nodi, il più basso possibile: se devo fare una comunicazione tra due oggetti è sicuramente il meno costoso
  • costo del cablaggio (cavo, prese, ...) molto basso, siamo nei limiti inferiori dei costi possibili
  • il numero di punti da connettere sono due. L'RS-232 è infatti single-ended, quindi point-to-point, quindi non utilizzabile per realizzare un bus
  • i componenti che fanno uso di interfaccia seriale sono normalmente alimentati

Tipici utilizzi dell'interfaccia RS-232: stampanti (soprattutto in ambienti industriali), device a bassa velocità (ad esempio tutte le componenti di un bancomat, stampante che stampa lo scontrino compresa), comunicazioni tra CPU, o ad esempio nelle connessioni tra componenti di cellulari consumer, eccetera.
Si noti bene che le linee seriali continuano ad essere utilizzate pesantemente nell'industria nonostante stiano sparendo in ambienti consumer.

La lezione si conclude con l'esercizio proposto sulle slide: scrivere un protocollo di comunicazione seriale fra due processi su due pc diversi in grado di riprendersi anche a fronte di disconnessioni e riconnessioni successive e/o di errori di protocollo. Si tratta di un problema che chi progetta applicazioni vere deve porsi, perché non si può assumere che ogni bit inviato arrivi correttamente a destinazione. Si deve invece partire dall'assunzione che la trasmissione può fallire, e quindi dobbiamo riuscire a capire se e cosa è andato storto, e come rimettere le cose a posto.
Il protocollo proposto è quello sviluppato dalla Siemens, molto diffuso per le comunicazioni con i PLC.

Ipse dixit
"Come ogni informatico che si rispetti l'ho copiato. Siccome qualcuno ci aveva pensato io ho detto 'perché devo pensarci anch'io che poi mi fumano le orecchie?'. Poi se penso molto sparo fuori minchiate, quindi l'ho copiato."

In questo protocollo un PC riveste il ruolo di master della comunicazione e l'altro (slave) gli risponde solo se interrogato. C'è inoltre una fase di sicronizzazione iniziale, del tipo "sto per farti una domanda, sei pronto?" "sì sono pronto" "bene, rispondi a..". Solo che la prima risposta alla domanda da parte del ricevente è la domanda stessa. Prima di confondere troppo le idee, vediamo lo schema della fase di sincronizzazione.

Fase 1

La prima operazione che fa il master in fase di inizializzazione è svuotare i suoi buffer input/output, così qualunque residuo precedente di conversazione viene buttato via. I buffer sono infatti molto utili per la velocità di esecuzione dei programmi, ma sono un casino per la gestione dei protocolli perché c'è il rischio di considerare attuale una risposta ad una domanda precedente. Due precisazioni: 1. sono solo i buffer del master ad essere svuotati, 2. questi possono riempirsi un attimo dopo perché c'erano ancora delle comunicazioni pendenti, ma va beh, è un rischio accettabile.
La sincronizzazione continua con l'invio del comando STX, trasmesso come uno dei primi 30 caratteri della tabella ASCII, a cui normalmente non corrisponde niente di indispensabile per una comunicazione, ma che tornano utili in questi casi. Al comando segue la domanda che vuole fare il master, trasmessa sottoforma di funzione.
Lo slave dà il comando DLE e rispedisce al mittente la stessa funzione, dimostrando così che ha capito la domanda. A questo punto si può assumere che la trasmissione è andata bene e che è lecito aspettarsi una risposta.


Fase 2

Conclusa con successo la sincronizzazione, il master rimanda allo slave il comando STX seguito da alcuni byte che rappresentano i parametri della funzione, due CRC per fare il controllo sulla correttezza dei dati inviati, e infine il segnale end of transmission.


Fase 3

Lo slave a questo punto ha ricevuto tutto: funzione + parametri. Come prima cosa manda al master un ack (o un nack se non ha ricevuto abbastanza parametri), poi i vari byte contenenti la risposta, poi i CRC della risposta e infine il solito EOT.
Il master chiude la menata trasmettendo un DLE+ACK se è andato tutto a buon fine, o un DLE+NACK se ci sono problemi.

Ovviamente il master e lo slave non attendono indefinitamente la comunicazione dell'altro, ma c'è un timeout, superato il quale si assume che l'altro non risponderà mai e si chiude l'attesa.


Torna alla pagina di Reti wireless