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
[40613] Re:[질문] 시리얼 통신 관련 질문입니다... (byte형 데이터 수신관련)
상록수.네오 [neocon3] 1794 읽음    2005-06-17 11:20
아래 code는 제가 사용하는 component를 이용한 code입니다.

참조하시면 될것 같습니다.




void __fastcall TForm1::Serial_FFUDataReceived(TObject *Sender,
      const char *Buffer, unsigned Length)
{
  SYSTEMTIME    SysTime;    //    System time
  FILE    *fpOut;        //    Output file pointer
  char    szTime[100];        //    Time string
  char    szFile[100];
  unsigned  char    szBuff[100];    //    Buffer string

//    Get the received data.
  memset( szBuff, 0, sizeof( szBuff ) );
  for(  i = 0;  i < Length; i++){
    szBuff[i] = Buffer[i];
  }

//    Log ...
  if(Length!=      0){
    ::GetLocalTime( &SysTime );
    sprintf( szTime, "%04d%02d%02d%02d", SysTime.wYear, SysTime.wMonth, SysTime.wDay,
                   SysTime.wHour );
    sprintf( szFile, "원하는파일명_%s.log", szTime );
    if( (fpOut = fopen( szFile, "a" )) != NULL ) {
      sprintf( szTime, "%02d:%02d:%02d", SysTime.wHour, SysTime.wMinute,
                    SysTime.wSecond );
      fprintf( fpOut, "%s [RECV]", szTime );
      for( i = 0; i < Length; i++ ) {
        fprintf( fpOut, " %02X", szBuff[i] );
      }
      fprintf( fpOut, "\n" );
      fclose( fpOut );
    }
  }
}


ASCII통신에 비해 byte(HEX) 통신이 처음 접하기에 거리감이 좀 있기는 하지만,
data의 형만 맞춰주면, 어떻게 사용하시든 문제가 안됩니다.



참고로, 저는 Grasomus 사의 Component를 사용하고 있습니다.

Component의 종류는 크게중요하지 않으나,
이것 저것 써본후 비교적 안정적이면서 빠른 response를 가지고 있기에 추천합니다.

민병권님이 추천해주신 http://www.ciemmesoft.com 에 가시면 사용하시는 builder version에 맞는
omponent를 얻으실 수 있습니다.

최영훈 님이 쓰신 글 :
: 시리얼 통신에서 1byte의 데이터를 수신할 때 아스키 코드(16진수)값을
: 벗어난 데이터는 0으로 수신되는 문제가 발생합니다.
: 예를 들어 아스키 데이터가 아닌 byte형 데이터 $9a를 수신 받았다면
: 결과는 0으로 나타나는 문제입니다...
: 모니터 프로그램은 Hex로 디스플레이 되게 설정해놓은 상태에서 확인했은때 입니다...
: 다시 말해 데이터 $41 수신받았을때 A가 디스플레이 되는것이 아니고 [41]로
: 출력되는 터미널 프로그램으로 확인했고요...
: 제가 현재 가지고 있는 시리얼 통신 컨포넌트는 CPort, COMM32, APRO, TMSA32등 다 가지고 있는데요...
: 어떤 방법이든 괜찮습니다...
: 시리얼 통신 상에서 byte형 데이터를 정상적으로 수신 받을 수 있는 방법을 알고 계신 분은 꼭 답변 부탁드립니다.

+ -

관련 글 리스트
40587 [질문] 시리얼 통신 관련 질문입니다... (byte형 데이터 수신관련) 최영훈 1052 2005/06/16
40613     Re:[질문] 시리얼 통신 관련 질문입니다... (byte형 데이터 수신관련) 상록수.네오 1794 2005/06/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.