Python. Comandare strumenti tramite porta seriale (RS232)

Lo standard di comunicazione RS232 non viene sostanzialmente più usato ma moltissimi apparecchi datati, per esempio nell'industria o nella ricerca, ne sono dotati. Qui spiegherò come comandare uno strumento tramite RS232 con python.

Connettere fisicamente PC e strumento

Per capire se il vostro strumento è dotato di un'interfaccia RS232 dovete leggere il manuale o controllare se c'è la scritta RS232 da qualche parte, ragionevolmente vicino alla porta che usa questo standard. Normalmente la porta usata è la DE-9 (detta comunemente "porta seriale" perché RS232 è uno standard di comunicazione seriale), ma si possono trovare anche le DB-25 o altri tipi di connettori, come RJ11 o altri.

Per quanto riguarda il vostro computer, solitamente il connettore usato è sempre il DE-9. Se però non ce l'avete, non disperate, basta acquistare una scheda interna con porte seriali oppure un adattatore USB-DE-9. Di solito questi convertitori funzionano senza alcun accorgimento.

Dei 9 pin presenti nel connettore DE-9, ne vengono usati tipicamente solo tre: il 2, il 3 e il 5. Il 2 e il 3 rappresentano i pin per la trasmissione (TxD) e ricezione (RxD), mentre il 5 è la terra comune. Nello standard RS232, il PC è convenzionalmente chiamato DTE, ha il connettore maschio e trasmette sul 3 e riceve sul 2. La perifica è invece chiamata DCE, ha il connettore femmina e riceve sul 3 e trasmette sul 2. In realtà a volte queste convenzioni non sono rispettate: conviene sempre quindi controllare nel manuale dello strumento, dove spesso è specificata la piedinatura. Se, come appena detto, lo strumento ha una femmina e il PC un maschio, il cavo dovrà collegare il pin 5 con il 5, il 2 con il 2 e il 3 con il 3. Se invece dovete collegare un maschio con un maschio o femmina con femmina allora il cavo dovrà collegare il 5 con il 5, il 2 con il 3 e il 3 con il 2 (cavo incrociato o anche detto null modem).

Nel caso in cui lo strumento abbia un connettore DB-25, non cambia molto. Il connettore sarà al 99% femmina. I pin utili sono il 2, il 3 e il 7 per la massa. Se dovete quindi collegare uno strumento con DB-25 (DCE) con un PC dotato di DE-9 (DTE), dovrete usare un cavo che colleghi il 7 con il 5, il 2 con il 3 e il 3 con il 2. Il motivo per cui 2 e 3 sono incrociati è che nel caso del DB-25 i ruoli dei pin 2 e 3 sono invertiti rispetto al DE-9 (Link). Esistono anche degli adattatori DB25-DE9 nel caso non abbiate un cavo con connettore DB-25.

Primi test

Per poter comunicare tra PC e periferica tramite RS232 dovete conoscere alcuni parametri per la connessione. Tra questi figurano: baudrate, bytesize, parity. A volte alcuni di loro possono essere cambiati tramite switch presenti all'interno o all'esterno della periferica oppure dal menù della periferica se ne è dotata.

Per comunicare con lo strumento non resta che avere un programma apposito che possa inviare segnali sulla porta seriale. Prima che passiate subito a scrivere il vostro programmino, è bene usare inizialmente un software già pronto per fare dei test. In Windows consiglio ComTestSerial.

Usare Python

Il modulo Python per comunicare tramite RS232 si chiama pyserial.

import serial

# Esempio di invio di un comando
...

# Esempio di lettura della memoria
...

Il problema dei caratteri di fine riga. Soprattutto in lettura. Il comportamento di Python con le stringhe "binarie". Come convertire i valori letti in byte in stringhe o numeri.

Come creare una classe "strumento"