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.