Dopo aver visto come elencare le porte seriali presenti nel nostro PC, in questa seconda parte iniziamo ad utilizzarle…
L’oggetto che ci consentirà di scrivere e leggere dalla porta seriale è SerialPort, contenuto nel namespace System.IO.Ports.
Tale oggetto ha diversi costruttori, con i quali possiamo specificare più o meno parametri. Il più completo di questi ha la seguente signature:
public SerialPort( string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits ) |
Se vogliamo quindi aprire una comunicazione seriale attraverso la porta COM3, a 9600 baud, senza bit di parità, con 8 bit di dati e 1 bit di stop utilizzeremo la seguente riga di codice:
SerialPort serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One); |
(spesso gli stessi parametri si trovano espressi in una forma “compatta”: 9600 8N1)
I valori di parity e di stopBits vanno specificati utilizzando le costanti presenti nei rispettivi oggetti.
Se la porta seriale indicata non è presente oppure non può essere utilizzata, il costruttore solleva una IOException.
Creata una istanza dell’oggetto SerialPort, possiamo utilizzare il metodo open() per aprire la comunicazione.
Anche tale metodo può sollevare diverse eccezioni (la porta è già in uso da un altro programma, è già in stato open, alcuni parametri specificati non sono corretti…) che possiamo intercettare con un blocco try…catch:
try { serialPort.Open(); } catch (Exception ex) { Console.WriteLine("open() error: " + ex.Message); Environment.Exit(1); } |
Dopo aver utilizzato la porta seriale, è bene chiamare il metodo close() per indicare al sistema che la porta non è più in uso e per pulire i buffer di trasmissione e ricezione:
serialPort.Close(); |
Per concludere questa seconda parte, introduciamo il metodo Write() che consente di inviare caratteri/bytes/stringhe sulla porta seriale. Utilizziamolo ad es. per inviare la famosa stringa “Hello World”:
serialPort.Write("Hello World!"); |
Uno strumento molto utile per verificare il corretto funzionamento dei nostri programmi è Portmon di SysInternals, il quale ci consente di monitorare i dati in transito e le modifiche alle proprietà di una porta seriale.
Dopo averlo eseguito, selezioniamo dal menu la voce Computer – Connect Local; quindi selezioniamo la porta seriale dal menu Capture e, sempre dallo stesso menu, attiviamo Capture Events.
Se eseguiamo il programma di esempio possiamo vedere la corretta configurazione della porta seriale e l’invio della stringa:
- Repository su GitHub, con tutti i programmi di esempio per questo tutorial
- Forum di discussione