pos消费机Delphi7源代码

本文提供了一个详细的IC卡操作示例,包括读写卡、初始化、清空卡片等常见功能,并解释了各种操作的返回值含义。

 

 

 

详细代码如下:(如有疑问可13826029618进行了解,也可直接到--www.icmcu.com-下载源代码压缩包)

 

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, POS01Lib_TLB, StrUtils,StdCtrls;

type
  TForm1 = class(TForm)
    POS011: TPOS01;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label5: TLabel;
    Edit5: TEdit;
    Label6: TLabel;
    Edit6: TEdit;
    Label7: TLabel;
    Edit7: TEdit;
    Label8: TLabel;
    Edit8: TEdit;
    Label9: TLabel;
    Edit9: TEdit;
    Label10: TLabel;
    Edit10: TEdit;
    Label11: TLabel;
    Label12: TLabel;
    Edit11: TEdit;
    Label13: TLabel;
    Label15: TLabel;
    Edit13: TEdit;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Edit14: TEdit;
    Label22: TLabel;
    Edit12: TEdit;
    Edit15: TEdit;
    Label14: TLabel;
    Label20: TLabel;
    Edit16: TEdit;
    Label21: TLabel;
    Button4: TButton;
    Label23: TLabel;
    Edit17: TEdit;
    Label24: TLabel;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    GroupBox2: TGroupBox;
    Label25: TLabel;
    ComboBox1: TComboBox;
    Label26: TLabel;
    Edit18: TEdit;
    Button10: TButton;
    Label27: TLabel;
    Button11: TButton;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    Label28: TLabel;
    Edit19: TEdit;
    Label29: TLabel;
    Edit20: TEdit;
    Label30: TLabel;
    Edit21: TEdit;
    Edit23: TEdit;
    Label31: TLabel;
    Edit24: TEdit;
    Label32: TLabel;
    Edit25: TEdit;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Label33: TLabel;
    Edit22: TEdit;
    CheckBox4: TCheckBox;
    Label19: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2, Unit3, Unit4;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); //IC卡读写器嘀一声
begin
  POS011.PcdBeep(38);
end;

procedure TForm1.Button2Click(Sender: TObject);  //写卡
begin
  POS011.CardAreaNumber := 8 ;//区号
    POS011.CardKeyHexStr := '888888888888' ;//密码

    POS011.CardUnit := StrToInt (Edit1.Text) ;//单位代码,取值0~255,0为不限制,消费机可以限定该单代码的卡使用,也可以不限定让所有的卡都可使用
    POS011.CardClass := StrToInt(Edit2.Text) ;//卡类别,取值0~7消费机可以限定该卡类别的卡使用,也可以不限定让所有的卡都可使用,定额消费时可按不同卡类别设定不同的额度
    POS011.CardCustomNumberStr := Edit3.Text ;//自编卡号
    POS011.CardRechargeTimes := StrToInt(Edit4.Text) ;//充值次料
    POS011.CardHolderPwdStr := Edit5.Text ;//持卡人密码
    POS011.CardHolderName := Edit6.Text ;//持卡人姓名
    POS011.CardMoney := StrToInt(Edit7.Text) ;//卡金额
    POS011.CardLastYear := StrToInt(Edit8.Text) ;//年
    POS011.CardLastMonth := StrToInt(Edit11.Text) ;//月
    POS011.CardLastDay := StrToInt(Edit12.Text) ;//日
    POS011.CardLastMealType := StrToInt(Edit13.Text) ;//餐次:0为早餐,1为中餐,2为晚餐,3为夜宵
    POS011.CardLastMealMoney := StrToInt(Edit9.Text);
    POS011.CardLastMealTimes := StrToInt(Edit14.Text);
    POS011.CardLastDayMoney := StrToInt(Edit10.Text);
    POS011.CardLastDayNeedPwdMoney := StrToInt(Edit15.Text);

    POS011.CardWrite();
    If POS011.OperatingResults = 0 Then
    begin

        POS011.PcdBeep(38);
        ShowMessage('写金额成功');

    End
    Else If POS011.OperatingResults = 8 Then
    begin
        ShowMessage('寻不到卡!');
    end
    Else
    begin
        ShowMessage(IntToStr(POS011.OperatingResults));

    End;
    //其他返回值说明请看文件尾
end;

procedure TForm1.Button8Click(Sender: TObject);  //出厂卡初始化成消费卡
begin
  POS011.CardAreaNumber := 8 ;//区号
  POS011.CardHaltEn := 1 ;//初始化后休眠该卡,之后必须拿开卡再放回感应区卡才能做其他操作
   
  POS011.CardNewKeyAHexStr := 'FFFFFFFFFFFF' ;//新A密码,消费机用A密码

  POS011.CardNewKeyBHexStr := '888888888888' ;//新B密码,管理软件用B密码

  POS011.CardInit() ;
  If POS011.OperatingResults= 0 Then
  begin
      POS011.PcdBeep(38);
      ShowMessage('卡片初始化成消费卡成功');
  end
  Else If POS011.OperatingResults = 8 Then
  begin
      ShowMessage('寻不到卡!');
  end
  Else If POS011.OperatingResults = 14 Then
  begin
      ShowMessage('该卡非刚出厂的卡');
  end
  Else
  begin
      ShowMessage(IntToStr(POS011.OperatingResults));

  End;
  //其他返回值说明请看文件尾
end;

procedure TForm1.Button3Click(Sender: TObject);//读卡
begin
  POS011.CardAreaNumber := 8; //区号
  POS011.CardKeyHexStr := '888888888888';//密码
  POS011.CardRead();
  If POS011.OperatingResults = 0 Then
  begin
      POS011.PcdBeep(38);
      Edit1.Text := IntToStr(POS011.CardUnit);
      Edit2.Text := IntToStr(POS011.CardClass);//卡类别
      Edit3.Text := POS011.CardCustomNumberStr;
      Edit4.Text := IntToStr(POS011.CardRechargeTimes);
      Edit5.Text := POS011.CardHolderPwdStr;
      Edit6.Text := POS011.CardHolderName;
      Edit7.Text := IntToStr(POS011.CardMoney);
      Edit8.Text := IntToStr(POS011.CardLastYear);
      Edit11.Text := IntToStr(POS011.CardLastMonth) ;
      Edit12.Text := IntToStr(POS011.CardLastDay) ;
      Edit13.Text := IntToStr(POS011.CardLastMealType) ;
      Edit9.Text := IntToStr(POS011.CardLastMealMoney);
      Edit14.Text := IntToStr(POS011.CardLastMealTimes);

      Edit10.Text := IntToStr(POS011.CardLastDayMoney);
      Edit15.Text := IntToStr(POS011.CardLastDayNeedPwdMoney);

      ShowMessage( '读金额成功!');
  end
  Else If POS011.OperatingResults = 8 Then
  begin
      ShowMessage( '寻不到卡!');
  end
  Else If POS011.OperatingResults = 60 Then
  begin
      ShowMessage( '卡金额乱码!');
  end
  Else
  begin

      ShowMessage(IntToStr(POS011.OperatingResults));

  End;
    //其他返回值说明请看文件尾

end;

procedure TForm1.Button9Click(Sender: TObject); //清空消费卡
begin
    POS011.CardAreaNumber := 8;//区号
    POS011.CardKeyHexStr := '888888888888';//密码
    POS011.CardHaltEn := 1; //初始化后休眠该卡,之后必须拿开卡再放回感应区卡才能做其他操作

    POS011.CardClear();
    If POS011.OperatingResults = 0 Then
    begin
        POS011.PcdBeep(38);
        ShowMessage('卡片清空成功!');
    end
    Else If POS011.OperatingResults = 8 Then
    begin
        ShowMessage('寻不到卡!');
    end
    Else
    begin
        ShowMessage(IntToStr(POS011.OperatingResults));
    End;
    //其他返回值说明请看文件尾
end;

procedure TForm1.Button7Click(Sender: TObject); //清空密码卡
begin
    POS011.CardAdminClear();
   
    If POS011.OperatingResults = 0 Then
    begin
        POS011.PcdBeep(38);
        ShowMessage('清空密码卡成功!');
    end
    Else If POS011.OperatingResults = 8 Then
    begin
        ShowMessage('寻不到卡!');
    end
    Else If POS011.OperatingResults = 23 Then
    begin
        ShowMessage('读写器没插上或驱动程序没安装!');
    end
    Else
    begin
        ShowMessage(IntToStr(POS011.OperatingResults));
    End;
end;

procedure TForm1.Button6Click(Sender: TObject);//制作密码卡,更改消费机区号密码
begin
  POS011.CardAreaNumber := 8;//区号
  POS011.CardNewKeyAHexStr := 'FFFFFFFFFFFF';//新A密码,消费机用A密码

  POS011.CardAdminLockEn := 0 ;//提示:为0不锁定,为1表示POS机刷密码卡更改后锁定该密码,不能再次更改了
  POS011.CardAdminSet();

  If POS011.OperatingResults = 0 Then
  begin
      POS011.PcdBeep(38);
      ShowMessage('制作密码卡成功,请拿到POS机上刷卡设定!');

  end
  Else If POS011.OperatingResults = 8 Then
  begin
      ShowMessage('寻不到卡!');
  end
  Else If POS011.OperatingResults = 23 Then
  begin
      ShowMessage('读写器没插上或驱动程序没安装!');
  end
  Else
  begin

      ShowMessage(IntToStr(POS011.OperatingResults));

  end;
  //其他返回值说明请看文件尾
end;

procedure TForm1.Button4Click(Sender: TObject); //充值
begin
    POS011.CardAreaNumber := 8;//区号
    POS011.CardKeyHexStr := '888888888888';//密码

    POS011.CardMoneyAdd (StrToInt(Edit16.Text));
    If POS011.OperatingResults = 0 Then
    begin
        POS011.PcdBeep(38);
        Edit1.Text := IntToStr(POS011.CardUnit) ;
        Edit2.Text := IntToStr(POS011.CardClass) ;
        Edit3.Text := POS011.CardCustomNumberStr;
        Edit4.Text := IntToStr(POS011.CardRechargeTimes);
        Edit5.Text := POS011.CardHolderPwdStr;
        Edit6.Text := POS011.CardHolderName;
        Edit7.Text := IntToStr(POS011.CardMoney) ;
        Edit8.Text := IntToStr(POS011.CardLastYear) ;
        Edit11.Text := IntToStr(POS011.CardLastMonth);
        Edit12.Text := IntToStr(POS011.CardLastDay) ;
        Edit13.Text := IntToStr(POS011.CardLastMealType);

        Edit9.Text := IntToStr(POS011.CardLastMealMoney);
        Edit14.Text := IntToStr(POS011.CardLastMealTimes);

        Edit10.Text := IntToStr(POS011.CardLastDayMoney);
        Edit15.Text := IntToStr(POS011.CardLastDayNeedPwdMoney);


        ShowMessage('充值成功!');
    end
    Else If POS011.OperatingResults = 62 Then
    begin
        Edit1.Text := IntToStr(POS011.CardUnit) ;
        Edit2.Text := IntToStr(POS011.CardClass) ;
        Edit3.Text := POS011.CardCustomNumberStr;
        Edit4.Text := IntToStr(POS011.CardRechargeTimes);
        Edit5.Text := POS011.CardHolderPwdStr;
        Edit6.Text := POS011.CardHolderName;
        Edit7.Text := IntToStr(POS011.CardMoney) ;
        Edit8.Text := IntToStr(POS011.CardLastYear) ;
        Edit11.Text := IntToStr(POS011.CardLastMonth);
        Edit12.Text := IntToStr(POS011.CardLastDay) ;
        Edit13.Text := IntToStr(POS011.CardLastMealType);

        Edit9.Text := IntToStr(POS011.CardLastMealMoney);
        Edit14.Text := IntToStr(POS011.CardLastMealTimes);

        Edit10.Text := IntToStr(POS011.CardLastDayMoney);
        Edit15.Text := IntToStr(POS011.CardLastDayNeedPwdMoney);

        ShowMessage('充值失败,原因是如果充值金额将溢出!');
    end
    Else
    begin
   
        ShowMessage(IntToStr(POS011.OperatingResults));
   
    end;
    //其他返回值说明请看文件尾

end;

procedure TForm1.Button5Click(Sender: TObject);
begin
    POS011.CardAreaNumber := 8;//区号
    POS011.CardKeyHexStr := '888888888888';//密码

    POS011.CardMoneySub (StrToInt(Edit17.Text));
    If POS011.OperatingResults = 0 Then
    begin
        POS011.PcdBeep(38);
        Edit1.Text := IntToStr(POS011.CardUnit) ;
        Edit2.Text := IntToStr(POS011.CardClass) ;
        Edit3.Text := POS011.CardCustomNumberStr;
        Edit4.Text := IntToStr(POS011.CardRechargeTimes);
        Edit5.Text := POS011.CardHolderPwdStr;
        Edit6.Text := POS011.CardHolderName;
        Edit7.Text := IntToStr(POS011.CardMoney) ;
        Edit8.Text := IntToStr(POS011.CardLastYear) ;
        Edit11.Text := IntToStr(POS011.CardLastMonth);
        Edit12.Text := IntToStr(POS011.CardLastDay) ;
        Edit13.Text := IntToStr(POS011.CardLastMealType);

        Edit9.Text := IntToStr(POS011.CardLastMealMoney);
        Edit14.Text := IntToStr(POS011.CardLastMealTimes);

        Edit10.Text := IntToStr(POS011.CardLastDayMoney);
        Edit15.Text := IntToStr(POS011.CardLastDayNeedPwdMoney);


        ShowMessage('退费成功!');
    end
    Else If POS011.OperatingResults = 62 Then
    begin
        Edit1.Text := IntToStr(POS011.CardUnit) ;
        Edit2.Text := IntToStr(POS011.CardClass) ;
        Edit3.Text := POS011.CardCustomNumberStr;
        Edit4.Text := IntToStr(POS011.CardRechargeTimes);
        Edit5.Text := POS011.CardHolderPwdStr;
        Edit6.Text := POS011.CardHolderName;
        Edit7.Text := IntToStr(POS011.CardMoney) ;
        Edit8.Text := IntToStr(POS011.CardLastYear) ;
        Edit11.Text := IntToStr(POS011.CardLastMonth);
        Edit12.Text := IntToStr(POS011.CardLastDay) ;
        Edit13.Text := IntToStr(POS011.CardLastMealType);

        Edit9.Text := IntToStr(POS011.CardLastMealMoney);
        Edit14.Text := IntToStr(POS011.CardLastMealTimes);

        Edit10.Text := IntToStr(POS011.CardLastDayMoney);
        Edit15.Text := IntToStr(POS011.CardLastDayNeedPwdMoney);

        ShowMessage('退费失败,原因是金额不足以退费!');
    end
    Else
    begin
   
        ShowMessage(IntToStr(POS011.OperatingResults));
   
    end;
    //其他返回值说明请看文件尾
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
    If Button10.Caption = '打开端口' Then
    begin

        POS011.DevBroadCastMode := 0 ;//485
        POS011.DevComPort := StrToInt(RightStr(ComboBox1.Text, Length(ComboBox1.Text) - 3)) ;//端口号
        POS011.DevComPortOpen := 1;
        If POS011.DevComPortOpen = 1 Then
        begin

            Button10.Caption := '关闭端口';
        end;
    end
    Else
    begin
        POS011.DevComPortOpen := 0;
        Button10.Caption := '打开端口';
    end;
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
  If POS011.DevComPortOpen = 1 Then
  begin
        POS011.DevNumber := StrToInt(Edit18.Text);
        POS011.DevStateRead();
        If POS011.OperatingResults = 0 Then
        begin
            If POS011.DevStateRecNew > 0 Then //有新记录
            begin
                CheckBox1.Checked := True;
            end
            Else
            begin
                CheckBox1.Checked := False;
            End;

            If POS011.DevStateRecOver > 0 Then //记录满
            begin
                CheckBox2.Checked := True;
            end
            Else
            begin
                CheckBox2.Checked := False;

            end;

            If POS011.DevStateTimer > 0 Then //时间乱
            begin
                CheckBox3.Checked := True ;
            end
            Else
            begin
                CheckBox3.Checked := False;
            End;

            If POS011.DevStateLinkEncrypt > 0 Then //设备配置了加密方式
            begin
                CheckBox4.Checked := True;
            end
            Else
            begin
                CheckBox4.Checked := False;
            End;

            Edit22.Text := IntToStr(POS011.DevLossTotal) //被挂失卡号数量

        end
        Else
        begin
            ShowMessage('设备通讯不通!');
        End;
  end
  Else
  begin
      ShowMessage('端口未打开!');
  end;
    //其他返回值说明请看文件尾

end;

procedure TForm1.Button12Click(Sender: TObject);
var
    mydatetime:TDateTime;
begin
    mydatetime := Now;

    Edit19.Text := FormatDateTime('YY',mydatetime);
    Edit20.Text := FormatDateTime('MM',mydatetime);
    Edit21.Text := FormatDateTime('DD',mydatetime);
    Edit23.Text := FormatDateTime('hh',mydatetime);
    Edit24.Text := FormatDateTime('nn',mydatetime);
    Edit25.Text := FormatDateTime('ss',mydatetime);

end;

procedure TForm1.Button13Click(Sender: TObject);
begin
    If POS011.DevComPortOpen = 1 Then
    begin
        POS011.DevNumber := StrToInt(Edit18.Text);
        POS011.DevTimeRead();

        If POS011.OperatingResults = 0 Then
        begin
            Edit19.Text := IntToStr(POS011.DevTimeYear);
            Edit20.Text := IntToStr(POS011.DevTimeMonth);
            Edit21.Text := IntToStr(POS011.DevTimeDay);
            Edit23.Text := IntToStr(POS011.DevTimeHour);
            Edit24.Text := IntToStr(POS011.DevTimeMinute);
            Edit25.Text := IntToStr(POS011.DevTimeSecond);
 
        end
        Else If POS011.OperatingResults = 101 Then
        begin
            ShowMessage('机号不能为零!');
        end
        Else
        begin
            ShowMessage('设备通讯不通!');
        End;
    end
    Else
    begin
        ShowMessage('端口未打开!');
    End;
    //其他返回值说明请看文件尾
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
    If POS011.DevComPortOpen = 1 Then
    begin
   

        POS011.DevNumber := StrToInt(Edit18.Text);
        POS011.DevTimeYear := StrToInt(Edit19.Text);
        POS011.DevTimeMonth := StrToInt(Edit20.Text);
        POS011.DevTimeDay := StrToInt(Edit21.Text);
        POS011.DevTimeHour := StrToInt(Edit23.Text);
        POS011.DevTimeMinute := StrToInt(Edit24.Text);
        POS011.DevTimeSecond := StrToInt(Edit25.Text);

        POS011.DevTimeWrite();
       
        If POS011.OperatingResults = 0 Then
        begin
            ShowMessage('时间设定成功!');
        end
        Else
        begin
            ShowMessage('设备通讯不通!');
        End;
    end
    Else
    begin
        ShowMessage('端口未打开!');
    End;
    //其他返回值说明请看文件尾
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
    Form2:=TForm2.Create(self);
    Form2.ShowModal;
    Form2.Free;
end;

procedure TForm1.Button17Click(Sender: TObject);
begin
    Form3:=TForm3.Create(self);
    Form3.ShowModal;
    Form3.Free;
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
    Form4:=TForm4.Create(self);
    Form4.ShowModal;
    Form4.Free;
end;

 

 

{
返回值说明

4 没有任何块可以读写

8//寻不到卡
#define ERR_READSERIAL 9//读序列吗错误
#define ERR_SELECTCARD 10//选卡错误
#define ERR_LOADKEY 11//装载密码错误
#define ERR_AUTHKEY 12//密码认证错误
#define ERR_READ 13//读卡错误
#define ERR_WRITE 14//写卡错误

#define ERR_NONEDLL 21//没有动态库
#define ERR_DRIVERORDLL 22//动态库或驱动程序异常
#define ERR_DRIVERNULL 23//驱动程序错误或尚未安装

#define ERR_TIMEOUT 24//操作超时,一般是动态库没有反应
#define ERR_TXSIZE 25//发送字数不够
#define ERR_TXCRC 26//发送的CRC错
#define ERR_RXSIZE 27//接收的字数不够
#define ERR_RXCRC 28//接收的CRC错
#define ERR_SIZENO 29//接收的数据长度为零

#define ERR_CLASSBIT 30//权限编码错误

#define ERR_CARDMONEYWRONG 60//卡金额乱码
#define ERR_CARDMONEYTOOLITTLE 61//卡金额乱码
#define ERR_CARDMONEYTOOBIG 62//卡金额乱码


#define ERR_FILENOEXIST     40//文件不存在
#define ERR_FILEDATA        41//文件数据乱码
#define ERR_FILENOEXIST1    42//文件不存在
#define ERR_FILEDATA1       43//文件数据乱码

#define OPSUCC 0

#define ERR_JIHAOZERO 101//机号为零

#define PORTOPENED 104//端口已经打开
#define PORTCLOSEED 105//端口已经关闭
#define ERR_NOLINK 106
#define SENDBYTEERR 107//发送失败

#define REVBYTETIMEOVER 108//接收超时

#define ERR_RECNOREADTOTAL 109//尚未读取汇总信息
#define ERR_FRAMEPOINTOVER 110//帧指针超出
#define ERR_OLDADDR        111//操作不成功,原因是旧地址错误
#define ERR_DATANOTUPLOAD  112//数据尚未上传不能删除
#define ERR_CARDNOTLOSS    113//数据尚未上传不能删除

#define COMPORTNOOPEN 120//串口端口还没打开

#define EXCEPTIONERR 199//未知道错误


}

 

 

end.

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值