相关文档
顺极闸机开发包DIY版
顺极科技闸机二次开发包DIY版是基于简单局域网环境的开发包,可运行于xp及以上系统环境,支持多个阅读器设备同时连接,自由配置合个读卡器的功能和开门方向,可应用于三棍闸、翼闸及摆闸收费和门禁系统,稳定性高,开发简单,尤其是C#二将封装演示包,大大提高了.net下的开发效率。
开发包的作用
控制闸机的开关动作、指示灯/液晶屏/LED屏显示、提示声音播放、卡回收机的动作等
以相同的方式接收闸机上各个阅读器的卡号
监视闸机的过人信号
询问闸机是否在线
开发包环境支持
本开发包运行于windows xp、windows 7,32位或者64系统
请首先打开:delphi\Win32\Debug\testPcToMac.exe,如果运行正常,则说明开发包环境已支持
演示程序环境支持
C#演示程序需要系统支持.net2.0程序
可以打开:SKD_DEMOS\CS\CS.DEMO\bin\Debug\sjkj_pctomac.exe,如果运行正常,说明你的系统已经支持.net2.0程序
C#演示程序使用Visual Studio 2008编写
Delphi演示程序使用 Delphi xe2编写
提供了演示程序的所有源码
演示程序说明
C#
C#演示程序将开发包的函数封装成了一个简单的类库,该类库的的目录名为“SJKJ_PC2MAC_CS_DLL”,该类库工程包含了全部的源代码,它是托管的DLL,主要目的是将主程序尽可能简化。您完全可以不关心此类库的源码,只需要将“SKD_DEMOS\CS\SJKJ_PC2MAC_CS_DLL\bin\Release\SJKJ_PC2MAC_CS_DLL.dll”复制到您的工程下,并在工程中添加此类库的引用,然后创建类的全局变量就可以使用了;
“SKD_DEMOS\CS\CS.DEMO”是主演示程序,就是按照上一步的方法,先将“SJKJ_PC2MAC_CS_DLL.dll”复制到“SKD_DEMOS\CS\CS.DEMO\bin\Debug”中,然后添加引用到工程
开发包的两个DLL动态库“sjkj_pctomac.dll”、“sjudptrans.dll”要与您的“.exe”主程序在同一个目录,本例中是“Debug”目录
使用“SJKJ_PC2MAC_CS_DLL.dll”可以不关心字符编码问题
演示程序中,“openIN”、“ openOUT”和“ macLE”3个函数,分别为正向开门、反向开门和询问闸机是否在线,如果闸机不接显示屏的话,可以使用它们代替使用,它们是在“SJKJ_PC2MAC_CS_DLL.dll”中的二次封装,并不是开发包函数的组成部分。
Delphi
Delphi演示程序只是将动态库的函数转成对应的全局函数,使用时,将“dllimports.pas”复制到您的工程下
开发包的两个DLL动态库“sjkj_pctomac.dll”、“sjudptrans.dll”要与您的“.exe”主程序在同一个目录,本例中是“Debug”目录
闸机配置说明
您在开发时,闸机相当一台网络上的电脑,有自己的IP地址,开发包通过TCP/IP协议与闸机通信,IP地址是可以在闸机上修改的
闸机上可以同时接多个阅读器设备,这些阅读器的分别安装在闸机的进门方向或出门方向;
闸机上如果安装了液晶屏,则能显示三行文字,如果安装的是LED点阵屏,则只能显示第一行文字
无论您是否调用接收函数,闸机对上位机的通信始终存在
开发包导出函数说明:请直接查看:“sjkj_pctomac.h”头文件注释
/*//////////////////////////////////////////////////////////////////////////
顺极科技闸机开发包全功能版(SDK diy版),该开发包文件名为“sjkj_mactopc.dll”,它的同目录下必需还有“sjudptrans.dll”(UDP分包文件)
版本:v1.2。开发包中包含了监视和控制的所有函数。
但是,如果闸机上没有安装显示屏,可以使用更简化的函数控制闸机动作和接收相关数据,更简单地控制函数,请参见“C#版的演示包(DEMO)”
质量主管:费~无尽,QQ:,2582,5;注释编写:费~无穷
备注:
1、动态库中包含两套函数,分别为发送命令和接收反馈的函数,两套函数是完全独立的,如果只需要控制闸机,不需要接收反馈(开门、关门、人通过、刷卡和回复是否在线的功能),只需要使用“sjkjsendtomac”单向控制即可
2、通信端口为、,TCP和UDP,支持IP4和IP6,请注意添加防火墙例外
3、出于兼容考虑,程序为非UNICODE的win32环境,字符串遵从c语言方式,即使用'\0'结尾;
使用C#、delphi、VB新版本调用时,注意进行必要的转换(C#的演示包中,又对本动态库进行.net类的二次封装,使用该类则无需关心字符编码问题)
4、根据闸机的功能不同,有的命令可能不能执行,此时命令会被简单地忽略
5、闸机上可以连接一个卡回收机,卡回收机由控制板智能执行“停止、吸入、吐出卡”等动作,所以命令不包含在该开发包中
6、顺极科技闸机控制板可以同时连接多个双向ID、IC、二维码、身份证、指纹等设备,均可以使用此开发包,闸机上默认使用寸真彩液晶屏,也可以替换成LED点阵屏
7、C语言的“char”能直接表示数值,而其它语言一般需要转换(我们知道,位数值与字符在内存中是没有区别的)
*///////////////////////////////////////////////////////////////////////////
/************************************
Method: sjkjsendtomac
主动控制闸机动作的函数。如果不需要接收闸机的数据,只需要使用它即可!
FullName: sjkjsendtomac
Access: public
Returns: int
返回值是位的int型,值为表示发送命令成功,表示失败
Qualifier:
Parameter: char cmd
闸机的主动作,它是位的整数,是数学值~6代表种命令(注意,不是字符“”~“”)
1,“开门”,命令闸机开闸或转动
2,“通知”,在不需要开门和关门,只显示文字和发声时使用
3,“常开”,发送此命令后,闸机处于常开状态,只能响应“恢复正常”命令
4,“恢复正常”,取消闸机的“常开”状态
5,“无效”,如果闸机或者验票盒上有“无效”指示灯,则该命令会让其点亮;如果闸机上安装有“卡回收机”,其中的卡将被吐出来
6,主动询问闸机是否在线,闸机收到后,会立即响应“我在线”
Parameter: char suid
控制闸机播放的声音:
0为播放闸机内预定的声音(常用)
100为“无声”
1~99为“自定义的声音索引”;自定义时,需要录制wav格式的声音文件,放到闸机控制板的“\sdcard\MACSTRL\SOUNDS\”或者“C:\MACSTRL\SOUNDS\”目录下,文件名类似“s1.wav”、“s2.wav”……
Parameter: char * c1
显示屏上的第一行文本,在字节序列上,必须以'\0'结尾
Parameter: char * c2
显示屏上的第二行文本,在字节序列上,必须以'\0'结尾;如果是单行LED显示屏,则会被忽略
Parameter: char * c3
显示屏上的第三行文本,在字节序列上,必须以'\0'结尾;如果是单行LED显示屏,则会被忽略
Parameter: char dir
闸机的开闸或转动的方向,为正向,为反向
Parameter: char * macip
闸机的IP地址,在字节序列上,必须以'\0'结尾,形式如“.168.1.100\0”
************************************/
int sjkjsendtomac(char cmd,char suid,char* c1,char* c2,char *c3,char dir,char* macip);
/*//////////////////////////////////////////////////////////////////////////
“sjkjstart”、“sjkjhavedata”、“sjkjreaddata”和“sjkjstop”这个函数,是接收闸机数据的函数
其中,“sjkjstart”和“sjkjstop”是开始和结束函数
“sjkjhavedata”是询问函数,用于确定是否有数据到来,此函数实际应用中,应该在多线程中循环调用
“sjkjreaddata”是数据接收函数,只有上一步的函数返回“有数据到来”时,立即读,数据才有效
*///////////////////////////////////////////////////////////////////////////
/************************************
Method: sjkjstart
开始接收数据
FullName: sjkjstart
Access: public
Returns: int
如果返回,表示开始成功,否则失败,只有成功了,才能进入下一步
Qualifier:
************************************/
int sjkjstart();
/************************************
Method: sjkjhavedata
查找是否有数据来到,应该循环调用此函数
FullName: sjkjhavedata
Access: public
Returns: int
返回,表示有数据,否则为无数据
Qualifier:
Parameter: int timeout
32位int型,循环的间隔时间;要特别注意的是,该值只是在没有数据时停留的时间,如果有数据时,不会停留。
值在~50 毫秒之间为宜,时间太短,则浪费CPU资源;时间太长,可能会丢失数据
本函数是阻塞执行的,“timeout”是无数据时,阻塞的时间,但其内部接收数据却是非阻塞的
************************************/
int sjkjhavedata(int timeout);
/************************************
Method: sjkjreaddata
当上一步的“sjkjhavedata”返回时,即可以立即调用取得数据;如果“sjkjhavedata”返回,则不能调用;
本函数调用过后,数据缓存会清空
FullName: sjkjreaddata
Access: public
Returns: int
返回,表明取数据成功;注意:如果调用顺序没错的话,该函数一定能执行成功
Qualifier:
Parameter: char * cmd
8位数值型指针,其中会填充数字;
如果填充的数字值为,则表示闸机上有阅读器接收到卡号
如果填充的数字值为,则表示有人通过了闸机
如果填充的数字值为,则表示闸机正在回答“我的状态为在线”
Parameter: char * ctp
8位数值型指针,其中会填充数字,代表读卡器的类型
填充的值代表的类型:为ID卡,2为IC卡,3为指纹,4为二维码,5为身份证(注意,多次强调的,数值不是字符!)
注意,当cmd的数值为时,此参数才有意义!
Parameter: char * content
是字符指针,最长字节,其中填充了原始卡号
注意,如果是身份证号,则为“身份证号|姓名”形式
注意,当cmd的数值为时,此参数才有意义!
Parameter: int * len
32位的int型指针,其中填充了content的有效长度,也就是说,content的前len字节是有效的,后面可能会跟了一些垃圾字符,这是由于语言之间的差异造成的
注意,当cmd的数值为时,此参数才有意义!
Parameter: char * dir
8位数值型指针,其中会填充数字
1为正向,为反向
当cmd值是时,它代表读卡器安装的正反方向
当cmd值是时,它代表人通过闸机的方向;但是目前为止,无论是顺反向通过闸机,其值都是
注意,当cmd的数值为和时,此参数才有意义!
Parameter: char * remoteip
是字符串指针,其中填充了IP地址,结尾为“\0”,该字符的缓冲区的大小必须大于或等于字节
************************************/
int sjkjreaddata(char* cmd,char* ctp,char* content ,int * len,char* dir,char* remoteip);
/************************************
Method: sjkjstop
关闭接收数据;当“sjkjstart”成功后,如果不需要读取数据了,应调用此函数结束;如果“sjkjstart”没有成功,则不应调用
FullName: sjkjstop
Access: public
Returns: void
Qualifier:
************************************/
void sjkjstop();