相关文档
顺极科技闸机通用开发包
顺极科技闸机控制板可同时连接多个ID读卡器、IC读卡器、身份证阅读器以及指纹仪,使用同一个开发包就可完成数据的收发工作,顺极闸机开发板上有电信号按钮,可连接多个电子开关,比传统的机械开关性能更高,带有过人反馈信号。本开发包"sjkj_pctomac.dll",用于远程控制顺极科技闸机基于顺极科技闸机控制板,并带有演示程序。
本开发包基于WIN32环境,由老版本重新编译而来,老版本使用VC6.0环境,并没有解决unicode编码问题,也就是本版本仍然使用本要编码,大家知道,数据传输本身无关编码问题,只是上层显示需要进行必要的编码转换,但是,与本动态库的相关函数通信时,所有字符必须先转成"ANAI",新的纯unicode编码的动态库已经在测试当中.
本动态库可应用于windows xp,windows7 32和64位系统上,可以使用C#,delphi,vb等语言调用执行,本DEMO演示程序由社会爱好者使用delphi开发,为了简单化,演示程序使用的是单线程的循环接收数据,实际使用中,应当使用多线程调用接收函数.
本动态库依靠顺极科技底层传输库"sjudptrans.dll",只需将"sjudptrans.dll"置于同一目录下即可使用,动态库使用UDP分包处理,使用时,请先将调用的程序添加到防火墙例外中,或者添加UDP 6002端口.
1. 开发包的作用
a) 控制闸机的开关动作、指示灯/液晶屏/LED屏显示、提示声音播放、卡回收机的动作等
b) 以相同的方式接收闸机上各个阅读器的卡号
c) 监视闸机的过人信号
2. 开发包环境支持
a) 本开发包运行于windows xp、windows 7,32位或者64系统
b) 请首先打开:delphi\Win32\Debug\testPcToMac.exe,如果运行正常,则说明环境已支持
3. 演示程序环境支持
a) C#演示程序需要系统支持.net2.0程序
b) 可以打开:C#\bin\Debug\sjkj_pctomac.exe,如果运行正常,说明已经支持.net2.0程序
c) C#演示程序使用Visual Studio 2008编写
d) Delphi演示程序使用 Delphi xe2编写
e) 提供了演示程序的所有源码
4. 演示程序说明
a) C#
i. C#演示程序将开发包的函数封装成了一个简单的类,使用时,将“sjkjpctomacmid.cs”复制到您的工程下,然后创建类的全局变量
ii. 开发包的两个DLL动态库“sjkj_pctomac.dll”、“sjudptrans.dll”要与您的“.exe”主程序在同一个目录,本例中是“Debug”目录
iii. 在工程的属性中设置:调试>>启用非托管代码调试;生成>>允许不安全代码
iv. 如果使用“sjkjpctomacmid.cs”中的类,在Visual Studio 2008下,不用关心字符编码问题
b) Delphi
i. Delphi演示程序只是将动态库的函数转成对应的全局函数,使用时,将“dllimports.pas”复制到您的工程下
ii. 开发包的两个DLL动态库“sjkj_pctomac.dll”、“sjudptrans.dll”要与您的“.exe”主程序在同一个目录,本例中是“Debug”目录
5. 闸机配置说明
a) 您在开发时,闸机相当一台络电脑,有自己的IP地址,开发包通过TCP/IP协议与闸机通信,IP地址是可以在闸机上修改的
b) 闸机上可以接多个阅读器设备,并且分别能设置成进口方向作用或者出口方向作用;比如将1号位置接ID卡,4号位置接IC卡,然后设置1号为进口读卡器,设置4号为出口读卡器;通过开发包得到的是序号和卡号,具体代表“什么卡”、“什么方向”,请与我公司联系先确定好
c) 上一步中,也可以假设卡的种类和序号(序号可以在1、4、5、6位置选择),等程序开发完成后,再与我公司联系确定数字
d) 闸机上如果安装了液晶屏,则能显示三行文字,如果安装的是LED点阵屏,则只能显示第一行文字
e) 无论您是否调用接收函数,闸机对上位机的通信始终存在
6. 开发包导出函数说明:请直接查看:“sjkj_pctomac.h”头文件注释
//////////////////////////////////////////////////////////////////////////
/*
闸机远程控制程序动态库,该动态库的同目录下必需有“sjudptrans.dll”(UDP分包)文件
版本:v1.0,高版本仍然包含低版本函数接口
质量主管:费~无尽,QQ:,2582,5;注释编写:费~无穷
注意:
1、本动态库包含两套函数,分别为发送命令和接收反馈的函数,两套函数是完全独立的,如果只需要控制闸机,不需要接收反馈,比如:开门和关门,只需要使用“sjkjsendtomac”即可
2、使用的通信端口为、,TCP和UDP,支持IP4和IP6
3、出于兼容考虑,程序为非UNICODE的win32环境,字符串遵从c语言方式,即使用'\0'结尾;使用C#、delphi、VB新版本调用时,注意进行必要的转换
4、根据闸机的功能不同,有的命令不能执行,不能执行时,此时命令会被简单地忽略
//////////////////////////////////////////////////////////////////////////
/*“sjkjsendtomac”是主动控制闸机动作的函数。如果不需要接收闸机端的反馈,只需要使用此函数即可!*/
/*
“sjkjsendtomac”说明
1、返回值是位的int型,值为表示成功,表示失败
2、“cmd”是主命令,决定了闸机的动作,其它参数都是辅助命令,只起修饰作用;
它是位的整数,是数学值,~5代表种命令(不是字符“”~“”)
1为“开门”,开门的方向由“cidx”决定
2为“通知”,在不需要开门和关门,只显示文字和发声时,或用此命令
3为“常开”,发送此命令后,闸机处于常开状态,只能响应“恢复正常”命令
4为“恢复正常”,取消“常开”状态
5为“无效”,如果闸机或者验票盒上有“无效”指示灯,则该命令会让其点亮;普通闸机,可以使用“通知”命令代替
3、“cmd2”是辅助命令,对于闸机来说,能控制声音:
0为“播放预定音”,此时,声音由“cmd”决定的
100为“无声”
1~99为“自定义的声音索引”;自定义时,需要录制wav格式的声音文件,提前放到通信板的“\sdcard\MACSTRL\SOUNDS\”或者“C:\\MACSTRL\SOUNDS\”目录下,文件名为“s1.wav”、“s2.wav”等等
4、“c1”,显示器上的第一行文本,如果是LED显示屏,则只能显示“c1”,在字节序列上,必须以'\0'结尾
“c2”,显示器上的第二行文本,在字节序列上,必须以'\0'结尾
“c3”,显示器上的第三行文本,在字节序列上,必须以'\0'结尾
5、“cidx”是卡的序号,由于闸机可以接多个读卡器,比如身份证、ID卡、IC卡、二维码、指纹等设备,这些设备的串号都会以相同的方式发送过来
“cidx”也就是这些设备的安装位置,开门的方向可以在闸机上人为设置;
比如在设置:位置为ID卡,刷卡后,开门方向是“进”;再设置位置为身份证卡,刷身份证后,开门方向是“出”,
于是,cidx=1,闸机就朝“进向”开门或转动,cidx=5,闸机就朝“出向”开门或转动
在闸机上刷卡后,此值会通过“sjkjreaddata”函数中的“idx”反馈过来,我们只要临时保存该值,然后将此值赋给“cidx”,无需再过问开门的方向,闸机会自动判断开门方向
6、“macip”,闸机的IP地址,在字节序列上,必须以'\0'结尾,形式如“.168.1.100\0” */
int sjkjsendtomac(char cmd,char cmd2,char* c1,char* c2,char *c3,char cidx,char* macip);
/*“sjkjstart”、“sjkjhavedata”、“sjkjreaddata”和“sjkjstop”这个函数,是接收闸机数据的函数。
其中,“sjkjstart”和“sjkjstop”是开始和结束函数
“sjkjhavedata”是循环询问函数,用于确定是否有数据到来;此函数实际应用中,应该在多线程中循环调用
“sjkjreaddata”是有效的数据接收函数,只有上一步的函数返回“有数据到来”时,立即读,才保证数据有效*/
/* “sjkjstart”准备接收,如果返回,表示准备成功,否则失败,只有成功了,才能进入下一步
参数“vty”必须为“www.HeroGod.com\0”
*/
int sjkjstart(char *vty);
/*循环查找是否有数据来到
“timeout”,位int型,循环的间隔时间;要特别注意的是,该值只是在没有数据时停留的时间,如果有数据时,不会停留。
值在~1000 毫秒之间为宜,时间太短,浪费CPU资源;本函数时阻塞执行的,但其内部接收数据线程是非阻塞的
*/
int sjkjhavedata(int timeout);
/*当上一步的“sjkjstart”返回时,即可以立即调用“sjkjreaddata”;如果“sjkjstart”返回,不能调用;本函数调用过后,数据缓存会清空掉
参数作用如下:
“cmd”,8位数值型指针,其中会填充数字;
数字的值为,则表示闸机上有刷卡动作,此时,剩下的参数的意义为:
“idx”,位数值型指针,其中会填充数字,代表读卡器的序号
“content”,是字符指针,最长字节,其中填充了原始卡号;注意:如果是身份证号,则为“身份证号|姓名”形式
“len”,是位的int型指针,其中填充了content的有效长度,也就是说,content的前len字节是有效的,后面可能会跟了一些垃圾字符,这是由于语言之间的差异造成的
“remoteip”,是字符串指针,其中填充了IP地址,结尾为“\0”,该缓冲区的大小必须大于或等于字节(IP6 + \0)
数字的值为2,则表示闸机上的传感器检测到有人通过,此时,剩下的参数的意义为:
“idx”,位数值型指针,其中会填充数字,值为代表人正向通过,否则为反向通过;目前为止,无论是顺反向通过,值都是1
*/
int sjkjreaddata(char* cmd,char* idx,char *content,int* len,char* remoteip);
/*当“sjkjstart”成功后,如果不需要读取数据了,应调用此函数结束;如果“sjkjstart”没有成功,则不应结束*/
a) void sjkjstop();