013
04.08.2004, 17:19 Uhr
~toxic
Gast
|
hi, also, wenn das messgerät daten sendet (mit "deinem" programm jetzt) dann funktioniert das doch mit dem DTR/RTS... oder ?! bist du sicher das die COMeinstellungen auch richtig übernommen sind ? und auch richtig gelesen wird ?
bau dir doch schnell mal einen dialog mit einem button und einem editfeld (ohne jetzt noch irgendwelche klassen hinzuzufügen) dieses ist dann deine button1 funktion:
C++: |
void DeinDlg::OnButton1() { HANDLE h_ComPort; if ( INVALID_HANDLE_VALUE == (h_ComPort = CreateFile("COM1", GENERIC_READ, 0, 0, OPEN_EXISTING, 0 , 0)) ) return; // fehler beim com-port öffnen
DCB dcb; dcb.DCBlength = sizeof(dcb); COMMTIMEOUTS cto; CString tmp="----------------------------------------"; DWORD Bytes = 0;
GetCommState(h_ComPort, &dcb); BuildCommDCB("baud=2400 parity=N data=8 stop=1", &dcb); dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fRtsControl = RTS_CONTROL_DISABLE; SetCommState(h_ComPort, &dcb); GetCommTimeouts(h_ComPort,&cto); cto.ReadIntervalTimeout = 10; cto.ReadTotalTimeoutConstant = 10; cto.ReadTotalTimeoutMultiplier = 0; cto.WriteTotalTimeoutConstant = 5000; cto.WriteTotalTimeoutMultiplier = 0; SetCommTimeouts(h_ComPort,&cto); PurgeComm(h_ComPort, PURGE_TXCLEAR); EscapeCommFunction(h_ComPort, SETDTR); EscapeCommFunction(h_ComPort, SETRTS); Sleep(200); EscapeCommFunction(h_ComPort, CLRRTS); Sleep(4000); // 4sec warten bis daten da sind... ReadFile(h_ComPort, tmp.GetBuffer(tmp.GetLength()), tmp.GetLength(), &Bytes, NULL); tmp.ReleaseBuffer(); CloseHandle(h_ComPort); SetDlgItemText(IDC_EDIT1, tmp); return; }
|
-- grusz |