Q&A

  • [질문] 10ms 마다 18byte 수신하고 그냥 단순히 메모장에 출력하려면.. (comdatapaket 질문)
안녕하세요...
고수님들께 질문드립니다.

제가 만들고자하는것은 시리얼 통신으로 데이터를 수신받아서 다른처리 없이 그냥 메모장에 뿌려주는 프로그램입니다.

COMPORT만으로 해보려니 속도 때문인지 안되네요.. 
comdatapaket으로 해보려고 하는데 기본지식도 없고 여기저기 글올라온것을 참고하여 만들어 볼려니
잘 안되네요. 부디 도와주십시요.

아래 제가 만들고 있는소스에서 보완해야할 부분을 짚어 주시면 감사하겠습니다.



1. 수신 데이터 정보
- 데이터 형태(hex값) : 7E XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX E7 
                             (중간 데이터 XX값이 7E가 생길수 도 있음)
- 데이터 크기 : 18Byte 고정
- 데이터 주기 : 10ms 고정


2. 폼에 memo1,ComPort1,ComDataPacket1 을 생성한다.

3. ComDataPacket1의 Events창에서 ComPort항목에 ComPort1과 연결한다.
4. ComDataPacket1의 Events창에서 OnPacket항목에 ComDataPacket1packet와 연결한다.



5. 소스

procedure TForm1.FormCreate(Sender: TObject);
  begin
    ComDataPacket1.StartString := #$7E;
    ComDataPacket1.StopString := #$E7;
end;

procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: string);
  var
   str1 : string;
  begin
    ComPort1.Read(str1,18);
    Memo1.Lines.Add('데이터 --> ' + str1);
  end;


6. 출력결과
 아래 그림처럼 수신내용이 전혀 나타나지 않네요...
2  COMMENTS
  • Profile
    소프트테크 2011.05.27 16:22

    짚어봐야 할 사항 들입니다.

    1. 통신포트를 설정하고 , 통신포트를 열었는가?

    2. 통신포트의 설정내용은 정확한가? 보레이트 속도 예 : 9600, 패리티 예 : N, 데이터비트 예 : 8, 스톱비트 예 : 1

    3. 통신 주기가 충분한가? 9600bps 속도라면 1미리초에 한 바이트를 수신 또는 송신할수 있다. 18바이트 라면 18밀리초가

        걸리므로 10미리초의 주기는 부족하다.

    4. 패킷이 결함이 있는가? 패킷의 시작자와 종료자가 패킷의 데이터에 나타날수 있는 방식은 결함이 있는 방식이다.

        패킷의 내용 중에 데이터의 길이를 포함하지 않거나, 체크섬을 포함하지 핞는 패킷은 결함이 있는 방식이다.

        패킷에 결함이 있다면, 실시간으로 데이터가 중첩되지 않을 주기로 데이터의 수신이 들어 오도록 해야한다.

    이상의 내용을 파악하기 바랍니다.

  • Profile
    소나기 2011.05.27 19:28

    음 스크롤 되고 있는 상황인걸 보니

     

    데이터는 들어 오고 있네요.

     

    들어 오는 데이터가 아스키 값이 아니라 스트링 형태로 표시가 안되는 모양입니다.

     

      for i:=0 to 10 do
        Caption := Caption + Format('[%2x]',[arTest[i]]);

     

    위와 비슷한 식으로 각각의 데이터를 16진수로 표현해 보세요.

    • 심즈
    • 2011.07.15 00:57
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2011.08.11 22:24
      project1.dof 파일이 있는 위치를 열어서 확인해보세요.. 디렉토리가 읽기 전용으로 되어 있다거나, 파일이...
    • 심즈
      2011.08.25 00:27
      답변 감사합니다.. 확인 해 볼게요..^^
    • 수원성
      2011.07.26 18:34
      QR Code가 많이 사용 (서적,스마트 폰 사용)2D Barcode VCL Componentshttp://www.han-soft.com/barcode2d....
    • Jins_lee
      2011.08.03 19:54
      델파이 3에서도 출력 가능했습니다. 이미지 형태로 만들어서 넣었던 걸로 기억합니다. 
    • 심즈
    • 2011.07.02 20:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 심즈
      2011.07.03 07:37
      Form의 오브젝트 인스펙터에서 HorzScrollBar 속성 의 Tracking 을 True 로 하니 웹브라우저도 ...
    • 빡스
    • 2011.06.25 04:37
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 소나기
      2011.06.25 16:38
      책이 거의 전무하다 싶네요.인터넷 서점을 보시면 중고책을 팔고 있습니다. 그런데서 한번 찾아 보시고.시...
    • 수인아빠
      2011.06.27 17:30
      7월중에 데브기어에서 책이 출간된다는 소식이 있긴 합니다.....
    • zeliard
      2011.06.17 07:00
      TScrollBox에 TImage를 넣어서 써보세요.
    • anonymous
      2011.06.17 08:14
      http://www.delphi.co.kr/?mid=lecture&document_srl=213987
    • 심즈
    • 2011.06.11 22:12
    • 6 COMMENTS
    • /
    • 0 LIKES
    • zeliard
      2011.06.12 17:02
      장비가 PC로 데이터를 능동적으로 보내면 UDPServer 컴포넌트를 사용하는것이 맞는데... PC에서 장비의 데...
    • 심즈
      2011.06.12 19:35
      최용일님 댓글 감사합니다.. 제 생각에는 UDPClient컴포넌트를 사용해서 장비의 Data를 읽는 방법이 ...
    • zeliard
      2011.06.13 20:14
      접속이 성공했다면 절반 이상은 하신겁니다. 데이터 읽는것은 장비의 매뉴얼을보세요. 장비의 프로토콜에 ...
    • 심즈
      2011.06.14 05:57
      최용일님 정성스러운 답변 감사합니다^^ 제가 자꾸 글을 올려서 죄송합니다만.. UDPClient 컴포넌트로...
    • zeliard
      2011.06.14 19:49
      인디 예제를 보세요.     IdUDPClient1.Host := '192.168.0.10';  // Server IP address &n...
    • 심즈
      2011.07.02 20:11
      답변 감사합니다^^
    • 구창민
      2011.06.11 02:09
      API 가 존재합니다. 아래 함수를 사용해 보세요. function _GetLogonUserName : String;var&n...
    • 누구를대신해
      2012.06.12 02:09
      그런방법이
    • zeliard
      2011.06.01 23:30
      병렬처리라... 걱정하실 필요가 없습니다. 서버와 여러 클라이언트들과의 커넥션이 하나라는것은 존재할 수...
    • 우당탕탕
      2011.06.01 23:42
      답변 감사합니다.   제가 글을 잘못 올린듯 한데요.   서버와 클라이언트가 각각 하나입니다. 측...
    • 이정욱
      2011.06.02 00:17
      Que 를 만들어서 사용하세요.그리고 처리 루틴을 원하시는 쓰레드 수 만큼 생성 후, 각 쓰레드에서 Que에서...
    • zeliard
      2011.06.02 01:34
      정욱님 말씀이 정답입니다.
    • 은우
    • 2011.05.31 03:15
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2011.05.31 03:52
      아주예전에 올렸던건데요. :   는 선언문(~이다), GOTO문의 레벨명에 사용도 합니다.:= &nb...
    • 은우
      2011.06.01 17:43
      감사합니다.
    • 완전한사랑
      2011.05.31 18:58
      자문 자답을 하게 되는 군요,,, ^^ procedure Copy_File(FromFile, ToFile: String); var FD...
    • 소프트테크
      2011.05.27 16:22
      짚어봐야 할 사항 들입니다.1. 통신포트를 설정하고 , 통신포트를 열었는가?2. 통신포트의 설정내용은 정확...
    • 소나기
      2011.05.27 19:28
      음 스크롤 되고 있는 상황인걸 보니   데이터는 들어 오고 있네요.   들어 오는 데이터가 아스...
    • 초보델피언
      2011.05.25 20:48
      정확히 어떤 필드가 숫자형인지는 모르지만 ''' 를 ' 만 사용하면 되지 않을까요?
    • 완전한사랑
      2011.05.25 21:59
      답변 감사드립니다..  제가 너무 설명을 못한거 같네요. .ㅠ.ㅠSqlData[1]~[25]까지 전부 문자형으...
    • karl
      2011.05.26 19:10
        Query.SQL.Clear;  Query.SQL.Add('INSERT INTO 테이블 (컬럼1,  컬럼2, 컬럼3) &nb...
    • 완전한사랑
      2011.05.27 19:18
      답변 감사합니다.. 우선 여러 가지 방법으로 함 해보려고 합니다..말씀 하신 내용 참고해서 작업해 볼께...
    • karl
    • 2011.05.24 02:08
    • 4 COMMENTS
    • /
    • 0 LIKES
    • zeliard
      2011.05.24 17:26
      TIdTCPClient.ReadTimeout을 설정해보세요.
    • karl
      2011.05.24 18:36
      ReadTimeout 을 5 ~ 5000 까지줘봤는데, 커넥트 하자마자 ReadTimeError 가 나오네요.
    • zeliard
      2011.05.25 15:14
      데이터가 없으면 예외가 발생합니다. 예외처리하시고 데이터가 올때까지 기다리세요.
    • karl
      2011.05.25 18:31
      아... 그런거였군요! 감사합니다!! ^^
    • karl
    • 2011.05.23 20:02
    • 2 COMMENTS
    • /
    • 0 LIKES
    • zeliard
      2011.05.23 21:56
      포인터를 보내면 안됩니다. 포인터의 내용을 보내야죠... 포인터는 현재 프로그램내에서만 유효한 값입니다...
    • karl
      2011.05.24 01:59
      답변감사드립니다.    다음과 같이 두번 전송하여 해결하였습니다.    WriteBuff...