COM Ports >9 nicht erreichbar



  • Hallo,

    ich versuche mit C++ (schreibe mit dem BCB6) die COM Ports anzusprechen, was leider nicht richtig funktioniert.
    Da mein Rechner nur einen COM Port hat (COM1), verwende ich einen USB auf seriell Verteiler, der 8 weitere COM Ports zu Verfügung stellt.
    Werden COM Ports > 9 eingestellt und angesprochen, kommt keine Verbindung zu stande.
    Irgendwie scheint das öffnen der COM Schnittstelle nicht zu funktionieren. Mit GetLastError wird mir Fehler "2" angezeigt (wenn ich das richtig auslese...).

    Hier mal der entscheidene Codeschnipsel:

    AnsiString COM_a = "COM";
       AnsiString port_a = com_port;
       COM_a += port_a;
       char *port = COM_a.c_str();
    
       DCB dcb;
       hCom = CreateFile (  port,
                            GENERIC_WRITE | GENERIC_READ,
                            0,
                            0,
                            OPEN_EXISTING,
                            0,
                            0);
    
       // GetLastError: bringt hier Fehlercode 2
    
       if (hCom == INVALID_HANDLE_VALUE)
       {
          AnsiString error_1 = GetLastError();
          Application->MessageBox(error_1.c_str(), "Info" );
       }
    
       dcb.DCBlength = sizeof(DCB);  		// setzen der Blocklaenge, muss erfolgen
       GetCommState (hCom, &dcb);    		// COM-Einstellungen laden
       dcb.BaudRate  = 9600;         		// Baudrate einstellen, hier 9600
       dcb.ByteSize  = 8;            		// Datenbits einstellen, hier 8
       dcb.Parity    = NOPARITY;     		// Parität einstellen, hier keine Parität
       dcb.StopBits  = ONESTOPBIT;   		// Stopbits einstellen, hier 1
    
       SetCommState (hCom, &dcb);    		// COM-Einstellungen speichern
    
       // GetLastError: bringt hier Fehlercode 6
    
          if (hCom == INVALID_HANDLE_VALUE)
       {
          AnsiString error_1 = GetLastError();
          Application->MessageBox(error_1.c_str(), "Info" );
       }
    

    Das Problem scheint allerdings irgendwie an meinen Programm zu liegen, da mit dem Windows HyperTerminal Programm problemlos an Verbindungen > COM9 möglich sind.

    Ich habe es auch mal direkt mit "\.\COMxx" funktioniert, jedoch hat das auch nicht gebracht.
    Früher gab es da ja wohl mit 16Bit Programmen Probleme, aber daran kann es doch wohl nicht liegen. (?!?)

    Jemand eine Idee, wodran das liegen könnte?

    Vielen Dank.

    gruß,
    mFS



  • M.Frank schrieb:

    Ich habe es auch mal direkt mit "\.\COMxx" funktioniert, jedoch hat das auch nicht gebracht.

    Komisch. Bei mir hat das mit bis zu dreistelligen Ports problemlos geklappt. Vielleicht könntest du "hat nichts gebracht" etwas präzisieren? Hast du daran gedacht, die Backslashes zu verdoppeln?



  • MFK schrieb:

    M.Frank schrieb:

    Ich habe es auch mal direkt mit "\.\COMxx" funktioniert, jedoch hat das auch nicht gebracht.

    Komisch. Bei mir hat das mit bis zu dreistelligen Ports problemlos geklappt. Vielleicht könntest du "hat nichts gebracht" etwas präzisieren? Hast du daran gedacht, die Backslashes zu verdoppeln?

    hurra, mit den doppelten Backslashes funktioniert es. Da kommt keine Fehlermeldung mehr. Danke. 👍

    mit "nix gebracht" meinte ich, dass immer noch das passiert was ich am Anfang des Postings geschrieben habe:

    Werden COM Ports > 9 eingestellt und angesprochen, kommt keine Verbindung zu stande.
    Irgendwie scheint das öffnen der COM Schnittstelle nicht zu funktionieren. Mit GetLastError wird mir Fehler "2" angezeigt (wenn ich das richtig auslese...).

    Im Code steht auch genau drin, wo die Fehler kommen (bzw. nun ja kamen).

    Aber mal der Vollständigkeit halber.... warum funktioniert das nicht? Immerhin gibt es mit "COM1"-"COM9" ja auch keine Probleme.

    gruß,
    mFS



  • Hallo M.Frank

    wie hast du nun dein Problem gelöst?
    Habe dieses auch.

    Ersuche um Info.
    Danke



  • "\\\\.\\COM10"
    


  • Das kann ich schon bald singen: "HOWTO: Specify Serial Ports Larger than COM9"


Log in to reply