Home
Accesso / Registrazione
 di 

Comunicazione Seriale in C#

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

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di Anonimo

Come posso leggere dati modificando il programma?

Ciao mi chiamo Cristian, sono riuscito a rifare a casa il programma che hai scritto, volevo sapere se potresti aiutarmi perchè non riesco a leggere i dati inviati per esempio da una periferica, riesco a mandarli correttamente ma non riesco a leggere e quindi ad utilizzare elaborare i dati ricevuti. Puoi darmi una mano? Sai sto cercando di gestire un vecchio telefono della siemens con questo progrmma... è una cosa che provo da tanto tempo, ma ora che finalmente riesco ad inviare i dati non riesco a leggerli...

Cristian
cristianmoi@hotmail.it

ritratto di Emanuele

Ti consiglio di leggere la

Ti consiglio di leggere la versione originale dell'articolo, sempre sul nostro blog, ma nella sezione inglese. Leggi anche con attenzione tutti i commenti.

ritratto di Iacopo

simulare una tastiera per computer con la seriale

ciao!!! mi chiamo Iacopo, un mio amico mi ha aiutato a creare un circuito che si collega al pc tramite seriale, che allo schiacciare dei tasti manda determinate lettere al computer...
io avrei bisogno di fare un programma che legga le lettere che invia il circuito e che simuli la pressione del relativo tasto, come se il dato arrivasse da una tastiera per computer...
come faccio???

ritratto di trisonic

salve avrei bisogno di fare

salve

avrei bisogno di fare qualcosa di molto simile a ciò che ha detto Iacopo.

devo attaccare arduino al pc che scrive qualcosa sulla seriale, il programma legge la seriale e invoca la pressione di determinati tasti.

esempio: arduino scrive sulla seriale INVIO, il programma che è in ascolto, intercetta la stringa e preme il tasto invio.

come fare?

ritratto di bovolone

Vi consiglio di dare

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 6 utenti e 74 visitatori collegati.

Ultimi Commenti