2008-10-26 20 views
8

Estoy trabajando con un dispositivo periférico que necesita ser comunicado a través de una serie. Puedo enviar comandos usando HyperTerminal, pero ahora necesito escribir programas que me permitan hacerlo sin HyperTerminal. ¿Alguien puede dirigirme a un sitio web y/o mostrarme un programa de muestra hello world para ayudarme a comenzar? He buscado a través de muchos sitios que me dan código VC6 no disponible/antiguo.Ejemplo básico de comunicación serial con Windows XP/win32

Respuesta

6

Para interactuar con el puerto serie, abra un archivo con uno de los nombres especiales "COM1" a "COM9". Para puertos serie con números más altos, el nombre de archivo especial comienza con \\? \, Que en código C/C++ debe ser escapado como "\\\\\\\ COM10", etc.

http://msdn.microsoft.com/en-us/library/ms810467.aspx tiene un muy buen tutorial sobre el uso del puerto serie. Tenga en cuenta que debe usar las funciones de E/S del archivo de Windows, como CreateFile(), ReadFile() y WriteFile(). No estoy seguro si funcionará para usar funciones de E/S estándar como fopen(), fread() y fwrite().

+0

¿Crees que el artículo vinculado sigue siendo relevante? ¿Hay una mejor manera en estos días? – baordog

+0

@baordog el artículo vinculado [no es bueno en absoluto] (http://stackoverflow.com/questions/25364525/win32-api-how-to-read-the-serial-or-exit-within-a-timeout -if-wasnt-a-data). –

0

Creo que también encontrarás un buen código de muestra para C# si VC6 es demasiado antiguo. Creo que también hay un montón de envolturas de puerto serie/COM "gratuitas", pero acabo de escribir el mío cuando escribí una pieza de software controlador de dispositivo RS232.

Google C# y puerto serie RS232 o

Tengo estos:

http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

http://msmvps.com/blogs/coad/archive/2005/03/23/SerialPort-_2800_RS_2D00_232-Serial-COM-Port_2900_-in-C_2300_-.NET.aspx

que no debería tener problemas para encontrar el código adecuado con una búsqueda en Google.

1

Boost:asio puede ser útil ya que recientemente se agregó un dispositivo en serie.

Aviso razonable; la documentación del puerto serie es light, presumiblemente porque es bastante nueva (se agregó en asio 1.1.1 que se incluyó en boost 1.36).

Pero trabajar en ASIO es, en mi humilde opinión, una solución mejor que usar la API de Win32 sin formato. ¿Por qué? Será más fácil de leer y mantener (es una API de nivel más alto) y será multiplataforma (excepto cuando necesite especificar el nombre del dispositivo específico del sistema operativo).

Las listas de correo Boost - Users y asio.user son bastante activas y amigables y deberían ser capaces de ayudarte si te quedas atascado.

+0

Boost hace un trabajo horrible de comprobación de errores Win32 en programas de subprocesos múltiples. Simplemente ignora los valores de retorno para 'WaitForSingleObject'. Utilice bajo su propio riesgo, si no le importa tratar de localizar sus errores en un programa de subprocesos. – jww

Cuestiones relacionadas