|
안녕하세요
컴포트 모듈로 시리얼 통신을 하는데..
데이터 처리에 어려움이 있어서 질문 좀 올립니다..
데이터는 프로토콜 형식 없이..
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);
}
}
---------------------------------------------------------------------------
쓰레드에서 처리하기때문에..
저렇게 겹쳐버리면.. 수신한 데이터를 처리하기가 애매하더라구요..
그냥 버리기도 그렇기때문입니다.
다른 방법이라도 좋으니까..
넘어 오는 데이터를 모두 처리할수 있는 방법 좀 알려주십시오.
그럼 좋은 하루 보내세요~^^
|