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
[72531] Re:rs232로 통신하여 값을 받아오려하는데.. 안됩니다.
송신영 [palindrome] 3821 읽음    2015-04-16 17:18
앱돌이 님이 쓰신 글 :
: 초보 질문좀 받아주세요
:
: 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로 옮기기위해서는 어떻게 해야할까요?

    => 작성하신 코드처럼 하시면 될것 같은데요.
         완성된 문장을 만드는게 중요하고, 완성된 문장이 만들어지면 어디에 출력하는 가는 쉬운 문제니....

:
: 공부중에 너무 속상하내요 안되니...
:
: 답변부탁드립니다.
:
:
:

+ -

관련 글 리스트
72530 rs232로 통신하여 값을 받아오려하는데.. 안됩니다. 앱돌이 3844 2015/04/16
72531     Re:rs232로 통신하여 값을 받아오려하는데.. 안됩니다. 송신영 3821 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.