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
[46565] Re:Comport 통신에서 수신 데이터 처리를..
우리 [palindrome] 1216 읽음    2006-09-18 18:51
start, 100,200,300,400,500,600,700,800,900,1000,end \r\n

여기에서 start 와 end 가 일종의 프로토콜입니다.

아무리 길게 이어져 온다고해도 이부분을 파싱해서 구분하면됩니다.

아니면 맨뒤의 \r\n 을 보고 구분해도 되구요...

그리 어려울것 같지 않은데...

start 부터 end 까지 받았다는 플래그만 하나 두고

전부 받으면 플래그를 세팅해주면되지 싶습니다..

그럼 처리하는곳에서 플래그가 세팅되면 받은 스트링으로

이것 저것 작업을 하면되겠죠..

처리하는 동안 계속 데이터가 수신된다면

수신하는 스트링 변수를 하나 더 두고 그쪽에서 받은 데이터중에

완전한 데이터만 지금 사용중인 스티링 변수에 넣어주면 될것 같군요..

허접한 답변이라 죄송합니다. ^^;;


김태진 님이 쓰신 글 :
: 안녕하세요
: 컴포트 모듈로 시리얼 통신을 하는데..
: 데이터 처리에 어려움이 있어서 질문 좀 올립니다..
:
: 데이터는 프로토콜 형식 없이..
:
: start, 100,200,300,400,500,600,700,800,900,1000,end \r\n
:
: start 와 10개의 콤마보 구분되는 숫자 데이터, end \r\n 으로 계속 받습니다.
:
: 그래서 아래와 같이 컴포트로 데이터를 수신했습니다.
: ----------------------------------------------------------------------
: void __fastcall TmainForm::ComPort1RxChar(TObject *Sender, int Count)
: {
:
:     AnsiString Str;
:     ComPort1->ReadStr(Str, Count);
:
:     ComPort1->ClearBuffer(true, true);
:     readStr += Str.c_str();  // 10초에 한번씩 데이터를 받음
:     Edit1->Text= readStr;
: }
: -------------------------------------------------------------------
: 그랬더니.. 데이터가 깨끗하게 오지가 않네요..
:
: 아.. 컴퓨터 2대로 부터 데이터를 받고 있어서 인지..
:
: start, 100,200,300,400,500,600,700,800,900,1000,end start, 100,200,300
: 하는 식으로 데이터가 뒤에더 딸려 오거나..
:
: 400,500,600,700,end 하는 식으로
: 앞에 데이터는 없구 뒤에 데이터만 오는 식으로 됩니다.
:
:
: 이걸 확실히 구분지어진 데이터로 받을순 없을까요?
: 이렇게 수신 받은 데이터를
: ---------------------------------------------------------------------------
: void __fastcall TMyReadThread::UpdateDisplayRead(void)
: {
:     mainForm->ProcessRx1();
: }
: __fastcall TMyReadThread::TMyReadThread(void) : TThread(TRUE)
: {
:     FreeOnTerminate = TRUE;   // 쓰레드가 끝났음을 나타냄
:     Resume();
: }
: void __fastcall TMyReadThread::Execute(void)
: {
:
:     while(!Terminated)
:     {
:         strcpy(mainForm->readData,mainForm->readStr.c_str());
:         Synchronize(UpdateDisplayRead);
:         mainForm->readStr="";
:         Sleep(500);
:     }
: }
: ---------------------------------------------------------------------------
:
: 쓰레드에서 처리하기때문에..
: 저렇게 겹쳐버리면.. 수신한 데이터를 처리하기가 애매하더라구요..
: 그냥 버리기도 그렇기때문입니다.
:
: 다른 방법이라도 좋으니까..
: 넘어 오는 데이터를 모두 처리할수 있는 방법 좀 알려주십시오.
:
: 그럼 좋은 하루 보내세요~^^

+ -

관련 글 리스트
46537 Comport 통신에서 수신 데이터 처리를.. 김태진 1144 2006/09/14
46569     Re:Comport 통신에서 수신 데이터 처리를.. 라스코니 1235 2006/09/18
46565     Re:Comport 통신에서 수신 데이터 처리를.. 우리 1216 2006/09/18
46582         Re:Re:Comport 통신에서 수신 데이터 처리를.. 김태진 931 2006/09/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.