2011-04-28 20 views
5

Estoy usando la clase SerialPort para comunicarme con un dispositivo externo. Empiezo la comunicación a 300 baudios por segundo, pero después del "saludo inicial" tengo que cambiar a una velocidad en baudios especificada por el dispositivo (generalmente 9600 bps).Cambiar BaudRate de SerialPort mientras la conexión está abierta

No he tenido éxito en mis intentos de continuar comunicándome después de aumentar la velocidad en baudios, pero no estoy seguro de por qué. Eso me lleva a mi pregunta: ¿Cuál es la forma correcta de cambiar la tasa de Baud? ¿Se puede hacer mientras la conexión está abierta, o debo cerrar la conexión primero?

he podido encontrar ninguna información sobre esto en la documentación ...

He intentado tanto y han tenido éxito en ambos sentidos, lo que me hizo pensar que debo estar perdiendo algo obvio.

+0

¿Qué quieres decir con sin éxito, exactamente? ¿Has intentado (si es posible) comunicarse primero usando un terminal? – Groo

+0

@Groo: Gracias a su impresora, he logrado que funcione. Resultó que todo lo que me faltaba era un tiempo de espera entre el envío de mi ACK y la reapertura del puerto con una BaudRate diferente. Ahora funciona. –

Respuesta

4

Resulta que puede cambiar SerialPort.BaudRate mientras está abierto. ¡Pero el SerialPort.DiscardInBuffer mencionado en respuesta por @Groo es un buen consejo!

+0

¿Podría explicarme cómo logró que esto funcione con más detalle? Ver http://stackoverflow.com/questions/8852611/changing-the-speed-on-an-open-serial-port –

9

Desde mi experiencia hasta ahora, la apuesta más segura es cerrar primero la conexión, cambiar la velocidad y luego abrirla nuevamente. A su dispositivo no le importará esto, ya que probablemente espere que envíe algunos caracteres de control para asegurarse de que se haya cambiado la velocidad.

Puede intentar cambiar la velocidad en baudios mientras el puerto está abierto, pero esto puede provocar la detección de caracteres no válidos en el búfer (según el dispositivo y el protocolo), lo que significa que también debe borrar los búferes inmediatamente después del cambio (usando SerialPort.DiscardInBuffer).

Cuestiones relacionadas