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
[63932] Re:serial 통신 receive 가 잘 안되서 질문 드립니다.
nansama [] 1804 읽음    2011-03-16 08:59
data[] 가 혹시 char 형이라면 byte ( unsigned char ) 형이어야 할것 같아요,.

번외편 님이 쓰신 글 :
: C++ Builder 6 유저입니다.
: comport 시리얼 통신을 하다가 send쪽은 되는데 receive가 잘 안되어서 질문 드립니다.
:
: 우선 receive 패킷 프레임은 아래와 같습니다.
: Preamble   (4byte)  : 0xa5 0xa5 0xa5 0xa5
: STX            (1byte) : 0xAE
: Length        (2byte) : stx~etx
: Type           (2byte) : 0x0000 ~ 0xffff
: Opcode      (1byte) : 0x00 ~ 0xff
: Data           (Nbyte) : 0x00 ~ 0xff 길이 가변
: CRC           (1byte) : length~data 합(%255)
: ETX            (1byte) : 0xaf
: 이런 프레임을 가지고 있으며 length type opcode data 는 Preamble, STX, ETX의 데이터를 가질수 없으며
: stuffing을 해서
: Preamble과 동일 데이터는 0xa0 0x05로 send 및 receive를 하며
: STX 동일데이터는 0xa0 0x0e
: ETX 동일데이터는 0xa0 0x0f
: 데이터 중간 a0가 있을시 0xa0 0x00 입니다.
:
: send쪽은 전부 코딩했는데 receive를 하면서 데이터가 잘 받아지지 않습니다.
: 소스에 이상한부분이 있는지좀 봐주시면 감사드리겠습니다.
: c++ builder 6에 comm 컴포넌트 사용중입니다.
: 아래 소스 입니다.
:
: unsigned int SERIAL_LEN = 0;
:
: void __fastcall TForm1::Comm1RxChar(TObject *Sender, DWORD Count)
: {
:         Comm1->Read(serial_data,Count);
:         for(i=0;i<Count;i++)
:         {
:                 buffer=serial_data[i];
:
:                 switch(serial_number)
:                 {
:                         case 0:
:                         if(buffer==0xa5)
:                         {
:                                 serial_number=1;
:                                 data[0]=buffer;
:                         }
:                         else
:                         {
:                                 serial_number=0;
:                                 message = 0;
:                         }
:
:                         case 1:
:                         if(buffer==0xa5)
:                         {
:                                 serial_number=2;
:                                 data[1]=buffer;
:                         }
:                         else
:                         {
:                                 serial_number=0;
:                         }
:                         break;
:
:                         case 2:
:                         if(buffer==0xa5)
:                         {
:                                 serial_number=3;
:                                 data[2]=buffer;
:                         }
:                         else
:                         {
:                                 serial_number=0;
:                         }
:                         break;
:
:                         case 3:
:                         if(buffer==0xa5)
:                         {
:                                 serial_number=4;
:                                 data[3]=buffer;
:                         }
:                         else
:                         {
:                                 serial_number=0;
:                         }
:                         break;
:
:                         default:
:                         data[serial_number-1]=buffer;
:                         serial_number++;
:                         if(serial_number >= 1024 ) serial_number = 0;
:               break;
:                 }
:                 if((unsigned int)((data[5]<<8)+data[6])<serial_number) <----- 이부분
:                 {
:                 }
:         }
:         serial_number = 0;
: }
:
: 위의 저 부분을 체크해보니 숫자를 강제로 length에 맞춰서 136과 같이 넣으면 동작되는데
: 저렇게 (unsigned int)((data[5]<<8)+data[6]) 넣으면 동작을 하지 않습니다.
: 먼저 stuff를 하고 if문이 들어가야 하지만 데이터에 stuff 해야하는 데이터를 넣지 않아도
: 동작을 하지 않네요.
:
: 어디 부분에서 잘못하고있는지 찍어주시면 감사하겠습니다.
: receive 되는 실제 패킷은 아래와 같습니다.
:
: 2011-03-15 23:22:43.785 [RX] - A5 A5 A5 A5 AE 00 84 02 00 00 01 01 00 00 00 10 04 07 90 23 27 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7D AF
: 또 다른 패킷
: 2011-03-15 23:30:15.325 [RX] - A5 A5 A5 A5 AE 00 09 12 00 EE 01 09 AF

+ -

관련 글 리스트
63931 serial 통신 receive 가 잘 안되서 질문 드립니다. 번외편 1506 2011/03/16
63932     Re:serial 통신 receive 가 잘 안되서 질문 드립니다. nansama 1804 2011/03/16
63933         Re:Re:serial 통신 receive 가 잘 안되서 질문 드립니다. 초보 견습생 1912 2011/03/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.