Collegarsi ad una porta seriale remota attraverso la rete
Il protocollo di comunicazione seriale è largamente utilizzato per il collegamento di ogni genere di dispositivo ad un PC, sebbene negli ultimi anni il classico connettore sia stato soppiantato da specifiche interfacce con porta USB.
Potrebbe sorgere la necessità di raggiugere un dispositivo seriale da un client remoto tramite la rete, in tal caso si aprirebbero due scenari: la porta COM del dispositivo è fisicamente connessa ad un altro computer; il dispositivo è ubicato lontano da computer o dispositivi simili. Nel primo caso si potrà ricorrere ad una soluzione software, nel secondo occorre un apposito hardware che interfaccia la seriale alla rete.
La topologia di questo sistema, rappresentata schematicamente nella figura di apertura, è composta da un server che s’interfaccia fisicamente al dispositivo tramite la porta seriale e instrada il flusso dati sulla rete, dall’altro lato un client connesso al server con una porta COM virtuale che replica quanto accade sulla porta fisica. A questo punto qualunque applicazione del PC client può utilizzare la porta virtuale come se il dispositivo sia disponibile in loco. Il protocollo solitamente utilizzato è l’RFC2217 basato su Telnet, ciò permette una sorta di interoperabilità tra i software che lo adottano su sistemi operativi anche diversi.
Server
Windows
Uno dei software free per Windows che consente con facilità di fare da server per la porta COM è Virtual Serial Port Emulator VSPE, della Eterlogic. Per la versione a 64 bit è richiesto l’acquisto di una licenza (costo circa 25 $), mentre la versione 32 bit è free e può essere utilizzata anche su sistemi operativi a 64 bit (fatto salvo un messaggio che ricorda che il software non è licenziato).
Una volta installato il programma, lanciare l’interfaccia, premere su Stop Emulation e selezionare Create new device…, nel menu a scorrimento scegliere TcpServer.
Confermare su Avanti, selezionare nella casella Source serial port il nome della porta seriale fisica da mandare in rete, cliccando su Settings… è possibile impostare i parametri di funzionamento della porta virtuale. Nel campo Local TCP port inserire il numero della porta da utilizzare. Confermare su Fine.
A questo punto sul pannello principale comparirà il dispositivo di tipo TcpServer che abbiamo creato, premere su Start Emulation per avviare il server, che resterà attivo fino a quando VSPE è in esecuzione.
Linux
Per i sistemi Linux la soluzione è l’applicativo Serial port to network proxy ser2net. Vediamo qui di seguito come si installa e configura su Raspberry Pi. Il software è presente sul repository di Raspbian, da linea di comando digitare:
sudo apt upgrade
sudo apt install ser2net
o se si preferisce compilare l’ultima versione, scaricare il sorgente dalla pagina del progetto, dopo averlo scompattato entrare nella cartella e digitare:
./configure
make
sudo make install
Modificare in maniera opportuna il file di configurazione
sudo nano /etc/ser2net.conf
supponiamo ad esempio di aver collegato il nostro dispositivo sulla /dev/ttyUSB0 e volerla instradare su Telnet TCP/IP porta 2001, il formato è <TCP port>:<state>:<timeout>:<device>:<options>
2001:telnet:10:/dev/ttyUSB0
non è necessario specificare le opzioni relative alla porta seriale (velocità, stop bit, ecc.) in quanto verrammo gestite direttamente dal client tramite il protocollo RFC2217 avendo specificato telnet come state, l’altra opzione è raw. Il timeout indica il tempo in secondi prima che la porta venga disconnessa dalla rete se non c’è attività, utile se il dispositivo viene utilizzato anche da locale, impostando a 0 la funzionalità viene disabilitata.
Riavviare il daemon con le nuove impostazioni
sudo /etc/init.d/ser2net restart
Per verificarne lo stato
sudo /etc/init.d/ser2net status
Ser2net è registrato come daemon di sistema, quindi partirà in automatico ad ogni avvio, con le impostazioni che gli abbiano inserito nel file di configurazione.
Client
Windows
Installare VSPE come indicato in precedenza, lanciare l’interfaccia, premere su Stop Emulation e selezionare Create new device…, nel menu a scorrimento scegliere Pair.
Creare una coppia di porte seriali virtuali, ad esempio COM6 e COM16.
Creare un altro device del tipo TcpClient.
Nel nostro esempio associare la porta virtuale COM16 al server che supponiamo risponda sull’IP 192.168.1.10, porta 2001.
Sul pannello principale compariranno i dispositivi di tipo Pair e TcpClient che abbiamo creato, premere su Start Emulation per avviare la connessione, che resterà attivo fino a quando VSPE è in esecuzione.
A questo punto sul nostro PC sarà disponibile una porta seriale virtuale COM6, connessa via rete al dispositivo remoto presente sul server, al quale potremmo associare il software client come se fosse una normale porta seriale.
Su Windows esistono altre opzioni, ad esempio com0com in unione ad hub4com ed altri riportati in calce, il principio di funzionamento è simili a quanto illustrato poc’anzi.
Linux
Utilizzare l’utility socat, pensata per trasferimento di dati tra canali differenti.
Per scaricare il programma:
sudo apt install socat
Il formato è socat [options] <address> <address>, nel nostro esempio supponendo il server risponda sull’IP 192.168.1.10, porta 2001, creiamo una porta seriale virtuale chiamata /dev/ttyV0, connessa via rete al dispositivo remoto presente sul server, al quale potremmo associare il software client come per una normale seriale:
sudo socat -T10 pty,link=/dev/ttyV0,rawer,waitslave,group=dialout,mode=660 tcp4:192.168.1.10:2001
L’opzione -T10 imposta a 10 secondi il timeout di comunicazione, waitslave attende l’apertura del programma client prima di avviare la connessione TCP, group=dialout,mode=660 fanno in modo che la porta creata da socat sia associata al gruppo dialout con permessi r e w in modo che possa essere utilizzata dal client senza i diritti di root.
Riferimenti
- ComPort over Network, DraTeots GitHub;
- Remote QTH Ser2Net;
- Telnet Com Port Control Option.
Download
- Serial port to network proxy ser2net;
- Multipurpose relay socat;
- Null-modem emulator com0com;
- SerialToIP;
- Eterlogic virtual serial ports emulator VSPE;
- Perle TruePort.
Argomenti correlati
Questa opera è distribuita con:
licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Italia.
Si declina ogni responsabilità per eventuali errori ed omissioni e gli eventuali danni che ne dovessero conseguire. Per ulteriori informazioni consultare le note legali.