详细代码如下:(如有疑问可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.