Comunicazione con porte USB

mercoledì 22 ottobre 2008 - 11.26

Spartacus Profilo | Newbie

Ciao a tutti.
Ho cercato nel forum ma non ho trovato nulla che facesse al caso mio e quindi ho deciso di postarvi questa richiesta.
Per la prima volta mi trovo a dover sviluppare un programma di comunicazione che utilizzi sia la classica porta seriale RS232 (per i nostalgici) ma che utilizzi anche la più aggiornata porta USB per chi ha dei pc al passo coi tempi.
Mi spiego meglio:
ho uno strumento portatile che comunica seguendo lo standard RS232 quindi per comunicare con la seriale scrivo la mia classe utilizzando serialPort e sono a posto.
Per chi ha un pc aggiornato e quindi senza la porta COM voglio dare la possibilità di impostare una USB. Nel mio programma posso utilizzare sempre la classe serialPort (impostando tipo la porta come COM6 e aumentando la velocità) oppure devo utilizzare un'altra classe primitiva del framework?
Spero di essere stato chiaro. Ringrazio già da adesso chi potrà e vorrà rispondermi.

Cristian

P.S.: la versione del .NET Framework che utilizzo è la 2.0 o superiore

Grazie di nuovo
Cristian

freeteo Profilo | Guru

ciao,
per quanto ne so io ti basta cambiare i parametri della classe, come BaudRate, DataBits etc...ma puoi usare ugualmente la classe "SerialPort".

Io ad esempio, avevo un telefonino collegato via usb che rispondeva ai comandi AT, quindi avevo un metodo generico che utilizzavo sempre:

public static string InviaComando(string comando) { string ritorno = string.Empty; if (!comando.EndsWith("\r\n")) comando += "\r\n"; try { if(!portaCOM.IsOpen) portaCOM.Open(); //--- svuoto il buffer portaCOM.ReadExisting(); portaCOM.Write(comando); Thread.SpinWait(30000); //--- leggo il buffer di risposta della com //--- e provo ad aspettare 1po se non mi torna niente ritorno = portaCOM.ReadExisting(); if (string.IsNullOrEmpty(ritorno)) { Thread.Sleep(500); //--- rileggo il buffer di risposta della com ritorno += portaCOM.ReadExisting(); } if (!string.IsNullOrEmpty(ritorno)) { if (ritorno.StartsWith("\r\n")) ritorno = ritorno.Substring("\r\n".Length, (ritorno.Length - 2)); } } catch (Exception ex) { .... } return ritorno; }

che chiamavo direttamente ad esempio con:
//Chiede le morie disponibili string lettura = InviaComando("AT+CPMS=?");
e via così.

Ovviamente nel costruttore impostavo i vari valori che mi interessavano, in modo che funzionasse correttamente.


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5