想用VB重新开发,请各位老师指点
我有个考勤设备和动态库,用VB编的,功能很不齐全,我现在想自己重新用VB开发一个考勤系统,而且这个考勤系统要集发卡,采集数据等功能。现在对这个考勤动态库无从下手,想请各位专家能给你指点指点? 附件粘不上,我只好把考勤动态库的说明发上。考勤动态库(CJ320.dll)函数说明
将CJ320.dll拷到windows的system目录下,并在程序模块中声明。
HANDLE OpenComm ( short nPort,char* pSetting )
函数说明:打开串口
nPort:串口号,1表示COM1,2表示COM2...;
pSetting:串口初始化值,设为"9600,n,8,1";
返回:串口句柄(长整型);
VB下声明:Declare Function OpenComm Lib "cj320" (ByVal port As Integer, ByVal setting As String) As Long
void CloseComm( HANDLE hCom )
函数说明:关闭串口;
hComm: 串口句柄;
返回:无;
VB下声明:Declare Sub CloseComm Lib "cj320" (ByVal h As Long)
short AttCmd( HANDLE hCom,BYTE Adr,BYTE Cmd,short * Len,BYTE *Buff)
函数说明:与考勤机通讯 ,参数的具体格式,见附表1
hCom: 串口句柄;
Adr:考勤机地址;
Cmd:命令字;
*Len:入口参数的长度及返回参数的长度;
*Buff:入口参数及返回参数
返回:=1表示成功,0表示失败,-2表示返回记录无效;
VB下声明:Declare Function AttCmd Lib "CJ320" (ByVal h As Long, ByVal Adr as Byte,ByVal Cmd as Byte,ByRef Length as Integer,ByRef Buff as Byte) As Integer
short ReadRecord(HANDLE hCom,BYTE Adr,BYTE Cmd,struct RecordS *Record,char *FileName,BYTE Bz) 函数说明:采集考勤记录 ,RecordS结构参见附录二
hCom: 串口句柄;
Adr:考勤机地址;
Cmd:命令字;
*Record:打卡记录指针;
*FileName 打卡记录存储的文件名,如"C:\TEMP\A.TXT" 文件结构如RecordS
Bz:是否要将打卡记录存入FileName文件(0—不存,1—存)
返回值:-1失败,0没有记录,>0读到的记录数, <-1读记录成功但写文件时失败读取的记录数为该值的绝对值减1条记录
VB下声明:Declare Function ReadRecord Lib "cj320" (ByVal h As Long, ByVal Adr As Byte, ByVal Cmd As Byte, RecD As gReadR, ByVal FileName As String, ByVal Bz As Byte) As Integer
short IssueRecord(HANDLE hCom,BYTE Adr,BYTE Cmd,struct RecordI *Record,char *FileName,BYTE Bz) 函数说明:采集发卡记录 ,RecordI结构参见附录三
hCom: 串口句柄;
Adr:考勤机地址;
Cmd:命令字;
*Record:发卡记录指针;
*FileName 发卡记录存储的文件名,如"C:\TEMP\A.TXT" 文件结构如RecordI
Bz:是否要将发卡记录存入FileName文件(0—不存,1—存) 返回值:-1失败,0没有记录,>0读到的记录数, -2表示读成功但所读记录无效, <-2 读记录成功但写文件时失败读取的记录数为该值的绝对值减1条记录
VB下声明:Declare Function IssueRecord Lib "cj320" (ByVal h As Long, ByVal Adr As Byte, ByVal Cmd As Byte, RecD As gReadR, ByVal FileName As String, ByVal Bz As Byte) As Integer
附录一:
命令类型
命令字 功能 入口参数长度 参数 返回长度 返回值
01 软复位 0 无
02 硬复位 0 无
03 设置时钟 7 秒、分、时、日、月、星期、年
04 设置系统参数 26 厂家标识(6)+卡类型(1)+扇区号1(1)+密钥1(6)+状态字(3)+扇区号2(1)+密钥2(6)+机具密码(2)
05 设置打卡记录指针 4 头指针(2)+尾指针(2)
06 设置时段表 8*4=32 每个时段4字节,共8个时段,每个时段包括起始时间(分、时)和终止时间(分、时)
07 设置继电器延时时间 1 延时的100ms数
08 设置打卡间隔时间 1 间隔的分钟数
09 设置门铃时间 32*2=64 当分、时设为99,99时代表到此为止,后面设置不起作用
0A 设置考勤机号 1 新考勤机号
0C 下传一个名单 8 卡号(4)+员工号(3)+时段(1)
0D 清除名单 0
0E 打开门锁或响铃 0
0F 设置发卡记录指针 0 头指针(2)+尾指针(2)
80
81
82
83 读考勤机时钟 0 无 7 秒、分、时、日、月、星期、年
84 读取系统参数 0 无 26 厂家标识(6)+卡类型(1)+扇区号1(1)+密钥(6)+状态字(3)+扇区号2(1)+密钥2(6)+机具密码(2)
85 读取打卡记录指针 0 无 4 头指针(2)+尾指针(2)
86 读取时段表 0 无 32 参见06
87 读取继电器延时时间 0 无 1 延时100ms数
88 读取打卡间隔时间 0 无 1 间隔的分钟数
89 读取响铃时间 0 无 64 参见09
8A
8B 读自检状态 0 无 2 Sw1+Sw2
8C 读当前记录,并且指针下移一步 0 无 16 卡号(4)+秒+分+时+日+月+年+6个标志
8D 读取当前记录,指针不下移 0 无 16 同上
8E 读取下一条记录(指针移一步,读取记录) 0 无 16 同上
8F 读取最新打卡记录,用于发卡 0 无 16 同上
90 每次读一个包,最多80个记录 0 无 16 同上
91 写IC卡卡号 16 卡号(4)+和+异或+10个任意数 16 应和写入的相同
92 读当前发卡记录,指针不下移 0 8 卡号(4)+员工号(3)+随机数(1)
93 读取下一条发卡记录(指针移一步,读取记录) 0 8 卡号(4)+员工号(3)+ 随机数(1)
94 读取发卡记录指针 0 无 4 头指针(2)+尾指针(2)
说明:
1. 设置系统参数(04):厂家标识(6)+卡类型(1)+扇区号1(1)+密钥1(6)+状态字(3)+扇区号2(1)+密钥2(6) +机具密码(2)
厂家标识:设置无效,可填任意值;
卡类型:ID卡=0,TM卡=1,ML卡=16,M1=17
扇区号1:M1卡并且用用户自定义的写入卡中的号作为卡号时有效(0-15)
密钥1:与扇区号1相对应的扇区密码
状态字:共3个字节
字节1
ID/IC
ICD DLING MDB MJB2 MJB1 XSB2 XSB1
ID/IC:ID卡时为0,IC卡时为1
ICD:当使用非ID卡时有效,0表示用卡的ID号作卡号,1表示用用户写入的号作为卡号
DLING:电铃有效位,0表示不带电铃,1表示带电铃
MDB:名单有效位,0表示不比较名单,1表示比较名单
MJB2:需要时段控制位,0表示不需要,1表示需要
MJB1:继电器动作允许位,0表示不允许,1表示允许
XSB2,XSB1:显示控制位(00-显示CF,01-显示ID号,10-显示下载名单中的用户号, 11-保留)
字节2
保留
保留 保留 RAMCY LENGB KEYCB TIMC IN/OUT
RAMCY:为0时不允许首指针覆盖尾指针,即打卡记录在未采集情况下不允许被新打卡记录覆盖,为1时允许
LENGB:卡号长度控制位,读ID号时(0-取6位,1-取8位); 读写入的卡号时(0-取2字节,1-取4字节)
KEYCB:键盘允许位:0表示允许,1表示不允许
TIMC: 1表示允许考勤,但不允许继电器动作;0表示名单、时段不对不允许考勤
IN/OUT:进出标志允许位:0表示不允许;1表示允许
字节3
保留
保留 保留 保留 保留 保留 保留 保留
扇区号2:M1卡对可能用到2个扇区来保存资料的情况下使用
密钥2:与扇区号2相对应的扇区密码
机具密码:用键盘设置机具参数时的密码,共4位用2个字节压缩BCD码表示.
2. 设置打卡记录指针(05):头指针指向下一条打卡记录所在的位置,尾指针指向已采集记录的下一条记录的位置,两者都是低位在前,高位在后,如头指针32,15表示下一条打卡记录将存放在15*256+32= 3872条记录处,CJ320A型机最多可存储28000条记录 即最大指针为96,109 ,当头指针大于等于尾指针时,未采集的记录数等于头指针减尾指针,否则为头指针减尾指针加28000。另外在设置指针时头指针必须是32的整数倍。
3. 设置时段表(06)与下传一个名单(0C)配合使用,下传一个名单中的最后一字节(时段)与设置的时段表的关系是该字节的8位(从低到高)分别对应所设时段表的1至8个时段,若某位为1,则表示在对应的时段的时间范围内打卡有效,0表示打卡总有效。
4. 下传一个名单(0C):下传名单需按卡号升序,依次下传
5. 设置发卡记录指针(0F):与(05)相同,但记录总数量为止500,且记录不循环, 即 头指针总是大于 尾指针
6.读自检测状态(8B):SW1+SW2
7.读当前打卡记录,并且指针下移一步(8C):成功读取打卡记录后,尾指针下移一位
8.读当前打卡记录,指针不下移(8D):成功读取打卡记录后,尾指针不下移
8.读取下一条打卡记录(8E):尾指针先下移一步,再读取记录,通常与(8D)一起使用
9.读取最新打卡记录(8F):读取当前打卡记录,首尾指针皆不移位
10.每次读一个包,最多80个打卡记录(90):在通讯稳定的情况下为加快采集速度时使用,当有超过80个记录时,一次读80条记录,尾指针移80位;当不足80时,读出剩余记录,并将尾指针移相应位(此时尾指针等于首指针)
11.写IC卡卡号(91):
12.读当前发卡记录,指针不下移(92):成功读取发卡记录后,尾指针不下移13.读取下一条发卡记录(93):尾指针先下移一步,再读取记录,通常与(92)一起使用
附录二:
打卡记录结构
struct RecordS{ long CardNo; 卡号
BYTE SecondTime; 秒
BYTE MinuteTime; 分钟
BYTE HourTime; 小时
BYTE DayTime; 日期
BYTE MonthTime; 月份
short YearTime; 年
BYTE Flag1 0-上班,1-下班
BYTE Flag2 0-不加班,1-加班
BYTE Flag3 0-正常,1-中途外出
BYTE Flag4 保留
BYTE Flag5 保留
BYTE Flag6 保留 } ;
ReadRecord函数中Cmd只能取0x8C,0x8D,0x8E,0x8f,0x90,0x92,0x93
附录三:
发卡记录结构
struct RecordI{ long CardNo; 卡号
long EmployeeID 员工号
} ;
IssueRecord函数中Cmd只能取0x92,0x93
--------------------编程问答-------------------- 二次开发问题应该简单,不懂的还可以问开发厂商嘛 --------------------编程问答-------------------- 汉,这么多眼睛多花了 --------------------编程问答-------------------- 有点难度哦
补充:VB , 控件