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
[44431] Re:RS232 데이터 수신 대기
WARSHIP [warship] 1921 읽음    2006-04-10 23:43
권기식.with☆ 님이 쓰신 글 :
: 안녕하세요?
:
: RS232 통신 프로그램을 비교적 자주 짜오면서 항상 이상하게 생각되는 부분이 있어 문의드립니다.
:
: CPort 라이브러리를 이용하고 있는데...
:
: 장치로 어떤 명령을 날리면 그 반응을 보고 다음 동작을 취하도록 해야 합니다.
:
: 이럴 경우 WriteStr로 명령을 날리고 약간의 지연을 준 다음 입력 버퍼에서 데이터를 읽어오는데요..
:
: 이 약간의 지연을 어떻게 줘야 할지 잘 모르겠습니다.
:
: Sleep 함수도 이용해봤지만..
:
: 필요없는 긴 지연을 주게 되더군요.
:
: while로 루프를 만들어 돌리면서 Application->HandleMessege() 함수를 쓰니 수신이 잘 되는데...
:
: 잘못하면 이것 때문에 프로그램이 꼬일 수 있더군요.
:
: 어떤 방법이 가장 적절할까요?

음 혹시 RxChar 이벤트를 아시는지요?
RxChar 를 세팅해 놓으면 데이타가 도착할때마다 이벤트를 띄워줍니다.
그때 버퍼에 들어온 갯수를 체크하며 프로토콜에 맞게 읽어들이시면 됩니다.

만약 동작에 따른 프로토콜 플로우 차트가 있다면
RxChar 이벤트에서 올바른 응답이 오면 다음단계의 명령을
WriteStr해주면 될거 같습니다. ^^;

제가 질문의 요지를 잘 파악하지 못한거 같기도 한데...

void __fastcall OnRxChar(TObject *Sender, int Count)
{
   if ( Count > 응답받아야 하는 길이)
   {
        AnsiString result = ComPort1->Read~~;
        if ( result == "1" ) ComProt1->WriteStr(XXX);
        else if (result == "2" ) ComPort1->WriteStr(~~~);
    }
}

+ -

관련 글 리스트
44428 RS232 데이터 수신 대기 권기식.with☆ 1092 2006/04/10
44431     Re:RS232 데이터 수신 대기 WARSHIP 1921 2006/04/10
44450         Re:Re:RS232 데이터 수신 대기 권기식.with☆ 1865 2006/04/12
44461             Re:Re:Re:RS232 데이터 수신 대기 WARSHIP 1705 2006/04/12
44529                 감사합니다. 권기식.with☆ 1039 2006/04/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.