RS-232 ansteuern

Hallo,

mit folgendem VC++ - Programm möchte ich auf die RS-232-Schnittstelle zugreifen. Das Programm öffnet auch problemlos die Schnittstelle, allerdings funktioniert die Fkt. SetCommState seltsamerweise nicht.

// RS232.cpp: Hauptprojektdatei.
#include 
#include 
#include 
#include 
#include 

using namespace std;

//globale Variablen
int menuewahl = 0;
char input\_deaktivieren\_aktivieren = 0;
HANDLE hCom;
DCB dcb;
DWORD dwError;
BOOL fSuccess;


bool init\_rs232(){//Die Schnittstelle initialisieren
 hCom = CreateFile ("COM1", GENERIC\_WRITE, 0, NULL, OPEN\_EXISTING, 0, NULL);
 if(hCom == INVALID\_HANDLE\_VALUE){
 dwError = GetLastError();
 printf("Es gab einen Fehler beim öffnen.\n");
 }
 fSuccess = SetCommState(hCom, &dcb);
 if(!fSuccess)
 cout \> input\_deaktivieren\_aktivieren;
 if(input\_deaktivieren\_aktivieren == 'J')
 return true;
 else if(input\_deaktivieren\_aktivieren == 'N')
 return false;
 }
}
void main(void)
{
 if(!init\_rs232())return;
 cout \> menuewahl;
 switch(menuewahl){
 case 1:
 txd(abfrage());
 break;
 case 2:
 rts(abfrage());
 break;
 case 3:
 dtr(abfrage());
 break;
 }
 }
 rts(false);
 dtr(false);
 CloseHandle(hCom);
 hCom = NULL;
 return;
}

Wodran kann das liegen?

MfG Sebastian

Hallo,

Hi,

mit folgendem VC++ - Programm möchte ich auf die
RS-232-Schnittstelle zugreifen. Das Programm öffnet auch
problemlos die Schnittstelle, allerdings funktioniert die Fkt.
SetCommState seltsamerweise nicht.

meines Wissens gibts für Zugriff auf die serielle Schnittstelle extra Bibliotheken. Damit solltest du es eigentlich wesentlich einfacher hinbekommen.

mfg, Hans

Hallo Sebastian,

mit folgendem VC++ - Programm möchte ich auf die
RS-232-Schnittstelle zugreifen. Das Programm öffnet auch
problemlos die Schnittstelle, allerdings funktioniert die Fkt.
SetCommState seltsamerweise nicht.

Wodran kann das liegen?

  1. Naja, in „dcb“ steht nur Schrott !!!
    Du musst erst einmal die aktuellen Werte mit GetCommState() in den DCB laden. Dabei empfiehlt sich dcb erst mit NULLen zu füllen.

  2. SetCommState() initialisiert die Schnittstelle bei jedem Aufruf! Zum Setzen/Rücksetzen der Statusleitungen solltest du die Funktion
    EscapeCommFunction()
    verwenden.

MfG Peter(TOO)

Hallo Peter,

danke - es klappt jetzt. Ja - dcb war nicht richtig konfiguriert.
Das hat sich jetzt geändert. Auf der Seite:http://forum.geizhals.at/t176318,-1.html habe ich was passendes gefunden.
EscapeCommFunction() habe ich jetzt auch eingebaut.Danke für den Tipp.

MfG Sebastian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke für die Mühe,

es gibt nur die kernel32.dll aber keine .NET-Framework Klasse o.ä. Die einzige Bibliothek die ich finden konnte war Folgende:
http://www.codeproject.com/KB/system/cserialport.aspx

MfG Sebastian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]