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
[72534] Re:Re:rs232로 통신하여 값을 받아오려하는데.. 안됩니다.
앱돌이 [arrowstorm] 3866 읽음    2015-04-16 17:49
송신영 님이 쓰신 글 :
: 앱돌이 님이 쓰신 글 :
: : 초보 질문좀 받아주세요
: :
: : rs232로 계측기와 연결하여 버튼을 눌렀을시 전압을 StringGrid에 뿌려주려주는 소스입니다.
: :
: : char strr[200];
: : char DMMRecData[200];  //변수는 전역으로 잡았습니다.
: :
: : void __fastcall TForm1::Button3Click(TObject *Sender)
: : {
: :
: :         AnsiString result;
: :         FILE *fp;
: :         ComPort2->Open();
: :         sprintf(strr,"MEAS:VOLT:DC?%c",0x0a);
: :         ComPort2->Write(strr,StrLen(strr));
: : }
: :
: :
: :
: :
: : void __fastcall TForm1::ComPort2RxChar(TObject *Sender, int Count)
: : {
: :
: :         ComPort2->Read(strr,Count);
: :         memcpy(DMMRecData,strr,Count);
: :         StringGrid1->Cells[3][1] = DMMRecData;
: :
: :
: : }
: :
: : 11v인가한 결과입니다.
: : 메모로 확인해보니
: : Memo2
: : +
: : 1
: : .
: : 0
: : 9
: : 9
: : 0
: : 1
: : 4
: : 5
: : 4
: : E
: : +
: : 0
: : 1
: :
: :
: : 이런식으로 작성되었습니다.
: :
: : /////////////////////////////MEMO소스///////////////////////////////
: :
: : void __fastcall TForm1::ComPort2RxChar(TObject *Sender, int Count)
: : {
: :
: :         ComPort2->Read(strr,Count);
: :         memcpy(DMMRecData,strr,Count);
: :         Memo2->Lines->Add(DMMRecData);
: :
: :
: : }
: :
: :
: :
: : 1. 질문 : 메모로 출력되는것을 한줄로 바꿀수 있는 방법이있나요?
:
:     => ComPort2RxChar() 콜백 함수는 데이터가 수신될 때 마다 호출 되는것인데요.
:          아마도 통신 속도를 매우 느리게 설정한것 같습니다.
:          데이터를 수신할 때마다 출력해서 그런 결과가 나온것이구요.
:          데터를 모두 수신하기 전에는 출력하지 말아야 정상적으로 한줄로 나옵니다.
:          데이터를 모두 수신하였는지 확인하는 방법은 타겟 장비로부터 보내주는 데이터 포멧을 알아야합니다.
:          STX, ETX를 사용한다든지.. 그래서 ETX가 들어올 때 가지 데이터를 죽 받아서 저장해 두었다가
:          하나의 문장으로 완성해서 데이터를 처리해야합니다.
:          시리얼 통신에서는 항상 데이터가 한꺼번에 들어온다고 생각하면 절대 안됩니다.
:          중간에 몇번씩은 잘려서 들어온다고 생각하세요. 특히 통신 속도를 느리게 하면 더 그렇습니다.
:
: : 2. 질문 : 11v인가하였는데 +1.0이런식으로 나왔는데 어떻게 수정해야할까요?
:
:     => 타겟 장비로 부터 보내는 데이터 형식을 바꿔달라고 해야합니다.
:          아니면 데이터 요청을 보낼때 어떤 형식이 있어서 리턴 받는 값의 형식을 지정해서 보낼 수 도 있구요.
:          이건 앞에 1번에서 말씀드린것 같이 해당 타겟 장비의 통신 메뉴얼을 참고하셔야합니다.
:
: : 3. stringgrid로 옮기기위해서는 어떻게 해야할까요?
:
:     => 작성하신 코드처럼 하시면 될것 같은데요.
:          완성된 문장을 만드는게 중요하고, 완성된 문장이 만들어지면 어디에 출력하는 가는 쉬운 문제니....
:
: :
: : 공부중에 너무 속상하내요 안되니...
: :
: : 답변부탁드립니다.
: :
: :
: : ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

친절한 설명 감사드립니다.

3. 질문에서는 stringgrid로 뿌려지는지 확인을 해보려고 작성한거였는데 뿌려지질않네요 ㅜㅜ

2번 질문 조금만 자세히 설명부탁드려요 될가요

+ -

관련 글 리스트
72530 rs232로 통신하여 값을 받아오려하는데.. 안됩니다. 앱돌이 3844 2015/04/16
72531     Re:rs232로 통신하여 값을 받아오려하는데.. 안됩니다. 송신영 3822 2015/04/16
72534         Re:Re:rs232로 통신하여 값을 받아오려하는데.. 안됩니다. 앱돌이 3866 2015/04/16
72535             Re:Re:Re:rs232로 통신하여 값을 받아오려하는데.. 안됩니다. 김시환 3996 2015/04/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.