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
[39156] Re:cport 3.0으로 장비의 데이터를 수신하려 합니다. 도와주이소..
씨크릿 [kkol] 1080 읽음    2005-02-17 20:03
Serial Port에서 데이터를 받으려면 이벤트를 연결해야 합니다.

이벤트 이름이 정확히 기억은 안나는데..
OnRxChar인가.. 데이터 받으면 호출되는 이벤트가 있습니다.
이건 아시는거죠?

암튼..
그리고 ack를 주면 pc로 전송하다고 했는데...
data가 어디가 끝인지 알 수 있어야 합니다.

예를 들어 모든 데이터를 다 보내고 나면 ETX같은 특수한 문자를 마지막에 보낸다든가..
콤마(,)로 구분되는 데이터 개수가 몇개라든가..

어떤 통신이든지.. 무작정 죽어라 데이터를 기다릴 수 는 없거든요.
그러니까 마지막을 알 수 있는 기준이 필요하죠..
장비에서 보내는 데이터가 어떤 방식인지 매뉴얼을 보면 알 수 있을겁니다.

또한 문제가 되는 상황이..
장비에서 "100,1,1088,2.284,-5.783,57.12,0.048,0.217,1.078 " 와 같은 데이터를 보냈을때..
실제 위 이벤트 함수에서 데이터를 읽으면 데이터가 어떻게 날라 올지 모른다는 겁니다.

순서만 같다고 생각하시면 될듯..
이렇게 두번에 받을 수도 있고
"100,1,1088,2.284"        ",-5.783,57.12,0.048,0.217,1.078 "
아래 처럼 3번에 나누어 날라올 수도 있습니다.
"100,1,1088,"        "2.284,-5.783,5"        "7.12,0.048,0.217,1.078 "

지맘대로죠..

따라서 버퍼를 하나 만들어서 데이터를 다 받거나 원하는 데이터를 받았을때까지
그 버퍼에 계속 데이터를 넣어 두었다가 처리해주는 방법이 필요합니다.

AnsiString으로 버퍼하나 말들고 계속 받은 데이터 더해주면 되겠죠..

static AnsiString buf;
buf += CPort->ReadStr(); // 계속 저장

// 함수 사용 방법은 약간 다를겁니다. 소스를 보고 하는게 아니라.. 

if 데이터를 다 못 받았다면..
    return;
else // 데이터를 다 받은거라면..
{
   ProcessData(buf) ; // <---- 이런 함수 만드셔야죠.. 뭔가 처리는 해야 할테니까..
   buf = ""; // 버퍼 비우기
}


그리고 데이터를 다 받았을때  콤마로 구분된 데이터를 처리하는것은
TStringList의 CommaText 라는 프로퍼티를 사용하면 아주 간단히 파싱이 됩니다.
모든걸 가르쳐주면 재미 없으니까.. TStringList는 도움말 찾아보시길..

장비쪽이라면 괜히 도와주고 싶어서.. ^^
그럼 좋은 프로그램 만드세요..


초보멋진빌더 님이 쓰신 글 :
: 많은 분이 도와 주셔서 이 초짜가 장비에 명령을 내리는 것은 완료 했습니다.
: 이제 수신과 저장이 남아 있는데..
: 일단 수신만 해서 값을 memo 에서 보려고 합니다.
: 일단 장비는 데이터 수신 ack 를 주면 pc로 전송하게 되어있습니다.
: 한번 보내는 data 수는 256 byte 이상 이구요.
: data는 100,1,1088,2.284,-5.783,57.12,0.048,0.217,1.078 이런 식으로 , 를  기준으로 분리되어 들어온다고
: 메뉴얼에 써 있더군요..
:
: cpor3.0 을 사용하려 하는데..
:
: 도와 주세요.. 이것과 데이터 저장만 하면 끝납니다. help me.....~~~

+ -

관련 글 리스트
39152 cport 3.0으로 장비의 데이터를 수신하려 합니다. 도와주이소.. 초보멋진빌더 870 2005/02/17
39175     Re:cport 3.0으로 장비의 데이터를 수신하려 합니다. 도와주이소.. 김시환 1003 2005/02/19
39156     Re:cport 3.0으로 장비의 데이터를 수신하려 합니다. 도와주이소.. 씨크릿 1080 2005/02/17
39154     Re:cport 3.0으로 장비의 데이터를 수신하려 합니다. 도와주이소.. 라스코니 946 2005/02/17
39162         Re:Re:cport 3.0으로 장비의 데이터를 수신하려 합니다. 도와주이소.. 빌더 초짜 949 2005/02/18
39163             Re:Re:Re:cport 3.0으로 장비의 데이터를 수신하려 합니다. 도와주이소.. 라스코니 1005 2005/02/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.