serial read open example ejemplo datareceived com1 c# serial-port

c# - read - using serial port



C#: Tiempo de espera en SerialPort.Open? (4)

Agregue esto en su código:

commPort = new SerialPort(); commPort.ReadTimeout = 1000000; commPort.WriteTimeout = 1000000;

Y te sugiero que veas el método SerialPort.Open

Tengo un hilo de autodetección que intenta abrir los puertos en orden y hacer coincidir los datos recibidos, detectando así el puerto donde el dispositivo relevante envía los datos. Ahora, hay algunos puertos donde SerialPort.Open simplemente cuelga el hilo durante ~ 30 segundos. ¿Cómo puedo establecer un tiempo de espera en la función SerialPort.Open?


Desde MSDN
Solo puede existir una conexión abierta por cada objeto SerialPort.

La mejor práctica para cualquier aplicación es esperar una cierta cantidad de tiempo después de llamar al método Close antes de intentar llamar al método Open, ya que es posible que el puerto no se cierre al instante.

Cuando llamas a Close (), este hilo de trabajo necesita tiempo para girar y salir. La cantidad de tiempo necesaria no está especificada y no puede verificar que se haya realizado. Todo lo que puede hacer es esperar al menos un segundo antes de volver a llamar a Abrir ().


Si lo entendí correctamente, desea leer los datos del puerto serie incluso después de que se agotó el tiempo de espera.

Si es así, entonces debería atrapar la TimeoutException y continuar su ciclo. por ej., CÓDIGO

public static void Read() { while (_continue) { try { string message = _serialPort.ReadLine(); Console.WriteLine(message); } catch (TimeoutException) { } } }


Encontré el mismo problema y espero que mi solución pueda ayudarte.

Puede detectar los puertos serie en una secuencia separada, que será cancelada en 500 ms.

// the Serial Port detection routine private void testSerialPort(object obj) { if (! (obj is string) ) return; string spName = obj as string; SerialPort sp = new SerialPort(spName); try { sp.Open(); } catch (Exception) { // users don''t want to experience this return; } if (sp.IsOpen) { if ( You can recieve the data you neeed) { isSerialPortValid = true; } } sp.Close(); } // validity of serial port private bool isSerialPortValid; // the callback function of button checks the serial ports private void btCheck(object sender, RoutedEventArgs e) { foreach (string s in SerialPort.GetPortNames()) { isSpValid = false; Thread t = new Thread(new ParameterizedThreadStart(testSerialPort)); t.Start(s); Thread.Sleep(500); // wait and trink a tee for 500 ms t.Abort(); // check wether the port was successfully opened if (isSpValid) { textBlock1.Text = "Serial Port " + s + " is OK !"; } else { textBlock1.Text = "Serial Port " + s + " retards !"; } } } }

Posibles mejoras podrían agregarse a la solución. Puede usar múltiples hilos para acelerar el proceso y usar ProgressBar para mostrar el progreso con claridad.