舒特考勤机动态库函数说明
舒特拍照考勤机使用手册
目录1. 产品简介 (2)1.1 产品简介 (2)1.2 功能简介 (2)1.3 技术规格 (2)1.4 接口说明 (3)2. 产品安装 (3)2.1 安装注意事项 (3)2.2 产品安装 (3)2.3 产品连接方式 (4)3. 硬件设置及操作 (5)3.1 IP地址设置 (5)3.2 机器密码设置 (6)3.3 视频触发 (6)4. 考勤客户端软件设置 (6)4.1 参数设置 (7)4.1.1人员信息设置 (7)4.1.2 机器登记/网络设置 (8)4.1.3 参数设置 (9)4.1.4 打铃设置 (10)4.2 提取记录 (10)4.3 实时记录 (11)5. 视频监控器IE浏览器操作 (12)5.1 视频服务器主页 (15)5.2 系统配置 (15)5.2.1 系统设置 (16)5.2.2 时间设置 (16)5.2.3 用户设置 (17)5.3 网络配置 (17)5.3.1 PPPoE设置 (17)5.3.2 DDNS设置 (18)5.4 影像配置 (18)5.4.1 影像设置 (18)5.4.2 音频设置 (19)5.5 其它配置 (19)5.5.1 UPnP设定 (19)5.5.2 系统日志 (20)1. 产品简介1.1 产品简介拍照考勤机是舒特公司自主研发的一款多功能考勤机,同时具有考勤和视频监控两个模式,并能实现两个模式在指定时间下的自动切换,相当于让用户花一台机器的钱买到考勤机和视频监控器(DVS)两台机器。
拍照考勤机使用简易、外观精美,提供视频、音频的输入以及云台的控制(标准机无此功能,须订做),接上网线就可以实现全球在线实时监视、录像以及画面控制等功能,同时具有拍照考勤的功能,可以实现刷卡同时进行记录照片储存以验证考勤刷卡人员,有效杜绝代刷卡的现象。
该产品具备电信级的稳定性,可长时间运行。
1.2 功能简介◆专业外观设计,制作精美,安装方便;◆大屏幕彩色液晶显示:3.5英寸TFT高清晰图形界面,6万5千色高彩,分辨率为320×240,可显示个性图形界面及人员彩色照片;◆独有的考勤拍照功能:内置30万像素高清彩色摄像头,考勤瞬间直接完成拍照,无需上传、轻松显示,有效防止替代考勤;◆标准TCP/IP协议:稳定的基于Linux系统的TCP/IP设计,可跨网段、跨网关;◆实时传送:支持考勤数据实时传送,利用稳定的网络平台,大大提高了考勤数据的可靠性;◆多项辅助功能:会议通知、生日提醒等;◆存储容量:32M电子硬盘,内置2G的 SD卡,可储存刷卡图片16万张;◆多种组网通讯方式:RJ45以太网,可自设IP和通过DHCP获取IP;◆定时响铃:用户可以设定响铃时间段,共可设置35个;◆USB下载:用户可通过USB连接线通讯下载考勤数据、上传公司员工信息;◆记录查询:用户可直接在考勤机客户端软件中查看考勤记录;◆模式自动切换:共可设置4对切换时段,也就是说一天24小时最多可被划分为8个时段,4个时段工作在考勤模式下,4个时段工作在摄像(监控)模式下,系统在LCD上会显示此时正工作在什么模式下,显示“考勤”则表示工作在考勤机模式,显示“摄像”则表示工作在监控模式;◆按键设置:通过按键设置IP地址和机器密码;◆更换墙纸:用户可随意更换背景墙纸;◆显示个人留言:员工在刷卡看到自己的名字后,还可看到公司给自己的个人留言;◆显示公共留言:公司可设置公共留言,取代背景图片显示;◆外接摄像头:可再外接一个摄像头作为视频监控器使用;◆音频输入、输出:1路音频输入和1路音频输出;◆云台控制:外接摄像头可做带云台控制的功能(标准机无此功能,须订做);◆外接韦根读头:可外接韦根/26读头(标准机无此功能,须订做)。
创建动态链接库时设置导出函数的方法
创建动态链接库时设置导出函数的⽅法有两种⽅法1.使⽤模块定义⽂件, 2.在要导出的函数前加上 __declspec(dllexport)我们⽤VS2008新建个DLL⼯程,⼯程名为“TestDLL”把默认的源⽂件后缀 .CPP改为.C(C⽂件)int _stdcall MyFunction(int iVariant){return0;}1. 使⽤传统的模块定义⽂件 (.def)新建⼀个后缀为.def的⽂本⽂件(这⾥建⼀个TestDll.Def),⽂件内容为:LIBRARY TestDllEXPORTSMyFunction在 Link 时指定输⼊依赖⽂件:/DEF:"TestDll.Def"2. Visual C++ 提供的⽅便⽅法在01⾏的int 前加⼊ __declspec(dllexport) 关键字通过以上两种⽅法,我们就可以导出MyFunction函数。
我们⽤查看导出的函数:第⼀种⽅法导出的函数为:MyFunction第⼆种⽅法导出的函数为:_MyFunction@4__stdcall会使导出函数名字前⾯加⼀个下划线,后⾯加⼀个@再加上参数的字节数,⽐如_MyFunction@4的参数(int iVariant)就是4个字节__fastcall与 __stdcall类似,不过前⾯没有下划线,⽽是⼀个@,⽐如@MyFunction@4__cdecl则是始函数名。
⼩结:如果要导出C⽂件中的函数,并且不让编译器改动函数名,⽤def⽂件导出函数。
下⾯我们来看⼀下C++⽂件我们⽤VS2008新建个DLL⼯程,⼯程名为“TestDLL”默认的源⽂件后缀为 .CPP (即C++⽂件)。
输⼊测试代码如下:01 int _stdcall MyFunction(int iVariant)02 {03 return 0;04 }为了导出上⾯这个函数,我们有以下⼏个⽅法:3. 使⽤传统的模块定义⽂件 (.def)新建⼀个后缀为.def的⽂本⽂件(这⾥建⼀个TestDll.Def),⽂件内容为:LIBRARY TestDllEXPORTSMyFunction在 Link 时指定输⼊依赖⽂件:/DEF:"TestDll.Def"4. Visual C++ 提供的⽅便⽅法在01⾏的int 前加⼊ __declspec(dllexport) 关键字通过以上两种⽅法,我们就可以导出MyFunction函数。
COMFatekPLC动态链接库使用说明书
COMFatekPLC动态链接库使用说明书一、使用对象和场合:对象:柯力内部软件开发人员。
场合:需要与永宏PLC通讯的上位机程序开发项目。
只作为项目中上位机程序调用的一个组件存在。
二、简要说明COMFatekPLC类库是在VS2008平台下,用C#语言开发的一款能与永宏PLC通讯的动态链接库。
通过调用该动态链接库,可以快速的与PLC实现数据交互,缩短上位机软件开发周期。
该dll库不能作为单独软件而独立运行。
三、COMFatekPLC功能简介1、命令永宏PLC运行/停止函数。
2、一次读写n个M点的状态函数。
3、一次读写n个Y点的状态函数。
4、一次读取n个X点的状态函数。
5、一次读写n个数据区的数据(D区/DD区)函数。
四、COMFatekPLC函数使用介绍1.添加引用:在新建的上位机软件工程中添加FatekPLC.dll的引用。
2.new一个对象:在工程中定义全局对象变量,在主窗口登录事件中new该对象,在new对象时,必须先定义串口号(与PLC通讯的串口号)和PLC的站号。
public FatekPLC plc_contrl;//定义对象//new一个对象, m_PLC_SerialPort为上位机与PLC的通讯串口号,m_PLC_Station为PLC的站号地址。
plc_contrl= new FatekPLC(m_PLC_SerialPort,m_PLC_Station);3.调用函数:可调用FatekPLC.dll 库中的读写M 、Y 、X 点状态,读写D 区的数据。
① 运行/停止:plc_contrl.RunStop_Plc(int runStat);//runstat 为int 型,为0时PLC 停止运行,为1时PLC 启动运行②读取M 点:plc_contrl.Read_M(int length, int array)//返回null 为读取失败,length 为读取长度,array 为起始地址③读取Y 点:plc_contrl.Read_Y(int length, int array)// 同上④读取X 点:plc_contrl.Read_X(int length, int array)// 同上⑤读取D 区:plc_contrl.Read_D(int length,int array) //返回浮点型,length 为读取长度,array 为起始地址⑥读取DD 区:plc_contrl.Read_DDdd(int length,int array) //返回long 型,length 为读取长度,array 为起始地址⑦写入M 点:plc_contrl.Write_M_Port(int length, int array, int [] value)// 写多个M 点,返回为成功,-1为程序错误,为通讯端口未打开,为返回位数或校验不对,length 为读取长度,array 为起始地址,value 为写入值数组(1,0)⑧写入Y 点:plc_contrl.Write_Y_Port(int length, int array, int [] value)// 同上⑨写入X 点:plc_contrl.Write_X_Port(int length,int array, int [] value)// 同上⑩写入D 区:plc_contrl.Write_D(int length,int array, int [] value)// 同上,value 为值函数表格详细如下:区域 读写读/写读(length 为读取长度,arr ay 为读取起始地址)写(length 为写入长度,array 为写入起始地址,value 为写的值数组)M 点String Read_M(int length, int array)int Write_M_Port(int length, int array, int [] value)X 点String Read_X(int length, int array)\(输入不允许写)Y 点String Read_Y(int length, int array)int Write_Y_Port(int length, int array, int [] value)D 点int [] Read_D(int length, int array)int Write_D(int length, int array, int [] value)DD 点(无符号长整型)long [] Read_DDdd(int length, int array)int Write_DD(int length, int array, long [] value)DD 点(浮点型)float [] Read_DDd(int length, int array)int Write_DD(int length, int array, float [] value)命令运行/停止int RunStop_Plc(int runStat) (runStat 为1时为运行,为0时为停止)。
舒特考勤机使用说明书
8
考勤管理系统_Pro
第[9]页,共[57]页
任何中央处理器,250M 以上的硬盘空间,64M 内存(建议用 128M), 800*600 以上 VGA、8 倍速 CDROM 光驱。 2、软件环境要求:本系统可运行于 Windows 98 及 Windows 2000 操作系统 平台,不适用其它的操作系统。
6
考勤管理系统_Pro
第[7]页,共[57]页
同时本系统的一大特色就是增加了鼠标右键的功能,在使用过程中多试用右 键,会有意想不到的方便。 10.多语言功能:本软件有英文及繁体的数据库,可满足不同用户的需求。
7
考勤管理系统_Pro
第[8]页,共[57]页
舒特考勤系统的运行环境: 1、 硬件环境要求:建议电脑配置:PII 450MHZ 以上或赛杨 600MHZ 以上
4.4 录入人事资料……………………………………………………….30 4.5 班次设置…………………………………………………………….32 4.6 排班(班次的分布)………………………………………………38
舒特常见典型问题汇总
1、消费机联机情况下消费报ERROR18原因:这说明该卡有补贴还未领取,不让消费。
解决方法:假设客户不想做这限制可以到数据库表ST_sysparam,找到param_code值为ConsumeHasSubsidy那行,将这行的最后一列param_value从0改成1。
改完后有补贴没领也可以正常这消费。
2、考勤系统在“考勤数据下载模块〞中下载完成后在界面没有任何数据显示原因:考勤规那么设置的卡号位数与实际机器的读卡位数不一致解决方法:进入系统的安装目录下,找到文件夹DownBak文件夹〔考勤数据文本默认存储途径〕中找到下载时生成的数据文本〔以当时下载的日期时间命名〕,查看一下卡号位数一共几位,然后将软件里面的“考勤规那么〞模块中的“考勤卡位数〞这一项设成与文本里面一致;此时就可以再进入“考勤数据下载模块〞模块选择“从文本导入〞将此文本导入。
3、客户有使用二次单价的需要,可以使用本文件目录下的SQL语句执行一下,然后做如以下图操作:然后把餐别的二次单价写在餐别设置的备注里面,修改后重启CRC便可。
4、有碰到客户添加人事资料提示“保存数据失败请检查数据准确性〞的时候要有两个地方要检查。
一:检查表st_identity中的table_name值为st_person这一行对应的current_id 的值是不是是当前st_person表中的所有人员的数量+1。
二:假设上一种方法修改了还不行,可直接用同一版本的晋级包对些数据库再晋级一下〔如:3.0软件,那么使用3.0晋级包再晋级一下〕。
5、客户没使用到3个子系统,但确提示注册。
这时可以到表st_subsystem中把没有用到的子系统的对应的列IsCreateTable和IsCreateTable的值从1改成0便可。
6、软件里面想启动充值或取款打印:到安装目录下的config文件夹里面的st_sys.ini中将PrintVoucher=0IsPrintSmallReport=0两个的值改为17、售饭机可以正常联机,但采集脱机记录会提示“〞有两种情况:一是CRC装在采集数据的本台电脑,此时应该检查CRC采集端的端口号是否与配置工具的通讯端口一致。
OUR_MIFARE.dll动态库使用说明
OUR_MIFARE.dll动态库使用说明一、动态库简介动态库OUR_MIFARE.dll用VC6.0++开发,编译成Release实体,适用于WIN98、NT、2000、XP、2003环境。
本文档下面的源代码例子是C++builder 的调用格式。
本动态库是本公司USB接口IC卡读写器的配套文件,必须和读写器一起使用。
还必须将硬件底层驱动的动态库WY-ICUSB.DLL放在与OUR_MIFARE.dll同一个目录下,否则不能使用。
OUR_MIFARE.dll在调用WY-ICUSB.DLL时采用的是动态调用的方法,所以在软件运行中可以随时更换USB接口。
推荐使用动态调用的方法使用本动态库。
本读写器支持ISO14443 TYPE A标准的Mifare One系列卡。
Mifare One卡的内部存储结构分为16个扇区,从第0区到第15区,每个扇区有独立的密码和权限控制字,可作为独立的电子钱包,每个扇区有4个块,序号为第0块、第1块、第2块、第3块,每块16个字节,第3块是卡的密码和权限控制字专用块,禁止在此存放数据。
第0块、第1块、第2块可随意存放数据。
但第0区的第0块已被固化了IC卡出厂信息,此块只能读出信息,不可更改。
每张卡都有一个全球统一的4个字节的序列号。
许多公司销售的读卡器只有读取卡序列号的功能,也能用于一般的考勤系统。
但这类读卡器跟本公司的读写器有着本质的不同,本公司的读写器不仅能读序列号,而且还有服务于IC卡所有用途的功能,比如选中卡、认证、读卡、写卡、改密码、休眠卡能功能。
二、易用函数大部份软件、一卡通公司,只要使用以下二个函数完全可以达到软件需求,比如读出信息、读出金额、扣费等等。
:0和1两种状态::推荐使用方法如下:先定义以下常量#define BLOCK0_EN 0x01 #define BLOCK1_EN 0x02以上函数是在已知卡密码的情况下操作。
如果需要更改卡密码可通过piccchangesinglekey函数,快速地更改卡密码,piccchangesinglekey详细介绍请查看下面第12页。
C动态链接库的函数和使用方法
C动态链接库的函数和使用方法动态链接库(Dynamic Link Library,简称DLL)是Windows操作系统中一种常用的库文件格式,它包含了一系列的函数和数据,可以供其他程序调用。
相对于静态链接库(静态库),动态链接库具有一些独特的特点和优势。
一、函数和使用方法:1.创建动态链接库:在Windows操作系统上,可以使用多种开发工具来创建动态链接库,最常用的是使用C/C++语言结合相应的集成开发环境(IDE)来进行创建。
下面以Visual Studio为例,介绍创建动态链接库的方法。
a) 打开Visual Studio,选择“新项目” -> “Win32控制台应用程序”。
b)在向导中选择“下一步”,然后选择“DLL”,并输入项目名称。
c)设定项目的相关属性,如生成目标、包含的文件等。
d)完成创建,并在项目中编写所需的函数和代码。
2.导出函数:在创建动态链接库的过程中,需要显式地将要调用的函数导出。
导出函数的方法有多种,其中最常用的是使用extern关键字和declspec属性。
a) 使用extern关键字:```extern "C" _declspec(dllexport) int myFunction(int param);```这样可以将myFunction函数导出,使其可以供其他程序调用。
b) 使用declspec属性:```#ifdef MYDLL_EXPORTS#define MYDLL_API _declspec(dllexport)#else#define MYDLL_API _declspec(dllimport)#endifMYDLL_API int myFunction(int param);```这样可以根据是否定义了MYDLL_EXPORTS宏来自动切换函数的导入导出。
3.调用动态链接库中的函数:在其他程序中使用动态链接库的函数需要进行动态链接,将DLL加载到内存中,并获取相应的函数指针进行调用。
舒特常见典型问题汇总
1、消费机联机情况下消费报ERROR18原因:这说明该卡有补贴还未领取,不让消费。
解决方法:如果客户不想做这限制可以到数据库表ST_sysparam,找到param_code值为ConsumeHasSubsidy那行,将这行的最后一列param_value从0改成1。
改完后有补贴没领也可以正常这消费。
2、考勤系统在“考勤数据下载模块”中下载完成后在界面没有任何数据显示原因:考勤规则设置的卡号位数与实际机器的读卡位数不一致解决方法:进入系统的安装目录下,找到文件夹DownBak文件夹(考勤数据文本默认存储路径)中找到下载时生成的数据文本(以当时下载的日期时间命名),查看一下卡号位数一共几位,然后将软件里面的“考勤规则”模块中的“考勤卡位数”这一项设成与文本里面一致;此时就可以再进入“考勤数据下载模块”模块选择“从文本导入”将此文本导入。
3、客户有使用二次单价的需要,可以使用本文件目录下的SQL语句执行一下,然后做如下图操作:然后把餐别的二次单价写在餐别设置的备注里面,修改后重启CRC便可。
4、有碰到客户添加人事资料提示“保存数据失败请检查数据准确性”的时候要有两个地方要检查。
一:检查表st_identity中的table_name值为st_person这一行对应的current_id 的值是不是是当前st_person表中的所有人员的数量+1。
二:如果上一种方法修改了还不行,可直接用同一版本的升级包对些数据库再升级一下(如:3.0软件,则使用3.0升级包再升级一下)。
5、客户没使用到3个子系统,但确提示注册。
这时可以到表st_subsystem中把没有用到的子系统的对应的列IsCreateTable和IsCreateTable的值从1改成0便可。
6、软件里面想启动充值或取款打印:到安装目录下的config文件夹里面的st_sys.ini中将PrintVoucher=0IsPrintSmallReport=0两个的值改为17、售饭机可以正常联机,但采集脱机记录会提示“未能与采集端127.0.0.1建立联接”有两种情况:一是CRC装在采集数据的本台电脑,此时应该检查CRC采集端的端口号是否与配置工具的通讯端口一致。
舒特科技-手持机消费机使用手册
目录功能简介: (2)一. 选型指南 (2)1. 消费机产品分类 (2)2. 按通讯方式选型 (2)二. 硬件功能说明 (3)1. 型号功能列表 (3)2. 硬件参数 (3)3. 产品外观 (3)4. 感应卡发卡器部件说明 (4)5. 消费机 (5)6. 出纳机 (5)7. 订餐机 (5)三. 消费机功能及设置 (5)1. 机号设定 (5)2. 消费机硬件密码的修改 (6)3. 消费模式的选择及说明 (7)4. 其它模式(IC卡系统才有此功能) (8)5. 消费机时间设置 (8)6. U盘消费机设置方法 (9)7. 消费机的其它功能 (9)四. 出纳机功能操作 (11)1. IP/机号的设置 (11)2. 出纳模式选择 (11)五、联网与布线 (12)1. 单机通讯 (12)2. 多机联网 (12)六. 常见故障及维护 (13)1. 常见故障 (13)2. 错误代码提示 (13)前言欢迎您选用我公司生产的消费机,为了您正确、方便、快捷地使用本产品,同时更详细的了解本产品的功能,请您在使用本产品前认真阅读此说明书。
功能简介:◆灵活的消费方式:计次、计份、键值、金额、菜谱/品种、自定义单价等消费方式;◆灵活的刷卡方式:可以先刷卡再输金额,也可以先输金额再刷卡;◆可限制每餐和每天的消费次数;◆卡类设置:可区分单位不同性质的人员,限定不同的消费机,消费时段和不同的消费折扣、补贴金额等;◆智能的工作模式:兼容联机消费模式和脱机消费模式,并可自动转换;◆丰富的报表:财务报表项目丰富,内容详尽,并且用户可以自定义报表项目;◆强大的查询功能:可对各种数据进行多条件组合查询;◆丰富的数据接口:可导出为EXCEL、WORD、TXT等多种数据格式;◆容量大,速度快:TCP/IP系统联网台数和使用人数不受限制,通讯速度10M;◆纠错功能:允许纠错最后三笔记录;◆自助操作:可以在消费机上直接挂失、解挂、修改个人密码;◆折扣补助:可以定义多种消费卡种类,每类卡可以定义不同的折扣和补助金额;多种补助发放方式;◆操作网络化:多个经授权的用户可同时浏览和操作系统,打印报表,实现分单位、分权限管理;◆界面人性化:设置简单,流程清晰,整洁优美,稍懂电脑就能操作;◆软件规格高:网络版,多语言(简体\繁体\英文),满足不同用户的需求;◆完善的订餐功能,可与考勤机联动使用(订餐机);◆系统功能强,可满足大部分学校、工矿、企事业单位的需求。
BXGPRS动态库说明(No bxBusy)
BXGPRS动态库说明一、BXGPRS动态库说明1. typedef BOOL(__stdcall *bxstart)(LPCTSTR ipaddr,int portval);函数作用:启动服务器;参数说明:Ipaddr:服务器IP地址Portval:服务器端口地址;2. typedef void(__stdcall *bxclose)();函数作用:关闭服务器参数说明:无3. typedef int(__stdcall *bxlist)(char *pgprs);函数作用:列出上线终端列表;每个GPRS终端的名称的长度为11个字符;分别列出;参数说明:Pgprs:GPRS上线终端列表;每个GPRS终端名称的长度为11个字符隔开;4. typedef BOOL(__stdcall *bxsend)(LPCTSTR gprsname,char *sendbuf,intsendsize);函数作用:通过上线的GPRS终端向对应的控制卡发送数据;参数说明:Gprsname:GPRS终端名称;Sendbuf:预发送的数据;每次发送的数据最长不超过1024个字节。
当发送数据大于一包数据长度时,分包循环发送。
分包发送时注意使用bxbusy函数判断GPRS是否处于空闲状态,切记只有当gprs处于空闲状态时再发送下一包数据。
判断Bxbusy是否空闲的最大溢出时间可设置为45秒钟(每间隔1秒判断一下bxbusy函数状态。
当大于45秒时按照出错处理)。
Sendsize:发送的数据长度;5. typedef int(__stdcall *bxrecv)(LPCTSTR gprsname, char *recbuf);函数作用:从GPRS终端接收的数据;参数说明:Gprsname:GPRS终端名称;Recbuf:从GPRS终端接收的数据信息;6. typedef int(__stdcall *bxsignal)(LPCTSTR gprsname);//心跳包信息返回信号信号强度函数作用:GPRS终端返回的心跳包信息;返回值为GPRS的信号强度值。
动态库串口函数说明(精简)
主题:通讯接口函数说明内容摘要:精简函数版本:2007-08-08 18:33日期:2008.01.25动态库名:DASCOMM.DLL通用命令(适用于消费系统和考勤门禁系统):1:HANDLE OpenComm(int CommPort)功能:打开串口参数:int CommPort:串口标志取值如下:0 —Com1, 1 —C om2 …返回:大于0为串口设备号,小于0 表示打开串口错误。
2:int CloseComm(HANDLE icdev)功能:关闭串口参数:HANDLE icdev:OpenComm() 返回的设备号返回:成功则返回0,小于0见错误代码3:int Hand_Shake(HANDLE icdev,int Node_Addr,LPCSTR Password)功能:握手参数:HANDLE icdev:OpenComm() 返回的设备号int Node_Addr:为节点号LPCSTR Password:握手密码,此密码由初始化系统卡时返回。
返回:成功则返回0,小于0见错误代码表备注:此函数常用于消费系统。
4:int Hand_Shake_N(HANDLE icdev,int Node_Addr)功能:握手参数:HANDLE icdev:OpenComm() 返回的设备号int Node_Addr:为节点号返回:成功则返回0,小于0见错误代码表备注:此函数常用于考勤系统、门禁系统。
5:int Set_NodeTime(HANDLE icdev,LPSTR DateTimes)功能:设置时间参数:HANDLE icdev:OpenComm() 返回的设备号LPSTR DateTimes:日期时间,格式为“YYYYMMDDHHMNSS”,如:1999年1月28日10点30分50秒为“19990128103050”返回:成功则返回0,小于0见错误代码表6:int Get_NodeTime(HANDLE icdev,LPSTR DateTime)功能:取时间参数:HANDLE icdev:OpenComm() 返回的设备号LPSTR DateTime:返回节点日期时间(时间格式同设置时间函数)返回:成功则返回0考勤系统使用的命令:1:int Get_Curr_Record(HANDLE icdev,LPINT Node_Addr,LPSTR Record_Data) 功能:读取节点当前记录,节点记录指针不变。
读卡器常用函数
系统函数:功能:获取动态库版本号原型:int WINAPI lib_ver(unsigned int *pVer)参数:*pVer:[OUT] 动态库版本号返回:成功返回0功能:初始化串口原型:int WINAPI rf_init_com (intport,long baud)参数:port: [IN] 串口号baud: [IN] 为通讯波特率4800~115200返回:成功返回0功能:关闭Com端口原型:int WINAPI rf_ClosePort()返回:成功返回0功能:读取读写卡器型号及产品批号原型:int WINAPI rf_get_model(unsigned short icdev,unsigned char *pVersion,unsigned char *pLen)参数:icdev: [IN] 通讯设备标识符pVersion:[OUT]返回的信息pLen: [OUT]返回信息的长度返回:成功返回0说明:见“型号说明”部分功能:指定设备标识原型:int WINAPI rf_init_device_number(unsigned short icdev)参数:icdev: [IN] 通讯设备标识符返回:成功返回0说明:SL系列读卡器支持组网功能,读卡器只响应设备标识符与本身相符或设备标识符等于0x0000的指令。
功能:读取设备标识原型:int WINAPI rf_get_device_number(unsigned short *pIcdev)参数:pIcdev:[OUT]存放返回通讯设备标识符返回:成功返回0说明:如果一个串口同时联有两台以上读卡器,不可使用该命令功能:设置读写卡器非接触工作方式原型:int WINAPI rf_init_type(unsigned short icdev, unsigned char type) 参数:icdev: [IN]通讯设备标识符type: [IN]读写卡器工作方式返回:成功返回0说明:只支持单一协议的读卡器此函数无效type = 'A':设置为TYPE_A方式type = 'B':设置为TYPE_B方式type = 'r':设置为AT88RF020卡方式type = 's':设置为ST卡方式type = '1':设置为ISO15693方式功能:设置读写卡器天线状态原型:int WINAPI rf_antenna_sta(unsigned short icdev, unsigned char model)参数:icdev: [IN] 通讯设备标识符model: [IN] 天线状态返回:成功返回0说明:model = 0:关闭天线model = 1:开启天线功能:设置指示灯颜色原型:int WINAPI rf_light(unsigned short icdev, unsigned char color) 参数:icdev:[IN] 通讯设备标识符color:[IN] 0 =熄灭1 =红色2 =绿色3 =黄色返回:成功返回0说明:SL300L型读卡器无此功能功能:蜂鸣原型:int WINAPI rf_beep(unsigned short icdev, unsigned char msec)参数:icdev: [IN] 通讯设备标识符msec: [IN] 蜂鸣时限,单位是10毫秒返回:成功返回0功能:读取读写卡器内部时钟(SL200专有函数)原型:int WINAPI ReadTime(unsigned short icdev, unsigned char *pData, unsigned char *pLen)参数:icdev: [IN] 通讯设备标识符pData: [OUT]年(1)+星期(1)+月(1)+日(1)+时(1)+分(1)+秒pLen: [OUT]返回数据的长度返回:成功返回0功能:更新读写卡器内部时钟(SL200专有函数)原型:int WINAPI WriteTime(unsigned short icdev, unsigned char *pData) 参数:icdev: [IN] 通讯设备标识符pData: [IN]年(1)+星期(1)+月(1)+日(1)+时(1)+分(1)+秒返回:成功返回0功能:设置时钟显示格式(SL200专有函数)原型:int WINAPI DisPlayTime(unsigned short icdev,unsigned char bShowFlag)参数:icdev: [IN] 通讯设备标识符bShowFlag:[IN] 显示方式0 =显示‘年’-‘月’-‘日’!0 =显示‘时’-‘分’-‘秒’返回:成功返回0功能:设置读写卡器显示数据(SL200专有函数)原型:int WINAPI DisPlayString(unsigned short icdev, unsigned char *pData, unsigned char Len)参数:icdev: [IN] 通讯设备标识符pData: [IN] 显示内容,ASCII字符Len: [IN] 数据长度返回:成功返回0例: unsigned char disdata[9] = {"1234567.8"};加密函数:功能:DES算法加密函数原型:int WINAPI des_encrypt(unsigned char *szOut,unsigned char *szIn,unsignedintinlen,unsigned char *key,unsignedintkeylen)参数:szOut:返回的DES加密结果,长度等于明文长度szIn:明文inlen:明文长度,8字节的整数倍key:密钥keylen:密钥长度,如果大于8字节,是3des,如果小于等于8字节单des.不足补零返回:成功返回0功能:DES算法解密算法函数原型:int WINAPI des_decrypt(unsigned char *szOut,unsigned char *szIn,unsignedintinlen,unsigned char *key,unsignedintkeylen)参数:szOut:返回的DES解密结果,长度等于密文长度szIn:密文inlen:密文长度,8字节的整数倍key:密钥keylen:密钥长度,如果大于8字节,是3des,如果小于等于8字节单des.不足补零返回:成功返回0ISO14443A函数:功能:寻TYPE_A卡原型:int WINAPI rf_request(unsigned short icdev,unsigned char model,unsigned short *pTagType)参数:icdev: [IN] 通讯设备标识符model: [IN] 寻卡模式pTagType:[OUT]返回卡类型值返回:成功返回0说明:mode = 0x26:寻未进入休眠状态的卡mode = 0x52:寻所有状态的卡pTagType:0x4400 = ultra_light0x0400 = Mifare_One(S50)0x0200 = Mifare_One(S70)0x4403 = Mifare_DESFire0x0800 = Mifare_Pro0x0403 = Mifare_ProX0x0033 = SHC1102要对感应区内的ISO14443A卡进行读写操作应顺序调用以下库函数MifareOne:1. int WINAPI rf_request2. int WINAPI rf_anticoll3. int WINAPI rf_select此后卡片处于激活状态UltraLight:1. int WINAPI rf_request2. int WINAPI intrf_ul_select此函数集合了防冲撞和激活指令,此后卡片处于激活状态Mifare_DESFire:1. int WINAPI rf_DESFire_rst此函数集合了寻卡、防冲撞、激活及复位指令,此后卡片处于激活状态MifarePro(X):1. int WINAPI rf_typea_rst此函数集合了寻卡、防冲撞、激活及复位指令,此后卡片处于激活状态SHC1102:1.int WINAPI rf_request功能:ultra light卡防冲撞并激活原型:int WINAPI intrf_ul_select (unsigned short icdev,unsigned char *pSnr,unsigned char *pLen)参数:icdev: [IN] 通讯设备标识符pSnr: [OUT]返回卡序列号pLen: [OUT]返回序列号的长度返回:成功返回0功能:读取MifareOne卡一块数据原型:int WINAPI rf_M1_read (unsigned short icdev,unsigned char block,unsigned char *pData,unsigned char *pLen)参数:icdev: [IN] 通讯设备标识符block: [IN] M1卡绝对块号pData: [OUT]返回的数据pLen: [OUT]返回数据的长度返回:成功返回0说明:此函数也适用于ultra_light卡,ultra_light卡每个 page 4字节,每次调用此函数返回4个连续的page的数据功能:向ultra light卡中写入一块数据原型:int WINAPI intrf_ul_write (unsigned short icdev,unsigned char page,unsigned char *pData)参数:icdev: [IN] 通讯设备标识符page: [IN] ultra light卡页地址(0~0x0f)pData: [IN] 写入的数据,4字节返回:成功返回0功能:命令已激活的TYPE_A卡进入HALT状态原型:int WINAPI rf_halt(unsigned short icdev)参数:icdev: [IN] 通讯设备标识符返回:成功返回0说明:卡片接收到此命令后退出激活状态功能:验证MifareOne卡密钥原型:int WINAPI rf_M1_authentication2(unsigned short icdev,unsigned char model,unsigned char block,unsigned char *pKey)参数:icdev: [IN] 通讯设备标识符model: [IN] 密码验证模式block: [IN] 要验证密码的绝对块号pKey: [IN] 密钥内容,6 字节返回:成功返回0说明:model = 0x60:验证A密钥model = 0x61:验证B密钥功能:将Mifare One 卡某一块初始化为钱包原型:int WINAPI rf_M1_initval(unsigned short icdev, unsigned char block,long value)参数:icdev: [IN] 通讯设备标识符block: [IN] M1卡绝对块号pValue: [IN] 初始金额,16进制,低字节在前返回:成功返回0功能:读取Mifare One卡钱包值原型:int WINAPI rf_M1_readval(unsigned short icdev, unsigned char block,long *pValue)参数:icdev: [IN] 通讯设备标识符block: [IN] M1卡绝对块号pValue: [OUT]返回的值,16进制,低字节在前返回:成功返回0功能:Mifare One卡充值原型:int WINAPI rf_M1_increment (unsigned short icdev, unsigned char block,long value)参数:icdev: [IN] 通讯设备标识符block: [IN] M1卡绝对块号value: [IN] 要增加的值,16进制,低字节在前返回:成功返回0功能:Mifare One卡扣款原型:int WINAPI rf_M1_decrement (unsigned short icdev, unsigned char block,long value)参数:icdev: [IN] 通讯设备标识符block: [IN] M1卡绝对块号value: [IN] 要扣的值,16进制,低字节在前返回:成功返回0功能:Mifare One卡数据回传原型:int WINAPI rf_M1_restore (unsigned short icdev, unsigned char block) 参数:icdev: [IN] 通讯设备标识符block: [IN] M1卡绝对块号返回:成功返回0说明:用此函数将指定的块数据传入卡的buffer,然后可用rf_M1transfer( )函数将buffer 中数据再传送到另一块中去,源地址和目的地址须在同一扇区内功能:将M1卡BUFFER中的块数据传入指定的块原型:int WINAPI rf_M1_transfer (unsigned short icdev, unsigned char block)参数:icdev: [IN] 通讯设备标识符block: [IN] M1卡绝对块号返回:成功返回0说明:该函数仅在increment、decrement和restore 命令之后调用代码:模块代码:'******************通讯命令******************************************************************'打开串口 int WINAPI rf_init_com(intport,long baud);Public Declare Function rf_init_com Lib "MasterRD.dll" (ByVal port&, ByVal baud&) As Long'关闭串口 int WINAPI rf_ClosePort();Public Declare Function rf_ClosePort Lib "MasterRD.dll" () As Long'******************************************MF1*********************** ******************'int WINAPI rf_request(unsigned short icdev, unsigned char model, unsigned short *TagType);Public Declare Function rf_request Lib "MasterRD.dll" (ByValicdev%, ByVal model As Byte, _ByRefTagType%) As Long'int WINAPI rf_anticoll(unsigned short icdev, unsigned char bcnt, unsigned char *ppSnr,'unsigned char* pRLength);Public Declare Function rf_anticoll Lib "MasterRD.dll" (ByValicdev%, ByValbcnt As Byte, _ByRefppsnr As Byte, ByRefpRLength As Byte) As Long'int WINAPI rf_select(unsigned short icdev,unsigned char *pSnr,unsigned char srcLen,'unsigned char *Size);Public Declare Function rf_select Lib "MasterRD.dll" (ByValicdev%, ByRefpSnr As Byte, _ByValsrclen As Byte, ByRef size As Byte) As Long'int WINAPI rf_M1_authentication2(unsigned short icdev,unsigned char model,unsigned char block,'unsigned char *key);Public Declare Function rf_M1_authentication2 Lib "MasterRD.dll" (ByValicdev%, ByVal model As Byte, _ByVal block As Byte, ByRef key As Byte) As Long'int WINAPI rf_M1_read(unsigned short icdev, unsigned char block, unsigned char *ppData,'unsigned char *pLen);Public Declare Function rf_M1_read Lib "MasterRD.dll" (ByValicdev%, ByVal block As Byte, _ByRef buff As Byte, ByRefpLen As Byte) As Long'int WINAPI rf_M1_write(unsigned short icdev, unsigned char block, unsigned char *data);Public Declare Function rf_M1_write Lib "MasterRD.dll" (ByValicdev%, ByVal block As Byte, _ByRef buff As Byte) As Long'int WINAPI rf_halt(unsigned short icdev);Public Declare Function rf_halt Lib "MasterRD.dll" (ByValicdev%) As Long 程序代码:Option ExplicitPrivate Sub Command1_Click()Dim i&, j%, port&, baud&, buf1(200) As Byte, b1 As Byte, s1$port = cb_ckh.ListIndex + 1If (port = 0) Thenlb_info.Caption = "请选择串口号!"End Ifbaud = CLng(cb_btl.Text)If (baud = 0) Thenlb_info.Caption = "请选择波特率!"End If'打开串口i = rf_init_com(port, baud)If (i<> 0) Thenlb_info.Caption = "串口号打开失败!"Exit SubEnd If'寻卡i = rf_request(0, &H52, j)If (i<> 0) Thenlb_info.Caption = "寻卡失败!"Exit SubEnd If'防冲撞i = rf_anticoll(0, 4, buf1(0), b1)If (i<> 0) Thenlb_info.Caption = "防冲撞失败!"Exit SubEnd Ifs1 = ""For i = 0 To b1 - 1s1 = s1 &Right("00" & Hex(buf1(i)), 2)Next itx_kh.Text = s1'选卡i = rf_select(0, buf1(0), 4, b1)If (i<> 0) Thenlb_info.Caption = "选卡失败!"Exit SubEnd Iflb_info.Caption = "选卡成功!"End SubPrivate Sub Command2_Click()Dim i&, m&, buf1(200) As Byte, buf2(200) As Byte, s1$, b1 As Byte, b2 As Byte, b3 As Bytes1 = Trim(tx_key.Text)If (Len(s1) <> 12) Thenlb_info.Caption = "密钥长度不对!"tx_key.SetFocusExit SubEnd IfFor i = 0 To 5buf1(i) = Val("&H" & Mid(s1, i * 2 + 1, 2))Next im = cb_kh.ListIndexIf (m = -1) Thenlb_info.Caption = "请选择块号!"Exit SubEnd IfIf (op_a.Value) Thenb1 = &H60End IfIf (op_b.Value) Thenb1 = &H61End Ifb3 = CByte(m)'验证密钥i = rf_M1_authentication2(0, b1, b3, buf1(0))If (i<> 0) Thenlb_info.Caption = "验证密钥失败!"Exit SubEnd If'读卡i = rf_M1_read(0, b3, buf2(0), b2)If (i<> 0) Thenlb_info.Caption = "读卡失败!"Exit SubEnd Ifs1 = ""For i = 0 To b2 - 1s1 = s1 &Right("00" & Hex(buf2(i)), 2)Next itx_sj.Text = s1lb_info.Caption = "读卡成功!"End SubPrivate Sub Command3_Click()Dim i&, m&, buf1(200) As Byte, buf2(200) As Byte, s1$, b1 As Byte, b2 As Byte, b3 As Bytes1 = Trim(tx_key.Text)If (Len(s1) <> 12) Thenlb_info.Caption = "密钥长度不对!"tx_key.SetFocusExit SubEnd IfFor i = 0 To 5buf1(i) = Val("&H" & Mid(s1, i * 2 + 1, 2)) Next im = cb_kh.ListIndexIf (m = -1) Thenlb_info.Caption = "请选择块号!"Exit SubEnd IfIf (op_a.Value) Thenb1 = &H60End IfIf (op_b.Value) Thenb1 = &H61End Ifs1 = Trim(tx_sj.Text)If (Len(s1) <> 32) Thenlb_info.Caption = "数据长度不对! "tx_sj.SetFocusExit SubEnd IfFor i = 0 To 15buf2(i) = Val("&H" & Mid(s1, i * 2 + 1, 2)) Next i'验证密钥b3 = CByte(m)i = rf_M1_authentication2(0, b1, b3, buf1(0)) If (i<> 0) Thenlb_info.Caption = "验证密钥失败!"Exit SubEnd If'写卡i = rf_M1_write(0, b3, buf2(0))If (i<> 0) Thenlb_info.Caption = "写卡失败!"Exit SubEnd Iflb_info.Caption = "写卡成功!"End SubPrivate Sub Command4_Click()Dim i&i = rf_halt(0)If (i<> 0) Thenlb_info.Caption = "卡休眠失败!"Exit SubEnd Iflb_info.Caption = "卡休眠成功!"End SubPrivate Sub Form_Load()Dim i&For i = 0 To 63cb_kh.AddItemCStr(i), iNext icb_ckh.ListIndex = 0: cb_btl.ListIndex = 1: cb_kh.ListIndex = 4 End Sub。
舒特一卡通硬件错误代码含义
一卡通硬件错误代码含义:1考勤机错误代码:1:在限定时间内重复刷卡对策:无2:黑红名单对策:检查黑或红名单模式,下载名单3:IC卡考勤机(新主板)IC卡读头无法正常设置对策:考勤机重新上电试试4:脱机记录无法发送成功对策:检查线路,机号、IP是否重复,更换8月8日以后动态库11:无法定位写指针对策:下载数据后再刷卡18:网络机型IP初始化不成功对策:重新开机,如果还不行检查网卡与主板联线是否正常。
20:U盘机读设置文件失败对策:检查计算机日期和考勤机日期是否一致,检查U盘是否兼容。
21:U盘机读设置参数失败对策:检查计算机日期和考勤机日期是否一致,检查U盘是否兼容。
26:U盘机无法创建记录文件对策:检查U盘是否兼容。
U盘是否写保护27:U盘机写入记录文件失败对策:检查U盘是否兼容。
U盘是否写保护28:与U盘通讯超时对策:换个U盘试试。
32:存储器欲写入的空间未擦除成功对策:先下载所有数据,然后初始化。
33:存储器空间满对策:下载数据34:存储器空间满对策:下载数据36:写记录时错误对策:先把脱机记录收集完,初始化一下。
64:读存储器失败对策:考勤机重新上电2售饭机:错误代码:1:用户密码错误对策:检查软件里加密密码,重新下传用户的密码2:该卡类不允许消费对策:检查卡类设置4:当天当餐累计消费超过次数对策:无6:卡上余额不足对策:无7:不在消费时段对策:看餐次时间设置,检查卡类能否在该餐别消费8:该餐别不允许消费对策:检查卡类能否在该餐别消费9:黑红名单对策:检查黑或红名单模式,下载名单10:联机模式,3-1模式下,消费记录传送到服务器失败。
对策:检查机器设置和通讯线路,检查收集软件是否运行。
11:无法定位写指针对策:下载数据后再刷卡12:脱机下,找不到品种对策:检查品种设置,检查品种是否超过300种,下传品种参数。
接口函数库(二次开发库)使用说明书
接口函数库(二次开发库)使用说明书说明书版本:V2.06更新日期:2020.01.01目录第一部分概述 (1)第二部分兼容ZLG函数库及数据结构 (2)2.1 类型定义 (2)2.1.1 Device Type (2)2.1.2 VCI_BOARD_INFO (2)2.1.3 VCI_CAN_OBJ (3)2.1.4 VCI_INIT_CONFIG (5)2.2 函数描述 (8)2.2.1 VCI_OpenDevice (8)2.2.2 VCI_CloseDevice (9)2.2.3 VCI_InitCan (9)2.2.4 VCI_ReadBoardInfo (12)2.2.5 VCI_GetReceiveNum (13)2.2.6 VCI_ClearBuffer (14)2.2.7 VCI_StartCAN (15)2.2.8 VCI_ResetCAN (16)2.2.9 VCI_Transmit (17)2.2.10 VCI_Receive (18)第三部分其他函数及数据结构描述 (21)3.1 类型定义 (21)3.1.1 VCI_BOARD_INFO1............................................................ 错误!未定义书签。
3.2 函数描述 (21)3.2.1 VCI_UsbDeviceReset (21)3.2.2 VCI_FindUsbDevice (22)第四部分接口库函数使用流程 (24)I第一部分概述用户如果只是利用USB-CAN总线接口适配器进行CAN总线调试,可以直接利用随机提供的USB-CAN Tool工具软件,进行收发数据的测试。
如果用户打算编写自己产品的软件程序。
请认真阅读以下说明,并参考我们提供的:① C++Builder ②C# ③VC ④VB ⑤ ⑥Delphi ⑦LabVIEW ⑧LabWindows/CVI ⑨Matlab等示例代码。
TYRM3000动态库接口函数说明文档
TYRM3000动态库接口函数说明文档1.主要接口函数PortOpen (PBYTE pszPort, PBYTE pszBuildCommDCB);PortClose(void);SendData (char ch1,char ch2, PBYTE pszReadData, int nReadLen);CPUPowerOnOrDown (char ch1,char ch2, char mid ,PBYTE pszReadData, int nReadLen);CPUSendAPDU (char ch1,char ch2, char mid, PBYTE pszSendData ,int nSendLen ,PBYTE pszReadData, int nReadLen);2.函数说明2.1 PortOpen(PBYTE pszPort, PBYTEpszBuildCommDCB)类型: bool;返回值:True--成功,False--失败;函数描述:根据参数打开指定串口;参数定义:pszPort –串口号,如”COM1”;pszBuildCommDCB –串口设置参数, 如”COM1:9600,n,8,1”;2.2 P ortClose(void)类型: bool,返回值:True--成功,False--失败;函数描述:关闭串口,必须在调用函数PortOpen之后才能调用;参数定义:无;2.3 S endData (char ch1,char ch2, PBYTEpszReadData, int nReadLen)类型: int;返回值:1--收发正确2--发送错误3--接收错误4--接收数据错误;函数描述:发送功能指令;参数定义:ch1 -- 命令标识1,如41(参照附指令代码)ch2 -- 命令标识2, 如52(参照附指令代码)注:如下发查询指令,功能码为”c””A”,则ch1=99(“c”的ASCII码)Ch2=65(“A”的ASCII码)pszReadData --接收数据缓冲区nReadLen -- 接收数据缓冲区大小.2.4 DLL_EXP int PASCAL CPUPowerOnOrDown (char ch1,char ch2, char mid ,PBYTE pszReadData, int nReadLen);类型: int;返回值:1--收发正确2--发送错误3--接收错误4--接收数据错误;函数描述:CPU卡上电和下电发送指令;参数定义:ch1 -- 命令标识1,如41(参照附指令代码)ch2 -- 命令标识2, 如52(参照附指令代码)注:如下发查询指令,功能码为”c””A”,则ch1=99(“c”的ASCII码)Ch2=65(“A”的ASCII码)mid --卡机编号,一般默认为0,即mid='0'pszReadData --接收数据缓冲区nReadLen -- 接收数据缓冲区大小示例了:根据TYRM-3000协议说明书中可知,CPU卡上电指令为"hB",卡机编号为0,则上电指令下:缓冲区pszReadData[1024]接收返回数据nReadLen=300CPUPowerOnOrDown ('h','B', '0' ,pszReadData[0], 300);2.5 DLL_EXP int PASCAL CPUSendAPDU (char ch1,char ch2, char mid, PBYTE pszSendData ,int nSendLen ,PBYTE pszReadData, int nReadLen);类型: int;返回值:1--收发正确2--发送错误3--接收错误4--接收数据错误;函数描述:发送APDU指令函数;参数定义:ch1 -- 命令标识1,如41(参照附指令代码)ch2 -- 命令标识2, 如52(参照附指令代码)注:如下发查询指令,功能码为”c””A”,则ch1=99(“c”的ASCII码)Ch2=65(“A”的ASCII码)mid --卡机编号,一般默认为0,即mid='0'pszSendData --发送的APDU指令缓冲区nSendLen --发送缓冲区中数据长度pszReadData --接收数据缓冲区nReadLen -- 接收数据缓冲区大小示例:根据TYRM-3000协议说明书中可知,CPU卡发送APDU指令为"hC",卡机编号为0, pszSendData={A0 A4 00 00 02 2F E2}没发送长度nSendLen=7缓冲区pszReadData[1024]接收返回数据nReadLen=300CPUSendAPDU ('h','C', '0' ,pszSendData[0],7,pszReadData[0], 300); 附指令代码:。
动态库函数说明
测试案例运行环境要求操作系统必须是Windows XP, Windows 2003 Server或以上. (不支持Windows 2000及以下系统)系统要求安装.NET Framework1.1环境, 如果没有, 可以从wcomm_sdk\dotNetFramework1.1\dotnetfx.exe进行安装测试案例演示如下功能:读取控制器运行信息(时间, 刷卡记录数, 权限数, 最近一条刷卡记录, 门磁状态, 按钮状态, 故障信息)读取控制器IP, 设置IP(仅用于.NET 控制器)校准控制器时间远程开1号门提取记录删除已提取的记录发送权限操作(1.先清空权限, 2. 再添加权限)发送控制时段实时监控10 Samples程序(wcomm_sdk\V1.0\Samples) (3)10.1 VB6.0 (3)10.1.1 目录: wcomm_sdk\V1.0\Samples\VB6.0\485 Controller-VB6.0 (3)11 刷卡记录描述 (4)12 WComm_Serial控件[WComm_Serial.dll串口通信] (7)12.1 CWComm_Serial类 (7)12.1.1 serial_comm函数 (7)12.1.2 *ErrCode 属性 (7)13 WComm_UDP控件(WComm_UDP.dll) (8)13.1 WComm_Operate类 (8)13.1.1 udp_comm 函数 (8)13.1.2 ErrCode 属性 (8)13.1.3 ErrMessage 属性 (9)13.1.4 CreateBstrCommand 函数 (9)13.1.5 CreateBstrCommandOfAdjustClockByPCTime函数 (9)13.1.6 GetSwipeDateFromRunInfo函数 (9)13.1.7 与日期时间相关指令 (10)13.1.8 MSDateYmdToWCDateYmd 函数 (10)13.1.9 MSDateHmsToWCDateHms 函数 (10)13.1.10 WCDateToMSDate函数 (10)13.1.11 读取运行状态信息的数据帧分析指令 (11)13.1.12 GetSNFromRunInfo函数 (11)13.1.13 GetClockTimeFromRunInfo函数 (11)13.1.14 GetCardRecordCountFromRunInfo函数 (11)13.1.15 GetPrivilegeNumFromRunInfo函数 (12)13.1.16 GetDoorStatusFromRunInfo函数 (12)13.1.17 GetButtonStatusFromRunInfo函数 (12)13.1.18 GetErrorNoFromRunInfo函数 (12)13.1.19 其它 (13)13.1.20 NumToStrHex函数 (13)13.1.21 StrHexToNum函数 (13)13.1.22 CardToStrHex函数 (13)13.1.23 minUDPWaitTimeout属性 (14)10Samples程序(wcomm_sdk\V1.0\Samples)运行环境要求操作系统必须是Windows XP, Windows 2003 Server. (不支持Windows 2000及以下系统)系统要求安装.NET Framework1.1环境, 如果没有, 可以从wcomm_sdk\dotNetFramework1.1\dotnetfx.exe进行安装测试案例演示如下功能:读取控制器运行信息(时间, 刷卡记录数, 权限数, 最近一条刷卡记录, 门磁状态, 按钮状态, 故障信息)读取控制器IP, 设置IP(仅用于.NET 控制器)校准控制器时间远程开1号门提取记录删除已提取的记录发送权限操作(1.先清空权限, 2. 再添加权限)发送控制时段实时监控10.1 VB6.0运行环境要求操作系统必须是Windows XP, Windows 2003 Server. (不支持Windows 2000及以下系统)系统要求安装.NET Framework1.1环境基本步骤.安装V isual Studio 6.0 (开发平台).安装dotnetfx.exe:, 运行wcomm_sdk\dotNetFramework1.1\dotnetfx.exe.注册控件, 运行wcomm_sdk\V1.0\Bin\WComm_REG2003.bat.打开VB6.0, "工程"->"引用..." ,在”可用的引用”中选择2个(在每个项目中都要加入此两引用):WComm_Serial 1.0 Type LibraryWComm_UDP 1.0 Type Library10.1.1目录: wcomm_sdk\V1.0\Samples\VB6.0\485 Controller-VB6.0485控制器操作示例:对控制器S/N 26604, 通信口为COM1, 进行操作.测试用的3个卡: [注意: 卡号按从小到大排列进行赋值]cardno(0) = 342681cardno(1) = 7217564cardno(2) = 25409969可依据实际情况进行修改.11刷卡记录描述(卡号小于100表示特殊操作记录)12WComm_Serial控件[WComm_Serial.dll串口通信]12.1 CWComm_Serial类12.1.1serial_comm函数与485控制器进行串口通信.HRESULT serial_comm (BSTR bstrCommand, BSTR bstrPort, BSTR* pbstrInfo);参数bstrCommand 发送给控制器指令帧bstrPort 通信端口, 分别以COM1, COM2 字符串表示pbstrInfo 控制器返回的数据帧(如果为空, 则查ErrCode找原因)返回值异常/错误见ErrCode说明12.1.2*ErrCode 属性返回出错代码. 只读Public ReadOnly Property ErrCode() As Long13WComm_UDP控件(WComm_UDP.dll)系统要求操作系统必须是Windows XP, Windows 2003 Server. (不支持Windows 2000及以下系统)此控件必须运行在.NET Framework1.1环境下13.1 WComm_Operate类13.1.1udp_comm 函数与.NET控制器进行交互通信.Public Function udp_comm(ByV al commandString As String, ByV al ipAddr As String, ByV al ipPort As Integer) As String参数commandString 发送给控制器指令帧ipAddr 控制器的IP地址, 如果为空, 则采用广播包方式ipPort 控制器的通信端口, 默认是60000返回值控制器返回的数据帧(如果为空, 则表示没有返回数据)异常/错误见ErrCode说明备注PC发出一条指令, 如果指定的.NET控制器接收后, 会返回相应数据.13.1.2ErrCode 属性返回出错代码. 只读Public ReadOnly Property ErrCode() As Long返回值13.1.3ErrMessage 属性返回与错误号为-53相关的出错信息. 只读.Public ReadOnly Property ErrMessage() As String '系统异常时返回的信息返回值ErrCode=-53时出错的参考信息(可能为空)13.1.4CreateBstrCommand 函数生成发送给控制器的指令帧.Function CreateBstrCommand(ByV al controllerSN As Long, ByV al strFuncData As String) As String参数controllerSN 控制器序列号S/N, 也就是控制器上标签号S/N后数字strFuncData 操作功能及参数值[协议文档中的指令帧中序号从3到30的字节, 在此用字符串表示]返回值生成的指令帧(如果为空, 则查ErrCode找原因)异常/错误见ErrCode说明13.1.5CreateBstrCommandOfAdjustClockByPCTime函数生成校准控制器时间的指令帧.Function CreateBstrCommandOfAdjustClockByPCTime(ByV al controllerSN As Long) As String参数l controllerSN 控制器序列号S/N, 也就是控制器上标签号S/N后数字strFuncData 操作功能及参数值[协议文档中的指令帧中序号从3到30的字节, 在此用字符串表示]返回值生成的指令帧(以当前计算机时间为准)(如果为空, 则查ErrCode找原因)异常/错误见ErrCode说明13.1.6GetSwipeDateFromRunInfo函数从读取运行信息或读取记录的指令中获取—卡号, 状态, 及时间.Function GetSwipeDateFromRunInfo(ByV al strRunInfo As String, ByRef cardId As Long, ByRef status As Long) As String参数strRunInfo (指令1081,108D返回的, 含有刷卡记录的)数据帧cardId 8位的卡号status 刷卡状态返回值刷卡年月日时分秒[yyyy-MM-dd hh:mm:ss](如果为空, 表明没有刷卡记录或查ErrCode是否有异常)异常/错误见ErrCode说明13.1.7与日期时间相关指令13.1.8MSDateYmdT oWCDateYmd 函数将yyyy-MM-dd日期格式转换成控制器使用的两个字节的ymd短日期格式(详见协议) Function MSDateYmdToWCDateYmd(ByV al strMSDateYmd As String) As String参数strMSDateYmd 长日期格式yyyy-MM-dd 年月日返回值短日期格式的YMDL YMDH [年月日的低位, 高位](如果为空, 则查ErrCode找原因)异常/错误见ErrCode说明13.1.9MSDateHmsT oWCDateHms 函数将HH:mm:ss 时间格式转换成控制器使用的双字节的hms格式(详见协议)Function MSDateHmsToWCDateHms(ByV al strMSDateHms As String) As String参数strMSDateHms 长时间格式hh:mm:ss 时分秒返回值短时间格式的HMSL HMSH [时分秒的低位, 高位](如果为空, 则查ErrCode找原因)异常/错误见ErrCode说明13.1.10WCDateT oMSDate函数将控制器的短时间日期格式转换成微软时间格式(详见协议)Function WCDateToMSDate(ByV al strWCDate As String) As String参数strWCDate YMDL YMDH HMSL HMSH [年月日的低位, 高位; 时分秒的低位, 高位] 返回值输出日期时间(采用格式yyyy-MM-dd HH:mm:ss [年-月-日时:分:秒])(如果为空, 则查ErrCode找原因)异常/错误见ErrCode说明13.1.11读取运行状态信息的数据帧分析指令13.1.12GetSNFromRunInfo函数从运行信息中获取--控制器序列号.Function GetSNFromRunInfo(ByV al strRunInfo As String) As Long参数strRunInfo 接收到的数据帧返回值产品序列号异常/错误见ErrCode说明13.1.13GetClockTimeFromRunInfo函数从运行信息中获取--控制器时钟.Function GetClockTimeFromRunInfo(ByV al strRunInfo As String) As String参数strRunInfo 接收到的数据帧返回值输出格式为yyyy-MM-dd HH:mm:ss 的控制器时钟(如果为空, 则查ErrCode找原因)异常/错误见ErrCode说明13.1.14GetCardRecordCountFromRunInfo函数从运行信息中获取--刷卡记录数.Function GetCardRecordCountFromRunInfo(ByV al strRunInfo As String) As Long 参数strRunInfo 接收到的数据帧返回值刷卡记录数异常/错误见ErrCode说明13.1.15GetPrivilegeNumFromRunInfo函数从运行信息中获取--权限数.Function GetPrivilegeNumFromRunInfo(ByV al strRunInfo As String) As Long参数strRunInfo 接收到的数据帧返回值权限数异常/错误见ErrCode说明13.1.16GetDoorStatusFromRunInfo函数从运行信息中获取--指定门的门磁状态.Function GetDoorStatusFromRunInfo(ByV al strRunInfo As String, ByV al lngDoorNo As Long) As Long 参数strRunInfo 接收到的数据帧lngDoorNo 指定的门,从1(表示1号门)开始,最大是4返回值指定门的门磁状态[=1表示门开, =0 表示门关]异常/错误见ErrCode说明13.1.17GetButtonStatusFromRunInfo函数从运行信息中获取--指定门的按钮状态.Function GetButtonStatusFromRunInfo(ByV al strRunInfo As String, ByV al lngDoorNo As Long) As Long 参数strRunInfo 接收到的数据帧lngDoorNo 指定的门,从1(表示1号门)开始,最大是4返回值指定门的按钮状态[=1表示按钮松开, =0 表示按钮按下]异常/错误见ErrCode说明13.1.18GetErrorNoFromRunInfo函数从运行信息中获取--故障号.Function GetErrorNoFromRunInfo(ByV al strRunInfo As String) As Long参数strRunInfo 接收到的数据帧返回值故障号(>0表明有故障)[详细见协议]异常/错误见ErrCode说明13.1.19其它13.1.20NumT oStrHex函数将十进制数按十六进制转换成低位在前,高位在后的字符串.Function NumToStrHex(ByV al num As Long, ByV al Len As Long) As String 参数num 要转换的数字Len 要转换的字节长度返回值转换为十六进制后的字符串异常/错误见ErrCode说明13.1.21StrHexT oNum函数将十六进制(低位在前,高位在后)的字符串转换成十进制数.Function StrHexToNum(ByV al strHex As String) As Long参数strHex 十六进制(低位在前,高位在后)的字符串返回值转换后的数字异常/错误见ErrCode说明13.1.22CardT oStrHex函数将8位卡号按十六进制转换成低位在前,高位在后的字符串.Function CardToStrHex(ByV al cardId As Long) As String参数cardId 要转换的卡号返回值转换为十六进制后的字符串(6个字符, 低位字节在前, 高位字节在后) 异常/错误见ErrCode说明13.1.23minUDPWaitTimeout属性与.NET控制器通信时的最小等待时间(单位是ms毫秒). 读/写Public Property minUDPWaitTimeout() As Long备注如果minUDPWaitTimeout值小于1秒, 系统以1秒为最小等待时间. 主要用于网络延时较大环境.正常使用时不用修改.。
函数说明文档
动态库函数使用说明一、动态库说明(1)该动态库接口所适用的卡类型:MF1S50卡。
(2)“btlock73L.dll”这个文件是调用读写卡函数的动态库。
(3)“zymsr232.dll”这个文件是调用RW-21读卡器的驱动,“zymurusb.dll、EasyD12_500.dll”这两个文件是调用RW-33读卡器的驱动,“btmf1232.dll”这个文件是调用RW-26D读卡器的驱动,“acr120u.dll、AcsReader.dll”这两个文件是调用RW-41读卡器的驱动。
(4)酒店密码(HotelPwd)由酒店提供。
(5)房间号(DoorID)由酒店提供, 门锁软件有房间号与房间名称的对应表。
(6)宾客流水号(1---4294967296)可按时间生成或者按累加1算法生成,具有顶替功能,即宾客流水卡号大的宾客卡顶替宾客流水号小的宾客卡。
(7)宾客序号(1-255),即表示同住宾客卡时同住宾客的流水号相同,序号不同。
(8)更改酒店密码时,密码一定要6位字符串。
(9)有效时间的值一定要10位,年、月、日、时、分。
(10)MF1S50卡扇区默认值为0,当酒店所使用的扇区己作更改时,请填写相应的扇区号。
(11)每一个使用接口发卡点都必须配合一个“硬件狗”才可以运行,即是有多少个发卡点就需要多少个“硬件狗”。
二、“btlock73L.dll”库函数说明(语言:DelPhi7)(1)function Write_Guest_Card(Port, ReaderT ype, SectorNo: Byte; HotelPwd: PChar; ClientID: Longword; CardNo, GuestSN, GuestIdx: Integer; DoorID,SuitDoor, PubDoor, BeginTime, EndTime: PChar): Integer;说明:写宾客卡函数。
参数说明:Port:通讯口号1、2、3、4分别代表串口COM1、COM2、COM3、COM4(范围1------4);当使用的读卡器为USB设备时,通迅口号不生效。
ZMotion PC函数库编程手册
ZMotion PC 函数库编程手册Version 2.0版权说明本手册版权归深圳市正运动技术有限公司所有,未经本公司授权,任何人不得翻印、抄袭本手持中的任何内容。
正运动技术公司保留在不事先通知情况下,修改本手册中内容的权利。
调试机器要注意安全!请务必在机器中设计有效的安全保护装置,并在软件中加入出错处理程序,否则所造成的损失,正运动技术公司没有义务或责任对此负责。
目录第一章PC 编程概述 (1)1.1 运动控制器特点 (1)1.2 开发架构 (1)1.3 开发步骤 (2)1.3.1 采用VC 开发应用程序 (2)1.4 库函数封装方法 (4)1.5 多控制器链接 (6)第二章基本功能介绍 (7)2.1 控制器链接 (7)2.2 基本轴参数初始化 (8)2.3 特殊IO 设置 (9)2.4 单轴运动 (10)2.4.1 单轴回零 (10)2.4.2 单轴点动 (11)2.4.3 单轴状态 (12)2.5 多轴插补运动 (13)2.5.1 常用插补运动 (13)2.5.2 连续插补运动 (14)2.5.3 自动拐角参数设置 (16)2.6 手轮运动 (17)2.7 IO 与AD/DA 设置读取 (17)2.8 PC 与控制器数据交互 (18)第三章DLL 函数列表 (20)3.1 控制器操作函数介绍 (20)3.2 运动指令函数介绍 (23)3.2.1 辅助指令 (23)3.2.2 多轴直线插补 (27)3.2.3 圆弧、椭圆、螺旋插补 (28)3.2.4 特殊运动指令 (41)3.2.5 同步运动指令 (43)3.2.6 单轴运动指令 (47)3.3 轴参数轴状态函数介绍 (49)3.3.2 轴基本参数函数 (50)3.3.3 其他参数函数 (63)3.3.4 特殊信号参数函数(原点,限位...) (73)3.4 输入输出函数介绍 (77)3.5 数据通讯函数 (82)第四章直接串口控制 (88)4.1 串口直接命令控制模式 (88)第一章PC 编程概述1.1 运动控制器特点ZMC 运动控制器支持PC 直接在线控制,提供DLL 函数库和VC,VB,C#,LABVIEW 等例程。
EQ2002动态库说明书
11、§添加单行文本区
int User_AddSingleText(int iCardNum,User_SingleText *pSingleText,int iProgramIndex); 函数功能:添加单行文本区 参数说明:iComNum - 板卡编号,基数为 1,即第一块卡编号为 1
6
pSingleText- 单行文本参数表指针,参考【参数表】中 9 iProgramIndex- 节目索引号 返回值: -1-添加单行文本区失败,非-1-分区编号
8、§添加时间区
int User_AddTime(int iCardNum,User_DateTime *pDateTime,int iProgramIndex); 函数功能:添加时间区 参数说明:iComNum - 板卡编号,基数为 1,即第一块卡编号为 1
pDateTime - 时间参数表指针,参考【参数表】中 7 iProgramIndex- 节目索引号 返回值: -1-添加时间区失败,非-1-分区编号
{
User_PartInfo PartInfo;
COLORREF
BkColor;
User_FontSet FontInfo;
SYSTEMTIME reachTime;
BOOL
bDay;
BOOL
bHour;
BOOL
bMin;
BOOL
bSec;
BOOL
bMulOrSingleLine;
char
*chTitle;
typedef struct _User_DateTime {
User_PartInfo PartInfo;
§分区信息
2
COLORREF User_FontSet int
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
考勤机动态库函数说明表
动态库配置文件KQDLL.ini
[PARAM]
--动态库版本
DLLVERSION=5.0-20070808
--卡号长度(新主板硬件此项无效, 旧主板硬件必须设置和硬件一致) CARDLEN=6
--适用IP机型(新主板硬件此项无效), =1表示机号用01表示, =0表示机号用IP后两位
IPNOTYPE=1
--生成的刷卡记录文本是否覆盖存在的文件,=1表示覆盖,=0表示追加到存在的文件后
ISOVERFILE=1
--下载成功是否删除硬件中数据(新主板硬件此项无效)
ISDELERECORD=1
--生成的刷卡记录文本存放的路径,只有ISUSESELFPATH=1才有效,默认是当前路径
KQTXTPATH=E:\NewKQDLL\Bin\W_Kqrec( 新 )\
--是否使用自定义的路径,=1表示是,=0表示否
ISUSESELFPATH=0
--是否显示下载窗口, =1表示是,=0表示否
ISSHOWFORM=1
--是否记录下载通讯日志,=1表示是,=0表示否
ISRECLOG=0
{=============================================================================
注意:
1、新考勤机已经不能采用以前的的下传卡号,下传姓名函数SendCardName/LanSendCardName。
2、同时下传编号在新机器已取消,由机器内部自动编号。
3、新考勤下传卡号、卡号+姓名,必需由三个函数组合完成
打开端口(_LANBEGINTRAN)
下传卡号/下传卡号+姓名(_LANTRANCARD / _LANTRANCARDNAME)
结束下传并关闭端口(_LANENDTRAN)
4、485机器与IP机器使用方法一样,只有函数名不同。
=============================================================================}
//下传卡号过程
procedure TFMHard.pdTranCard(aIsOver: Integer = 0; bComLan: Boolean; Address, Port: string); var
hcomm: THandle;
hsock: Integer;
i,li_ACK,li_count: integer;
li_Try: Integer;
begin
i := 0;
if not bComLan then Address := Port;
if StringGrid1.cells[1,1] = '' then Exit;
try
if bComLan then //485机器
begin
//先返回打开的端口地址
i := _BEGINTRAN(StrToInt(Address), StrToInt(Port), 2, aIsOver); // 覆盖
if i <= 0 then
begin
pdMsgOK(sOpenFail);
Exit;
end else
hcomm := i;
end else //Ip机器
begin
//先返回打开的端口地址
i := _LANBEGINTRAN(PChar(Address), 2, aIsOver);
if i <= 0 then
begin
pdMsgOK(sOpenFail);
Exit;
end else
hsock := i;
end;
pdShowProgress(Format(sProcessTitle, [Address]), StringGrid1.RowCount - 1, sProcessmsg); for i := 1 to StringGrid1.RowCount - 1 do
begin
Application.ProcessMessages;
pdUpdateProgress(i);
for li_Try := 1 to 3 do
begin
if bComLan then
//这里的hcomm,hsock为返回的地址
li_ACK := _TRANCARD(hcomm, strtoint64(StringGrid1.Cells[1,i]))
else
li_ACK := _LANTRANCARD(hsock, strtoint64(StringGrid1.Cells[1,i]));
if (li_ACK < 0) or (li_ACK = 1) then
begin
Sleep(1000);
Continue;
end else
Break;
end;
if li_Try > 3 then break;
pdHideProgress;
//记得结束后,需要传入结束指令
if bComLan then
_ENDTRAN(hcomm, 2)
else
_LANENDTRAN(hsock, 2);
pdShowAck(Address, li_ACK);
end;
end;
procedure TFMHard.pdTranCardName(aIsOver: Integer; bComLan: Boolean; Address, Port: string);
var
i,li_count : integer;
hcomm : THandle;
hsock : Integer;
li_ACK : integer; // ACK状态
ls_Name: string; // 姓名
li_Try : Integer; // 重发次数
begin
i := 0;
if not bComLan then Address := Port;
if StringGrid1.cells[1,1] = '' then Exit;
try
if bComLan then
begin
i := _BEGINTRAN(StrToInt(Address), StrToInt(Port), 1, aIsOver); if i <= 0 then
begin
pdMsgOK(sOpenFail);
Exit;
end else
hcomm := i;
i := _LANBEGINTRAN(PChar(Address), 1, aIsOver);
if i <= 0 then
begin
pdMsgOK(sOpenFail);
Exit;
end else
hsock := i;
end;
pdShowProgress(Format(sProcessTitle, [Address]), StringGrid1.RowCount - 1, sProcessmsg);
for i := 1 to StringGrid1.RowCount - 1 do
begin
Application.ProcessMessages;
pdUpdateProgress(i);
ls_Name := Trim(stringgrid1.Cells[3, i]);
if Length(ls_Name) > 8 then ls_Name := Copy(ls_Name,1,8);
for li_Try := 1 to 3 do
begin
if bComLan then
li_ACK := _TRANCARDNAME(hcomm, strtoint64(Trim(stringgrid1.Cells[1, i])), PChar(ls_Name))
else
li_ACK := _LANTRANCARDNAME(hsock, strtoint64(Trim(stringgrid1.Cells[1, i])), PChar(ls_Name)); if (li_ACK < 0) or (li_ACK = 1) then
begin
Sleep(1000);
Continue; // 发送失败 // 超时错误
end else
Break;
end;
if li_Try > 3 then Break;
end;
finally
pdHideProgress;
if bComLan then
_ENDTRAN(hcomm, 1)
_LANENDTRAN(hsock, 1);
pdShowAck(Address, li_ACK); end;
end;。