Also, so sieht er aus, ein bisschen umständlich, aber ich hab ja die Hoffnung, dass es funktioniert. Und wenn ich das Xterminal Programm von dir auf nem anderen Pc öffne und dort etwas schreibe und sende wird es auch mit meiner Software angezeigt. Das Problem ist, wenn ich die BaudRate oder Stopbit etc. ändere klappt es nicht mehr, auch wenn ich die einstellungen dementsprechend auch in meiner Software ändere.
Naja hier erstmal der Quellcode:
Code:
//-----------------------------------Hauptmenü-----------------------------------------------------------
menue:
cout << "Hauptmen\201:" << endl
<< "----------" << endl
<< "[1] Konfiguration des Com-Ports" << endl
<< "[2] Port \224ffnen" << endl
<< "[3] Programm starten" << endl
<< "[4] Programm beenden" << endl
<< "-------------" << endl
<< "Ihre Eingabe: ";
cin >> eingabe;
cout << endl;
//----------------------------Programm beenden----------------------------------------
if(eingabe == 4)
{
return EXIT_SUCCESS; //beendet Programm
}
//--------------------------------Port öffnen-----------------------------------------
if(eingabe==2)
{
hCom = CreateFile ("COM1",
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
0, // non overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if (hCom == INVALID_HANDLE_VALUE) //bei fehler beim Portöffnen gibt Error aus
{ cout << " Error opening COM1" << endl << endl;}
else
{ cout << " COM 1 successfully opened" << endl << endl;}
Sleep(1000);
goto menue;
}
if(eingabe==1)
{
//-------------------Baudrate einstellen-----------------------------------------
GetCommState(hCom,&dcb); //Porteinstellungen werden abgerufen
neuBaudrate:
cout << "Welche Baudrate soll eingestellt werden: " << endl <<
"----------------------------------------" << endl <<
"[1] 115200" << endl <<
"[2] 57600" << endl <<
"[3] 38400" << endl <<
"[4] 19200" << endl <<
"[5] 9600" << endl <<
"[6] 4800" << endl <<
"[7] 2400" << endl <<
"[8] 1200" << endl <<
"[9] 600" << endl <<
"[10] 300" << endl <<
"-------------" << endl <<
"Ihre Eingabe: ";
cin >> Baudrate;
cout << endl;
switch (Baudrate)
{
case 1: dcb.BaudRate = CBR_115200; //Baudrate
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 2: dcb.BaudRate = CBR_57600; //Baudrate
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 3: dcb.BaudRate = CBR_38400; //Baudrate
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 4: dcb.BaudRate = CBR_19200; //Baudrate
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 5: dcb.BaudRate = CBR_9600; //Baudrate
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 6: dcb.BaudRate = CBR_4800; //Baudrate
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 7: dcb.BaudRate = CBR_2400; //Baudrate
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 8: dcb.BaudRate = CBR_1200; //Baudrate
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 9: dcb.BaudRate = CBR_600; //Baudrate
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 10: dcb.BaudRate = CBR_300; //Baudrate
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
default: goto neuBaudrate; //springe zurück
}
//---------------------Anzahl Datenbits festlegen-------------------------------
neuDatenbits:
cout << "Wieviele Datenbits werden gesendet: " << endl <<
"-----------------------------------" << endl <<
"[1] 5" << endl <<
"[2] 6" << endl <<
"[3] 7" << endl <<
"[4] 8" << endl <<
"-------------" << endl <<
"Ihre Eingabe: ";
cin >> Datenbits;
cout << endl;
switch(Datenbits)
{
case 1: dcb.ByteSize= 5; //Datenbits
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 2: dcb.ByteSize= 6; //Datenbits
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 3: dcb.ByteSize= 7; //Datenbits
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 4: dcb.ByteSize= 8; //Datenbits
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
default: goto neuDatenbits;
}
//------------------Parität festlegen---------------------------------------------
neuParitaet:
cout << "Welche Parit\204t soll gesetzt werden: " << endl <<
"-----------------------------------" << endl <<
"[1] NOPARITY" << endl <<
"[2] ODDPARITY" << endl <<
"[3] EVENPARITY" << endl <<
"[4] MARKPARITY" << endl <<
"[5] SPACEPARITY" << endl <<
"-------------" << endl <<
"Ihre Eingabe: ";
cin >> Paritaet;
cout << endl;
switch(Paritaet)
{
case 1: dcb.Parity= NOPARITY; //Parität
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 2: dcb.Parity= ODDPARITY; //Parität
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 3: dcb.Parity= EVENPARITY; //Parität
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 4: dcb.Parity= MARKPARITY; //Parität
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 5: dcb.Parity= SPACEPARITY; //Parität
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
default: goto neuParitaet;
}
//---------------------Stopbits festlegen------------------------------------------
neuStopbits:
cout << "Wieviel Stopbits sollen gesetzt werden: " << endl <<
"---------------------------------------" << endl <<
"[1] 1 Stopbit" << endl <<
"[2] 2 Stopbits" << endl <<
"[3] 1,5 Stopbits" << endl <<
"-------------" << endl <<
"Ihre Eingabe: ";
cin >> Stopbit;
cout << endl;
switch(Stopbit)
{
case 1: dcb.StopBits= ONESTOPBIT; //Stopbits
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 2: dcb.StopBits= TWOSTOPBITS; //Stopbits
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
case 3: dcb.StopBits= ONE5STOPBITS; //Stopbits
SetCommState (hCom, &dcb); //COM-Einstellungen speichern
break;
default: goto neuStopbits;
}
//----------------------------Eingaben prüfen--------------------------------------
cout << "Sind diese Eingaben OK?" << endl <<
"-----------------------" << endl <<
"[1] Ja" << endl <<
"[2] Nein" << endl <<
"-------------" << endl <<
"Ihre Eingabe: ";
cin >> ok;
cout << endl;
switch(ok)
{
case 1: goto menue;
break;
case 2: goto neuBaudrate;
break;
default: goto neuBaudrate;
}
{
system("cls"); //löscht Bildschirm
}
}
dcb.DCBlength = sizeof(DCB); //Länge des Blockes muss gesetzt werden
SetCommMask (hCom, EV_RXCHAR); //Kontrolliert ob an RXD-Leitung Daten ankommen
COMMTIMEOUTS ct;
ct.ReadIntervalTimeout = MAXDWORD;
ct.WriteTotalTimeoutConstant = 0;
ct.ReadTotalTimeoutMultiplier = 0;
ct.WriteTotalTimeoutConstant = 0;
ct.WriteTotalTimeoutMultiplier = 0;
SetCommTimeouts (hCom, &ct);
if(!SetCommTimeouts(hCom, &ct))
{
CloseHandle(hCom);
cout << "Fehler SetCommTimeouts";
}
//-------------------------------Bytes auslesen------------------------------------------
if(eingabe==3)
{
DWORD dwRead;
char chRead;
cout << dcb.BaudRate << endl
<< dcb.ByteSize << endl
<< dcb.Parity << endl
<< dcb.StopBits;
do
{
if(ReadFile(hCom, &chRead, 1, &dwRead, NULL));
{
if(dwRead)
{
printf("%c<%03u>", chRead, chRead, chRead);
}
}
} while(1);
}
system("PAUSE");
return EXIT_SUCCESS;
}
Lesezeichen