当前位置:编程学习 > VB >>

想用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 ,  控件
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,