Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[15123] [질문]cport에서 포트가 여러개 인경우 실제 장비가 연결된 포트 찾기가 어려워요.
이노야 [] 2505 읽음    2014-04-07 18:19
!!!참 쉽지 않네용,  고수님들의 조언을 부탁드립니다.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  CPort, CPortTypes, CPortCtl, Registry, StdCtrls;

const 
  SendStart = Chr($73) + Chr($10) + Chr($04) + Chr($10) + Chr($40) + Chr($50) + Chr($AA);
  SendData  = Chr($73) + Chr($10) + Chr($04) + Chr($10) + Chr($60) + Chr($70) + Chr($AA);

  RecvStart = Chr($73) + Chr($50) + Chr($04) + Chr($10) + Chr($30) + Chr($20) + Chr($AA);
  RecvEnd   = Chr($73) + Chr($50) + Chr($04) + Chr($01) + Chr($70) + Chr($60) + Chr($AA);
   
type
  TForm1 = class(TForm)
    ComPort1: TComPort;
    ComDataPacket1: TComDataPacket;
    ListBox1: TListBox;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure ComDataPacket1Packet(Sender: TObject; const Str: String);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    function StrToHex(const S: string): string;//16진수변환
   
  public
    { Public declarations }
    com_port : string;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.StrToHex(const S: string): string;//16진수변환
var
  i: Integer;
begin
  Result := '';
  for i := 1 to Length(S) do
    Result := Result + IntToHex( Byte(S[i]), 2 );
end;

procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: String);
var
  I : Integer;
begin
  if (Str = RecvStart) then                            // 최초 장비로부터 메세지를 받았을 때
  begin
    ComPort1.WriteStr(SendStart);               // 장비와의 ID 체크를 위해 전송한다
  end
  else if (Str = RecvEnd) then                     // 장비로부터 종료 메세지를 받았을 때
  begin
    com_port := ComPort1.Port;                  // 실제 통신포트 저장 (요부분도 인식하질 않고요.)

    Exit;                                       // 끝내면 된다
  end
  else                                          // 장비ID정보를 받거나 측정데이터를 받았을 때
  begin
    ComPort1.WriteStr(SendData);

    for i := 1 to Length(Str) do
      Memo1.Lines.Add('['+IntToStr(i) + '] ' +Str[i] + ' (' + StrToHex(Str[i]) + ')' + ' : ' +
      IntTostr(StrToInt('$'+StrToHex(Str[i])))+#13);
      Memo1.Lines.Add('-------------');

  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TempReg: TRegistry;
  TempStr: TStrings;
  I: Integer;
begin
TempReg := TRegistry.Create;

with TempReg do
   try
     RootKey := HKEY_LOCAL_MACHINE;
     if OpenKey('HARDWARE\DEVICEMAP\SERIALCOMM', True) then
     begin
       TempStr := TStringList.Create;
       try
         GetValueNames(TempStr);
         ListBox1.Clear;
         for I := 0 to TempStr.Count-1 do
         ListBox1.Items.Add(ReadString(TempStr.Strings[I]));
       finally
         TempStr.Free;
       end;

       CloseKey;
     end;

   finally
     Free;
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i : integer ;
cPort : string ;
begin
  ComDataPacket1.StartString := #115;
  ComDataPacket1.StopString  := #170;

  com_port := '';
  for I := 0 to ListBox1.Items.Count-1 do
  begin
    ListBox1.ItemIndex := I;
   
    if ComPort1.Connected then
       ComPort1.Close;

    ComPort1.Port     := AnsiString(Listbox1.Items[I]);
    ComPort1.BaudRate := br38400;
    ComPort1.Open;

    if ComPort1.Connected then
    begin
      ComPort1.WriteStr(SendStart);               // 장비와의 ID 체크를 위해 전송한다
      if com_port <> '' then   // <-- 요부분 인식하지 않음
      begin
        cPort := TRIM(Listbox1.Items[I]);
        Memo1.Lines.Add(cPort);
        break;
      end;
    end;
  end;
end;

end.

+ -

관련 글 리스트
15123 [질문]cport에서 포트가 여러개 인경우 실제 장비가 연결된 포트 찾기가 어려워요. 이노야 2505 2014/04/07
15138     Re:[질문]cport에서 포트가 여러개 인경우 실제 장비가 연결된 포트 찾기가 어려워요. 조대현.Clau 2347 2014/04/21
15124     Re:[질문]cport에서 포트가 여러개 인경우 실제 장비가 연결된 포트 찾기가 어려워요. gomsun2 5796 2014/04/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.