|
대마두 님이 쓰신 글 :
: 안녕하세요 빌더 맨날 초보 대마두라고 합니다
:
: 지금 테스트 하는 프로그램은 어떤 엠프에서 값이 0.2초에 한번씩 시리얼 232c로 엠프에 나오는 값이 출력되고
:
: 현재 출력되고 있는 값을 Timer로 같은 0.2초 간격으로 PC에서 받는 프로그램을 작성하는데요.
:
: 이상한 기호만 나오고 값이 제대로 안나오네요.
:
: 하이퍼 터미널로는 잘 나오는 값이 왜 안나올까요?
:
: 허접한 수신부입니다....
:
: void __fastcall TForm1::Timer1Timer(TObject *Sender)
: {
: char buf[1000];
: unsigned long length;
: ReadFile(hComm, buf, 1000, &length, NULL); //시리얼로 들어오는 부분을 받는 곳이구요
: Label1->Caption = s(buf);
: FILE *fp = fopen("RS.txt", "at");
: fputs((s(Now().CurrentDateTime())+"("+s(length)+") : **"+s(buf)+"**\n").c_str(), fp); // 현재 받은 시리얼 값을 RS.TXT에 저장하는 파일입니다.
: for ( int i=0; i<length; i++ ) fputs((IntToHex((int)buf[i], 2) + " ").c_str(), fp);
: fputs("\n\n", fp);
: fclose(fp);
: PurgeComm(hComm, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
: }
:
: 허접한 코드 질문입니다만.. 아시는 분들 좀 알려주세요 ^^;;;;
[답변]
통신을 타이머로 받지마시고 ㅋ자료실의 콤포넌트로 인터럽트로 받으세요
그리고 통신버퍼를 쓸데없이 1000 바이트씩 읽지말고 버퍼에 들어온 내용만큼 읽어야 합니다
그리고 통신포트 설정과 오픈부분은 어디에 있나요?
|