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 = "";

1 respuesta

Respuesta
1
¿Cuándo ideces que recibes caracteres repetidos es que te repite por ejemplo 50 caracteres, luego coloca los otros 50 que se vuelve a repetir, etc?
¿Si colocas el programa de terminal de windows también te repite los caracteres o solos es en tu programa?.
Hola,
Al decir que recibo caracteres repetidos, me refiero a por ejemplo (lo que se repite está en negrita):
abcuidsrgstjhsdthfdasddfsethryrturjfiytouyoltguoy078retyrytplgetwetddefhtuokiwetwetoo
...
Se repiten de vez en cuando, pero sin una regla, es decir, no es cada "x" caracteres.
De todas formas, si fuera cada por caracteres, ¿por qué se repetiría?
Por otra parte, solo sucede esto desde mi programa y ya no sé qué más probar... se me ha acabado la inspiración!
Muchas gracias por tu atención.
Pregunto, ¿si configuras tu programa con velocidad igual a la velocidad con que configuras el windows terminal en windows terminal te muestra los caracteres bien? Revisa la paridad y los databits que son las propiedades del COM que dan esos problemas.
La paridad, los databits y demás parámetros están igual que el windows terminal. Además, solo me da problemas cuando recibo una gran cantidad de bytes.
Bueno puede ser que no estas limpiando el buffer en el programa al leer
Si lo limpio con las instrucciones que están en negrita, ¿me falta algo más?
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;
}
}
Muchas gracias
Lo siento pero no se me ocurre nada más, lo único es que en tu aplicación no se alcance a borrar el buffer cunado entra nuevamente más información del puerto y de allí que te aparece duplicada.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas