Ricavare le impostazioni di comunicazione seriale di uno strumento con porta RS232

connettore_db9 Spesso mi ritrovo (più per hobby che per lavoro) a dover collegare strumentazione al pc tramite la porta seriale. Anche se ormai la porta seriale è stata soppiantata dall’USB, c’è da aggiungere che la maggior parte della strumentazione industriale utilizza ancora la cara vecchia RS232 dal momento che sembra sia molto più facile scrivere programmi che gestiscono questo tipo di comunicazione. Che ciò sia vero è facilmente intuibile dalla enorme mole di documentazione che si trova in giro riguardo al protocollo seriale, documentazione davvero molto scarsa per quanto riguarda l’USB.

Fatta questa breve premessa vado subito al nocciolo della questione: collegando uno strumento sulla seriale, per poter ricevere i dati è necessario conoscere i parametri di comunicazione dello strumento (Baud Rate, Bit di dati, Tipo di parità, Bit di stop). Fino a quando è presente un manuale di istruzioni con tali dati, il problema è risolto. Quando invece non sappiamo i parametri di comunicazione, la cosa che fanno tutti i programmatori è quella di collegare lo strumento sulla seriale, avviare l’hyperterminal e quindi impostare ogni volta tutti i parametri nella speranza che nella finestra del terminale appaia qualche dato a conferma di aver scelto le giuste impostazioni.

Tenendo conto di tutte le combinazioni di impostazioni possibili(9 valori di baudrate * 5 valori di bit dati * 3 valori di bit di stop * 5 valori di parità), bisognerebbe effettuare la bellezza di 675 tentativi… Un po scocciante a dire il vero, no? Soprattutto nei casi in cui lo strumento non invia il dato in continuo ma solo dopo la ricezione di un carattere.

Anche se la maggior parte degli strumenti non fa utilizzo di valori strani di impostazioni (tipo parità spazio o indicatore, bit di stop a 1.5, 4/5 bit di dati ecc), potrebbero comunque verificarsi casi in cui questo sia necessario.

A tal scopo ho realizzato un semplice programma, scritto in VB6 e utilizzante il controllo mscomm32, che effettua un’operazione molto semplice: ogni 300ms cambia le impostazioni di comunicazione della porta seriale e resta in ascolto per controllare se riceve dati, in via opzionale si puo impostare di inviare un comando per quegli strumenti che lo prevedono (a patto di sapere a priori quale sia). Se si ha ricezione di dati, vengono mostrati nella finestra di log le impostazioni utilizzate e il dato ricevuto. Ovviamente sarà l’utente che dovrà prendere per buone soltanto quelle impostazioni che danno una ricezione di dati significativa.

Il software, quando riceve un dato, elimina tutti i caratteri “vuoti” (ovvero fino al carattere ascii 32) e, se rimane qualcosa, viene visualizzato. Nella barra di stato viene indicata l’impostazione corrente, il numero del tentativo corrente e la percentuale di avanzamento. E’ possibile interrompere il test non appena vediamo nella finestra di log un dato valido. Selezionando il checkbox “beep”, viene emesso un suono dall’altoparlante di sistema ogni qualvolta viene ricevuto un dato.

Le impostazioni vengono riportate nella schermata di log nel seguente formato: b,p,d,s

dove:
b : baudrate (da 110 a 115200)
p : parità, secondo la convenzione:

e : even (pari)
o : odd (dispari)
n : none (nessuna)
m : mark (indicatore)
s : space (spazio)

d : bit di dati (da 4 a 8)
s : bit di stop (1, 1.5 o 2)

Il test completo dura 5 minuti e mezzo circa, la finestra di log viene salvata nel file “lastrun.log”. Qui sotto c’è un esempio del funzionamento del programma a runtime:

serial_tester_screenshot

Lo strumento in questione è stato collegato sulla porta COM1 e riportava sul suo display il valore 669.2. In tal caso, vediamo che il test è stato condotto fino al 26,9% e tra i dati ricevuti c’è già un dato corretto, quello avente come impostazioni di comunicazione (1200,e,7,1 – che tra l’altro corrispondono con quanto indicato dal manuale dello strumento), in tal caso è inutile protrarre il test fino al 100% e basta premere il tasto stop.

Nel setup sono già presenti le librerie di runtime aggiornate per visualbasic 6.

Vai alla pagina del download

Se questo articolo ti è piaciuto, condividilo su un social:
Se l'articolo ti è piaciuto o ti è stato utile, potresti dedicare un minuto a leggere questa pagina, dove ho elencato alcune cose che potrebbero farmi contento? Grazie :)