Solo quiero saber cómo borramos el buffer de recepción de mi puerto serie en C#. Parece que los datos en el búfer de recepción continúan acumulándose. Por ejemplo, el flujo de datos entrantes es: [Datos A], [Datos B], [Datos C]. La información que quiero es solo [Datos C]. Estoy pensando en hacer algo así, cuando recibo [Datos A] y [Datos B], hago un buffer claro. Solo cuando se recibe [Datos C], continúo el proceso. ¿Es esta la manera de hacerlo en C#?Limpiar el buffer de recepción del puerto serial en C#
Respuesta
Si está utilizando el System.IO.Ports.SerialPort
entonces usted podría utilizar los dos métodos:
DiscardInBuffer()
DiscardOutBuffer()
y para eliminar los topes.
Si está leyendo los datos de un puerto serie:
private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (!this.Open) return; // We can't receive data if the port has already been closed. This prevents IO Errors from being half way through receiving data when the port is closed.
string line = String.empty;
try
{
line = _SerialPort.ReadLine();
line = line.Trim();
//process your data if it is "DATA C", otherwise ignore
}
catch (IOException ex)
{
//process any errors
}
}
Gracias por la ayuda. Mi transmisor siempre transmitirá datos. Es solo que el receptor que es mi programa C# no siempre recibe los datos para procesar. Si no procesé los datos, el búfer de recepción acumulará los datos, ¿verdad? Entonces, ¿tendré que hacer siempre DiscardInBuffer() cuando no esté procesando los datos recibidos? – maniac84
@ maniac84 Sí, esto debería estar bien. Alternativamente, podría leer el búfer y, en la lógica de su aplicación, simplemente ignorar los datos recibidos. ¿Siempre hay un personaje de terminación similar? Ver mi edición – Simon
Uso port.DiscardOutBuffer(); and port.DiscardInBuffer();
para borrar las memorias intermedias de puerto serie
puede utilizar como
port.DiscardOutBuffer();
port.DiscardInBuffer();
port.Close();
port.DataReceived -= new SerialDataReceivedEventHandler(onDataReceived);
port = null;
Hay dos memorias intermedias. Un buffer está asociado con el puerto serie y el otro con su flujo base, donde se transmiten los datos del buffer del puerto. DiscardIn Buffer() solo obtiene los datos del buffer del puerto serie descartados. Todavía hay datos en el flujo base que leerá. Entonces, además de usar DiscardInBuffer, también use SP.BaseStream.Flush(). ¡Ahora tienes un borrón y cuenta nueva! Si no obtiene muchos datos, simplemente elimine la secuencia base: SP.BaseStream.Dispose().
Como todavía está recibiendo el evento de datos recibidos, puede leerlo y no correr el riesgo de perder datos.
- 1. Entrada serial con buffer de línea
- 2. Conseguir Serial Port Información
- 3. Protocolo Buffer over socket en C++
- 4. ¿Manera de Windows/.NET de supervisar/de eliminar errores el puerto serial?
- 5. Cambiar el puerto Oracle del puerto 8080
- 6. Encuentra puerto del módem GSM en C#
- 7. Recepción de mensaje de difusión UDP en C#
- 8. Win32 C/C++ Cargar imagen del buffer de memoria
- 9. ¿Cómo obtengo el puerto UDP del remitente en C?
- 10. Lectura del puerto serie en Java
- 11. ¿Cómo controlar un dispositivo serial en Android?
- 12. Serial: write() throttling?
- 13. No lee los datos del puerto serie completo en C#
- 14. PHP - Lectura del puerto COM desde Windows
- 15. Limpiar una cadena de puntuación en C++
- 16. @SuppressWarnings ("serial")
- 17. Limpiar el código no deseado C#
- 18. Lectura desde el puerto serie en C#
- 19. Cambiando el puerto del System.Uri
- 20. Emacs guardado automático en el buffer del interruptor
- 21. cambiar el buffer del mouse con java
- 22. Mensajes del puerto de Mach en Objective-C
- 23. Cómo obtener c buffer desde ImageMagick Image
- 24. puerto C++ de AtomicLong.lazySet
- 25. Serial/Com Port monitor para Windows x64
- 26. C++ socket 256 byte buffer
- 27. Función del proyecto> Limpiar en Eclipse
- 28. Manejando el tipo de campo serial de PosgreSQL en South
- 29. ¿Cuál es el propósito del Producto -> Limpiar en Xcode?
- 30. Leer y escribir en puerto serie en Ubuntu con C/C++ y LibSerial
¿Cómo está utilizando el puerto serie? ¿Estás usando 'System.IO.Ports.SerialPort'? – Dai