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
[72953] Re:Re:Comport RX 질문드려요
쿼드콥터헬기 [tatani] 3968 읽음    2015-09-04 20:09
Rs232이고 양방향 바코드 리더기 입니다
1번 방법이 제일 적당한듯한데 혹시 comport 수신 timeout이 따로 있나요? 제가 완전 초보라서 ㅠㅠ
퇴근 못할거 같아요 해결안되면



스머팩트 님이 쓰신 글 :
:
: 수신데이터가 5초동안 없으면 에러로 처리하고 싶다는 말씀이신듯 합니다.
: 구체적인 시퀀스 프로토콜을 모르는 상태라서 제가 적당한 방법을 제시한건지 모르겠네요.
:
: ------------------------
: 1. Timer를 이용하는 방법
: ------------------------
:
:    1) 타이머를 1초 주기로 이벤트가 발생하도록 초기화 합니다.(꼭 1초가 아니어도 되겠죠)
:    2) 데이터가 수신되면 수신된 시간을 변수에 저장 합니다.
:    3) 타이머 이벤트가 발생했을 때
:       - 지금이 에러를 처리해야 하는 상황인지와
:       - 마지막 수신시간과 지금 시간을 비교해 5초가 넘었으면 에러처리루틴 호출 합니다.
:
: ------------------------
: 2. Thread를 이용한 방법
: ------------------------
:
:    0) 사용자 메시지 WM_RX_ERROR를 정의하고 이벤트 핸들러(에러처리 함수)를 구현하고 등록 합니다.
:        (사용자 메시지 핸들러 정의 도움말을 참조하세요)
:    1) Thread를 생성합니다.
:       - Thread는 1초를 Sleep 해가며 루프를 돕니다.(Child-Thread)
:    2) 데이터가 수신되면 수신된 시간을 설정 합니다.(Main-Process가 시간을 기록)
:    3) Thread가 Sleep에서 깨어나면(Child-Thread)
:       - 지금이 에러를 처리해야 하는 상황인지와
:       - 마지막 수신시간과 지금 시간을 비교해 5초가 넘었으면
:          Main-Process에 WM_RX_ERROR(User가 정의한Message)를 PostMessage()로 보냅니다.
:
:    참고1) 시간변수와 같이 Main-Process와 Child-Thread가 동시 접근 할 가능성이 있는 변수들은
:               Mutex를 사용해 동시접근을 막아야 겠죠
:    참고2) WM_RX_ERROR를 정의하고 PostMessage로 에러를 발생 시켜,
:               Main-Process가 에러를 처리하게하는 이유는
:       - GDI나 쓰레드에 안전하지 않은 VCL을 보호하기 위함 입니다.
:       - 물론 Synchronize()와 같은 함수로 처리할 수도 있겠으나 저는 PostMessage를 선호 합니다.
:
: 대충 봐도 Timer를 이용하는 방법이 쉬워 보입니다.
: 빨리 구현해 보고 싶으시다면 Timer를 사용하시고, 좀더 견고한(?) 프로그램을 만들고 싶다면 Thread를 사용하기 바랍니다.
: Thread를 사용하는 방법은 여러통신에 자주 사용될 뿐만 아니라 Unix와 Windows를 가리지 않고 사용되고 있습니다.
: 저는 Timer보다는 Thread를 선호 합니다.
:
:
: [마지막으로]
: 1. 통신이 단방향인지, 양방향인지 그리고 양방향 동기식/비동기식에 따라서 구현이 다소 달라질 수 있습니다.
: 2. RS232인터페이스를 VCL을 사용한것으로 간주했기 때문에, 데이터 수신시 이벤트가 발생 한다고 가정했습니다.
: 3. 짧은 설명과 간단한 구현을 위해 극대화된 효율성과 종료시 처리해야 할 문제는 생략했습니다.
:
: 도움이 되셨길 바라며....
:
:
: 쿼드콥터헬기 님이 쓰신 글 :
: : 만약 com1에서 5초 이내로 Rx을 받지 못하면 에러처리를 해야되는데 어떤식으로 해야될지 감이 안옵니다.
: : 빠른 답변 부탁드립니다.
: :

+ -

관련 글 리스트
72950 Comport RX 질문드려요 쿼드콥터헬기 3661 2015/09/04
72952     Re:Comport RX 질문드려요 스머팩트 3800 2015/09/04
72953         Re:Re:Comport RX 질문드려요 쿼드콥터헬기 3968 2015/09/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.