Pregunta

Me pregunto si y cómo es posible controlar las líneas RS-232 directamente desde win32 (el antiguo C-API).

Me gustaría interactuar con una pieza externa de hardware, y dos líneas de datos simples serían suficientes para mis necesidades.

Entonces, ¿hay una API para win32 que me permita leer y escribir el estado de las cuatro líneas de estado? En la comunicación en serie normal, las líneas de handshaking son manejadas por el UART automáticamente (si el handshaking de hardware está habilitado).

Recuerdo que era trivial bajo DOS. Solo había que programar el UART directamente. ¿Esta funcionalidad ha sobrevivido en win32 de alguna manera?

¿Fue útil?

Solución

Puedes controlar RTS y DTR usando SetCommState () . También puede configurar las cosas para que el hardware o el controlador controle el control de flujo de hardware (CTS y / o DSR), o puede configurar las cosas utilizando SetCommMask () para obtener eventos cuando esas señales cambien. / p>

Una descripción general decente está aquí: http://msdn.microsoft.com/ en-us / library / ms810467.aspx

Tenga en cuenta que la API y / o el controlador de Win32 Serial Comm pueden ser complicados, así que prepárese para hacer una depuración de lo que está pasando en el cable.

Otros consejos

Me encontré con esto tutorial cuando tuve que hacer un proyecto para comunicarme con el puerto RS232. Es un ejemplo completo sobre cómo abrir el puerto, establecer algunas propiedades, incluidos los tiempos de espera, leer / escribir y cerrar el puerto. A pesar de que su proyecto probablemente ya haya terminado, espero que esto siga siendo útil ya que permanece en los archivos SO.

Aún puede realizar tipos de programación similares solo para acceder al hardware protegido que necesitará para implementar un controlador de dispositivo. Supongo que esto se ha vuelto más fácil desde la década de 1980 cuando estaba haciendo el mismo tipo de trabajo.

¿Microsoft en realidad está haciendo handshaking de hardware ahora? Durante muchos años, NT, win2000 y XP no hicieron handshaking en el hardware. En cambio, cuando el fifo alcanzó un cierto punto, el controlador del dispositivo cambiaría manualmente la línea cts. Lo que significa que fue increíblemente sencillo hacer que el controlador de dispositivo pierda datos, tome una ventana con el mouse y haga círculos alrededor de la pantalla (por ejemplo, asegúrese de quitar esa ventana del lado izquierdo de la pantalla en todos o algunos de los pases). ). Alt-enter para llevar un indicador de comando a / desde pantalla completa era una forma fácil de causar una pérdida de datos. O cualquier otra cosa que cause suficiente latencia de interrupción. Básicamente, el control de flujo de hardware de microsofts no es hardware sino control de flujo de software, incluso si el hardware tiene capacidades de control de flujo de hardware. Los controladores de microsft no estaban configurando ese bit. SeaLevel finalmente admitió ese bit, bueno sorta, tenías que poner la configuración correcta no relacionada en SetCommState () para habilitarla.

En cuanto a su programa que controla las señales, use SetCommState ().

Hay algunos adaptadores USB a serie que no admiten el control de flujo DTR / DSR / DCD. Así que puede que este sea tu caso.

http://www.digi.com/support/kbase/kbaseresultdetl? id = 588

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top