Forum: PC-Programmierung Fragen zur seriellen Kommunikation mit C++ Win32


von Tigger (Gast)


Lesenswert?

Guten Abend,

ich möchte eine Win32 Applikation in C++ schreiben. Zunächst sollen alle 
benötigten Funktionen in einer Klasse definiert und deklariert sein.
In dieser Klasse soll auch ein eigener Thread für die serielle 
Kommunikation aufgesetzt bzw. gestartet werden. In diesem Thread soll 
dann wenn Daten von außen ankommen mit Hilfe eines Event reagiert und 
dann die Daten in einen Puffer abgelegt werden. Beim Senden soll es auch 
über einen Event realisiert werden. Welche Methoden sind dafür 
notwendig, damit man auf einen Event von der seriellen Schnittstelle 
reagieren kann ?

Vielen Dank im Voraus für jegliche Hilfestellung.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Meinst Du mit C++ jetzt C++ oder die Microsoft-Perversion namens 
"C++/CLI", die das .Net-Geraffel nutzt?

In ersterem Falle: Sieh Dir die Win32-API an, die für die Kommunikation 
mit seriellen Schnittstellen zu nutzen ist. Das wurde hier schon ad 
nauseam mit etlichen Beispielen diskutiert, die Du mit der Forensuche 
auch leicht finden können solltest.

Das Warten auf ein Event kann z.B. mit den Win32-API-Funktionen 
WaitForSingleObject oder WaitForMultipleObjects erfolgen. Letzteres ist 
zu bevorzugen, weil da auch zusätzliche Events genutzt werden können, 
die z.B. zum sauberen Beenden Deines Threads genutzt werden können.

von Tigger (Gast)


Lesenswert?

Hallo Rufus,

recht herzlichen Dank für deinen Beitrag. Ich möchte natürlich nicht 
C++/CLI von .NET verwenden.

Mit der Funktion CreateFile kann zum Beispiel auf einen serielle 
Schnittstelle zugreifen. Kann man mit dieser Funktion auch virtuelle COM 
Ports öffnen ? Zum Beispiel COm Port 14 ?

von xxX (Gast)


Lesenswert?

Also wie gesagt für Thread Synchronisierung bietet WaitForSingleObject 
oder WaitForMultipleObjects an. Für CreateFile macht es keinen 
Unterschied ob der COM Port virtuell oder nicht ist. Die winapi 
untersützt auch Asynchrone lese und schreib zugriff macht die sache 
meistens einfacher als Threads.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn Du eine Schnittstelle mit einer zweistelligen Nummer ansprechen 
wikkst, musst Du eine etwas andere Syntax für den Dateinamen verwenden, 
also nicht
1
hFile = CreateFile("COM10", etc. pp);

sondern
1
hFile = CreateFile("\\\\.\\COM10", etc. pp);

Diese Syntax kannst Du auch bei COM1-9 verwenden.

Das steht auch so in der Dokumentation von CreateFile beschrieben.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx
(dort nach "Communication Resources" suchen, etwa in der Mitte der Seite 
zu finden)

von wfm (Gast)


Lesenswert?

Tigger schrieb:
> Kann man mit dieser Funktion auch virtuelle COM
> Ports öffnen ?


RFCOMM oder Bluetooth im Auge?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.