|
디버그를 해보니까 데이터를 두번에 걸쳐서 가져오더라구요.
DWORD ReadThread (LPDWORD lpdwParam1)
{
.............
}
이 함수부분을 두번에 걸쳐서 데이터를 읽어오는거죠. 첫번에 [0]~[8]번까지
그리고 두번째에 나머지 를 가져옵니다. 왜그런지는 모르겠네요. ㅠㅠ
한번에 다 받아오게 하는 법은 없나여? 첫번에 data_Buff 값이 8 이고
두번째에 data_Buff 값이 2더라구요.
그래서 두번째때 ETX가 붙죠.
왜 나누어서 오는지 알수가없네요.
//------------시리얼 수신쪽 ----------------------------------------
DWORD ReadThread (LPDWORD lpdwParam1)
{
char datain[BUFSIZ];
DWORD data_Buff;
if (!(cp.dwProvCapabilities & PCF_INTTIMEOUTS))
return 1L;
memset (&to, 0, sizeof(to));
to.ReadIntervalTimeout = MAXDWORD;
SetCommTimeouts (hComm, &to);
while (bReading) {
if (!ReadFile(hComm, inbuff, BUFSIZ, &data_Buff, NULL))
{
locProcessCommError(GetLastError ());
}
else
{
if(data_Buff)
Form1->ProcessBytes(inbuff, data_Buff);
}
}
PurgeComm(hComm, PURGE_RXCLEAR|PURGE_TXCLEAR);
return 0L;
}
//------------------------------------------------------------
void __fastcall TForm1::RS232_Read( char *datain, int data_Buff)
{
int i;
AnsiString strTemp;
BYTE data;
for( i=0; i<data_Buff; i++)
{
if(i==3)
{
data=0x0f & idatain[i];
strTemp = Format("%2x", ARRAYOFCONST((data)));
Memo1->Text=Memo1->Text+(strTemp);
}
if(i==4)
{
data=idatain[i];
strTemp = Format("%.2x", ARRAYOFCONST((data)));
Memo1->Text=Memo1->Text+(strTemp);
}
}
}
|