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
[29180] Re:Re:컴포터로 노이즈가 유입 되었을때 어떻게 처리 해야 하나요?
강영준 [k700k] 1040 읽음    2004-03-25 23:54
답변 감사 드립니다.

무선은 아닌데... 지금 좀 골치 아프게도.. RS-232로 물려 있는 장비가 다른 장비의 영향을 받아서

Rx라인에다가 노이즈를 흘려 보내 버립니다. 노이즈를 내 보내는 장비에서는 Tx로 보내고..

당연히 OnRxChar 이벤트가 계속 발생이 될거구.. 그러다가.. 프로그램이 완젼히 사라져 버립니다.

이현상을 프로그램적인 측면에서 해결을 해야 할지.. 메카니즘 측면에서 해결을 해야 할지..

일단 눈에 보이는 현상대로 담당자인 저에게 책임이 주어 지는데.. 어떻게 설명을 해줘야 할지..

코딩은 아래와 같이 되어 있구요.. 이게 총 12개 입니다..

문제 될만한 부분을 좀 집어 주시면 ...

void __fastcall TForm1::ComPort3RxChar(TObject *Sender, int Count)
{
   unsigned char s[20];
   int data;
   int data1;

   ComPort3->Read(s,Count);

     if(s[1] == 0x90){
           data = s[2];//이렇게 하면 10진수로 변환 되드군요. ^^;
           data1 = s[3];
           Edit19->Text = ((data*256+data1)/10);
     }
     if(s[1] == 0x91) {
         data = s[2];
         Edit20->Text = data;
         if(TriggerAuto[0] == true) {
            if(StrToInt(Edit20->Text) > StrToInt(Edit14->Text) * 0.5)
               TriggerB1->OnClick(TriggerB1);
         }//if

         if((StrToInt(Edit14->Text) != 0)&&
             StrToInt(Edit20->Text) >= (StrToInt(Edit14->Text)*0.70) &&
             StrToInt(Edit20->Text) <= (StrToInt(Edit14->Text)*1.30)){
             PowerOnOff[0] = true;
             AGun_1->Picture->Bitmap->LoadFromResourceName((int)HInstance,"Gun_01");
         }//else
         else {
               PowerOnOff[0] = false;
               if(TriggerB1->Down == false && TriggerAuto[0] == false &&
                   PowerOn1->Down == true && StrToInt(Edit14->Text) != 0) TriggerB1->OnClick(TriggerB1);
               AGun_1->Picture->Bitmap = NULL;
         }//else
     }//if

     if(s[1] == 0x92) {
         data = s[2];
         Edit21->Text = data;
     }

}

김시환 님이 쓰신 글 :
: 일반적으로 시리얼 포트는 유선으로 연결되어 있을 경우 노이즈가 거의 안들어 오는데
: 지속적으로 노이즈가 들어 온다면 혹시 무선 데이타를 받는 것인지요?
:
: 유선으로 데이타를 받는다면 ComPort1->ReadStr(Str,Count); 이 문구를 써도 문제가
: 없겠지만 만일 무선을 쓴다면 이런 구문은 좀 위험합니다.
:
: 만일 무선 데이타를 받는 것이라면 1바이트씩 받아서 처리하는 방법을 써야 합니다.
: 일반적으로 무선의 경우 Header 데이타를 가지고 있는데 1바이트씩 처리하면서 헤더 값이
: 검출 되면 그때 부터 데이타를 버퍼에 저장을 하여야 합니다.
: 이런경우 일반적으로 버퍼는 링 버퍼 형태를 많이 쓰죠..
:
: 그리고 데이타를 받는 부분과 받은 데이타를 처리하는 부분을 나누어서 별도의 쓰레드에서 처리하는
: 것이 좋을 겁니다. 무선의 경우 계속해서 데이타가 들어오기 때문에 들어 오는 데이타 처리하랴
: 받은 데이타 처리하랴 좀 바쁠 겁니다. 이럴땐 일을 분담해서 해야 겠죠...
:
: 하지만 유선인데도 노이즈가 들어 온다면 그건 선로상에 문제가 있는 경우가 오히려 높을 겁니다.
: 아니면 데이타가 전송중에 깨지던가 그렇겠죠,, 이럴땐 에러 검출을 해서 데이타를
: 구분해서 써야 하겠죠,.
: 시리얼 통신에서 에러 처리는 CRC 를 많이 씁니다.
:

+ -

관련 글 리스트
29157 컴포터로 노이즈가 유입 되었을때 어떻게 처리 해야 하나요? 강영준 978 2004/03/24
29193     Re:여러분의 열화와 같은 성원으로 해결 했습니다. 강영준 1055 2004/03/26
29192     [답변] 프로그램이 죽는 이유...해미 경험담...아마도 같은 경우.. 정성훈.해미 1571 2004/03/26
29179     Re:컴포터로 노이즈가 유입 되었을때 어떻게 처리 해야 하나요? 김시환 981 2004/03/25
29180         Re:Re:컴포터로 노이즈가 유입 되었을때 어떻게 처리 해야 하나요? 강영준 1040 2004/03/25
29181             Re:Re:Re:컴포터로 노이즈가 유입 되었을때 어떻게 처리 해야 하나요? 김시환 984 2004/03/26
29160     [답변] 예외처리가 필요할 것 같군요 정성훈.해미 1142 2004/03/24
34681         Re:[답변] 예외처리가 필요할 것 같군요 주희 1000 2004/03/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.