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
[63931] serial 통신 receive 가 잘 안되서 질문 드립니다.
번외편 [wifemylove] 1506 읽음    2011-03-16 06:22
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 1805 2011/03/16
63933         Re:Re:serial 통신 receive 가 잘 안되서 질문 드립니다. 초보 견습생 1913 2011/03/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.