1、Temic 卡(感应式)门锁接口开发包使用说明一、Temic 卡门锁工作原理卡中主要有作业流水号、时间长度两种类型参数来决定开启房门的条件:1 更换作业流水号标志,其中作业流水号是由日期时间中的年月日时+1 小时内所发卡的序号组成。1 小时内的发卡序号需由开发人员在程序设计时做好分析判断,并确认可用的序号。卡中作业流水号必须大于等于门锁电路板中作业流水号,否则将导致开门失败。2 取消在用的客人卡(可解释为挂失客人卡)标志使用方法:单个客人必须置对应标志位为 1;多个客人住同一间房时的情况可举例说明如下:若一个房间同时发三张卡,第一张卡对应挂失标志为需置为 1,后两张卡该挂失标志位需置为 0。3
2、 最重要的是需在接口软件中写客人卡之前,应先将工具软件 GetLockID.exe 拷贝至门锁软件工作目录下,然后再运行 GetLockID.exe 文件,运行后选择对应的门锁软件的版本号,然后获取门锁软件中的房号与门锁编号对应表文件,再将此文件中的房号门锁编号关系,改成自已的对应表; 或在门锁软件中每一房号写一遍客人卡,然后一一读出客人卡的门锁编号来建立你自己的房号门锁编号对应库,剩下的过程就简单了。4 特别注意,每张卡的作业流水号务必保持唯一并且存挡,它是开门查询的依据。二、函数声明原型接口动态库文件:LCRFRW_SDK.dll1 打开串口int mif_selecom(int com,
3、int baud);2 读卡int tem_readdoorcard_sdk(LPSTR BH, LPSTR buff)返回 10 个字符的门锁编号;3 写卡int tem_writedoorcard_sdk(LPSTR BH, LPSTR fksj,int xh,int sjdw,int sjlength,bool gs)写 10 个字符的门锁编号:4 关闭串口int mif_closecom(void);三、用户接口软件开发使用步骤1.将获取房号门锁编号工具文件 GetLockID.exe 拷贝至门锁软件工作目录下。2.运行 GetLockID.exe 文件,选择对应门锁软件版本,然后按获
4、取按钮,得出房号门锁编号对应关系表,获取的此表文件存放于门锁软件的工作目录下的LockID.ini,用户可直接将此文件拷贝至接口工作目录下,接口软件可直接对此表进行操作,或另建自已的数据库表进行读操作。LockID.ini 文件说明:此文件中左边是房号,右边是对应此房号的门锁编号。3.将门锁接口文件 LCRFRW_SDK.dll 拷贝至接口程序工作目录下。4.接上专用的接口读写器,安装 USB 读写器驱动(运行 USBDriver_RW.exe 驱动程序即可自动完成)。5.使用专用的接口读写器,否则接口函数在读写卡时将返回错误代码值 129。6.建立自己的房号门锁编号对应关系表,这里有两种方法
5、:A 利用 GetLockID.exe 工具软件获取的房号与门锁编号对应关系表,将此对应关系表填入自已的房号门锁编号数据表中,或直接使用此表;BC 利用 SDK 接口读卡函数或演示程序读出卡片数据中的门锁编号部分。房号门锁编号对应关系表至少应包括门锁编号及所对应的房号字段,门锁编号为10 个字符长度的字段,如下表(此表是假设用户建立起的自已的房号数据表)门锁编号 房号 Abcd0001 101 Efgh0002 102 Acda0003 201 Bded0004 202 . . .表 1注:存入的门锁编号字段值用户不要关心它是否具务一定的规律性的,其值是门锁软件自动分配的一个没有规律的门锁编号
6、,用户只需将此编号作为写卡参数即可。门锁系统就是用此编号对房门进行编号且为唯一一标识号,它是决定是否能开门的条件之一。7.开始读卡,将读出卡中的门锁编号及日期时间序号,读出的门锁编号为 10 个字符。在写卡之前用户可以不进行读卡,根据实际应用情况用户可选择读卡或不读卡。8.输入房号,接口软件需从房号数据表找到此房号所在记录所对应的门锁编号字段值,如输入房号 201 则接口软件将找到门锁编号为 Acda0001,用此门锁编号作为写卡函数中的门锁编号的参数值。9.将当前时间、发卡序号(1 小时内) 、时间单位、对应时间单位的时间长度、是否挂失在用的客人卡标志等内容按规定的格式作为写客人卡时的对应参
7、数。10.开始将已准备好的参数数据写入卡中。接口程序的函数调用的步骤一般为:A 打开串口int mif_selecom(int com,int baud);B 读卡int tem_readdoorcard_sdk(LPSTR BH, LPSTR buff)返回 10 个字符的门锁编号;C 写卡int tem_writedoorcard_sdk(LPSTR BH, LPSTR fksj,int xh,int sjdw,int sjlength,bool gs)写 10 个字符的门锁编号;D 关闭串口int mif_closecom(void);四、函数使用说明1 打开串口int mif_sele
8、com(int com,int baud);参 数COM=0:串行口一COM=1:串行口二Baud=9600(固定);返回值0:正确;其它:参看函数返回代码注意:1. USB 读写器在安装驱动后,其串口号值的查看如下所示:在桌面上找到我的电脑,在我的电脑上按右键-点击属性-点击硬件-点击设备管器,如下图:一般 USB 读写器的串口号值为 3-8;2. 非 USB 读写器的串口号一般在门锁软件中的对应参数功能中查看,一般其串口号为 1-2;3. 接口中的串口号是从 0 开始的,门锁软件中的串口号是从 1 开始,所以如果在门锁软件中的看到的串口参数为串口一,则此处的的参数应填写为 0。2 读卡in
9、t tem_readdoorcard_sdk(LPSTR BH, LPSTR buff)BH: 门锁编号,10 字符长度,buff:卡中日期时间,长度为 10 个字符,前 8 个为年月日时,后两位为一小时内发卡序号(它是一个十六进制数) ,读出结果为作业流水号。每张卡的作业流水号是唯一的。在读卡之前,卡片必须经门锁系统写过一次客人卡(主要是写入客人卡标识) ,否则读卡将失败返回。返回值0:正确;其它:参看函数返回代码3 写卡int tem_writedoocard_sdk(LPSTR BH, LPSTR fksj,int xh,int sjdw,int 串口号为 3,在打开串口的串口参数应为
10、2sjlength,bool gs)参 数BH: 门锁编号为 10 字符长度。 fksj: 发卡时间,为年月日时,每个两位,比如发卡时间为 2004 年 8 月 9 日 10 点,fksj=“04080910”;注意:如果一小时内的发卡序号超过 63 此发卡时间可以小时+1 方式进行。比如,当前时间是 2004 年 08 月 09 日 10 点,如在此 10 点内的发卡序号在 0-63内则此参数值为 04080910,如在此 10 点内的发卡序号已超过 63,则此参数值为04080910+1 小时=04080911,同时发卡序号再从 0 开始。客人退房时仍可调用此函数进行退房写卡,达到回收卡片
11、功能,此时的写卡参数中的 BH=实际门锁编号,fksj=00000000,xh=0,sjdw=0,sjlength=1,gs=0 即实现退房回收卡片功能。xh: 一小时内发卡序号,从 0 到 63;此发卡序号意为当前写卡时间的小时内的第几次写卡,如果在当前小时内的写卡次数超过 64 次(即发卡序号大于 63),则需要将 fksj 参数以小时数+1 为新的fksj 参数进行写卡,同时此发卡序号复位为 0 开始(即新的 fksj 中的序号)。sjdw: 时间单位(小时/天/月/年);0 为小时,1 为天,2 为月,3 为年。其它为天sjlength:时间长度;卡片有效时间。为几天或为几小时。取值范
12、围(1-63 小时/ 1-63 天/ 1-15 月 /1-3 年)gs: 1 为取消在用的客人卡(挂失) ,0 为不取消(不挂失) 。退房时间的钟点在非小时时间单位时是由门锁系统自行设定,接口软件不用关心。返回值0:正确;其它:参看函数返回代码4 关闭串口int mif_closecom(void);参 数无返回值0:正确;其它:参看函数返回代码注:读写卡完成后必须调用此函数关闭串口,以便释放串口资源。五、总卡,栋卡,层卡的制作说明:此类卡的制作与客人卡的制作基本相拟,只需将读客人卡的编号更换成读相应总卡或栋卡或层卡的编号,具体说明如下:在门锁系统中制作一总卡或栋卡或层卡,然后用演示程序或接口
13、程序读出此卡的门锁编号,读出后保存至自已的数据库中,并标明此编号为总卡或栋卡或层卡的编号,接口程序制作总卡或栋卡或层卡时首先在自已的数据库中找到此总卡或栋卡或层卡对应的编号然后用此编号值作为参数调用写卡函数(tem_writedoorcard_sdk()即可。如下表所示:编号 卡类 Abcd0001 总卡 Efgh0002 栋卡Ijkl0003 层卡即写卡函数 tem_writedoorcard_sdk()能制作所有开门卡,调用时仅仅门锁编号参数有所变化,其它参数意义均一致相同.同样,接口程序在制作总卡或栋卡或层卡均需用在门锁系统中制过的客人卡进行制作。六、时钟卡的制作必须在门锁管理软件中写过
14、一次的时钟卡.1 读时钟卡int tem_readtimercard_sdk(LPSTR fksj,LPSTR lpTime)参数说明:fksj:卡中日期时间,长度为 10 个字符,前 8 个为年月日时,后两位为一小时内发卡序号(十六进制),读出结果为作业流水号。lpTime:上次写卡的时钟,时钟格式为年+月+日+时+分, 长度为 10 个字符,每段均占用 2 位,如 0712081530 表示 2007 年 12 月 8 日 15 点 30 分2 写时钟卡int tem_writetimercard_sdk(LPSTR fksj,int nXh, LPSTR lpTime)参数说明:fksj
15、: 发卡时间,长度为 8 个字符,分别年月日时,每个两位,比如发卡时间为 2004年 8 月 9 日 10 点,fksj=“04080910” ; xh: 一小时内发卡序号,从 0 到 63;lpTime:写入的时钟, 长度为 10 个字符(传递至门锁的时钟),分别年月日时分,每个两位,精确至分钟,如 0408092052 表示需要将门锁时钟调至 2004 年 8 月 9 日 20 点 52 分.注意 :时钟中的年月日与流水号的年月日需相同七、函数返回代码代码 描述 原因 解决方法0 正确1 通讯错误 通讯底层中断 检查通讯硬件是否存在2 超时错误 内部错误 检查硬件及接口函数版本号3 数据区
16、域错误 内部错误 检查硬件及接口函数版本号4 数据错误 读卡片数据发生错误或卡片没有插好或插入卡片不是客人卡重新将卡片插好或再在门锁系统中重新写一次客人卡5 通讯错误 通讯口不正确 检查通讯串口号或通讯线16 无卡 读写器上没有正确放置卡片 重新放置感应卡至读写器上17 卡片没有上电 卡片没有放好 重新放置卡片至读写器上18 密码错误 内部错误 检查硬件及接口函数版本号19 坏卡 卡片可能已损坏 换一张新的感应卡重试。20 功能错误 内部错误 检查硬件及接口函数版本号128 接口未授权 未正确使用授权码授权 向门锁供应商索取授权码129 读写器型号错误 非接口使用的读写器或串口号错误向门锁供应
17、商索取接口专用读写器或选择正确的串口号130 门锁编号错误 输入的对应房号的门锁编号有错误重新获取或检查输入的门锁编号值256 系统错误 内部错误 检查硬件及接口函数版本号八、注意1.所有客人卡片都必须在门锁软件系统中写一遍客人卡。2.发卡原则,开门卡在酒店管理系统发行,而其他管理类卡片均需在门锁软件系统发行。3.禁止多个门锁软件在不同卡片之间串发。4.正式开通使用,建议将所有卡片全部收回之后,再发一张复位卡把所有门锁的数据复位,然后再进行发卡。5.特别注意计算机时间一定不能出现混乱,保持时间正确,否则可能导致开门失败。6.如果某客人卡经门锁自身系统的注销或回收功能后,需将此卡再次发行一次客人卡,否则在接口软件中读写卡将失败。九、开发示例当前已包括 VB6.0,VFP6.0,Delphi5.0,PB9.0 环境下的四种语言工具样例源代码,以便用户参考。注意,示例程序仅供程序代码的参考,通过示例程序读写出的开门卡,因写卡函数的参数与实际门锁软件应用的差异,所以不能保证能正确开门,但是只要写卡函数中的参数与实际门锁软件系统数据对应则可成功开启门锁。强烈建议开发人员事先必须认真阅读并理解此文档,这样才能保证完成接口任务。更新日期:2009-08-15