|
C++ Builder 6 유저입니다.
comport 시리얼 통신을 하다가 send쪽은 되는데 receive가 잘 안되어서 질문 드립니다.
우선 receive 패킷 프레임은 아래와 같습니다.
Preamble (4byte) : 0xa5 0xa5 0xa5 0xa5
STX (1byte) : 0xAE
Length (2byte) : stx~etx
Type (2byte) : 0x0000 ~ 0xffff
Opcode (1byte) : 0x00 ~ 0xff
Data (Nbyte) : 0x00 ~ 0xff 길이 가변
CRC (1byte) : length~data 합(%255)
ETX (1byte) : 0xaf
이런 프레임을 가지고 있으며 length type opcode data 는 Preamble, STX, ETX의 데이터를 가질수 없으며
stuffing을 해서
Preamble과 동일 데이터는 0xa0 0x05로 send 및 receive를 하며
STX 동일데이터는 0xa0 0x0e
ETX 동일데이터는 0xa0 0x0f
데이터 중간 a0가 있을시 0xa0 0x00 입니다.
send쪽은 전부 코딩했는데 receive를 하면서 데이터가 잘 받아지지 않습니다.
소스에 이상한부분이 있는지좀 봐주시면 감사드리겠습니다.
c++ builder 6에 comm 컴포넌트 사용중입니다.
아래 소스 입니다.
unsigned int SERIAL_LEN = 0;
void __fastcall TForm1::Comm1RxChar(TObject *Sender, DWORD Count)
{
Comm1->Read(serial_data,Count);
for(i=0;i<Count;i++)
{
buffer=serial_data[i];
switch(serial_number)
{
case 0:
if(buffer==0xa5)
{
serial_number=1;
data[0]=buffer;
}
else
{
serial_number=0;
message = 0;
}
case 1:
if(buffer==0xa5)
{
serial_number=2;
data[1]=buffer;
}
else
{
serial_number=0;
}
break;
case 2:
if(buffer==0xa5)
{
serial_number=3;
data[2]=buffer;
}
else
{
serial_number=0;
}
break;
case 3:
if(buffer==0xa5)
{
serial_number=4;
data[3]=buffer;
}
else
{
serial_number=0;
}
break;
default:
data[serial_number-1]=buffer;
serial_number++;
if(serial_number >= 1024 ) serial_number = 0;
break;
}
if((unsigned int)((data[5]<<8)+data[6])<serial_number) <----- 이부분
{
}
}
serial_number = 0;
}
위의 저 부분을 체크해보니 숫자를 강제로 length에 맞춰서 136과 같이 넣으면 동작되는데
저렇게 (unsigned int)((data[5]<<8)+data[6]) 넣으면 동작을 하지 않습니다.
먼저 stuff를 하고 if문이 들어가야 하지만 데이터에 stuff 해야하는 데이터를 넣지 않아도
동작을 하지 않네요.
어디 부분에서 잘못하고있는지 찍어주시면 감사하겠습니다.
receive 되는 실제 패킷은 아래와 같습니다.
2011-03-15 23:22:43.785 [RX] - A5 A5 A5 A5 AE 00 84 02 00 00 01 01 00 00 00 10 04 07 90 23 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7D AF
또 다른 패킷
2011-03-15 23:30:15.325 [RX] - A5 A5 A5 A5 AE 00 09 12 00 EE 01 09 AF
|