Q&A

  • [질문] RFID CHIP 데이타를 읽어서 RS-232C 로 컴퓨터에 데이타를 전송해 처리 방법 질문입니다.
안녕하세요 ?

초짜가 어떻게 해야 할 지 몰라서 도움을 요청합니다.

RFID CHIP  데이타를 읽어서 RS-232C 로 컴퓨터에 데이타를 전송해 준답니다.

이 데이타를 실시간으로 읽고 컴퓨터와 맞는 값이 있으면 성공 처리 후

더이상 데이타를 전송 받지않게 하는 프로그램을 개발하려 합니다.

어떤 형태로 데이타를 받아야 하나요 ?

어떤 콤포넌트를 이용해서 어떻게 데이타를 받아서 처리해야 하는지요 ?

전혀 모르는 부분이라서 급히 도움을 요청합니다.

감사합니다.
5  COMMENTS
  • Profile
    phono 2009.06.30 22:49
    한 6년전에 RFID 데모프로그램 관련 작업을 기억해 본 기억으론

    Com port 제어관련 컴포넌트를 사용하시고.. TMS Asyn32 같은..,

    일단 리더기 쪽에 아마 COMPORT랑 연결이 될겁니다.

    보통 RFID 제어는.. 안테나(즉 리더기) 주변에 널려있는 칩(태그)들의 정보를 수집하는 인벤토리 명령어..

    그리고 선택한 특정 칩(태그)에 데이타 값을 읽는 명령.. 그리고 쓰는 명령 으로 구성되고요

    이 부분을 프로그램 해주시면 되고..


    인벤토리 명령
    인벤토리 명령으로 수집된 태그의 내용을 읽기 명령
    인벤토리 명령으로 수집된 태그의 내용을 쓰기 명령

    등은 기본 컴맨드가 있습니다.(회사마다 조금식 틀리고요..)


    이걸 COM PORT 컴포넌트를 통해 전송하고 결과를 받고 하시면 됩니다.
    RFID 칩이

  • Profile
    김홍균 2009.06.30 23:05
    serial 통신 컴포넌트 아무거나 하나 주워다가 Comport, bps, bit 등 맞추고 걍 리시브, 센드 하시면 되것습니다.
    rf 리더기에서 프로토콜(명령어) 다 줄겁니다... 줘야 패킷 보고 데이터 다 받았는지 안 받았는지 알겠지요.
  • Profile
    꺼칠한 넘 2009.07.01 21:26
    조언에 감사드립니다.
  • Profile
    이규하 2009.07.15 16:24
    비슷한 프로그램을 만든 경험이 있는데요.

    저는 TCommPortDriver 라는 것을 주워다 썼었구요.

    리더에서, 스켄을 하면, 에코 값 까지 3 회의 데이터가 들어 옵니다.

    OnReceiveData Event 에서 다음과 같은 코드로, 값을 받았습니다.

    <!--CodeS-->

    function Freceive_Data(DataPtr: Pointer; DataSize: Integer) : String;
    var
    // p: pchar;
    p : PAnsiChar ;
    s: string;
    begin
    // Parse incoming text
    p := DataPtr;
    while DataSize > 0 do
    begin
    case p^ of
    #10:; // LF
    #13: // CR - cursor to next line
    begin
    // if Copy(s,1,6) <> '020887' then // Echo from reader
    // Exit ;
    Result := Copy(s, 18, 5); // 19.4
    // Result := s ;
    s := '';
    end;
    #8: // Backspace - delete last char
    delete( s, length(s), 1 );
    else // Any other char - add it to the current line
    s := s + p^;
    end;
    dec( DataSize );
    inc( p );
    end;
    end;

    <!--CodeE-->

    그 다음에, Result 값 16 진수를 10 진수로 변형 했습니다.

    <!--CodeS-->
    function Fdata_Convert(rcv_data : String) : String;
    var
    s, s_data : string;
    i, j : Integer;
    r_cardno : real;
    begin
    // 16진수 -> 10진수
    try
    for i := 1 to 5 do // 1, 4
    begin
    for j := 0 to 3 do // 0, 3
    begin
    s_data := Copy(rcv_data, 6 - i , 1);
    if s_data = 'A' then s_data := '10'
    else if s_data = 'B' then s_data := '11'
    else if s_data = 'C' then s_data := '12'
    else if s_data = 'D' then s_data := '13'
    else if s_data = 'E' then s_data := '14'
    else if s_data = 'F' then s_data := '15';
    s := IntToStr((StrToInt(s_data) shr j) and 1)+ s;
    end;
    end;
    s := Copy(s, 4, 16);
    r_cardno := 0;
    for i := 1 to 16 do
    r_cardno := r_cardno + StrToInt(Copy(s, 17 - i, 1)) * Power(2, i-1);
    result := FloatToStr(r_cardno);
    except
    result := '0';
    end;
    end;

    <!--CodeE-->

    참고가 되시길 바랍니다.
  • Profile
    꺼칠한 넘 2009.08.04 08:09
    도움에 감사드립니다.
    무더운 여름 즐거운 휴가 보내세요 ~