Estoy leyendo datos del puerto serie. Los datos salen de la escala. Ahora estoy usando Readline()
y obteniendo datos incluso después de eliminar DiscardInBuffer()
. ¿Cuál es la forma correcta de leer los datos del puerto serie? Hay tan pocos ejemplos en línea que siento que es como un Santo Grial que nadie ha descubierto.Puerto serie ReadLine vs ReadExisting o cómo leer los datos del puerto serie correctamente
¿Alguna ayuda, por favor?
Parece que el puerto serie es un niño caprichoso.
C#, mueca de dolor 5.0, HP thin client, Compact Framework 2,0
private void WeighSample()
{
this._processingDone = false;
this._workerThread = new Thread(CaptureWeight);
this._workerThread.IsBackground = true;
this._workerThread.Start();
} //end of WeighSample()
private void CaptureWeight()
{
globalCounter++;
string value = "";
while (!this._processingDone)
{
try
{
value = this._sp.ReadLine();
if (value != "")
{
if (value == "ES")
{
_sp.DiscardInBuffer();
value = "";
}
else
{
this.Invoke(this.OnDataAcquiredEvent, new object[] { value });
}
}
}
catch (TimeoutException)
{
//catch it but do nothing
}
catch
{
//reset the port here?
MessageBox.Show("some other than timeout exception thrown while reading serial port");
}
}
} //end of CaptureWeight()
Una cosa a tener en cuenta sobre mi solicitud es que empiezo el hilo (weighSample) cuando el cursor salta a la caja de texto. La razón para esto es que el peso también se puede escribir manualmente (parte de las req). Por lo tanto, no sé de antemano si un usuario va a presionar IMPRIMIR en la balanza o escribir el peso. En cualquier caso, después de que se adquieran los datos, salgo del hilo de trabajo. Además, tenga en cuenta que no estoy utilizando el evento de puerto serie DataReceived, ya que me dijeron que no es confiable.
Cualquier comentario/ideas de bienvenida. Esta es mi primera experiencia con puertos seriales.
¿Qué idioma, sistema operativo, plataforma de hardware, etc.? – MarkusQ
¿Qué tipo de datos estás leyendo? ¿Binario? ¿Texto? – Eddie
Estoy leyendo datos de texto – sarsnake