Q&A

  • Cport로 카드리더기 값 가져오기

안녕하세요


델파이로 개발하고있는 초짜 개발자입니다.


지금 시리얼포트로 카드리더기의 값을 불러와야하는데 간단하게 카드를 찍었을때 값을 읽어 올 수 있는 코드좀 알려주셧으면합니다.


델파이가 처음이라 많이 어렵네요 고수님들 답변좀 부탁드립니다.

7  COMMENTS
  • Profile
    이정욱 2015.06.03 12:01

    http://codeverge.com/embarcadero.delphi.general/better-code-for-writing-reading-th/1067762 를 참고해보세요.

  • Profile
    JangHeeJin 2015.06.04 01:21

    답변감사합니다


    저기 나오는 함수들중 아무거나 사용해도 무관한건가요?


    비슷한 함수 들이 많은거같아서 ㅎㅎ;

  • Profile
    이정욱 2015.06.04 03:45

    시도해보시는것이 기술을 가장 빨리 습득하는 방법입니다.

  • Profile
    JangHeeJin 2015.06.05 02:50

    error.JPG


    485방식으로 읽으니 이런식으로 데이터가 올라오는데 왜 그런건가요?

  • Profile
    이정욱 2015.06.06 01:16

    소스를 봐야 알 수 있을 듯 합니다.

    참고로 시리얼 통신에서는 맞춰줘야할 것들이 있습니다. 컴포넌트로 사용중이시라면 Boud Rate, Data Bits, Parity, Stop bit 같은것을 맞춰주셔야 합니다.

    해당 기기와 맞추는것이니 해당기기의 스팩과 맞춰주시면 됩니다.

  • Profile
    바람순이 2015.06.10 23:52

    리더기에서 순수하게 RF-Card 데이터만 넘어오는것이 아니고 Header도 같이 넘어옵니다. 그리고 데이터는 바이너리이기 때문에 String으로 보려면 변환 작업을 해 주어야 하고요.

    가능하면 리더기 업체에서 제공해 주는 DLL 파일을 이용하는 것이 좋습니다.

    저도 지금 리더기 읽어서 관리하는 프로그램을 만들려고 하는데

    리더기 업체에서 DLL 파일을 제공해 주더군요.

    그냥 수신해서 보려면 수신한 데이터를 아래 함수를 이용해 보세요.

    //-------------------------------------------------------//
    function ByteToHexStr(reData: byte): string;
    const s = '0123456789ABCDEF';
    begin
         result := s[(reData div 16) + 1] + s[(reData mod 16) + 1];
    end;
    //-------------------------------------------------------//
    function HexChrToByte(reC: char): byte;
    begin
         case reC of
              '0'..'9' : Result := ord(reC) - ord('0');
              'A'..'F' : Result := ord(reC) - ord('A') + 10;
              'a'..'f' : Result := ord(reC) - ord('a') + 10;
         end;
    end;
    //-------------------------------------------------------//
    function HexStrToByte(reData:string): byte;
    Begin
         Result := HexChrToByte(reData[1]) shl 4
                 + HexChrToByte(reData[2]);
    end;
    //-------------------------------------------------------//

  • Profile
    바람순이 2015.06.10 23:59

    procedure Tform1.VaCommRxChar(Sender: TObject; Count: Integer);
    var rChr: Char;
        Cnt: integer;
        str: string;
    begin
      str := '';
      for Cnt:=0 to Count - 1 do
      begin
        VaComm.ReadBuf(rChr,1);
        str := str + ChrToHex(rChr);
      end;
      Memo1.Line.Add(str);
    end;