游泳馆柜锁参数8.5接口(Delphi)-幽冥大陆(一百30)—东方仙盟
游泳馆柜锁接口
系统环境
IDE:Delphi 8
语言:Delphi
执行IDE:仙盟创梦IDE
核心代码
完整代码
unit MainFormUnit; { } interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Registry, StdCtrls, ExtCtrls, Grids, Spin, mmsystem, shellapi, ComCtrls, Variants, Dialogs, OleCtrls, Buttons, Mask,StrUtils, Menus, DateUtils; const WM_USBTIMERMESSAGE = WM_USER + 401; NO_ERROR=0; DEVICE_NOT_PRESENT=1; NO_DATA_AVAILABLE=2; INVALID_BAUDRATE=3; OVERRUN_ERROR=4; INVALID_DATABITS=5; INVALID_PARITY=6; INVALID_STOPBITS=7; type TMainForm = class(TForm) Button2: TButton; Edit2: TEdit; Button5: TButton; Edit4: TEdit; Button6: TButton; Button7: TButton; Edit5: TEdit; Memo1: TMemo; Button3: TButton; Edit3: TEdit; Label2: TLabel; ComboBox1: TComboBox; Button1: TButton; Label1: TLabel; Label4: TLabel; GetRTCBtn: TButton; TxtRTC: TEdit; SetRTCBtn: TButton; GetHandTypeBtn: TButton; CMBHandType: TComboBox; TxtCustomID: TEdit; Label5: TLabel; Label6: TLabel; TxtCustomID2: TEdit; MakeOneTimeCardBtn: TButton; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure PortOPenBtnClick(Sender: TObject); procedure CloseReaderBtnClick(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Edit4KeyPress(Sender: TObject; var Key: Char); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Edit3KeyPress(Sender: TObject; var Key: Char); procedure Button1Click(Sender: TObject); procedure Memo1DblClick(Sender: TObject); procedure GetRTCBtnClick(Sender: TObject); procedure SetRTCBtnClick(Sender: TObject); procedure GetHandTypeBtnClick(Sender: TObject); procedure MakeOneTimeCardBtnClick(Sender: TObject); private { Private declarations } public { Public declarations } hComm:HWND; ReaderOpen:Boolean; end; var MainForm: TMainForm; implementation {$R *.DFM} {$WARN UNSAFE_CODE OFF} {$WARN UNSAFE_TYPE OFF} {$WARN UNSAFE_CAST OFF} const ClosedApp:boolean=false; PreciseTimer:integer=0; DLLPath='RF003Reader.dll'; function OpenReader(COMMNAME:integer):HWND; stdcall; external DLLPath name 'OpenReader'; function CloseReader():HWND; stdcall; external DLLPath name 'CloseReader'; function ReadRFID(Var RFIDData:Byte):DWORD; stdcall; external DLLPath name 'ReadRFID'; function SetCard(Var RFIDData:Byte):DWORD; stdcall; external DLLPath name 'SetCard'; function ClearCard(Var RFIDData:Byte):DWORD; stdcall; external DLLPath name 'ClearCard'; function GetReaderVersion(Var ReaderVersion:Byte):DWORD; stdcall; external DLLPath name 'GetReaderVersion'; function GetHandId(Var HandId:Byte):DWORD; stdcall; external DLLPath name 'GetHandId'; function SetHandId(Var HandId:Byte):DWORD; stdcall; external DLLPath name 'SetHandId'; function GetRTC(var RTC:byte):DWORD; stdcall;external DllPath name 'GetRTC'; function SetRTC(var RTC:byte):DWORD; stdcall;external DllPath name 'SetRTC'; function GetHandType(Var HandType:Byte):DWORD; stdcall; external DLLPath name 'GetHandType'; function SetHandType(Var HandType:Byte):DWORD; stdcall; external DLLPath name 'SetHandType'; //function ReadRFID(hCom:HWND):DWORD; stdcall; external DLLPath name 'ReadRFID'; //function OpenConnection(VAR COMMNAME:BYTE):BYTE; stdcall external DLLPath name 'OpenConnection'; //function usb_devices(dev: pusb_dev_handle): pusb_device; cdecl; external 'libusb0.dll' name 'usb_device'; procedure TMainForm.FormCreate(Sender: TObject); begin Application.HintColor:=clYellow; Application.HintPause:=0; Application.HintHidePause:=20000; ReaderOpen:=False; end; procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin ClosedApp:=true; end; procedure TMainForm.PortOPenBtnClick(Sender: TObject); var comm:integer; begin hcomm:=OpenReader(1); if hcomm>0 then begin // CloseReaderBtn.Enabled :=True; // memo1.Lines.Add('USB接口上发现RF003读卡器!'); // ReaderOpen:=True; end else begin memo1.Lines.Add('USB接口未找到RF003读卡器!'); end; end; procedure TMainForm.CloseReaderBtnClick(Sender: TObject); begin if hcomm>0 then begin //CloseReader(); //CloseReaderBtn.Enabled :=False; //PortOPenBtn.Enabled :=True; //ReaderOpen:=False; //memo1.Lines.Add('读卡器已关闭!'); end; end; procedure TMainForm.Button5Click(Sender: TObject); var //tmpstr:array [0..10] of byte; tmpRFID:array [0..5] of byte; Readret:DWORD; begin Memo1.clear; //Readret:=ReadRFID(Hcomm,tmpRFID[0]); Readret:=ReadRFID(tmpRFID[0]); edit4.Text:=''; if ((ReadRet=0)) then begin edit4.text:=IntTohex(tmpRFID[0],2)+IntTohex(tmpRFID[1],2)+IntTohex(tmpRFID[2],2)+IntTohex(tmpRFID[3],2); end else memo1.Lines.Add('Error:'+IntToStr(readret)); end; procedure TMainForm.Button7Click(Sender: TObject); var //tmpstr:array [0..10] of byte; tmpRFID:array [0..5] of byte; Readret:DWORD; begin memo1.Clear; Button7.Enabled :=false; Readret:=ClearCard(tmpRFID[0]); edit5.Text:=''; if ((ReadRet=0)) then begin edit5.text:=IntTohex(tmpRFID[0],2)+IntTohex(tmpRFID[1],2)+IntTohex(tmpRFID[2],2)+IntTohex(tmpRFID[3],2); end else memo1.Lines.Add('Error:'+IntToStr(readret)); Button7.Enabled :=True; end; procedure TMainForm.Button6Click(Sender: TObject); var //tmpstr:array [0..10] of byte; tmpRFID:array [0..5] of byte; Readret:DWORD; dd:Byte; rfid:string; begin memo1.Clear; rfid:=rightstr('00000000'+edit4.text,8); dd:= StrToInt('$'+leftstr(rfid,2)); tmpRFID[0]:= dd; dd:= StrToInt('$'+rightstr(leftstr(rfid,4),2)); tmpRFID[1]:= dd; dd:= StrToInt('$'+rightstr(leftstr(rfid,6),2)); tmpRFID[2]:= dd; dd:= StrToInt('$'+rightstr(rfid,2)); tmpRFID[3]:=dd; Readret:=SetCard(tmpRFID[0]); if ((ReadRet=0)) then begin edit4.text:=IntTohex(tmpRFID[0],2)+IntTohex(tmpRFID[1],2)+IntTohex(tmpRFID[2],2)+IntTohex(tmpRFID[3],2); end else memo1.Lines.Add('Error:'+IntToStr(readret)); end; procedure TMainForm.Edit4KeyPress(Sender: TObject; var Key: Char); begin if not(key in['0'..'9','A'..'F','a'..'f',#8,#13]) then begin key:=#0; messageBeep(1); end else begin key:=upcase(key); end; end; procedure TMainForm.Button2Click(Sender: TObject); var //tmpstr:array [0..10] of byte; tmpVersion:array [0..9] of byte; GetRet:DWORD; begin Memo1.clear; GetRet:=GetReaderVersion(tmpVersion[0]); edit2.Text:=''; if (GetRet=0) then begin edit2.text:=chr(tmpVersion[1])+chr(tmpVersion[2])+chr(tmpVersion[3])+chr(tmpVersion[4]); TxtCustomID.Text:= IntToHex(tmpVersion[7],2)+ IntToHex(tmpVersion[8],2); end else memo1.Lines.Add('Error:'+IntToStr(GetRet)); end; procedure TMainForm.Button3Click(Sender: TObject); var //tmpstr:array [0..10] of byte; tmpHandId:array [0..5] of byte; Readret:DWORD; begin memo1.Clear; Button3.Enabled :=false; Readret:=GetHandId(tmpHandId[0]); edit3.Text:=''; if ((ReadRet=0)) then begin edit3.text:=IntTohex(tmpHandId[0],2)+IntTohex(tmpHandId[1],2); if (tmpHandId[2]>5 ) then combobox1.ItemIndex:=5 else combobox1.ItemIndex :=tmpHandId[2]; memo1.Lines.Add('通道内码:'+IntToStr(tmpHandId[2])); end else memo1.Lines.Add('Error:'+IntToStr(readret)); Button3.Enabled :=True; end; procedure TMainForm.Edit3KeyPress(Sender: TObject; var Key: Char); begin if not(key in['0'..'9','A'..'F','a'..'f',#8,#13]) then begin key:=#0; messageBeep(1); end else begin key:=upcase(key); end; end; procedure TMainForm.Button1Click(Sender: TObject); var tmpHandId:array [0..5] of byte; RetVal:DWORD; tmp:integer; begin tmp:=StrToInt('0x0'+edit3.text); tmpHandId[0]:=tmp div 256; tmpHandId[1]:=tmp mod 256; tmpHandId[2]:=combobox1.ItemIndex; //原定义48=男宾,49女宾,50男贵宾,51,女贵宾... //=0,通开,无区域限制 tmpHandId[3]:= tmpHandId[0] xor tmpHandId[1] xor tmpHandId[2]; RetVal:=SetHandId(tmpHandId[0]); if (RetVal=0) then memo1.Lines.Add('写手牌码成功!') else memo1.Lines.Add('写手牌异常:'+IntToStr(RetVal)); end; procedure TMainForm.Memo1DblClick(Sender: TObject); begin Memo1.Clear; end; procedure TMainForm.GetRTCBtnClick(Sender: TObject); var tmpRTC:array [0..6] of byte; RetVal:DWORD; begin Memo1.Clear; GetRTCBtn.Enabled :=False; RetVal:=GetRTC(tmpRTC[0]); if (RetVal=0) then Begin txtRTC.Text:=IntTohex(tmpRTC[0],2)+'/'+IntTohex(tmpRTC[1],2)+'/' +IntTohex(tmpRTC[2],2)+' '+IntTohex(tmpRTC[3],2)+':' +IntTohex(tmpRTC[4],2)+':'+IntTohex(tmpRTC[5],2); Memo1.Lines.add('读RTC正常!'); end else Memo1.Lines.add('读RTC异常!'); GetRTCBtn.Enabled :=True; end; procedure TMainForm.SetRTCBtnClick(Sender: TObject); var year,month,day:word; Hour,Min,Sec,MSec: Word; now1:TDateTime; temp:integer; RTCYear,RTCMonth,RTCDay,RTCHour,RTCMin,RTCSec:string; tmpRTC:array [0..6] of byte; RetVal:DWORD; begin SetRTCBtn.Enabled :=False; Memo1.Clear; now1:=date(); DecodeDate(now1,year,month,day); now1:=time(); DecodeTime(now1, Hour, Min, Sec, MSec); RTCYear:=Rightstr('0'+inttostr(year mod 100),2); RTCMonth:=Rightstr('0'+inttostr(month),2); RTCDay:=Rightstr('0'+inttostr(day),2); RTCHour:=Rightstr('0'+inttostr(Hour),2); RTCMin:=Rightstr('0'+inttostr(Min),2); RTCSec:=Rightstr('0'+inttostr(Sec),2); temp:= StrToInt(RTCYear); tmpRTC[0]:=(temp div 10)*16+(temp mod 10); temp:= StrToInt(RTCMonth); tmpRTC[1]:=(temp div 10)*16+(temp mod 10); temp:= StrToInt(RTCDay); tmpRTC[2]:=(temp div 10)*16+(temp mod 10); temp:= StrToInt(RTCHour); tmpRTC[3]:=(temp div 10)*16+(temp mod 10); temp:= StrToInt(RTCMin); tmpRTC[4]:=(temp div 10)*16+(temp mod 10); temp:= StrToInt(RTCSec); tmpRTC[5]:=(temp div 10)*16+(temp mod 10); RetVal:=SetRTC(tmpRTC[0]); if (RetVal=0) then Memo1.Lines.add('设置RTC正常!') else Memo1.Lines.add('设置RTC出错!'); SetRTCBtn.Enabled :=True; end; procedure TMainForm.GetHandTypeBtnClick(Sender: TObject); var //tmpstr:array [0..10] of byte; tmpHandType:array [0..5] of byte; Readret:DWORD; begin Memo1.clear; Readret:=GetHandType(tmpHandType[0]); if ((ReadRet=0)) then begin //正确读到卡类型参数 //memo1.Lines.Add('Error:'+IntToStr(tmpHandType[0])); //memo1.Lines.Add('Error:'+IntToStr(tmpHandType[1])); if (tmpHandType[0] xor tmpHandType[1] xor tmpHandType[2]=tmpHandType[3]) then begin TxtCustomID2.Text:= IntToHex(tmpHandType[0],2)+ IntToHex(tmpHandType[1],2); end; if tmpHandType[2]=$45 then CMBHandType.ItemIndex:=1; //宾客卡 if tmpHandType[2]=$42 then CMBHandType.ItemIndex:=2; //宾客消牌卡 if tmpHandType[2]=$52 then CMBHandType.ItemIndex:=3; //宾客替换卡 if tmpHandType[2]=$80 then CMBHandType.ItemIndex:=4; //服务卡 if tmpHandType[2]=$90 then CMBHandType.ItemIndex:=5; //经理卡 if tmpHandType[2]=$A0 then CMBHandType.ItemIndex:=6; //设置卡 if tmpHandType[2]=$B0 then CMBHandType.ItemIndex:=7; //软件授权卡 //memo1.Lines.Add('Error:'+IntToStr(tmpHandType[2])); //memo1.Lines.Add('Error:'+IntToStr(tmpHandType[3])); end else memo1.Lines.Add('Error:'+IntToStr(readret)); end; procedure TMainForm.MakeOneTimeCardBtnClick(Sender: TObject); var tmpHandType:array [0..5] of byte; RetVal:DWORD; begin // memo1.Lines.Add('正在写经理卡,经理卡制作成功后,需要重新写入即将开锁的衣柜手牌码!'); //tmpHandType[0]:=0; //tmpHandType[1]:=0; //tmpHandType[2]:=$90; // tmpHandType[3]:= tmpHandType[0] xor tmpHandType[1] xor tmpHandType[2]; //RetVal:=SetHandType(tmpHandType[0]); //if (RetVal=0) then memo1.Lines.Add('写经理卡成功!') // else memo1.Lines.Add('写经理卡异常:'+IntToStr(RetVal)); 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
