📄 machineinterface.pas
字号:
{
st := rf_load_key_hex(ICDev,LOAD_PASSWD_MODE,secnr,PChar(LOAD_KEY));
if st <> 0 then
begin
showmessage('发卡机连接错!请检查通讯线是否正确连接?')
// frmMsgBox.MessageBox('加载密码出错!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
}
st := rf_card(ICDev,1,@snr);
if st <> 0 then
begin
// showmessage('发卡机上未发现卡片')
// frmMsgBox.MessageBox('发卡机上未发现考勤卡,请先放卡!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
st:=rf_authentication(icdev,0,secnr);
if st <> 0 then
begin
// showmessage('密码错误')
// frmMsgBox.MessageBox('密码错误!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
iCardNo := StrToInt(cfCard.CardNo);
S := IntToHex(iCardNo,4);
S := S + Copy(cfCard.UnitPasswd,1,4);
S := S + IntToHex(cfCard.CardType,2);
S := S + IntToHex(cfCard.CardFlag,2);
S := S + '00000000000000000000000000000000';
S := Copy(S,1,32);
st := rf_write_hex(ICDev,secnr*4+2,PChar(S));
if st <> 0 then
begin
// showmessage('写卡发生错误')
// frmMsgBox.MessageBox('写卡发生错误!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
st := rf_read_hex(ICDev,secnr*4+2,@Buf);
if st <> 0 then
begin
// showmessage('校验写入数据发生错误')
// frmMsgBox.MessageBox('校验写入数据发生错误!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
strTemp := Buf;
if Trim(S) <> Trim(strTemp) then
begin
// showmessage('校验写入数据发生错误')
// frmMsgBox.MessageBox('校验数据发生错误!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
S := IntToHex(cfCard.UsedCount,4);
Byte1OfDate := Byte((cfCard.UsedDay shl 3) and $1F) + Byte((cfCard.UsedHour shr 2) and $07);
Byte2OfDate := Byte( ((cfCard.UsedHour shl 6) and $C0)) + Byte(cfCard.UsedMin and $3F);
S := S + IntToHex( Integer( Byte1OfDate),2) + IntToHex(Integer(Byte2OfDate),2);
strTemp := FloatToStr(cfCard.Money * 100);
strTemp := '000000' + strTemp;
strTemp := Copy(strTemp,Length(strTemp) - 5,6);
S := S + strTemp;
S := S + '00000000000000000000000000000000';
S := Copy(S,1,32);
st := rf_write_hex(ICDev,secnr*4+1,PChar(S));
if st <> 0 then
begin
// showmessage('写卡发生错误')
// frmMsgBox.MessageBox('写卡发生错误!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
st := rf_read_hex(ICDev,secnr*4+1,@Buf);
if st <> 0 then
begin
// showmessage('校验写入数据发生错误')
// frmMsgBox.MessageBox('校验写入数据发生错误!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
strTemp := Buf;
if Trim(S) <> Trim(strTemp) then
begin
// showmessage('校验写入数据发生错误')
// frmMsgBox.MessageBox('校验数据发生错误!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
rf_beep(ICDev,20);
// rf_halt(ICDev);
rf_exit(ICDev);
Result := True;
end;
function Card_GetInfo(device :String; secnr :integer;var cfcard : Tcard_Format) :Boolean;
var
st :LongWord;
snr : LongInt;
Buf : array[0..15] of char;
S :String;
Year,Month,Day,Hour,Min:Word; //使用时间
ICdev: LongInt;
Port :Integer;
begin
Result := False;
if Device = 'COM1' Then
Port := 0
else Port := 1;
ICDev := rf_init(Port,BAUD_RATE); //串口1 波特率115200
if ICDev <= 0 then
begin
// showmessage('发卡机连接错误')
// frmMsgBox.MessageBox('串口初始化出错!','',MB_OK or MB_ICONWARNING);
exit;
end;
{
st := rf_load_key_hex(ICDev,LOAD_PASSWD_MODE,0,PChar(LOAD_KEY));
if st <> 0 then
begin
showmessage('发卡机连接错误')
// frmMsgBox.MessageBox('加载密码出错!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
}
st := rf_card(ICDev,0,@snr);
if st <> 0 then
begin
// showmessage('发卡机上未发现卡片')
// frmMsgBox.MessageBox('发卡机上未发现考勤卡,请先放卡!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
st:=rf_authentication(icdev,0,secnr);
if st <> 0 then
begin
// showmessage('密码错误')
// frmMsgBox.MessageBox('密码错误!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
st := rf_read(ICDev,secnr*4+2,@Buf);
if st <> 0 then
begin
// showmessage('读卡出错')
// frmMsgBox.MessageBox('读卡信息出错!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
//卡号
cfcard.CardNo := '00000' + IntToStr((Integer(Buf[0]) shl 8 ) + Integer(Buf[1]));
cfcard.CardNo := Copy(cfcard.CardNo,Length(cfcard.CardNo) - 4,5);
//单位密码
cfcard.UnitPasswd := IntToHex(Integer(Buf[2]),2) + IntToHex(Integer(Buf[3]),2);
//卡类
cfCard.CardType := Byte(Buf[4]);
//卡标志
cfCard.CardFlag := Byte(Buf[5]);
st := rf_read(ICDev,secnr*4+1,@Buf);
if st <> 0 then
begin
// showmessage('读卡出错')
// frmMsgBox.MessageBox('读卡信息出错!','',MB_OK or MB_ICONWARNING);
// rf_halt(ICDev);
rf_exit(ICDev);
exit;
end;
//使用次数
cfCard.UsedCount := (Integer(Buf[0]) shl 8) + Integer(Buf[1]);
//卡余额
S := IntToHex(Integer(Buf[4]),2) + IntToHex(Integer(Buf[5]),2) + '.' + IntToHex(Integer(Buf[6]),2);
cfCard.Money := StrToFloat(S);
//使用时间
//日
cfCard.UsedDay := (Integer(Buf[2]) shr 3) and $1f;
//时
cfCard.UsedHour:= ((Integer(Buf[2]) and $07) shl 2) + ((Integer(Buf[3]) and $C0) shr 6);
//分
cfCard.UsedMin := (Integer(Buf[3]) and $3F);
rf_beep(ICDev,20);
// rf_halt(ICDev);
rf_exit(ICDev);
Result := True;
end;
function Card_IncMoney(Device :String; secnr : integer;Money : Extended) : Boolean;
var
cfcard : Tcard_Format;
begin
Result := False;
if( not Card_GetInfo(Device,secnr,cfcard) ) then exit;
cfcard.Money := cfcard.Money + Money;
if( not Card_SendCard(Device,secnr,cfcard) ) then exit;
Result := True;
end;
function Card_DecMoney(Device :String;secnr:integer; Money : Extended) : Boolean;
var
cfcard : Tcard_Format;
begin
Result := False;
if( not Card_GetInfo(Device,secnr,cfcard) ) then exit;
if cfcard.Money > Money then
cfcard.Money := cfcard.Money - Money
else
cfcard.Money := 0;
if( not Card_SendCard(Device,secnr,cfcard) ) then exit;
Result := True;
end;
function Card_ClearMoney(Device :String;secnr :integer) : Boolean;
var
cfcard : Tcard_Format;
begin
Result := False;
if( not Card_GetInfo(Device,secnr,cfcard) ) then exit;
cfcard.Money := 0;
if( not Card_SendCard(Device,secnr,cfcard) ) then exit;
Result := True;
end;
function Card_GetCardPhyID(Device :String) : String;
var
snr :longint;
st :Smallint;
ICdev: LongInt;
Port :Integer;
begin
Result := '';
if Device = 'COM1' Then
Port := 0
else if Device = 'COM2' Then
Port := 1
else if Device = 'COM3' Then
Port := 2
else port := 3;
ICDev := rf_init(Port,115200); //串口1 波特率115200
if ICDev < 0 then
begin
// ShowMessage('串口初始化出错!');
// showmessage('串口初始化出错') ;
// frmMsgBox.MessageBox('串口初始化出错!','',MB_OK or MB_ICONWARNING);
exit;
end;
st := rf_card(ICDev,1,@snr);
if st = 0 then
begin
Result := IntToHex(snr,8);
end;
rf_beep(ICDev,10);
// rf_halt(ICDev);
rf_exit(ICDev);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -