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
[52073] Re:Re:Async Pro에서 수신 질문...
금목암 [iconms1] 1428 읽음    2008-01-28 09:15
장성호씨 말대로 하는게 맟는데
제 경우는 수신버퍼의 문자 받는것에 타임아웃을 두면
들어온 문자와 끊어지는 타임에 1개의 패킷을 완성시키는
방법도 있습니다

그리고 시리얼 통신에서 하문장에서 문자가 모조리 띠엄띄엄
오는 경우는 없으니 너무 느리게 오는경우 타임아웃을 거세요
프로토콜은 헤더나 테일이 있는게 정확하지만 이게 없는 경우도
무한정 기다리게 패킷을 만들지 않으니 법칙을 찿으면
패킷1개를 받아서 처리하게 받는 알고리즘에서 처리하면 됩니다


장성호 님이 쓰신 글 :
: 어떤 컴포넌트를 이용하든 이 문제는 원하는데로 깔끔하게 해결하기는 쉽지 않습니다.
: rs232  드라이버를 새로만들면 모를까?
:
: 그러므로 일반적인 방법으로는
:
: 1. 수신되는 내용을 buffer에  계속 쌓아 두는것입니다.
: 2. 그리고 buffer에 쌓인 data가 일정 패킷에 맞으면
:      그부분을 꺼내어서 처리하고..
: 3. buffer에서는 방금전 처리한 부분을 삭제합니다.
:
:    
: buffer로는 보통 그냥 일정 크기의 메모리를 잡아서쓰기도 하지만
: 큐 또는 원형큐도 많이 쓰입니다.
:
: 그럼..
:
:
:
: 자갈밭 님이 쓰신 글 :
: : Async Pro 4.06을 사용하여 프로그래밍을 할려고 합니다..
: :
: : 테스트 프로그램을 짜서 확인하고 있는데...
: : 난관에 봉착했습니다...
: :
: : portmon으로 확인해보니 아래와 같습니다...
: :
: :
: : 174    오전 9:40:58    test2.exe    IOCTL_SERIAL_GET_MODEMSTATUS    Serial0    SUCCESS   
: : 175    오전 9:40:58    test2.exe    IOCTL_SERIAL_GET_COMMSTATUS    Serial0    SUCCESS   
: : 176    오전 9:40:58    test2.exe    IOCTL_SERIAL_GET_MODEMSTATUS    Serial0    SUCCESS   
: : 177    오전 9:40:58    test2.exe    IOCTL_SERIAL_WAIT_ON_MASK    Serial0    SUCCESS   
: : 178    오전 9:40:58    test2.exe    IOCTL_SERIAL_GET_COMMSTATUS    Serial0    SUCCESS   
: : 179    오전 9:40:58    test2.exe    IRP_MJ_READ    Serial0    SUCCESS    Length 8: FE FE 00 58 00 00 00 26    
: : 180    오전 9:40:58    test2.exe    IOCTL_SERIAL_GET_MODEMSTATUS    Serial0    SUCCESS   
: : 181    오전 9:40:58    test2.exe    IOCTL_SERIAL_GET_COMMSTATUS    Serial0    SUCCESS   
: : 182    오전 9:40:58    test2.exe    IOCTL_SERIAL_GET_MODEMSTATUS    Serial0    SUCCESS   
: : 183    오전 9:40:58    test2.exe    IOCTL_SERIAL_WAIT_ON_MASK    Serial0    SUCCESS   
: : 184    오전 9:40:58    test2.exe    IOCTL_SERIAL_WAIT_ON_MASK    Serial0    SUCCESS   
: : 185    오전 9:40:58    test2.exe    IOCTL_SERIAL_GET_COMMSTATUS    Serial0    SUCCESS   
: : 186    오전 9:40:58    test2.exe    IRP_MJ_READ    Serial0    SUCCESS    Length 3: 45 01 FD    
: : 187    오전 9:40:58    test2.exe    IOCTL_SERIAL_GET_MODEMSTATUS    Serial0    SUCCESS   
: : 188    오전 9:40:58    test2.exe    IOCTL_SERIAL_GET_COMMSTATUS    Serial0    SUCCESS   
: : 189    오전 9:40:58    test2.exe    IOCTL_SERIAL_WAIT_ON_MASK    Serial0    SUCCESS   
: : 190    오전 9:40:58    test2.exe    IOCTL_SERIAL_GET_MODEMSTATUS    Serial0    SUCCESS   
: :
: : 패킷이 FE FE 00 58 00 00 00 26 45 01 FD   이렇게 읽혀야 될텐데....
: : 항상  FE FE 00 58 00 00 00 26   8 바이트 한번 ,
: : 45 01 FD 3 바이트  이렇게 읽힙니다.
: :
: : 기기에 따라 START FLAG ( 0xFE 0xFE )와 END FLAG(0xFD)를 사용하는 기기도 있지만,
: : Start,End Flag를 사용하지 않는 기기도 있어 고민입니다.
: :
: : 위에서 8 + 3 = 11 바이트를 한번에 읽히도록 할려면 어떻게 해야 하는지요?

+ -

관련 글 리스트
52067 Async Pro에서 수신 질문... 자갈밭 1226 2008/01/27
52072     Re:Async Pro에서 수신 질문... 장성호 1118 2008/01/27
52073         Re:Re:Async Pro에서 수신 질문... 금목암 1428 2008/01/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.