酒店门锁V10SDK接口Delphi-幽冥大陆(一百24)—东方仙盟

相关文件

核心代码

系统环境
Delphi 7.0
核心代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls,StrUtils, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Button1: TButton;
GroupBox2: TGroupBox;
Label13: TLabel;
Label16: TLabel;
edt_LockNo: TEdit;
edt_Dai: TEdit;
Label9: TLabel;
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
GroupBox3: TGroupBox;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label20: TLabel;
Label10: TLabel;
edt_coID: TEdit;
Button3: TButton;
Label8: TLabel;
Label6: TLabel;
Label7: TLabel;
BitBtn4: TBitBtn;
GroupBox4: TGroupBox;
BitBtn1: TBitBtn;
BitBtn3: TBitBtn;
BitBtn2: TBitBtn;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
BitBtn5: TBitBtn;
BitBtn6: TBitBtn;
edt_CardData: TEdit;
Label17: TLabel;
Label1: TLabel;
StatusBar1: TStatusBar;
Label11: TLabel;
edt_CardNo: TEdit;
Label12: TLabel;
cmdExit: TBitBtn;
BitBtn7: TBitBtn;
BitBtn8: TBitBtn;
BitBtn9: TBitBtn;
BitBtn10: TBitBtn;
BitBtn12: TBitBtn;
Label5: TLabel;
Label14: TLabel;
procedure cmdExitClick(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure RadioButton4Click(Sender: TObject);
procedure RadioButton3Click(Sender: TObject);
procedure BitBtn7Click(Sender: TObject);
procedure BitBtn8Click(Sender: TObject);
procedure BitBtn9Click(Sender: TObject);
procedure BitBtn10Click(Sender: TObject);
procedure BitBtn12Click(Sender: TObject);
private
{ Private declarations }
function rdCard: Boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
flagUSB: Integer; //发卡器类型,0--有驱USB发卡器,1--proUSB
st: Integer;
bufCard: Array[0..128] of char;
implementation
//读DLL版本号
function GetDLLVersion(sDllVer:PChar):Integer; stdcall;
external 'proRFL.DLL';
//打开USB
function initializeUSB(fUSB: Byte): Integer; stdcall;
external 'proRFL.DLL';
//关闭proUSB
procedure CloseUSB(fUSB: Byte); stdcall;
external 'proRFL.DLL';
//蜂鸣器
function Buzzer(fUSB:Byte;t: Integer):Integer; stdcall;
external 'proRFL.DLL';
//读卡数据
function ReadCard(fUSB:Byte;Buffer:PChar):Integer; stdcall;
external 'proRFL.DLL';
//客人卡
//int __stdcall GuestCard(uchar fUSB,int dlsCoID,uchar CardNo,uchar dai,uchar LLock,uchar pdoors,uchar BDate[10],uchar EDate[10],uchar RoomNo[8],uchar *cardHexStr)
function GuestCard(fUSB:Byte;dlsCoID:Integer;CardNo,dai,llock,pdoors:Byte;BDate,EDate,RoomNo:Pchar;CardHexStr:PChar):Integer; stdcall;
external 'proRFL.DLL';
//挂失卡
//int __stdcall LimitCard(uchar d12,int dlsCoID,uchar CardNo,uchar dai,uchar BDate[10],uchar LCardNo[4],uchar *cardHexStr)
function LimitCard(fUSB:Byte;dlsCoID:Integer;CardNo,dai:Byte;BDate,LCardNo:Pchar;CardHexStr:PChar):Integer; stdcall;
external 'proRFL.DLL';
//注销卡片
//int __stdcall CardErase(uchar fUSB,int dlsCoID,unsigned char *cardHexStr)
function CardErase(fUSB:Byte;dlsCoID:Integer;cardHexStr:PChar):Integer; stdcall;
external 'proRFL.DLL';
//读取卡片类型
//int __stdcall GetCardTypeByCardDataStr(unsigned char *CardDataStr,unsigned char *CardType)
function GetCardTypeByCardDataStr(cardHexStr,CardType:PChar):Integer; stdcall;
external 'proRFL.DLL';
//读取客人卡锁号
//int __stdcall GetGuestLockNoByCardDataStr(int dlsCoID,unsigned char *CardDataStr,unsigned char *LockNo)
function GetGuestLockNoByCardDataStr(dlsCoID: Integer;cardHexStr,LockNo:PChar):Integer; stdcall;
external 'proRFL.DLL';
//读取客人离店时间
//int __stdcall GetGuestETimeByCardDataStr(int dlsCoID,unsigned char *CardDataStr,unsigned char *eTime)
function GetGuestETimeByCardDataStr(dlsCoID: Integer;cardHexStr,eTime:PChar):Integer; stdcall;
external 'proRFL.DLL';
{$R *.dfm}
//读卡,有错误提示
//同时返回当前卡的ID(卡类型、卡号、发卡时间)--copy(bufCard,25,8)
function TForm1.rdCard: Boolean;
var
st: Integer;
Label
Exit_rdCard;
begin
Result:=False;
Screen.Cursor:=crHourGlass;
st:=ReadCard(flagUSB,bufCard);
if st<>0 then begin
Application.MessageBox(PCHAR('读卡失败'+#10+IntToStr(st)),'提示',MB_OK+MB_ICONERROR);
goto Exit_rdCard;
end;
if (copy(bufCard,5,2)<>'01')
OR (copy(bufCard,7,8)='AAAAAAAA')
then begin
Application.MessageBox(PCHAR('发卡器的感应区无卡'+#10+bufCard),'提示',MB_OK+MB_ICONWARNING);
goto Exit_rdCard;
end;
Result:=True;
Exit_rdCard:
Screen.Cursor:=crDefault;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
flagUSB:=1; //默认proUSB
DateTimePicker1.DateTime:=Now+1;
end;
procedure TForm1.cmdExitClick(Sender: TObject);
begin
Close;
end;
//恢复到默认值
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
edt_CardNo.Text:='0';
edt_LockNo.Text:='01020A';
edt_Dai.Text:='0';
end;
//读DLL版本号
procedure TForm1.BitBtn6Click(Sender: TObject);
var
st: Integer;
sa1: Array[0..128] of char;
begin
st:=GetDLLVersion(sa1);
StatusBar1.Panels[0].Text:=IntToStr(st);
StatusBar1.Panels[1].Text:=sa1;
if st=0 then
Application.MessageBox(Pchar('DLL版本号:'+StrPas(sa1)),'提示',MB_OK+MB_ICONINFORMATION);
end;
procedure TForm1.RadioButton3Click(Sender: TObject);
begin
flagUSB:=0; //有驱USB
end;
procedure TForm1.RadioButton4Click(Sender: TObject);
begin
flagUSB:=1; //proUSB
end;
//打开USB
procedure TForm1.Button1Click(Sender: TObject);
var
st: Integer;
begin
st:=initializeUSB(flagUSB); //0表示有驱USB, 1表示proUSB
if st<>0 then
Application.MessageBox(Pchar('打开USB失败'+#10+IntToStr(st)),'提示',MB_OK+MB_ICONWARNING)
else begin
Application.MessageBox('打开USB成功','提示',MB_OK+MB_ICONINFORMATION);
Button3.Enabled:=True;
GroupBox4.Enabled:=True;
end;
end;
//蜂鸣器
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Buzzer(flagUSB,50); //发卡器鸣叫50x10毫秒
end;
//注销卡片
procedure TForm1.BitBtn5Click(Sender: TObject);
var
st: Integer;
sa1: Array[0..128] of char;
begin
if not rdCard then Exit; //先读卡
st:=CardErase(flagUSB,StrToIntDef(edt_coID.Text,0),sa1);
if flagUSB=1 then Buzzer(flagUSB,20); //写卡后鸣叫一声,因为CardErase函数本身不会有响声
edt_CardData.Text:=StrPas(sa1);
if st<>0 then
Application.MessageBox(Pchar('注销失败'+#10+IntToStr(st)),'提示',MB_OK+MB_ICONWARNING)
else begin
Application.MessageBox('注销成功','提示',MB_OK+MB_ICONINFORMATION);
end;
end;
//卡片挂失
procedure TForm1.BitBtn10Click(Sender: TObject);
var
st: Integer;
limitNo: Array[0..3] of char;
sa1: Array[0..128] of char;
begin
if not rdCard then Exit; //先读卡
//挂失卡号: 6012D291
limitNo[0]:=chr($60);
limitNo[1]:=chr($12);
limitNo[2]:=chr($d2);
limitNo[3]:=chr($91);
st:=LimitCard(flagUSB,
StrToIntDef(edt_coID.Text,0), //dlsCoID
StrToIntDef(edt_CardNo.Text,0), //CardNo
StrToIntDef(edt_Dai.Text,0), //dai
PCHAR(FormatDateTime('YYMMDDHHMM',Now)),
limitNo,
sa1);
if flagUSB=1 then Buzzer(flagUSB,20); //写卡后鸣叫一声,因为LimitCard函数本身不会有响声
edt_CardData.Text:=StrPas(sa1);
if st<>0 then
Application.MessageBox(Pchar('调用挂失卡函数失败'+#10+IntToStr(st)),'提示',MB_OK+MB_ICONWARNING)
else begin
Application.MessageBox(Pchar('调用挂失卡函数成功'+#10+'本例子挂失卡号为: 6012D291'),'提示',MB_OK+MB_ICONINFORMATION);
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
st: Integer;
llock,pdoors: Byte;
sa1: Array[0..128] of char;
begin
if not rdCard then Exit; //先读卡
//反锁标志
llock:=0;
if RadioButton1.Checked then llock:=1;
pdoors:=0;
//退房时间
DateTimePicker1.Time:=DateTimePicker2.Time;
st:=GuestCard(flagUSB,
StrToIntDef(edt_coID.Text,0), //dlsCoID
StrToIntDef(edt_CardNo.Text,0), //CardNo
StrToIntDef(edt_Dai.Text,0), //dai
llock,pdoors,
PCHAR(FormatDateTime('YYMMDDHHMM',Now)), //发卡时间
PCHAR(FormatDateTime('YYMMDDHHMM',DateTimePicker1.DateTime)), //退房时间
PCHAR(edt_LockNo.Text), //锁号
sa1); //卡数据
if flagUSB=1 then Buzzer(flagUSB,20); //写卡后鸣叫一声,因为GuestCard函数本身不会有响声
edt_CardData.Text:=StrPas(sa1);
if st<>0 then
Application.MessageBox(Pchar('调用发卡函数失败'+#10+IntToStr(st)),'提示',MB_OK+MB_ICONWARNING)
else begin
Application.MessageBox('调用发卡函数成功','提示',MB_OK+MB_ICONINFORMATION);
end;
end;
//从现有卡片读取酒店标识
procedure TForm1.Button3Click(Sender: TObject);
var
i: Integer;
s: String;
begin
if not rdCard then Exit; //先读卡
if copy(bufCard,25,8)='FFFFFFFF' then begin
edt_coID.Text:='';
Application.MessageBox('此卡是空白卡,请换一张能开门的卡','提示',MB_OK+MB_ICONWARNING);
Exit;
end;
s:=copy(bufCard,11,4);
i:=StrToInt('$'+s) mod 16384;
s:=copy(bufCard,8,3);
i:=i+(StrToInt('$'+s) * 65536);
edt_coID.Text:=IntToStr(i);
end;
//读卡
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if not rdCard then Exit; //先读卡
edt_CardData.Text:=StrPas(bufCard);
Application.MessageBox(Pchar(('卡的流水号:'+copy(bufCard,25,8)
+chr(10)+'卡的唯一号:'+copy(bufCard,47,8))
),'提示',MB_OK+MB_ICONINFORMATION);
end;
procedure TForm1.BitBtn7Click(Sender: TObject);
var
CardType: Array[0..16] of char;
begin
if not rdCard then Exit; //先读卡
edt_CardData.Text:=StrPas(bufCard);
st:=GetCardTypeByCardDataStr(bufCard,CardType);
if st<>0 then
Application.MessageBox(Pchar(('卡数据串无效:'+IntToStr(st))),'提示',MB_OK+MB_ICONWARNING)
else
if CardType[0]='0' then
Application.MessageBox('授权卡','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='1' then
Application.MessageBox('记录卡','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='2' then
Application.MessageBox('房号设置卡','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='3' then
Application.MessageBox('时间设置卡','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='4' then
Application.MessageBox('限制卡[挂失卡]','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='5' then
Application.MessageBox('组号设置卡','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='6' then
Application.MessageBox('客人卡','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='7' then
Application.MessageBox('退房卡','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='8' then
Application.MessageBox('组控卡','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='9' then
Application.MessageBox('未知卡[无此类型]','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='A' then
Application.MessageBox('应急卡','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='B' then
Application.MessageBox('总控卡','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='C' then
Application.MessageBox('楼栋卡','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='D' then
Application.MessageBox('楼层卡','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='E' then
Application.MessageBox('未知卡[无此类型]','提示',MB_OK+MB_ICONINFORMATION)
else if CardType[0]='F' then
Application.MessageBox('空白卡','提示',MB_OK+MB_ICONINFORMATION);
end;
procedure TForm1.BitBtn8Click(Sender: TObject);
var
LockNo: Array[0..16] of char;
begin
if not rdCard then Exit; //先读卡
edt_CardData.Text:=StrPas(bufCard);
st:=GetGuestLockNoByCardDataStr(StrToIntDef(edt_coID.Text,0),bufCard,LockNo);
if st=0 then
Application.MessageBox(PChar('锁号:'+#10+copy(LockNo,1,6)),'提示',MB_OK+MB_ICONINFORMATION)
else if st=1 then
Application.MessageBox(PChar('卡数据串无效'+#10+bufCard),'提示',MB_OK+MB_ICONWARNING)
else
Application.MessageBox(Pchar('未知返回值'+#10+IntToStr(st)+#10+bufCard),'提示',MB_OK+MB_ICONWARNING);
end;
procedure TForm1.BitBtn9Click(Sender: TObject);
var
ETime: Array[0..16] of char;
begin
if not rdCard then Exit; //先读卡
edt_CardData.Text:=StrPas(bufCard);
st:=GetGuestETimeByCardDataStr(StrToIntDef(edt_coID.Text,0),bufCard,ETime);
if st=0 then
Application.MessageBox(PChar('离店时间:'+#10+ETime),'提示',MB_OK+MB_ICONINFORMATION)
else if st=1 then
Application.MessageBox(PChar('卡数据串无效'+#10+bufCard),'提示',MB_OK+MB_ICONWARNING)
else
Application.MessageBox(Pchar('未知返回值'+#10+IntToStr(st)+#10+bufCard),'提示',MB_OK+MB_ICONWARNING);
end;
//关闭proUSB
procedure TForm1.BitBtn12Click(Sender: TObject);
begin
CloseUSB(flagUSB);
Application.MessageBox(PChar('USB端口已关闭,不能进行USB操作'+#10+'如果需要操作USB,请先打开USB'),'提示',MB_OK+MB_ICONINFORMATION);
end;
end.
人人皆为创造者,共创方能共成长
每个人都是使用者,也是创造者;是数字世界的消费者,更是价值的生产者与分享者。在智能时代的浪潮里,单打独斗的发展模式早已落幕,唯有开放连接、创意共创、利益共享,才能让个体价值汇聚成生态合力,让技术与创意双向奔赴,实现平台与伙伴的快速成长、共赢致远。
原创永久分成,共赴星辰大海
原创创意共创、永久收益分成,是东方仙盟始终坚守的核心理念。我们坚信,每一份原创智慧都值得被尊重与回馈,以永久分成锚定共创初心,让创意者长期享有价值红利,携手万千伙伴向着科技星辰大海笃定前行,拥抱硅基 生命与数字智能交融的未来,共筑跨越时代的数字文明共同体。
东方仙盟:拥抱知识开源,共筑数字新生态
在全球化与数字化浪潮中,东方仙盟始终秉持开放协作、知识共享的理念,积极拥抱开源技术与开放标准。我们相信,唯有打破技术壁垒、汇聚全球智慧,才能真正推动行业的可持续发展。
开源赋能中小商户:通过将前端异常检测、跨系统数据互联等核心能力开源化,东方仙盟为全球中小商户提供了低成本、高可靠的技术解决方案,让更多商家能够平等享受数字转型的红利。
共建行业标准:我们积极参与国际技术社区,与全球开发者、合作伙伴共同制定开放协议 与技术规范,推动跨境零售、文旅、餐饮等多业态的系统互联互通,构建更加公平、高效的数字生态。
知识普惠,共促发展:通过开源社区 、技术文档与培训体系,东方仙盟致力于将前沿技术转化为可落地的行业实践,赋能全球合作伙伴,共同培育创新人才,推动数字经济 的普惠式增长
阿雪技术观
在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者 。无论是分享代码、撰写技术博客,还是参与开源项目 维护改进,每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地,我们携手在此探索硅基 生命,为科技进步添砖加瓦。
Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Don't just be the one reaping all the benefits; step up and be a contributor too. Whether you're tossing out your code snippets , hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. We're gonna team up and explore the whole silicon - based life thing, and in the process, we'll be fueling the growth of technology
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)