|
void __fastcall TForm1::OpenComPort()
{
COMMTIMEOUTS ct;
DCB dcb;
FillMemory(&dcb, sizeof(dcb), 0);
ct.ReadIntervalTimeout=10; // мах время ожидания между двумя байтами
ct.ReadTotalTimeoutMultiplier=0;//9; // множитель для тай-аута (умн на кол-ва приним байт)
ct.ReadTotalTimeoutConstant=0;//20; // + время для общего тай-аута
// общ тайм-аут = TimeoutMultiplier*кол-во принимаемых байт + TotalTimeoutConstant)
ct.WriteTotalTimeoutMultiplier=ct.WriteTotalTimeoutConstant=0; // тайм-ауты для передачи
port=CreateFile(comport,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
if ( port == INVALID_HANDLE_VALUE )
{ Button2Click(NULL);
char mess[40] = "Невозможно открыть порт";
MessageBox (NULL, TEXT(strcat(strcat(mess," "),comport)),TEXT("Error"), MB_OK);
*mess=0;
CloseHandle(port);
goto exit;
}
// установка параметров порта
GetCommState(port, &dcb); // чтение параметров порта
dcb.BaudRate = CBR_1200 ;
dcb.fParity = FALSE;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fNull = TRUE;//FALSE;
SetCommState(port,&dcb); // уст параметров порта
SetCommTimeouts(port,&ct); // уст временных интервалов
PurgeComm(port,PURGE_RXCLEAR); // обнуление буфера порта
SetupComm(port,256,256); // передача параметров в порт
SetCommMask(port,EV_RXCHAR);
for (i=0; i<1000; i++)
{
WaitCommEvent(port,&mask,NULL);
ReadFile(port,buf_in,4,&bc,NULL);
Edit1->Text = buf_in[0];
Edit2->Text = i;
}
exit:
}
E-mail: info@telesys.ru