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
[72571] Re:Cport Rx부분 질문입니다.
김시환 [godson2] 4031 읽음    2015-04-23 10:52
아직 해결이 안된 모양이네요..

아래 코드를 보니 송신부분은 버튼의 클릭이벤트를 쓰고 수신은 CPort의 수신 이벤트를 사용하신 것으로 보입니다.
이렇게 따로 나누어서 사용하지 마시고 그냥 버튼의 클릭 이벤트에서 한꺼번에 해결을 하세요..

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    char buff[100];
    double voltage ;

    ComPort2->Open();   <- 이 부분은 버튼 누를때 마다 하지 마시고 폼생성시에 하던지 하세요..

    ZeroMemory(buff, 100) ;
    sprintf(strr,"MEAS:VOLT:DC?%c",0x0a);
    ComPort2->Write(strr,StrLen(strr));
    Sleep(100) ;
    ComPort2->Read(buff,100) ;
    voltage = atof(buff) ;
    StringGrid->Cells[1][1] = voltage ;   
}


앱돌이 님이 쓰신 글 :
: c++왕초보자 질문좀 받아주세요
: Button3를 누르면 계측기로 명령어가 입력되어 rx부분에서 수신받아 LoadGrid함수를 불러 StringGrid에 뿌려지는 소스인대요
: StringGrid에 뿌려지는 걸 확인해보면 Read부분에서 아주잠깐 지연시간을 주면 정상적으로 계측기의 값이 입력됩니다.
: 지연시간을 없에버리면 숫자가 한개씩입력되거나 아예 입력이 안됩니다.
: breakPoint를 주고 확인해보면 breakpoint때문인지 정상적으로 입력이 됩니다.
: 그래서 다른분들의 조언을 들어 Rx부분 Count가 충분히 되었는지 확인하기위해 buff에 E가 입력될시 함수 호출하는 식으로 수정을 했는데 이번엔 Sleep을 해주면 정상출력되고 Sleep을 제거하면 E만 출력됩니다. ㅜ.ㅜ 너무 답답해서 조언을 구합니다.
: 질문1: Count가 충분한지 확인하려면 어떤식으로 수정을 해야할까요?
: 질문2: Count로 확인하지않고 buff에 문자열이 다들어왔는지 확인하기위해선 어떤식으로 수정해야할까요?
: 질문3: 문자열에 ETX까지 입력되었는지 확인하기위해선 어떻게해야할까요? 
:
: 전송방식은 rs232 LF입니다.
:
:
:
: 메모 부분은 그냥 확인하기 위해 만든거라 무시하셔도됩니다.
:
:
: double voltage;
: AnsiString ConVolt;
: char strr[200];
:
: void __fastcall TForm1::Button3Click(TObject *Sender)
: {
:
:
:
:         ComPort2->Open();
:         sprintf(strr,"MEAS:VOLT:DC?%c",0x0a);
:         ComPort2->Write(strr,StrLen(strr));
:
:
:
:
: }
:
:
: void __fastcall TForm1::ComPort2RxChar(TObject *Sender, int Count)
: {
:
:          char buff[100];
:
:          memset(buff,0,sizeof(buff));
:          for(int i=0;i<Count;i++){
:                 ComPort2->Read(buff,Count);
:                 Memo2->Lines->Add(buff);
:                 if(strstr(buff,"E")!= NULL){
:                         voltage = atof(buff);
:                         ConVolt = FloatToStr(voltage).sprintf("%.3f",voltage);
:                         LoadGrid();
:
:                 }
:          }
:
:
:
:
:
: }

+ -

관련 글 리스트
72561 Cport Rx부분 질문입니다. 앱돌이 4002 2015/04/21
72571     Re:Cport Rx부분 질문입니다. 김시환 4031 2015/04/23
72573         Re:Re:Cport Rx부분 질문입니다. 앱돌이 4008 2015/04/23
72565     Re:Cport Rx부분 질문입니다. 라스코니 4189 2015/04/21
72583         Re:Re:Cport Rx부분 질문입니다. 앱돌이 4064 2015/04/24
72572         Re:Re:Cport Rx부분 질문입니다. 앱돌이 3984 2015/04/23
72579             Re:Re:Re:Cport Rx부분 질문입니다. 라스코니 4048 2015/04/24
72570         Re:Re:Cport Rx부분 질문입니다. 4014 2015/04/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.