|
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
:
: 어찌 방법이 없을까요??
|