Fragen zur seriellen Kommunikation mit C++ Win32

Gast #2549095
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.
Persönliche Seite #2549139
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.
Gast #2549246
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 ?
Gast #2549261
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.
Persönliche Seite #2549407
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren