GHI RS232. Come leggere una riga?

Richieste di supporto in merito a problemi su hardware e firmware

08/02/2013 22:05:15
Gravatar
Totale Interventi 41

GHI RS232. Come leggere una riga?

Ciao,

ho provato ad usare il modulo rs232 ma...  se provo a settare 

rs232.serialPort.AutoReadLineEnabled = true;

la mia mountaineer ethernet va' in eccezione.

 

Consigli?

 

usare il Data Received mi obbliga a verificare se c'è un fine linea o meno a MANO!  non è proprio il massimo della vita!

void serialPort_DataReceived(GT.Interfaces.Serial sender, System.IO.Ports.SerialData data)
{
var byteReceived = sender.BytesToRead;

byte[] bytes = new byte[byteReceived];

sender.Read(bytes,0,byteReceived);

var encoder = new System.Text.UTF8Encoding();
var chars = encoder.GetChars(bytes);

}

09/02/2013 10:29:13
Gravatar
Totale Interventi 75

Re: GHI RS232. Come leggere una riga?

Il mio consiglio (come sempre) è quello di implementare una buona soluzione in plain vanilla .netmf, per poi eventualmente integrarla nel progetto Gadgeteer (se necessario).

In questo caso, vuoi perché in linea di principio un carattere UTF8 potrebbe essere composto da 2 byte e la conversione quando nel buffer c'è solo il primo dei 2 byte di un carattere andrebbe in eccezione, vuoi perché la "granularità" naturale del sistema di streaming di un canale seriale è quello del byte, io ti consiglio di procedere con l'approccio che hai riportato nello snippet, magari facendo attenzione anche a non allocare l'encoder utf8 ad ogni esecuzione dell'handler e cose di questo tipo, visto che in linea di principio potrebbe essere chiamato molte volte al secondo.

Questo poi ti dà molta flessibilità nella gestione della decodifica di messaggi in un protocollo custom. A questo proprosito potrebbe tornarti utile l'implementazione della StringBuilder che trovi su uno dei progetti open "tool" di .netmf su codeplex.

Facci sapere come va!

09/02/2013 13:15:21
Gravatar
Totale Interventi 41

Re: GHI RS232. Come leggere una riga?

Ciao, grazie Lorenzo della risposta...

 

 

....sai cosa... il protocollo non è tanto complesso...  è una stringa XML terminata da un \r\n  ergo un volgarissimo "a capo"...   inviata da un device ogni 6 secondi.

Siiicuramente l'utf encoder lo istanziero una volta e fuori...  quello è certo...   però a questo punto mi domando ....   se ricevo solo "mezzo carattere" immagino che l'utf encoder andrà in eccezione???