⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 HD 6P RFID 发卡器、考勤卡钟 RS232 通讯接口程序 Delphi 源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;
type
  TMainForm = class(TForm)
    BtConnect: TButton;
    BtSetWK: TButton;
    BtRing: TButton;
    Btcollectcard: TButton;
    BtReadCard: TButton;
    BtWriteCard: TButton;
    BtInicard: TButton;
    BtEraseCard: TButton;
    BtClear: TButton;
    Memo1: TMemo;
    BtReadSector: TButton;
    BtReader: TButton;
    BtReadEW: TButton;
    BtWriteEW: TButton;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    CbmCom: TComboBox;
    Label2: TLabel;
    Cbmbouad: TComboBox;
    BTSetWaitTime: TButton;
    ReadCard4k: TButton;
    writecard4K: TButton;
    ReadEW4K: TButton;
    WriteEW4k: TButton;
    BtRWLog: TButton;
    procedure BtConnectClick(Sender: TObject);
    procedure BtcollectcardClick(Sender: TObject);
    procedure BtRingClick(Sender: TObject);
    procedure DisposeRecvData(Buffer:Pointer; BufferLength:dword);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure BtSetWKClick(Sender: TObject);
    procedure BtReadSectorClick(Sender: TObject);
    procedure BtInicardClick(Sender: TObject);
    procedure BtReadCardClick(Sender: TObject);
    procedure BtWriteCardClick(Sender: TObject);
    procedure BtEraseCardClick(Sender: TObject);
    procedure BtClearClick(Sender: TObject);
    procedure BtReaderClick(Sender: TObject);
    procedure BtReadEWClick(Sender: TObject);
    procedure BtWriteEWClick(Sender: TObject);
    procedure BTSetWaitTimeClick(Sender: TObject);
    procedure ReadCard4kClick(Sender: TObject);
    procedure writecard4KClick(Sender: TObject);
    procedure ReadEW4KClick(Sender: TObject);
    procedure WriteEW4kClick(Sender: TObject);
    procedure BtRWLogClick(Sender: TObject);
  protected
    Procedure   WndProc( var nMessage : TMessage);override;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;
implementation

uses  share;
var
        nConnect         :boolean         ;
        Prop             :READERPROPSTRUCT;
procedure TMainForm.DisposeRecvData(Buffer:Pointer; BufferLength:dword);
    type  TCARDIDSTRUCT=^CARDIDSTRUCT;
    type  TSECTORSTRUCT=^SECTORSTRUCT;
    type  TCARDINFO_HD6K =^CARDINFO_HD6K;
    type  TREADERPROPSTRUCT=^READERPROPSTRUCT;
    type  TEW_HD6K   =^EW_HD6K;
    type  TEW_HD4K   =^EW_HD4K;
  VAR
    nCommand : longint;
    Beep    : BeepStruct;
    Sector  :SECTORSTRUCT;
    str:    string;
    kk:integer;
    CardInfo6k :CARDINFO_HD6K;
    EWInfo  :EW_HD6K;
    EWof4K  : EW_HD4K;
    cardkind :byte;
    Poscard  :POSCARD_HD4K;
    Attcard  :ATTGUARDCARD_HD4K;
    OprCard  :OPRCARD_HD4K; 
  begin
    nCommand := Getcommand();
    case nCommand of
         integer(MT_READ_CARDID) :
           begin
             m_CardID := TCARDIDSTRUCT(Buffer)^;
             memo1.Lines.Add('卡片的类型为:'+intTOStr(m_CardID.CardType));
             memo1.Lines.Add('卡片的序列号为:'+intTOStr(m_CardID.CardID));
             if (integer(MT_SEND_CARDID) = nCommand) then
             begin
               SendCommand(Integer(MT_READ_CARDID),nil,0);// 读卡序列号
             end;
           end;
       Integer(MT_WRITEDATA_CARDOFHD6K):
         begin
           Beep.Count :=2;
           Beep.Times :=50;
           ShowMessage('写卡成功');
           sendcommand(Integer(MT_BEEP),@Beep,sizeof(Beep));
         end;
       Integer(MT_READ_SECTOR):
         begin
           Sector:=TSECTORSTRUCT(Buffer)^;
           str := '';
           for kk:=1 to 16 do
              str:=Str+string(IntToHex(Sector.Block_0[kk],2));
           memo1.Lines.Add('块0的数据为:'+str);
            str := '';
           for kk:=1 to 16 do
              str:=Str+string(IntToHex(Sector.Block_1[kk],2));
           memo1.Lines.Add('块1的数据为:'+str);
            str := '';
           for kk:=1 to 16 do
              str:=Str+string(IntToHex(Sector.Block_2[kk],2));
           memo1.Lines.Add('块2的数据为:'+str);
            str := '';
           for kk:=1 to 16 do
              str:=Str+string(IntToHex(Sector.Block_3[kk],2));
           memo1.Lines.Add('块3的数据为:'+str);
           ShowMessage('读扇区成功');
           Beep.Count :=1;
           Beep.Times :=50;
           sendcommand(Integer(MT_BEEP),@Beep,sizeof(Beep));
         end;
    integer(MT_READDATA_CARDOFHD6K):
       begin
         CardInfo6k:= TCARDINFO_HD6K(Buffer)^;
         memo1.Lines.Add('卡类型:'+IntToStr(Cardinfo6k.CardID.CardType));
         memo1.Lines.Add('卡序列号:'+IntToStr(Cardinfo6k.CardID.CardID));
         memo1.Lines.Add('卡号:'+IntToStr(Cardinfo6k.CardNo));

         memo1.Lines.Add('人员编号:'+(Cardinfo6k.PersonNo));
         memo1.Lines.Add('姓名 :'+(Cardinfo6k.Myname));
         memo1.Lines.Add('卡密码:'+(Cardinfo6k.Password));
         memo1.Lines.Add('卡级别:'+IntToStr(Cardinfo6k.GradeNo));
         if ((Cardinfo6k.CardType and Integer(CARDTYPE_POS)) = Integer(CARDTYPE_POS)) then
            memo1.Lines.Add('此卡支持消费功能');
         if ((Cardinfo6k.CardType and Integer(CARDTYPE_ATT)) = Integer(CARDTYPE_ATT)) then
             memo1.Lines.Add('此卡支持考勤功能');
         if ((Cardinfo6k.CardType and Integer(CARDTYPE_ACC)) =Integer(CARDTYPE_ACC)) then
             memo1.Lines.Add('此卡支持门禁功能');
         if ((Cardinfo6k.CardType and Integer(CARDTYPE_OPR)) =Integer(CARDTYPE_OPR)) then
             memo1.Lines.Add('此卡支持操作员功能');
         ShowMessage('读卡成功');
         Beep.Count :=3;
         Beep.Times :=50;
         sendcommand(Integer(MT_BEEP),@Beep,sizeof(Beep));
       end;
      integer(MT_INIT_CARDOFHD6K):
           begin
             ShowMessage('卡初始化成功');
           end;
      integer(MT_ERASE_CARDOFHD6K):
          begin
            ShowMessage('洗卡 成功');
          end;
      integer(MT_ERASEDATA_CARDOFHD6K):
          begin
            ShowMessage('清卡数据成功');
          end;
      integer(MT_RECV_READERPROP):
          begin
            Prop:=TREADERPROPSTRUCT(Buffer)^;
            Showmessage('取属性成功');
            memo1.Lines.Add('硬件版本:'+IntToStr(prop.MainHardwareVer));
            memo1.Lines.Add('软件版本:'+IntToStr(prop.MainSoftwareVer));
            memo1.Lines.Add('读卡器序列号为'+IntToStr(prop.ReaderID));
            Beep.Count :=1;
            Beep.Times :=50;
            sendcommand(Integer(MT_BEEP),@Beep,sizeof(Beep));
          end;
      integer(MT_READEW_CARDOFHD6K):
          begin
            ShowMessage('钱包读取成功');
            EWInfo:=TEW_HD6K(Buffer)^;
            ShowMessage(IntToStr(sizeof(EWInfo)));
            memo1.Lines.Add('钱包余额'+IntToStr(EWInfo.Balance));
            memo1.Lines.Add('充值额'+IntToStr(EWInfo.Deposit));
            memo1.Lines.Add('累计充值额'+IntToStr(EWInfo.SumOfDeposit));
            memo1.Lines.Add('日累计消费金额:'+IntTostr(EWInfo.IntradaySumOfAmount));
            memo1.Lines.Add('交易流水号'+IntToStr(EWInfo.TraceOfEW));
          end;
      integer(MT_WRITEEW_CARDOFHD6K):
         begin
           ShowMessage('写钱包成功');
           if m_cardID.CardID <>0 then
           begin
              m_CardID.CardType :=1;//钱包索引
              SendCommand(integer(MT_READEW_CARDOFHD6K), @m_CardID, sizeof(m_CardID));// 读钱包
           end;
         end;
      Integer(MT_SET_WAITTIME):
         begin
           ShowMessage('等待时间设置成功');
           Beep.Count :=1;
           Beep.Times :=50;
           sendcommand(Integer(MT_BEEP),@Beep,sizeof(Beep));
         end;
      Integer(MT_READ_CARDOFHD4K):
          begin
            ShowMessage('读卡成功');
            copymemory(@cardkind,Buffer,1);
            case cardkind of
                 1   :
                      begin
                        copymemory(@AttCard,Buffer,sizeof(AttCard));
                        memo1.Lines.Clear ;
                        memo1.Lines.Add('卡号为'+IntTostr(AttCard.CardNo));
                        showmessage('考勤');
                      end;
                 2   :
                      begin
                        copymemory(@PosCard,Buffer,sizeof(PosCard));
                        memo1.Lines.Clear ;
                        memo1.Lines.Add('卡号为'+IntTostr(PosCard.CardNo));
                        memo1.Lines.Add('姓名为:'+POSCard.myName );
                        showmessage('消费');
                      end;
                 3   :
                      begin
                        copymemory(@OprCard,Buffer,sizeof(OprCard));
                        memo1.Lines.Clear ;
                        memo1.Lines.Add('卡号为'+IntTostr(OprCard.CardNo));
                        showmessage('操作员');
                       end;
               end;        
            //memo1.Lines.Add(inttostr())
          end;
      integer(MT_WRITE_CARDOFHD4K):
          begin
            ShowMessage('写卡成功');
          end;
      integer(MT_UPDATEKEY_CARDOFHD4K):
          begin
            ShowMessage('更改卡密码成功');
          end;
      integer(MT_READEW_CARDOFHD4K):
          begin
            EWof4K  :=TEW_HD4K(Buffer)^;
            memo1.Lines.Clear;
            memo1.Lines.Add('扇区号为'+inttostr(EWof4K.SectorNo));
            memo1.Lines.Add('卡号为:'+inttostr(EWof4k.CardNo ));
            memo1.Lines.Add ('卡余额为:'+inttostr(EWof4k.Balance ));
            memo1.Lines.Add ('卡流水为'+inttostr(EWof4k.TraceOfEW ));
            ShowMessage('读钱包成功');
          end;
      integer(MT_WRITEEW_CARDOFHD4K):
         begin
           ShowMessage('写钱包成功');
         end;
     else
        begin
          ShowMessage('没有处理的消息类型:'+intToStr(nCommand));
        end;
    end;
  end;
procedure TMainForm.WndProc(Var nMessage:TMessage);
begin
  case nMessage.Msg of
        WM_ICDM_RECVICDMDATA : DisposeRecvData(Pointer(nMessage.LParam),nMessage.WParam);
   else ;
   end;
   inherited WndProc(nMessage);
end;


{$R *.dfm}

procedure TMainForm.BtConnectClick(Sender: TObject);
var
  com,connect :string;
  nCom,Boad   :String;
begin
  nCom := cbmCom.Text;
  Boad := cbmbouad.Text;
  Boad := Boad+',N,8,0';
  IF (cbmCom.Text ='') or (cbmbouad.Text ='') then
  begin
    ShowMessage('请选择正确的端口与通信速率');
    Exit;
  end;
  if nConnect=false then
   if StartComm(pchar(nCom),pchar(Boad)) then
   begin
      nConnect := true;
      BtConnect.Caption :='com2端口打开';
   end
   else ShowMessage('端口打开错误,请确认端口与通信速率选择正确,一般速率选择38400')
 else
 begin
   StopComm();
   nConnect := false;
   BtConnect.Caption :='端口关闭';
 end;
end;

procedure TMainForm.BtcollectcardClick(Sender: TObject);
begin
  memo1.Lines.Clear;
  zeromemory(@m_CardID,sizeof(m_CardID));
  SendCommand(integer(MT_READ_CARDID),nil,0);// 读卡序列号
end;

procedure TMainForm.BtRingClick(Sender: TObject);
var
 Beep   : BeepStruct;
begin
   memo1.Lines.Clear;
  Beep.Count :=1;    //鸣叫次数
  Beep.Times :=50;   //鸣叫时长 单位为毫秒
  //鸣叫
  sendCommand(integer(MT_BEEP),@Beep,sizeof(Beep));
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -