




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
依时利IC卡考勤门禁机接口C#实现1. 依时利这个坑爹的货,竟然不提供C#方面的Demo支持!哎 俺自己写一个,存一下怕以后忘记哈哈!2. 首先创建一个winfrom项目名称为:edaxKQ (仅供参考,俺乱命名的不准笑话小弟哈哈!)如图:由于依时利提供的接口是delphi编写的,所以嘛不能直接引用,需要借助: DllImport(EastRiver.dll) 方式引入: 将依时利提供的EastRiver.dll文件拷贝到项目的binDebug目录下(当然也可以放别的目录 只要你能让dllImport找到是吧哈哈)。3. 好了到这里前期准备做好了,现在我们开始编写连接卡机和端口连接的接口;(其实接口可以通过依时利提供的API找到,但是实在有点坑爹)4. 连接接口实现打开依时利API我们可以找到连接接口,在C#中进行重写,(名字能错哦,好吧我废话了,重写当然不能错)/ / 联机卡机: / 其他值 成功返回端口句柄 / / -1 端口无效或真正使用 / / 0 无法联机 / / COM端口号 / 端口波特率 / 卡机序号 / DllImport(EastRiver.dll) public static extern IntPtr ConnectClock(int port, int BaudRate, int clock_id);重写了接口后,我们打开Form1窗体,在里面创建对应参数的输入和测试按钮,如图:(对应参数这里就不解释了哦!做考勤机开发的应该都知道了吧哈哈!啊对了卡机序列号解释下, 开启依时利卡机后,在屏幕上可以看到一个序列号便是卡机序列号了,一般都是1),双击测试联机按钮,进入代码体,调用联机接口: _port = Convert.ToInt32(this.txtCom.Text.ToString(); _BaudRate =Convert.ToInt32(this.txtBaudRate.Text.ToString(); _clock_id = Convert.ToInt16(this.txtClock.Text.ToString(),16); _hPort = ICheck.ConnectClock(_port,_BaudRate,_clock_id); if (_hPort.ToInt32() != 0) MessageBox.Show(联机成功!); else MessageBox.Show(联机失败!); 看到这里有些童鞋可能不知道上面那些参数是干嘛的,别的不解释了都是定义的变量, 这里介绍下 _hPort变量, 这个变量是在接口联通的时候,存储由接口返回的COM口句柄,在后面的使用需要联机操作的接口中,都需要使用到该变量中存储的Com口句柄;(说白了就等于是一个已经打开的SQL连接,这个貌似好理解点)到这里我们就联机成功了。5. 端口端口连接当然有连接就会有端口么,当操作卡机完毕后就需要关闭端口和断开端口和卡机连接,实现API接口如下:/ / 断开联机: / False失败/True成功 / / 端口句柄-通过ConnectClock获取 / DllImport(EastRiver.dll) public static extern Boolean DisConnectClock(IntPtr hPort);好吧我承认这个简单,记得上面我们说过 _hPort这个变量是存储什么的吧。对就是一个连接,这里要断开这个连接,就把他传进去就行了。调用代码如下:private void 关闭端口_Click(object sender, EventArgs e) if (ICheck.DisConnectClock(_hPort) MessageBox.Show(端口已关闭!); 现在实现了联通和关闭卡机,我们试着去读取一下卡机信息6. 读取卡机时间我们先在窗体上画一个存放时间的文本框先:然后找到API中读取时间的函数,(貌似没提供,我是打开他们delphi的接口包才找到的)实现如下:/ / 获取卡机时间-需要联机 : / False失败/True成功 / / 端口句柄-通过ConnectClock获取 / 时间变量存放返回时间 / DllImport(EastRiver.dll) public static extern Boolean ReadClockTime(IntPtr hPort, ref DateTime curTime);由于需要返回值,所以我们这里的curTime参数使用的 ref关键字(不懂意思的问百度哦),返回值是DateTime类型,(在原接口里面不是这样,重写了改变了一下,不影响功能,后面很多也是需要修改的,应该不同语言的数据类型不同吗呵呵)双击读卡机时间按钮,实现代码如下: / / 卡机时间 / DateTime _dTime;private void 读卡机时间_Click(object sender, EventArgs e) if (ICheck.ReadClockTime(_hPort, ref _dTime) this.txtTime.Text = _dTime.ToString(); else MessageBox.Show(读取时间失败!); 先定义一个存储时间的变量,然后调用读取卡机时间的函数,传入之前说过的_hport句柄是吧(打开后不要关闭哦因为这些接口都是需要在联机状态下进行的),传入接收参数 ref _dTime ,来完成接收返回值。完成后显示到窗体搞定。你成功了么?7. 写卡和读卡 好吧现在我们干点实际的;写卡,IC卡当然是要存储个人信息的是吧,既然要存储就要写入,我们先找到API中的写入卡机的接口,重写后如下:/ / 写入卡机-需要联机 : / False失败/True成功 / / 端口句柄-通过ConnectClock获取 / 写入卡号 / 写入名称 / 写入金额 / 写入充值次数 / IC卡格式:固定为830 / DllImport(EastRiver.dll) public static extern Boolean WriteICCard(IntPtr hPort, string CardNo, string CardName, int Money, int Times, int Ver);参数不解释了,说下 ver这个参数,我使用的是981c这款IC卡机,他的IC卡格式是830,别的格式根据API上提供的值进行修改(上面有写注意看哦)。创建窗体如下图:双击发卡按钮,实现发卡:#region 发卡 private void 发卡_Click(object sender, EventArgs e) _CardNo = this.txtCardNo.Text.ToString(); _CardName = this.txtCardName.Text.ToString(); _money = Convert.ToInt32(this.txtMoney.Text.ToString(); _times = 0; if (ICheck.WriteICCard(_hPort, _CardNo, _CardName, _money, _times, Convert.ToInt32(this.txtVer.Text) MessageBox.Show(写卡成功!); else MessageBox.Show(写卡失败!); #endregion发卡成功后,可以试着在卡机上刷一下,会发现能看到刚刚写进去的卡的名字了吧,但是显示的是非法门禁,咱先不管他,晚点再给他开门,先读卡试试;找到读卡API接口,实现如下:/ / 读卡机-需要联机 : / False失败/True成功 / / 端口句柄-通过ConnectClock获取 / 卡号变量存储返回卡号 / 名称变量存储返回名称 / 金额变量存储返回金额 / 充值次数变量返回充值次数 / IC卡格式:默认为830 / DllImport(EastRiver.dll) public static extern Boolean ReadICCard(IntPtr hPort, StringBuilder CardNo, StringBuilder CardName, ref int Money, ref int Times, ref int Ver);实现读卡接口的时候我们要注意,这里有几个StringBuilder的参数,为什么用这个呢,原因是这个接口在Delphi中实现是使用的Pchar类型参数,这个类型的参数只能和StringBuilder类型的参数匹配,不然奶奶的就报错。点击读卡按钮进行读卡: private void 读卡_Click(object sender, EventArgs e) StringBuilder _Card = new StringBuilder(1024); StringBuilder _Name = new StringBuilder(1024); int _Var = Convert.ToInt32(this.txtVer.Text); if (ICheck.ReadICCard(_hPort, _Card, _Name, ref _money, ref _times, ref _Var) this.txtCardNo.Text = _Card.ToString(); this.txtCardName.Text = _Name.ToString(); else MessageBox.Show(读卡信息失败!); 这里我只定义了两个变量显示到窗体,卡号和名称,其实金额啊充值次数啊也是可以显示的,因为我们也传递了ref修身的变量了是吧。需要就自己整个文本框显示一下;8. 白名单黑名单 完成了读写卡,现在需要设置一下白名单和黑名单,这个连个接口比较简单,我就不做解释了直接贴代码:/ / 设置白名单-需要联机 : / False失败/True成功 / / 端口句柄-通过ConnectClock获取 / 卡号 / 工号-IC卡不使用设置为Null / 姓名 / DllImport(EastRiver.dll) public static extern Boolean SetAllowedCard(IntPtr hPort, string card, string empId, string EmpName);实现加入白名单:private void 加入白名单_Click(object sender, EventArgs e) _CardNo = this.txtCardNo.Text; if (ICheck.SetAllowedCard(_hPort, _CardNo, null, ) MessageBox.Show(加入白名单成功!); else MessageBox.Show(加入白名单失败!); 实现加入黑名单接口 / / 设置黑名单-需要联机 : / False失败/True成功 / / 端口句柄-通过ConnectClock获取 / 卡号 / DllImport(EastRiver.dll) public static extern Boolean SetBlackCard(IntPtr hPort, string card);实现加入黑名单private void 加入黑名单_Click(object sender, EventArgs e) _CardNo = this.txtCardNo.Text; if (ICheck.SetBlackCard(_hPort, _CardNo) MessageBox.Show(加入黑名单成功!); else MessageBox.Show(加入黑名单失败!); 9. 门禁之前我们说了写卡了可以刷卡了,但是不能开门是吧,现在我们就写一下加入门禁的接口;(这个门禁的比较烦,这里只做一个通行门禁,就是啥时候来刷一下都开门的),找到API实现门禁接口如下:/ / 设置门禁-需要联机 : / False失败/True成功 / / 端口句柄-通过ConnectClock获取 / 卡号格式:IC默认为830 / 卡号 / 四字节密码:可默认为0000 / 开门权限电锁控制:可默认为1 / 通行开始时间:可默认为0000 / 通行结束时间:可默认为0000 / 工号:可默认为9999 / DllImport(EastRiver.dll) public static extern Boolean SetDoorPassCardDE(IntPtr hPort, int style, string Card, string Code, int Right, string BeginPass, string EndPass, string EmpId);看到一堆参数恼火吧,其实都是给默认值就可以了,依时利的那份API里面写的参数注释让我百思不得其解,所以毅然抛弃了哈哈。实现如下:private void 门禁_Click(object sender, EventArgs e) _CardNo = this.txtCardNo.Text; if (ICheck.SetDoorPassCardDE(_hPort, Convert.ToInt32(this.txtVer.Text), _CardNo, 0000, 1, 0000, 0000, 9999) MessageBox.Show(打开门禁成功!); else MessageBox.Show(打开门禁失败!); 是吧其实也蛮简单的。只需要传递一个 _hPort 打开的端口句柄,和一个读取出来的卡号,和一个IC卡的类型,记得吧830。 别的都给默认值就行了。完成后,你再刷卡试试,是不是显示欢迎来搞了啊!(好吧我邪恶了一下)10. 数据采集考勤机吗当然需要采集数据啦,这里掩饰一下一次性读取本机所有记录的方式。找到API实现接口如下: / / 一次性读取所有记录到指定文件-需要联机 : / / 0 :机具内记录以空 / 0 :成功读取记录数 / -1,-2 :串行通信错误 / -3 :命令字异常或效验错误 / -4 :用户终止或未完成接
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 户外早教活动策划方案
- 关于智能开关的营销方案
- 海底捞店面营销方案设计
- 青海规划馆设计施工方案
- 徐州胶粘石施工方案审批
- 心理健康咨询方案
- 商城代金券营销方案策划
- 船营区装修方案咨询
- 建筑穿墙螺杆处理方案设计
- 余姚社团活动策划方案
- 星途汽车全新星纪元ET增程四驱上市营销整合方案
- 老年人如何预防骨质疏松
- 国家职业标准 6-11-01-03 化工总控工S (2025年版)
- 《肾淋巴瘤》课件:肾脏淋巴瘤的病理与治疗
- 电子病历标准化-全面剖析
- 2024心理咨询师考试心理危机干预知识与试题及答案
- 公共安全视频监控建设联网应用(雪亮工程)运维服务方案纯方案
- 应用PDCA降低抗生素的使用率及使用强度
- 2025年上海市闵行区区管国企招聘笔试参考题库含答案解析
- 海绵城市施工方案
- T-SAASS 164-2024 盐碱地蛇床绿色轻简化种植技术规程
评论
0/150
提交评论