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
[39622] Re:[급질]CPort를 이용한 시리얼 통신에서 데이터를 받을때
상록수.네오 [neocon3] 1439 읽음    2005-03-24 22:11
Log를 남기시려하는것 같은데...
RichEdit를 사용하는것은 별로 보기 좋지 못합니다.
그냥 file 을 열어 add 하시는게 바람직하죠.

제가 Component를 CPort를 사용하지 않는관계로 Data format에 불일치가 있을수 있습니다.
따라서, 아래 code를 참조자료로 사용하시기 바랍니다.

Buff를 Unsigned로 설정하지 않으시면 uni-code가 정확하지 않게 표시 될 것입니다.
주의하셔야 합니다.

HEX 통신을 하시는 경우 Header와 Delimiter를 정확히 정의하지 않으면 data 처리에 어려움을 겪게 마련입니다.
만약 Protocol을 개발하시는 분이라면 이부분에 대한 명확한 처리 방침이 없다면,
ASCII Protocol을 사용하시길 권합니다.

void __fastcall TMDIChild::ComPort1RxChar(TObject *Sender, int Count)
{
         AnsiString temp;

    SYSTEMTIME    SysTime;    //    System time
    FILE    *fpOut;        //    Output file pointer
    char    szTime[100];        //    Time string
    char    szFile[100];
    int        nLen;    //    Length of the reception data
    int        i;              //Loop

    unsigned  char    szBuff[100];    //    Buffer string

    //    Get the received data.
    memset( szBuff, 0, sizeof( szBuff ) );

         ComPort1->ReadStr(temp, Count);

  nLen  = Count;
  for(  i = 0;  i < nLen; i++){
    szBuff[i] = temp[i];
  }
  if(nLen !=      0){
    ::GetLocalTime( &SysTime );
    sprintf( szTime, "%04d%02d%02d%02d", SysTime.wYear, SysTime.wMonth, SysTime.wDay,
                   SysTime.wHour );
    sprintf( szFile, "FileName_%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 < nLen; i++ ) {
        fprintf( fpOut, "%02X", szBuff[i] );
      }
      fprintf( fpOut, "\n" );
      fclose( fpOut );
  }


}


김연태 님이 쓰신 글 :
: 왕초보의 급질입니다. ㅜㅜ
:
: 시리얼통신에서 대상 Device로 부터 Hex형 정보(예 :  6A A1 12 A2 .....마지막은 AA로 끝남)를 전송받게되는데.
:
: void __fastcall TMDIChild::ComPort1RxChar(TObject *Sender, int Count)
: {
:         AnsiString temp;
:
:         ComPort1->ReadStr(temp, Count);
:
:         RichEdit1->Text = RichEdit1->Text + temp ;
: }
:
: 지금은 위와 같이 하여 RichEdit에 그냥 문자열로 뿌려지게 되며, 이를 텍스트 파일로 저장하는것 까지 했습니다.
:
:
: 결론적으로 제가 하고 싶은 작업은 16진수 정보 그대로 저장하고 싶습니다. 예를 들면 Hex형 정보(예 :  6A A1 12 A2 AA)가 들어왔으면,
:
: XXX.txt 에 내용이 다음과 같이 저장 되었으면 좋겠습니다. .
:
: 6AA112A2AA
:
: 어찌 방법이 없을까요??

+ -

관련 글 리스트
39595 [급질]CPort를 이용한 시리얼 통신에서 데이터를 받을때 김연태 1164 2005/03/22
39622     Re:[급질]CPort를 이용한 시리얼 통신에서 데이터를 받을때 상록수.네오 1439 2005/03/24
39621     Re:[급질]CPort를 이용한 시리얼 통신에서 데이터를 받을때 잘하자 1081 2005/03/24
39639         당첨 ^^; 푸른노래 886 2005/03/25
39609     Re:[급질]CPort를 이용한 시리얼 통신에서 데이터를 받을때 라스코니 1083 2005/03/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.