2008-10-26 7 views
8

Ich arbeite mit einem Peripheriegerät, das über die serielle Kommunikation kommuniziert werden muss. Ich kann Befehle mit HyperTerminal senden, aber jetzt muss ich Programme schreiben, die es mir ohne HyperTerminal erlauben. Kann mir jemand auf eine Website zeigen und/oder zeige mir ein Beispiel Hallo Weltprogramm, um mich zu starten? Ich habe viele Seiten durchsucht, die mir einen unkompilierbaren/alten VC6-Code geben.Grundbeispiel der seriellen Kommunikation mit Windows XP/Win32

Antwort

6

Um mit der seriellen Schnittstelle zu verbinden, öffnen Sie eine Datei mit einem der speziellen Dateinamen "COM1" bis "COM9". Bei seriellen Ports mit höheren Nummern beginnt der spezielle Dateiname mit \\? \, Was im C/C++ Code als "\\\\\\ COM10" usw. maskiert werden muss.

http://msdn.microsoft.com/en-us/library/ms810467.aspx hat eine wirklich gute Tutorial zur Verwendung der seriellen Schnittstelle. Beachten Sie, dass Sie die Windows-Datei-E/A-Funktionen wie CreateFile(), und WriteFile() verwenden sollten. Ich bin mir nicht sicher, ob es funktioniert, Standard-I/O-Funktionen wie fopen(), fread() und fwrite() zu verwenden.

+0

Glauben Sie, dass der verknüpfte Artikel noch relevant ist? Gibt es heutzutage einen besseren Weg? – baordog

+0

@baordog der verknüpfte Artikel [ist nicht gut] (http://stackoverflow.com/questions/25364525/win32-api-how-to-read-the-serial-or-exit-within-a-timeout -wenn-keine-Daten). –

0

Ich glaube, Sie werden viel Beispielcode für C# auch finden, wenn Sie VC6 zu alt finden. Ich denke, es gibt auch eine Reihe von "freien" seriellen/COM-Port-Wrappern, aber ich habe nur meine eigene geschrieben, als ich eine RS232-Controller-Software geschrieben habe.

google C# und serielle Schnittstelle oder RS232

Ich habe diese:

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

Sie sollten mit einer Google-Suche kein Problem der Suche nach geeigneten Code.

1

Boost:asio kann möglicherweise helfen, wie ein serielles Gerät kürzlich hinzugefügt wurde.

Faire Warnung obwohl; Die Dokumentation der seriellen Schnittstelle ist Licht, vermutlich, da es ziemlich neu ist (es wurde in Asio 1.1.1 hinzugefügt, das in Boost 1.36 enthalten war).

Aber die Arbeit durch asio ist, IMHO, eine bessere Lösung als die Verwendung der rohen Win32-API. Warum? Es wird einfacher zu lesen und zu warten sein (es ist eine API auf höherer Ebene) und es wird plattformübergreifend sein (außer dort, wo Sie den Betriebssystem-spezifischen Gerätenamen angeben müssen). Die Mailinglisten Boost - Users und asio.user sind sehr aktiv und freundlich und sollten Ihnen helfen können, wenn Sie nicht weiterkommen.

+0

Boost macht einen schrecklichen Job der Win32 Fehlerprüfung in Multi-Thread-Programmen. Es ignoriert direkt Rückgabewerte für 'WaitForSingleObject'. Verwenden Sie auf eigene Gefahr, wenn es Ihnen nichts ausmacht, ihre Fehler in einem Thread-Programm zu finden. – jww

Verwandte Themen