C# SerialPort:Error recibiendo datos del puerto serie
He desarrollado una clase para comunicarme con el puerto serie, utilizando el SerialPort del .NEt framework 2.0.
Hasta ahora me ha estado funcionando ya que recibía como mucho 100 bytes, pero ahora necesito leer un número de bytes variable, que como mínimo serán 2000 bytes. El caso es que recibo la cadena pero obtengo caracteres repetidos. ¿Por qué sucede esto?
Ya estoy desesperada, he probado de todo y no sé qué maás hacer.
Te envío parte del código (la referente a coger los datos recibidos) por si me puedes ayudar, te lo agradecería muchísimo:
public class Comunicacion
{
//contiene la respuesta
public string data;
public SerialPort comport = new SerialPort();
public Comunicacion()
{
this.comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}
public void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
int a;
string aux;
a = this.comport.ReadByte();
aux = Convert.ToChar(a).ToString();
this.data = this.data + aux;
while (this.comport.BytesToRead > 0 & aux != "")
{
a = this.comport.ReadByte();
//comandoLectura = convertStringToByteArray(enc.GetString(comandoLectura) + checksumLectura);
aux = aux + Convert.ToChar(a).ToString();
}
this.data = this.data + aux;
this.comport.DiscardOutBuffer();
this.comport.DiscardInBuffer();
}
catch (Exception ex)
{
this.error = ex.Message;
return;
}
}
}
Las propiedades de comport son:
comport.BaudRate = 115200;
comport.DataBits = 8;
comport.StopBits = 1;
comport.Parity = None;
comport.PortName = "COM1";
Antes de enviar el comando para recibir una respuesta, clareo el buffer:
this.comport.DiscardOutBuffer();
this.comport.DiscardInBuffer();
this.data = "";
Hasta ahora me ha estado funcionando ya que recibía como mucho 100 bytes, pero ahora necesito leer un número de bytes variable, que como mínimo serán 2000 bytes. El caso es que recibo la cadena pero obtengo caracteres repetidos. ¿Por qué sucede esto?
Ya estoy desesperada, he probado de todo y no sé qué maás hacer.
Te envío parte del código (la referente a coger los datos recibidos) por si me puedes ayudar, te lo agradecería muchísimo:
public class Comunicacion
{
//contiene la respuesta
public string data;
public SerialPort comport = new SerialPort();
public Comunicacion()
{
this.comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}
public void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
int a;
string aux;
a = this.comport.ReadByte();
aux = Convert.ToChar(a).ToString();
this.data = this.data + aux;
while (this.comport.BytesToRead > 0 & aux != "")
{
a = this.comport.ReadByte();
//comandoLectura = convertStringToByteArray(enc.GetString(comandoLectura) + checksumLectura);
aux = aux + Convert.ToChar(a).ToString();
}
this.data = this.data + aux;
this.comport.DiscardOutBuffer();
this.comport.DiscardInBuffer();
}
catch (Exception ex)
{
this.error = ex.Message;
return;
}
}
}
Las propiedades de comport son:
comport.BaudRate = 115200;
comport.DataBits = 8;
comport.StopBits = 1;
comport.Parity = None;
comport.PortName = "COM1";
Antes de enviar el comando para recibir una respuesta, clareo el buffer:
this.comport.DiscardOutBuffer();
this.comport.DiscardInBuffer();
this.data = "";
1 Respuesta
Respuesta de Roberto Alvarado
1