Comunicazione Seriale in C#

La porta seriale è un' interfaccia di comunicazione seriale attraverso la quale le informazioni in ingresso ed in uscita vengono trasferite un bit per volta.
Una ricerca veloce su Google rivela che ci sono molte applicazioni gratuite per i PC che monitorano le porte seriali. Tuttavia, ciò che manca in queste applicazioni è la possibilità di controllare la porta seriale in modo diretto. Esse sono generalmente buoni sniffer ma non permettono all' utente di scrivere sulla porta seriale o di prendere il controllo di qualsiasi dispositivo collegato. Le applicazioni con capacità di scrittura non sono gratuite, e le più economiche costano sui 50 euro - un grande spreco di denaro considerando la facilità di creare un' applicazione personalizzata.

L'articolo mostra come sia possibile costruire tale applicazione usando C#. Questo articolo non è una guida sul C#, ma spiega ad un utente con le conoscenze base di C o C# come integrare in una delle sue applicazioni un controllo sulla porta seriale.

Per l'applicazione di esempio uso SharpDevelop come ambiente di sviluppo, che include un compilatore C#. SharpDevelop è un IDE open source che richiede davvero poco spazio sull'hard disk e può essere una buona alternativa per gli utenti che non vogliono installare Visual Studio, che occupa diversi gigabyte, sui propri PC per una semplice applicazione per la porta seriale.

Dopo aver scaricato ed installato l'ambiente SharpDevelop, creare un Windows Application project (solution) e nominarlo SerialPort:

comunicazione seriale

Una volta creata l'applicazione, visualizzare il form delle finestre creato automaticamente (cliccando sul pulsante "Design" nella parte superiore dello schermo) ed espandere il menu sotto "Components" raggiungibile sul menu a sinistra.

comunicazione seriale in c#

Il componente necessario è l'oggetto SerialPort presente nel menu. Selezionare questo componente e trascinarlo sull'interfaccia del form a destra. Il componente sarà aggiunto al progetto. L' oggetto che è stato creato si chiama "serialPort1" e sarà usato per accedere alla porta seriale. Per poter usare questo componente, tuttavia, è necessario aggiungere all'inizio del codice le direttive per usare il System.IO.Ports namespace, che non sono aggiunte di default nel momento di creazione della solution:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.IO.Ports;

Fatto ciò, creare un pulsante regolare sull'interfaccia del form, chiamarlo "button1" e cambiare la sua label in "Write". Doppio click su di esso per creare la funzione che sarà eseguita quando il pulsante sarà cliccato.

Questa funzione eseguirà diversi compiti. Il primo è configurare il baud rate, il nome della porta COM, la lunghezza in bit della parola dei dati, i bit di parità e di stop della comunicazione:

//configuring the serial port
serialPort1.PortName="COM1";
serialPort1.BaudRate=9600;
serialPort1.DataBits=8;
serialPort1.Parity=Parity.None;
serialPort1.StopBits= StopBits.One;

Prima di scrivere sulla porta, bisogna aprirla:

//opening the serial port
serialPort1.Open();

N.B.: se la porta COM1 è già in uso da un'altra applicazione, verrà restituito un messaggio di errore quando questa istruzione viene eseguita. Invece, se la porta COM1 è aperta dal nostro programma in C# e successivamente la chiusura fallisce, tutte le altre applicazioni che proveranno ad usarla non saranno in grado di farlo.

Bene, è venuto il momento di scrivere sulla porta seriale:

//write data to serial port
serialPort1.Write("ABC");

Quando queste istruzioni vengono eseguite, 3 byte saranno mandate alla porta seriale: il codice ASCII di "A", di "B" e di "C".

Una volta che le operazioni di scrittura sono terminate, non dimenticarsi di chiudere la porta:

//close the port
serialPort1.Close();

Quindi, ricapitolando, tutto il codice che costituisce il corpo della funzione sarà:


void Button1Click(object sender, EventArgs e)
{
//configuring the serial port
serialPort1.PortName="COM1";
serialPort1.BaudRate=9600;
serialPort1.DataBits=8;
serialPort1.Parity=Parity.None;
serialPort1.StopBits= StopBits.One;

//opening the serial port
serialPort1.Open();

//write data to serial port
serialPort1.Write("ABC");

//close the port
serialPort1.Close();

}

Ora abbiamo molte possibilità, dato che siamo in grado di scrivere delle applicazioni personalizzate che possono inviare qualsiasi dato ad ogni dispositivo collegato alla porta seriale. Il codice sopra è anche compatibile con gli adattatori USB-to-Serial, forniti con i propri driver che fungono da emulatore della porta COM.

Leggi la versione inglese: Serial Port Communication in C#

Repost: 6 Mar 2009

Scarica subito una copia gratis

Una risposta

  1. Avatar photo Emanuele 4 Dicembre 2009

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend