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; }







Zitieren

Lesezeichen