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
[72573] Re:Re:Cport Rx부분 질문입니다.
앱돌이 [arrowstorm] 4007 읽음    2015-04-23 13:05
아 해결되었습니다.!! GODSON님께서 atof알려주셔서 정말 어찌나 큰도움이 되었는지
Sleep을 빼면 좀더빨라질거같아 Sleep을 빼는쪽으로 생각을 하고있었습니다. ㅎㅎ
도움 감사합니다.


김시환 님이 쓰신 글 :
: 아직 해결이 안된 모양이네요..
:
: 아래 코드를 보니 송신부분은 버튼의 클릭이벤트를 쓰고 수신은 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부분 질문입니다. 앱돌이 4001 2015/04/21
72571     Re:Cport Rx부분 질문입니다. 김시환 4031 2015/04/23
72573         Re:Re:Cport Rx부분 질문입니다. 앱돌이 4007 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.