Re: Работа с COM-портом в Buildere
В дополнение к ответу Andrew_1978 приведу пример работы с СОМ портом (синхронное обращение с портом):
Объявляем переменные
HANDLE hComPort;
DCB lpDCB;
COMMTIMEOUTS lpCommTimeouts;
int iReadTotalTimeoutConstant;
char cBufferSend[4], cBufferReseive[500];
DWORD CountBytes, ReadCountBytes;
Открываем COM-порт и задаём ему необходимые параметры
bool OpenCOMPort()
{
hComPort=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXI STING,0,NULL);
if(hComPort==INVALID_HANDLE_VALUE)
{
Application->MessageBox("Не могу открыть СОМ1","",
MB_OK + MB_ICONINFORMATION);
return false;
}
GetCommState(hComPort,&lpDCB);
lpDCB.BaudRate=9600;
lpDCB.ByteSize=8;
lpDCB.Parity=NOPARITY;
lpDCB.StopBits=ONESTOPBIT;
lpDCB.fDtrControl=DTR_CONTROL_DISABLE;
lpDCB.fRtsControl=RTS_CONTROL_DISABLE;
if(!SetCommState(hComPort,&lpDCB))
{
Application->MessageBox("Необходимые параметры порта СОМ1 не установлены",
"",MB_OK + MB_ICONINFORMATION);
return false;
}
GetCommTimeouts(hComPort,&lpCommTimeouts);
lpCommTimeouts.ReadTotalTimeoutConstant = iReadTotalTimeoutConstant;
if(!SetCommTimeouts(hComPort,&lpCommTimeouts))
{
Application->MessageBox(("Необходимые параметры порта \""+
sNameComPort+"\" не установлены").c_str(),
sCaption.c_str(),
MB_OK + MB_ICONINFORMATION);
return false;
}
return true;
}
//---------------------------------------------------------------------------
Читаем и передаём данные например так:
ReadFile(hComPort,cBufferReseive,ReadCountBytes,&CountByte s,NULL);
WriteFile(hComPort,cBufferSend,4,&CountBytes,NULL);
предварительно присвоив необходимые значения переменным
При окончании общения с СОМ-портом не забываем освободить (закрыть)указатель
CloseHandle(hComPort);
Последний раз редактировалось Ivan_Nikit; 10.02.2011 в 18:19..
|