- 顺极闸机开发包(非web api版)
- 型号: sjkj_pctomac.dll
- 规格: 标准win32动态库
- 单位: 套
- 推荐:
检票机开发包说明书 V9.0 第 1 页 共 16 页
1. 开发包的作用................................................................................................................... 2
2. 开发包环境支持............................................................................................................... 2
3. 演示程序环境支持........................................................................................................... 2
4. 演示程序说明................................................................................................................... 2
1) C# .................................................................................................................................. 2
2) Delphi .......................................................................................................................... 2
5. 检票机配置说明............................................................................................................... 2
6. 开发包原理图和函数结构............................................................................................... 3
1) 软件调用结构............................................................................................................... 3
2) 开发包函数调用的顺序............................................................................................... 3
3) C#演示程序的结构....................................................................................................... 4
4) Delphi 演示程序结构.................................................................................................. 4
5) 现代智能检票机控制板的IO 接口........................................................................................ 5
7. 检票控制板和闸机之间的连接....................................................................................... 5
1) 概述.............................................................................................................................. 5
2) 检票机的接法............................................................................................................... 5
a) 单板单向接法....................................................................................................... 6
b) 双板双向接法....................................................................................................... 6
c) 单板双向接法....................................................................................................... 7
3) 推荐接法...................................................................................................................... 8
8. 开发包动态库的函数详细说明....................................................................................... 8
9. “sjkj_pctomac.h”头文件内容................................................................................... 8
检票机开发包说明书 V9.0 第 2 页 共 16 页
1. 开发包的作用
1) 控制检票机的开关动作、指示灯/液晶屏/LED屏显示、提示声音播放、卡回收机的
动作等
2) 以相似的方式接收检票机上各个阅读器的卡号和指纹文件
3) 监视检票机的过人信号
4) 获取指纹比对的结果
5) 询问检票机是否在线
2. 开发包环境支持
1) 本开发包运行于windows xp、windows 7,32位系统,二进制动态库可运行于windows
7 64位系统
2) 请首先打开:delphi\Win32\Debug\testPcToMac.exe,如果运行正常,则说明开发
包环境已支持
3. 演示程序环境支持
1) C#演示程序需要系统支持.net2.0 程序
2) 可以打开:SDK_DEMOS\CS\CS.DEMO\bin\Debug\sjkj_pctomac.exe,如果运行正常,
说明你的系统已经支持.net2.0程序
3) C#演示程序使用Visual Studio 2008 编写
4) Delphi 演示程序使用 Delphi xe2 编写
5) 提供了演示程序的所有源码
4. 演示程序说明
1) C#
a) C#演示程序将开发包的函数封装成了一个简单的类库,该类库的目录名为
“SJKJ_PC2MAC_CS_DLL”,该类库工程包含了全部的源代码,它是托管的DLL,
主要目的是将主程序尽可能简化。您完全可以不关心此类库的源码,只需要将
“SDK_DEMOS\CS\SJKJ_PC2MAC_CS_DLL\bin\Release\SJKJ_PC2MAC_CS_DLL.dl
l”复制到您的工程下,并在工程中添加此类库的引用,然后创建类的全局变
量就可以使用了;
b) “SDK_DEMOS\CS\CS.DEMO”是演示程序,就是按照上一步的方法,先将
“SJKJ_PC2MAC_CS_DLL.dll”复制到“SDK_DEMOS\CS\CS.DEMO\bin\Debug”中,
然后添加引用到工程
c) 开发包的两个DLL 动态库“sjkj_pctomac.dll”、“sjudptrans.dll”要与您的
“.exe”主程序在同一个目录,本例中是“Debug”目录
d) 使用“SJKJ_PC2MAC_CS_DLL.dll”可以不关心字符编码问题
e) “SJKJ_PC2MAC_CS_DLL.dll”中的函数,和二进制开发包“sjkj_pctomac.dll”
中的函数是一一对应的,它的源码在“SDK_DEMOS\CS\SJKJ_PC2MAC_CS_DLL\
sjkjpc2mac.cs”中
2) Delphi
a) Delphi 演示程序是将动态库的函数转成对应的全局函数,使用时,将
“dllimports.pas”复制到您的工程下
b) 开发包的两个DLL 动态库“sjkj_pctomac.dll”、“sjudptrans.dll”要与您的
“.exe”主程序在同一个目录,本例中是“Debug”目录
5. 检票机配置说明
1) 您在开发时,检票机相当一台网络上的电脑,有自己的IP地址,开发包通过TCP/IP
协议与检票机通信,IP地址可以通过演示程序修改
检票机开发包说明书 V9.0 第 3 页 共 16 页
2) 检票机上可以同时接多个阅读器设备,这些阅读器分别安装在检票机的进门方向或
出门方向;
3) 如果检票机上有多个相同类型的阅读器,则需要配置阅读器的顺序加以区别
4) 检票机上如果安装了液晶屏,则能同时显示两行文字,如果安装的是LED 点阵屏,
则两行文字接续显示
5) 无论您是否调用开发包中的相关函数,开发包和检票机的内部通信始终存在
开发包和检票机的通信是实时异步的,不受上层软件调用的影响,上层软件只是获
取通信中的相关数据
6. 开发包原理图和函数结构
1) 软件调用结构
2) 开发包函数调用的顺序
检票机开发包说明书 V9.0 第 4 页 共 16 页
3) C#演示程序的结构
4) Delphi 演示程序结构
检票机开发包说明书 V9.0 第 5 页 共 16 页
5) 现代智能检票机控制板的IO 接口
7. 检票控制板和闸机之间的连接
1) 概述
检票控制板用于上层软件和闸机之间的通信,是整个检票系统的硬件核心,其作用
为开发包的硬件形式,功能和开发包的函数一一对应
检票控制板基于TCP/IP协议,底层采用UDP分包校验处理,每块控制板有一个IP
地址
2) 检票机的接法
检票和门禁系统,都有进、出方向的概念,实际上闸机可以实现双向转动或者开闸,
检票机开发包说明书 V9.0 第 6 页 共 16 页
但是,为了更为稳定和自然,实际应用中的收费系统的闸机都只使用一个方向,要
么进,要么出,至于哪个进,哪个出,由上层软件人为决定,这样,无论进出,闸
机都只朝“一个方向”(进向)转动或开闸
a) 单板单向接法
是指1块控制板控制1 组闸机通道,闸机是单向通行的,在检票区附近可设置一
块液晶屏
这种接法几乎是收费检票系统唯一的接法,检票机的“进”、“出”方向是由上
层软件通过IP地址自行处理,此时开发板的方向都是“正”向控制
在开发包中,如果接收到“方向”的参数“dir”时,应完全忽略,而发送时,
永远使用数值“1”
现代智能控制板-单板单向接法
进
出
现代智能YJXMT
现代智能YJXM
显示屏
交换机
服务器
现代智能控
制板
现代智能YJXMT
现代智能YJXM
显示屏
现代智能控
制板
b) 双板双向接法
是指1 组闸机通道使用2 块控制板,也就是有两个独立的IP 地址分别控制进出
开门方向,其原理、控制与“单板单向接法”完全一样,只不过2 块控制板接在
同一个检票机的两个方向而已
检票机开发包说明书 V9.0 第 7 页 共 16 页
其本质与“单板单向接法”一样
这种系统可以用在双向实时门禁系统,每块板子都可以连1 块液晶屏,因此进出
方向都可以有显示屏
现代智能YJXM
显示屏
交换机
服务器
现代智能控
制板
现代智能控制板-双板双向接法
进
出
现代智能YJXM
显示屏
现代智能控制板
c) 单板双向接法
是指1组闸机通道使用1块控制板,1块控制板分别控制两个方向,可以把液晶
屏放在闸机中间,进出共用
很多门禁系统对进出限制不如检票系统那样严格,可以不设置液晶屏
这种接法能最大程序节省成本,但接口和开发难度有所增加
这种接法,需要利用开发包中的“方向”参数“dir”,检票机上有检票时,会
将阅读器的“进、出”方向通过“dir”参数传到开发包上,而开闸时,将数值
(1 代表进向开闸,0代表反向开闸)通过“dir”参数再发送过去,检票机就可
以按照命令的方向开闸
检票机开发包说明书 V9.0 第 8 页 共 16 页
现代智能YJXM
显示屏
交换机
服务器
现代智能控
制板
现代智能控制板-单板双向接法
进
出
现代智能YJXM
3) 推荐接法
a) 检票系统或单进单出门禁系统采用“单板单向接法”
b) 双进双出的门禁系统采用“双板双向接法”
8. 开发包动态库的函数详细说明
请使用“vs2008”或者其它能格式化c 函数的开发环境打开“sjkj_pctomac.h”头文件
参阅
9. “sjkj_pctomac.h”头文件内容
/*/////////////////////////////////////////////////////////////////////////
/
现代智能科技检票机开发包DIY 版,该开发包文件名为“sjkj_mactopc.dll”,它的同目录
下必需还有“sjudptrans.dll”(数据分包文件,基于UPD和TCP 协议)
版本:v9.0。开发包中包含了监视和控制的所有函数。
质量主管:QQ:5326,2582,5;注释编写:
备注:
1、动态库中包含两套函数,分别为发送命令和接收反馈的函数,两套函数是完全独立
的,如果只需要控制检票机,不需要接收反馈(开门、关门、人通过、刷卡和回复是否在线
的功能),只需要使用“发送函数”单向控制即可
2、通信端口为6002、6055,TCP 和UDP,请注意设置防火墙
3、出于兼容考虑,程序为非UNICODE 的win32 环境,字符串遵从c 语言方式,即使用
'\0'结尾;
使用C#、delphi、VB 新版本调用时,注意进行必要的转换(C#的演示包中,又对
检票机开发包说明书 V9.0 第 9 页 共 16 页
二进制动态库进行.net类的二次封装,使用该类则无需关心字符编码问题)
4、根据检票机的功能不同,有的命令可能不能执行,此时命令会被简单地忽略
5、检票机上可以连接一个卡回收机,卡回收机由控制板智能执行“暂停、吸入、吐出
卡”等动作,所以开发包中不需要包含相关控制函数
6、现代智能科技检票机控制板可以同时连接多个双向ID、IC、二维码、身份证等阅读器设
备和指纹模块,检票机上默认使用7寸真彩液晶屏,也可以替换成LED点阵屏
7、C语言的“char”能直接表示数值,而其它语言一般需要转换
*//////////////////////////////////////////////////////////////////////////
/
//定义几个常量,便于理解和记忆
//没有收到数据
#define rev_no_data 0
//收到有人检票
#define rev_crd_code 1
//收到有人通过检票机
#define rev_per_ovr 2
//收到检票机回答在线
#define rev_mac_line 3
//收到检票机录入指纹成功
#define rev_get_fgr 4
//收到检票机上比对指纹的结果
#define rev_mach_fgr 5
////receive
/************************************
Method: sjkjstart
开始接收检票闸机端的数据
Returns: int
如果返回1,表示开始成功,否则失败,只有成功了,才能进行下一步
************************************/
int sjkjstart();
/************************************
Method: sjkjhavedata
查找是否有数据来到
应该在多线程中,循环中调用此函数
Returns: int
返回32 位整形值
需要通过返回的值,决定要执行以后的函数!
0:没有收到数据;
检票机开发包说明书 V9.0 第 10 页 共 16 页
1:有检票
此时需要调用sjkjrcrd取获取检票的号码和其它详细数据
2:有人通过
此时要调用sjkjrovred查找过人的详细数据
如果只需知道远程ip 地址,也可以用sjkjrip代替sjkjrovred
如果不需知道人通过的其它信息,可以不调用sjkjrovred 或者sjkjrip
3:检票机在线
此时需要调用sjkjrip 查找远程ip地址
如果不需要知道远程ip地址,可以不调用sjkjrip
4:有人录入指纹
此时需要调用sjkjrfgr获取指纹特征值
5:指纹比对的结束
此时需要调用sjkjrcore获取比对的结果
Parameter: int timeout
32 位int 型,该值只是在没有数据时阻塞的时间,如果有数据时,将立即放弃等
待
也就是说,该间隔的长短,并不影响实际数据的接收
时间越长,对CPU占用越小,该值可以是大于2000毫秒的任意值,比如500
本函数是阻塞执行的,但其内部接收数据的机制却是非阻塞的
************************************/
int sjkjhavedata(int timeout);
/************************************
Method: sjkjrcrd
获取检票信息
Parameter: char * ctp
8位数值型指针,其中会填充数字,代表阅读器的类型
填充的值代表的类型:1 为ID 卡,2 为IC 卡,3 为身份证,4 为二维码(注意,多次
强调的,数值不是字符值!)
Parameter: char * dir
8位数值型指针,其中会填充数字
1为进,0为出
Parameter: char * cidx
8位数值型指针,其中会填充数字,代表阅读器的序号
该数值只在检票机的同一方向上包含两个及以上相同的阅读器时,才有可能派上用
场
现代智能科技检票机可以同时支持多达4个阅读器
默认情况下,值为1 代表第1 个阅读器;值为4 代表第4 个阅读器,第4 个阅读器与
回收机绑定在一起
该值与检票机的接法有关系
以北京地铁的检票机为例:
在进入时,临时IC 卡和充值IC卡使用同一个读卡器,则cidx 的值没有作用
而出口时,临时IC卡回收,充值IC卡刷卡,上位机软件通过cidx的值判断出用
户刷卡的位置,如果用户误将充值卡塞入回收机,或者用临时卡刷上方的阅读器,均为错误操
检票机开发包说明书 V9.0 第 11 页 共 16 页
作,软件应做出相应的拒绝回复
Parameter: char * conte
是字符指针,必须是不小于32 字节大小的内存指针,其中将填充原始卡号,卡号
是以'\0'结尾的
Parameter: int *tid
是32位的整型,被检票机发来的标记值填充
该值的是由由发送函数发过去的标记值,检票机只是将该值原样发送过来
如果一个检票过程(事务)已经全部完成,该值为0
Parameter: char * remoteip
是字符串指针,其中填充了检票机的IP 地址,结尾为“\0”,该字符的缓冲区的
大小必须不小于24字节
************************************/
void sjkjrcrd(char* ctp,char* dir,char* cidx,int* tid,char* conte,char*
remoteip);
/************************************
Method: sjkjrovred
获取人通过的详细信息
Parameter: int *tid
Parameter: char * remoteip
************************************/
void sjkjrovred(int* tid,char* remoteip);
/************************************
Method: sjkjrip
获取远程检票机的IP 地址
在sjkjhavedata 的返回值大于0后,可以调用此函数简单的获取检票机的IP地址
该函数调用后,不影响其它函数
Parameter: char * remoteip
************************************/
void sjkjrip(char* remoteip);
/************************************
Method: sjkjrfgr
获取二进制指纹文件
注意:只有主动发送sjkjsgetfgr,并且指纹获取正确,此函数才会发生
Parameter: char * dir
8位数值型指针,其中会填充数字
1为进,0为出
Parameter: char * cidx
8位数值型指针,其中会填充数字,代表阅读器的序号
该数值只在检票机的同一方向上包含两个及以上相同的阅读器时,才有可能派上用
场
一般情况下,检票机上只有一个指纹仪,因此无需关心此值
检票机开发包说明书 V9.0 第 12 页 共 16 页
Parameter: int *tid
Parameter: char * dat
将被填充为指纹特征文件的字节流
指纹特征文件不大于512字节,因此只要分配512字节的内存缓冲区即可接收
Parameter: int * datlen
32 位整形值,其中填充的数值表示dat的有效长度
Parameter: char * remoteip
************************************/
void sjkjrfgr(char* dir,char* cidx,int* tid,char* dat,int* datlen,char*
remoteip);//取指纹特征值
/************************************
Method: sjkjrcore
发送一个本地指纹文件,将用户在检票机上比对指纹,最后对比,得到结果
注意:只有主动发送sjkjsmathfgr,此函数才会发生
Parameter: char * dir
Parameter: char * cidx
Parameter: int *tid
Parameter: int * score
是32字节的整形,其中填充了指纹比对的结果
结果为0~255
只要大于30,就可以认为是同一个人
Parameter: char * remoteip
************************************/
void sjkjrcore(char* dir,char* cidx,int* tid,int* score,char* remoteip);//
取指纹比对的结果
/************************************
Method: sjkjstop
停止接收检票闸机端的数据
如果sjkjstart执行成功了,在程序结束时,必须调用此函数,反之,不执行
************************************/
void sjkjstop();
////send
注意:在以下任何函数之前,必须已经执行了“sjkjstart”。
/************************************
Method: sjkjsopen
命令检票机开门或转动
Returns: int
值为1表示发送__________命令成功,0 表示失败;返回值是32 位的整型
检票机开发包说明书 V9.0 第 13 页 共 16 页
Parameter: char * remind
显示屏上的第一行文本,一般用于提示用户;在字节序列上,必须以'\0'结尾
如果值为“.”(英文点号),则维持显示上一次发送的文本
Parameter: char * ticket
显示屏上的第二行文本,一般用于显示票名称;在字节序列上,必须以'\0'结尾
如果值为“.”(英文点号),则维持显示上一次发送的文本
Parameter: char suid
控制检票机播放的声音:8 位的整数,是数学值(注意,不是字符);
0为播放检票机内预定的声音(常用)
100为“无声”
1~99 为“自定义的声音索引”;自定义时,需要录制wav 格式的声音文件,
放到检票机控制板的“\sdcard\MACSTRL\SOUNDS\”或者“C:\MACSTRL\SOUNDS\”目录下,
文件名类似“s1.wav”、“s2.wav”……
Parameter: char dir
检票机的开闸或转动的方向,1为进,0为出;是8位整数
Parameter: int tid
发送给检票机的标记值,是32位的整型,如果不需此标记,可以设置成0
该值的作用是:如果一次检票过程没有结束,检票机返回时,会将此值再次发送过
来,通过该值,在多个检票机同时通信时,可以作为标识
Parameter: char * macip
检票机的IP 地址,在字节序列上,必须以'\0'结尾的字符串,形式如
“192.168.1.111\0”
************************************/
int sjkjsopen(char* remind,char* ticket,char suid,char dir,int tid,char*
macip);
/************************************
Method: sjkjsnotice
向检票机发送通知
通知只是显示文本和声音,检票机不会产生机械动作
Returns: int
Parameter: char * remind
Parameter: char * ticket
Parameter: char suid
Parameter: char dir
显示屏的方向,1 为进,0为出;是8位整数
只有多个显示屏,该值才有作用,否则值为1
Parameter: int tid
Parameter: char * macip
************************************/
int sjkjsnotice(char* remind,char* ticket,char suid,char dir,int tid,char*
macip);
/************************************
检票机开发包说明书 V9.0 第 14 页 共 16 页
Method: sjkjsoped
命令检票机常开
常开后,除非取消,否则其它命令将不再执行
注意:检票机可能并不支持开常命令
Returns: int
Parameter: char * remind
Parameter: char * ticket
Parameter: char suid
Parameter: char dir
常开的方向,1为正,0为出;是8 位整数
Parameter: char * macip
************************************/
int sjkjsoped(char* remind,char* ticket,char suid,char dir,char* macip);
/************************************
Method: sjkjsresu
取消检票机的常开命令
执行时,如果检票机上挂有卡回收箱,如果回收箱中有卡,则卡会回收
Returns: int
Parameter: char * remind
Parameter: char * ticket
Parameter: char suid
Parameter: char * macip
************************************/
int sjkjsresu(char* remind,char* ticket,char suid,char* macip);
/************************************
Method: sjkjsinv
向检票机发送票无效命令
Returns: int
Parameter: char * remind
Parameter: char * ticket
Parameter: char suid
Parameter: char dir
如果票有效,准备开门的方向,1 为进,0 为出;是8 位整数
Parameter: int tid
Parameter: char * macip
************************************/
int sjkjsinv(char* remind,char* ticket,char suid,char dir,int tid,char*
macip);
/************************************
Method: sjkjsask
检票机开发包说明书 V9.0 第 15 页 共 16 页
向检票机发送询问,问是否在线
Returns: int
Parameter: int tid
Parameter: char * macip
************************************/
int sjkjsask(int tid,char* macip);
/************************************
Method: sjkjsip
向检票机发送新的IP,检票机将设置成新的静态IP
Returns: int
Parameter: char * ip
新的IP 地址,在字节序列上,必须以'\0'结尾的字符串,形式如“192.168.1.112\0”
Parameter: char * mk
新的掩码地址,在字节序列上,必须以'\0'结尾的字符串,形式如
“255.255.255.0\0”
Parameter: char * gt
新的网关地址,在字节序列上,必须以'\0'结尾的字符串,形式如“192.168.1.1\0”
Parameter: char * macip
************************************/
int sjkjsip(char* ip,char* mk,char* gt,char* macip);
/************************************
Method: sjkjsgetfgr
请求录入指纹
检票机将请求用户录入指纹,并处理成指纹的二进制特征值
Returns: int
Parameter: char * remind
Parameter: char * ticket
Parameter: char suid
Parameter: char dir
指纹仪方向,1为进,0为出;是8 位整数
现阶段,该值只为1
Parameter: int tid
Parameter: char * macip
************************************/
int sjkjsgetfgr(char* remind,char* ticket,char suid,char dir,int tid,char*
macip);
/************************************
Method: sjkjsmathfgr
请求比对指纹
检票机将接收发送的指纹特征值,并请求用户录入指纹,进行比对
检票机开发包说明书 V9.0 第 16 页 共 16 页
Returns: int
Parameter: char * remind
Parameter: char * ticket
Parameter: char suid
Parameter: char dir
指纹仪方向,1为进,0为出;是8 位整数
现阶段,该值只为1
Parameter: int tid
Parameter: char * dat
要传给检票机进行比对指纹特征值二进制文件流
应将文件流转成字节数组或者内存流,dat 内存的首地址
Parameter: int datlen
dat 的有效长度
Parameter: char * macip
************************************/
int sjkjsmathfgr(char* remind,char* ticket,char suid,char dir,int tid,char*
dat,int datlen,char* macip);__