C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[54074] Re:맨날 질문만 올립니다;; com port에서 특정 데이터가 들어오면 리턴 해주는 부분인데요.
조각발 [jokacbal] 1052 읽음    2008-07-24 14:33
저도 거의 질문만 올리다가요..

혹시 데이터가 들어오는 양(?)을 확인해보셨나요??

저도 전에 비슷하게 해봤는데..(제 질문두 게시판에 있구여..보실 필욘 없음)

저는 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++ ;
:                 }
:
:         }
: }

+ -

관련 글 리스트
54059 맨날 질문만 올립니다;; com port에서 특정 데이터가 들어오면 리턴 해주는 부분인데요. 번외편 1043 2008/07/23
54074     Re:맨날 질문만 올립니다;; com port에서 특정 데이터가 들어오면 리턴 해주는 부분인데요. 조각발 1052 2008/07/24
54077         감사합니다. 하지만... 번외편 1293 2008/07/24
54078             strcmp로는 안되겠군여 ㅎㅎ ㅠㅠ;; 데이터 크기 비교였네요 번외편 1212 2008/07/24
54061     Re:맨날 질문만 올립니다 JBMEX 929 2008/07/23
54062         제 소스를 보시면... 번외편 1047 2008/07/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.