|
하나의 포트로 2개의 컴퓨터로부터 데이터를 받고 있다는 말씀인가요?
만약 그렇다면 그렇게 사용하는 것 자체가 올바르지 않습니다. 신호의 충돌로 전혀 엉뚱한 데이터가 들어올 수 있습니다.
방법은 하나의 포트당 한대의 컴퓨터를 연결하는 것 말고는 아마 없을 것 같네요.
김태진 님이 쓰신 글 :
: 안녕하세요
: 컴포트 모듈로 시리얼 통신을 하는데..
: 데이터 처리에 어려움이 있어서 질문 좀 올립니다..
:
: 데이터는 프로토콜 형식 없이..
:
: 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);
: }
: }
: ---------------------------------------------------------------------------
:
: 쓰레드에서 처리하기때문에..
: 저렇게 겹쳐버리면.. 수신한 데이터를 처리하기가 애매하더라구요..
: 그냥 버리기도 그렇기때문입니다.
:
: 다른 방법이라도 좋으니까..
: 넘어 오는 데이터를 모두 처리할수 있는 방법 좀 알려주십시오.
:
: 그럼 좋은 하루 보내세요~^^
|