COM(X) öffnen klappt nur nach HyperTerminal
-
Hallo
Also wenn ich den PC neu starte, kann ich zwar senden(WriteFile) aber ich empfange nichts (ReadFile dwRead==0).
Wenn ich das HyperTerminal starte und den jeweileigen COM port öffne und wieder schliesse funkts .static OVERLAPPED o; static COMMTIMEOUTS ctmo; static DWORD dwEvtMask=EV_ERR|EV_RXCHAR; static DCB dcb; wsprintf(scPort,"\\\\.\\COM%s",cPort ); hCom = CreateFile (scPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,|0, NULL); rserror=GetLastError(); //............... ZeroMemory(&dcb, sizeof(dcb)); dcb.DCBlength = sizeof(DCB); GetCommState (hCom, &dcb); dcb.wReserved = 0; dcb.BaudRate = CBR_19200; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; dcb.fBinary = TRUE; if (!SetCommState(hCom, &dcb)) //.................Fehler-> //bei else gehts weiter if (!SetCommMask (hCom, dwEvtMask)) //.................Fehler-> //bei else gehts weiter memset (&o, 0, sizeof (OVERLAPPED)); o.hEvent = CreateEvent (NULL, FALSE, FALSE, NULL); GetCommTimeouts (hCom, &ctmo); ctmo.ReadIntervalTimeout = 1000 / 19200 * (dcb.ByteSize + (dcb.Parity == NOPARITY ? 0 : 1) + (dcb.StopBits == ONESTOPBIT ? 1 : 2)) * 2; ctmo.ReadTotalTimeoutMultiplier = 1; ctmo.ReadTotalTimeoutConstant = 10; ctmo.WriteTotalTimeoutMultiplier = 0; ctmo.WriteTotalTimeoutConstant = 0; SetCommTimeouts (hCom, &ctmo); SetupComm (hCom, COM_BUFFER_SIZE, COM_BUFFER_SIZE); //WriteFile(....... if (!WriteFile (hCom, &HEX_LOGIN, sizeof(HEX_LOGIN), &iBytesWritten, &o)) { if (rserror!=ERROR_IO_PENDING) { rs232_error(rserror,"Fehler beim Einloggen"); } } else { if (WAIT_OBJECT_0 == WaitForSingleObject (o.hEvent, 2000)) { if (dwEvtMask & EV_RXCHAR) { bRet=ReadFile (hCom, &wpString, sizeof(wpString), &dwRead, &o);bRet liefer TRUE aber dwRead = 0 !!?
Vielleicht kann mir jemand helfen. Danke im voraus.
Max
-
Nachdem du die Schnittstelle aufgemacht hast...:
- Lass das GetCommState weg und setze stattdessen alle Member der Struktur genau so wie du sie brauchst
- Dasselbe gilt für GetCommTimeouts
- rufe ClearCommBreak auf
- rufe ClearCommError auf
3 und 4 sind möglicherweise nicht nötig, schaden aber auf keinen Fall.