Serielle Schnittstelle( Com Port ) abfragen aber wie? ( GPS )



  • Hallo!
    Ich habe ein Problem ich muß in einem Großprojekt von meiner Schule eine GPS Maus abfragen habe auch was gefunden auf dem Board wie kriege ich das Ergebnis in ein Memo1???
    Quelltext:

    bool __fastcall TModem::OpenComm(AnsiString ComPort, DWORD BaudRate, BYTE ByteSize, BYTE Parity, BYTE StopBits)
    {
        // Schnittstelle öffnen
        CommHandle=CreateFile(  ComPort.c_str(),
                                GENERIC_READ | GENERIC_WRITE,
                                0,    /* comm devices must be opened w/exclusive-access */
                                NULL, /* no security attrs */
                                OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */
                                0, // no overlapped I/O
                                NULL  /* hTemplate must be NULL for comm devices */
                                );
        // Prüfen ob Schnittstelle geöffnet werden konnte
        if(CommHandle==INVALID_HANDLE_VALUE)
        {   Application->MessageBox("Fehler beim Ínitialisieren der Schnittstelle.\n\n"
                                    "Schnittstelle nicht vorhanden, oder ein anderes\n"
                                    "Programm hat diese noch geöffnet.",ComPort.c_str(),MB_ICONEXCLAMATION);
            return(false);
        }
        // Timeout für Read setzen damit nicht auf ein Zeichen
        // von der Schnittstelle gewartet wird
        GetCommTimeouts(CommHandle,&CommTimeOut);
        CommTimeOut.ReadIntervalTimeout=MAXDWORD;
        CommTimeOut.ReadTotalTimeoutMultiplier=0;
        CommTimeOut.ReadTotalTimeoutConstant=0;
        SetCommTimeouts(CommHandle,&CommTimeOut);
        SetCommMask(CommHandle,EV_RXCHAR);
        GetCommState(CommHandle,&CommDCB);
        /*
            CBR_110     CBR_19200
            CBR_300     CBR_38400
            CBR_600     CBR_56000
            CBR_1200    CBR_57600
            CBR_2400    CBR_115200
            CBR_4800    CBR_128000
            CBR_9600    CBR_256000
            CBR_14400
    
            #define NOPARITY            0
            #define ODDPARITY           1
            #define EVENPARITY          2
            #define MARKPARITY          3
            #define SPACEPARITY         4
    
            #define ONESTOPBIT          0
            #define ONE5STOPBITS        1
            #define TWOSTOPBITS         2
    
            typedef struct _DCB
            {   DWORD DCBlength;           // sizeof(DCB)
                DWORD BaudRate;            // current baud rate
                DWORD fBinary: 1;          // binary mode, no EOF check
                DWORD fParity: 1;          // enable parity checking
                DWORD fOutxCtsFlow:1;      // CTS output flow control
                DWORD fOutxDsrFlow:1;      // DSR output flow control
                DWORD fDtrControl:2;       // DTR flow control type
                DWORD fDsrSensitivity:1;   // DSR sensitivity
    
                DWORD fTXContinueOnXoff:1; // XOFF continues Tx
                DWORD fOutX: 1;            // XON/XOFF out flow control
                DWORD fInX: 1;             // XON/XOFF in flow control
                DWORD fErrorChar: 1;       // enable error replacement
                DWORD fNull: 1;            // enable null stripping
                DWORD fRtsControl:2;       // RTS flow control
                DWORD fAbortOnError:1;     // abort reads/writes on error
                DWORD fDummy2:17;          // reserved
                WORD wReserved;            // not currently used
    
                WORD XonLim;               // transmit XON threshold
                WORD XoffLim;              // transmit XOFF threshold
                BYTE ByteSize;             // number of bits/byte, 4-8
                BYTE Parity;               // 0-4=no,odd,even,mark,space
                BYTE StopBits;             // 0,1,2 = 1, 1.5, 2
                char XonChar;              // Tx and Rx XON character
                char XoffChar;             // Tx and Rx XOFF character
                char ErrorChar;            // error replacement character
    
                char EofChar;              // end of input character
                char EvtChar;              // received event character
                WORD wReserved1;           // reserved; do not use
        } DCB;
        */
        CommDCB.BaudRate=BaudRate;
        CommDCB.ByteSize=ByteSize;
        CommDCB.Parity=Parity;
        CommDCB.StopBits=StopBits;
        CommDCB.fDtrControl=DTR_CONTROL_ENABLE;
        CommDCB.fRtsControl=RTS_CONTROL_ENABLE;
        SetCommState(CommHandle, &CommDCB);
        PurgeComm(CommHandle,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
    
        return(true);
    }
    

    Memo1->Lines->add(????????????????????????????????)

    Danke für die Hilfe 🙂

    Edit:
    Bitte die Code-Tags verwenden. Danke!



  • Ich weis zwar nicht welche Komponente oder Funktion du benutzt um auf die Ser. Schnittstelle zuzugreifen, aber auch dann wäre es besser wenn du die code-tags (cpp-tag) benutzt.Ist besser zu lesen so.



  • Hallo erst mal!

    Aber wenn ich ehrlich bin wär das sicher von Vorteil, aber ich kann dir nur nen Tipp geben. Wenn du z.B. Greenleaf Commx verwenden würdest tust du dich erheblich leichter wenn's um die Serielle geht. Ich hab noch kein bequemeres Zusatztool für'n Borland gefunden. Lass mich aber gerne eines Besseren belehren.

    Bis dann, mfg
    Tom



  • aber die komponente muß man doch kaufen ich bräuchte eine die free ist oder per Hand halt eingibt habt ihr nicht einen link oder eine beschreibung wie ich das machen kann



  • Hallo

    @ com-cat :
    Ich weiß nicht was du da für Methoden benutzt, aber geb dir den Tip, einfach mal die Doku zu dem Gerät/dem Interface lesen, wo und in welcher Form denn nun die Nutzdaten in dem struct gelagert werden.
    Wenn du das weißt ist die Anzeige in einem Control kein Problem mehr.

    bis bald
    akari



  • Greenleaf Commx := ist wirklich preislich nicht zu schlagen (jedenfalls gibt es keine teurere Komponente für die serielle Schnittstelle). Vielleicht tut es ja auch ein Blick in das Buch (oft zitiert) von Richard Kaiser "C++ mit dem Borland Builder". Er beschreibt dort die Kommunikation über die serielle Schnittstelle recht gut, so daß auch ich es verstanden habe.



  • ok preislich hab ich keine Ahnung von dem, da mein Vorgänger mir das Packet übergeben hat (so weit ich weiß war das mal bei irgend ner Version vom Borland mit dabei als Tool zum testen).

    Werd mir das Buch mal zu gemüte führen und nachlesen, viell. kapier ich's ja auch.

    mfg
    Tom



  • Ich benutze die TSerial Komponente von Toolbox, die ist zwar nicht umsonst aber kostet 'nur' den Preis einer Toolbox.Es muss natürlich die sein auf der die Komponente drauf ist. Beim ersten Link steht auf welchen Ausgaben die drauf war.


Anmelden zum Antworten