Q&A

  • [질문] 시리얼통신 작업중 ComPort1RxChar 부분 실행이 안되네요...조언 부탁드립니다.
왕초보라 고수님들이 올려놓은 자료로 스터디를 하고 있습니다.

아래와 같이 코딩을 하였으나 이상하게

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  s : string;
begin

   ComPort1.ReadStr(s,Count);
   Edit2.Text := s;

end;

이 프로시져가 실행이 안되네요...

왕초보라 정말 몰라서 조언을 구합니다. 꼭 좀 도와주세요

첨부는 테스트 프로젝트 파일입니다. 혹시 콤퍼넌트 프로퍼티 설정 문제일수도 있어서 올려봅니다

조언 부탁드립니다....

감사합니다.
------------------------------
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, CPort, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ComPort1: TComPort;
    Edit1: TEdit;
    Button3: TButton;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ComPort1RxChar(Sender: TObject; Count: Integer);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ComPort1.Open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ComPort1.Close;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ComPort1.WriteStr(Edit1.Text);
end;

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  s : string;
begin

   ComPort1.ReadStr(s,Count);
   Edit2.Text := s;

end;

end.
4  COMMENTS
  • Profile
    공호준 2009.07.01 22:04
    procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
    var
    S : String;
    begin
    SetLength(S, Count);
    FillChar(S[1], 0, count);
    ComPort1.Read(S[1], Count);
    Edit2.Text := s;
    end;

    입니다. 확인 해보세요!
  • Profile
    꺼칠한 넘 2009.07.01 22:19
    고수님 조언에 고맙습니다.

    위의 내용을 컴파일 하면 타입이 맞지 않다는 에러가 나네요.

    그리고 도움을 요청한 것은 아래 코딩의 SHOWMESSAGE('TEST');가 있습니다.

    만약 이 프로시저가 정상적으로 실행이 된다면 SHOWMESSAGE('TEST') 가 나타나야 하는데

    나타나지 않습니다. 즉 위의 프로시저가 수행되지 않는다고 생각됩니다.

    아래는 버튼을 누르면 Write 하는 프로시져 입니다.

    아래의 프로시져가 정상적으로 포트에 WRITE 했는지 어떻게 알죠 ?

    혹 WRITE 가 안되서 위의 ComPort1RxChar 프로시져가 수행이 안되는것 아닐까요 ?

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    ComPort1.WriteStr(Edit1.Text);
    end;


    죄하지만 한 번만 더 조언 부탁드립니다.
    감사합니다



    -------------------------------------------------------
    procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
    var
    s : String;
    begin

    SHOWMESSAGE('TEST');

    ComPort1.ReadStr(s,Count);
    Edit2.Text := s;

    end;
  • Profile
    공호준 2009.07.01 22:41
    이런! 이 소스는 지금 현장에서 사용하는 소스인데.....
    그러면 프로토콜이 맞지 않아 ACK가 없거나 ACK가 없는 장비 일겁니다. PC 2대 가지고 테스트 해보세요.
  • Profile
    으흐흐유령 2009.07.01 23:35
    edit1의 내용을 전송하면(버튼3) edit2에 표시되네요. 까칠한넘 님이 작성중이신 소스 제대로 동작 합니다.
    공호준님 말씀대로 pc두대로 테스트 해보시거나 pc한대로 테스트 하려면 'com0com 컴포트에뮬레이터' 라는 녀석을 쓰시면됩니다.