|
저도 거의 질문만 올리다가요..
혹시 데이터가 들어오는 양(?)을 확인해보셨나요??
저도 전에 비슷하게 해봤는데..(제 질문두 게시판에 있구여..보실 필욘 없음)
저는 5바이트를 한 패킷으로 통신하는 걸 해봤는데요..
그게 ComPort 의 OnRxChar에서 Count 가 정확히 5바이트로 들어오지 않더라구요..
어떨때는 4바이트 들어오고 다음에 1바이트..
어떨때는 3바이트 들어오고 다음에 2바이트..
어떨때는 5바이트 한번에 들어오고..
이거 한번 확인해보세요..
번외편 님이 쓰신 글 :
: 아래와 같이 하면 맨처음에 Hello나 Enter user name: 또는 Enter login password: 가
: 들어오면 리턴을 해주는데
: 맨처음이 아니라 데이터를 송수신 하다가 Hello 등이 들어오면 리턴을 제대로 해주지 않는군요
: 제가 생각할때는 초기화가 제대로 되지 않는것 같아서 그런거 같은데..
: 여러곳에서 초기화를 시켜줘도 계속 그러네요..
:
: 어느부분에 이상이 있는건가요?
:
: void __fastcall TForm1::Comm1RxChar(TObject *Sender, DWORD Count)
: {
:
: char str[500];
: unsigned char buffer=0;
: DWORD i,j;
: int k;
: char Buff[100];
: static unsigned char data[200],serial_number = 0;
: static unsigned char serial_data[500];
: String *Str_Data =new String;
: Comm1->Read(serial_data,Count);
:
: for(i=0;i<Count;i++)
: {
: data[serial_number] = serial_data[i] ;
:
: if(memicmp(data,"Hello"sizeof("Hello") ) == 0)
: {
: memcpy(Buff, "Hi",sizeof("\n\r"));
: k = Comm1->Write(Buff,sizeof("Hi"));
: memset(Buff,0,100);
: }
:
: else if(memicmp(data,"Enter user name: ",sizeof("Enter user name: ") ) == 0)
: {
: Label5->Caption = "OK";
: memcpy(Buff, "Korea\n\r",sizeof("Korea\n\r"));
: k = Comm1->Write(Buff,sizeof("Korea\n\r"));
: memset(Buff,0,100);
: }
:
: else if(memicmp(data,"Enter login password: ",sizeof("Enter login password") ) == 0)
: {
: memcpy(Buff, "Seoul\n\r",sizeof("Seoul\n\r"));
: k = Comm1->Write(Buff,sizeof("Seoul\n\r"));
: memset(Buff,0,100);
: }
:
: if( data[serial_number] == 0x0d )
: {
:
: if( (data[0] != 0x1b) && (data[1] != 0x1b) )
: {
: *Str_Data = (char)data[0];
: for(j=1;j<serial_number ;j++)
: {
: *Str_Data = *Str_Data + (char)(data[j]);
: }
:
: Memo1->Lines->Add(*Str_Data ) ;
: while(Memo1->Lines->Count>50)
: Memo1->Lines->Delete(0);
: Memo1->Perform(EM_LINESCROLL,0,Memo1->Lines->Count-1);
: Memo1->SelStart=Memo1->Text.Length()-1;
:
: Memo1->SelLength=1;
: }
: serial_number = 0;
: }
: else
: {
: serial_number++ ;
: }
:
: }
: }
|