Вот несколько функций для работы с com портом на С++ Builder.
Мож что пригодиться.
X++:
DCB dcb;
HANDLE hComm;
//Установка настроек com-порта
bool __fastcall InstallComm(int iPort) //номер порта
{
BOOL fSuccess;
char szCommPattern[8];
if (iPort == 0)
return false;
sprintf(szCommPattern, "COM%d", iPort);
hComm = CreateFile(szCommPattern,
GENERIC_READ | GENERIC_WRITE,0,0,
OPEN_EXISTING,0,0);
if (hComm == INVALID_HANDLE_VALUE)
return false;
fSuccess = GetCommState(hComm, &dcb);
if (!fSuccess)
return false;
dcb.BaudRate = CBR_57600;
dcb.ByteSize = 8;
dcb.fParity = FALSE;
dcb.Parity = NOPARITY;
dcb.StopBits = TWOSTOPBITS;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
fSuccess = SetCommState(hComm, &dcb);
if (!fSuccess)
return false;
SetupComm(hComm, 1024, 1024);
COMMTIMEOUTS TO;
TO.ReadIntervalTimeout = 80;// 50
TO.ReadTotalTimeoutMultiplier = 1; ///1
TO.ReadTotalTimeoutConstant = 100; ///500
TO.WriteTotalTimeoutMultiplier = 200; ///10
TO.WriteTotalTimeoutConstant = 2000; ///100
SetCommTimeouts(hComm, &TO);
return true;
}
//Запись в com-порт
bool __fastcall WriteBuffer(byte* lpBufWrite,DWORD dwToWrite)
{
DWORD dwWritten;
GetCommState(hComm,&dcb);
dcb.fDtrControl=DTR_CONTROL_DISABLE;
SetCommState(hComm,&dcb);
GetCommState(hComm,&dcb);
dcb.fDtrControl=DTR_CONTROL_ENABLE;
SetCommState(hComm,&dcb);
for(unsigned i=0;i<dwToWrite;i++)
{
if (i==dwToWrite-1)
{
GetCommState(hComm,&dcb);
dcb.fDtrControl=DTR_CONTROL_DISABLE;
SetCommState(hComm,&dcb);
}
WriteFile(hComm,lpBufWrite+i,1,&dwWritten,NULL);
Sleep(1);
}
return true;
}
//-------------------------------------------------------------------------------
//Чтение из com-порта
int __fastcall ReadBuffer(byte* lpBufRead,DWORD dwToRead)
{
DWORD dwRead=0;
Sleep(2);
ReadFile(hComm,lpBufRead,dwToRead,&dwRead,NULL);//Читаем буффер
PurgeComm(hComm,PURGE_RXCLEAR);//Очищаем буффер
return dwRead;
}
//Использование
DWORD dwBytesReceived;
byte buf[64];
dwBytesReceived = ReadBuffer((char *)buf,13);
byte OutText[22];
OutText[0]=adr;
-----------------
OutText[22]= X;
WriteBuffer(OutText,22);