TForm1 *Form1;
HANDLE Port= CreateFile("COM2", GENERIC_READ|GENERIC_WRITE,0,NULL,
OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);
OVERLAPPED over;
DWORD n, m;
COMSTAT curstat;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ typedef _DCB TDCB;
TDCB lpDCB;
if (!GetCommState(Port,&lpDCB))
{ShowMessage("Порт не открывается"); }
lpDCB.BaudRate=CBR_9600;
lpDCB.ByteSize=8;
lpDCB.Parity=NOPARITY;
lpDCB.StopBits=1;
lpDCB.fBinary=true;
if (!SetCommState(Port,&lpDCB))
{ShowMessage("Параметры порта не установлены"); }
_COMMTIMEOUTS lpCT;
GetCommTimeouts(Port,&lpCT);
lpCT.ReadIntervalTimeout=100;
lpCT.ReadTotalTimeoutMultiplier=200;
lpCT.ReadTotalTimeoutConstant=200;
lpCT.WriteTotalTimeoutConstant=200;
lpCT.WriteTotalTimeoutMultiplier=200;
SetCommTimeouts(Port,&lpCT);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
char *S_form="10001X110011000XXXX1";
FlushFileBuffers(Port);
if (!WriteFile(Port,S_form,strlen(S_form),&n,&over))
{ ShowMessage("ошибка при записи в буфер");}
else ShowMessage("В порт записано "+IntToStr(n)+" байт");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
char *S1="101010101010101010101";
char *S= "010110101010101010010";
AnsiString a;
DWORD lpEvtMask;
SetCommMask(Port,EV_RXCHAR);
char buffer[21];
memset(buffer,0,21);
WaitCommEvent(Port,&lpEvtMask,&over);
if (ReadFile(Port,buffer,21,&m,&over))
{
for (int i = 0; i < 20; i++) {
a[i]=buffer[i];
}
Memo2->Lines->Add(a);
if (a==S)
{ FlushFileBuffers(Port);
if (!WriteFile(Port,S,strlen(S),&m,&over)) { ShowMessage("ошибка при записи в буфер");}
else ShowMessage(" В порт записано "+IntToStr(m)+" байт");
}
else
{ FlushFileBuffers(Port);
if (!WriteFile(Port,S1,strlen(S1),&m,&over)) { ShowMessage("ошибка при записи в буфер");}
else ShowMessage("В порт записано "+IntToStr(m)+" байт");
}
}
else
Memo2->Lines->Add("Нет чтения");