2008-10-26 11 views
8

Je travaille avec un périphérique qui doit être communiqué via un port série. Je peux lui envoyer des commandes en utilisant HyperTerminal, mais maintenant j'ai besoin d'écrire des programmes qui me permettront de le faire sans HyperTerminal. Quelqu'un peut-il me diriger vers un site web et/ou me montrer un programme d'exemple pour que je puisse commencer? J'ai cherché à travers de nombreux sites qui me donnent un code VC6 non compilable/ancien.Exemple de base de communication série avec Windows XP/win32

Répondre

6

Pour l'interface avec le port série, vous ouvrez un fichier avec l'un des noms de fichiers spéciaux "COM1" à "COM9". Pour les ports série avec des numéros plus élevés, le nom de fichier spécial commence par \\? \, Qui en C/C++ doit être échappé comme "\\\\? \\ COM10", etc.

http://msdn.microsoft.com/en-us/library/ms810467.aspx a vraiment une bonne tutoriel sur l'utilisation du port série. Notez que vous devez utiliser les fonctions d'E/S de fichier Windows telles que CreateFile(), ReadFile() et WriteFile(). Je ne suis pas sûr si cela fonctionnera pour utiliser des fonctions d'E/S standard telles que fopen(), fread() et fwrite().

+0

Pensez-vous que l'article lié est toujours pertinent? Y a-t-il un meilleur moyen ces jours-ci? – baordog

+0

@baordog l'article lié [n'est pas bon du tout] (http://stackoverflow.com/questions/25364525/win32-api-how-to-read-the-serial-or-exit-within-a-timeout -if-wasnt-a-data). –

0

Je crois que vous trouverez aussi beaucoup d'exemples de code pour C# si vous trouvez VC6 trop ancien. Je pense qu'il y a aussi un tas de wrappers de ports série/COM "libres" mais j'ai juste écrit le mien quand j'ai écrit un morceau de logiciel de contrôleur de périphérique RS232.

google C# et port série ou rs232

je suis arrivé ces:

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

Vous devriez avoir aucun problème à trouver le code approprié avec une recherche google.

1

Boost:asio peut être utile car un périphérique série a été ajouté récemment.

Avertissement juste; la documentation du port série est light, sans doute parce que c'est assez nouveau (il a été ajouté dans asio 1.1.1 qui a été inclus dans boost 1.36).

Mais travailler votre chemin à travers asio est, à mon humble avis, une meilleure solution que d'utiliser l'API Win32 brute. Pourquoi? Il sera plus facile à lire et à maintenir (c'est une API de plus haut niveau) et il sera multi-plateforme (sauf si vous devez spécifier le nom du périphérique spécifique au système d'exploitation). Les listes de diffusion Boost - Users et asio.user sont assez actives et amicales et devraient pouvoir vous aider si vous êtes bloqué.

+0

Boost fait un travail horrible de vérification d'erreur Win32 dans les programmes multi-thread. Il ignore purement et simplement les valeurs de retour de 'WaitForSingleObject'. Utilisez à vos risques et périls, si cela ne vous dérange pas d'essayer de retrouver leurs bogues dans un programme fileté. – jww

1

Si vous utilisez .NET 2.0, voir System.IO.Ports et this article devrait vous être utile. Si direct Win32, alors Adam's answer est le meilleur.

Questions connexes