您现在的位置:首页>>资料下载>>二次开发工具>> 2501-2502-2508-2801动态库标准版
2501-2502-2508-2801动态库标准版
2501_2502动态库标准版

 

一、    动态库概述

1、   采用RS485通讯方式。

2、   通讯波特率为19200bps

3、   此动态库可自适应简繁体操作系统。

4、   此动态库要与文件RM.txt联用。

5、   此动态库修改了GatherSendCardData函数,使该函数的输出文件中存放的物理卡号以十进制显示,并且姓名也以汉字显示出来。

6、   修改了在Delphui中使用SetClock函数无法传递数组参数的问题,特增加了一个SetClockStr函数,用于设置响铃点。

7、   修改了在采集打卡数据时及发卡数据时,当选中了物理卡号以十进制输出选项后,有些较大的物理卡号会输出为负数的问题。

8、   此动态库在运行时,要有“MSWINSCK.OCX”控件的支持,所以在使用时,请将些控件复制到Windows“System32”文件夹下,并注册。

9、   五个属性说明:

                         i.              Ver String型,只读属性,表示本动态库的版本号,此属性在以前的动态库中就存在。当前的值为:"V7.3  (CopyRight: 2004-05 2007-08)" ,在引用时,只要判断前四个字符是“V7.3”就可确认是新版本。

                        ii.              ModeInt型,可读可写,为0,表示串口通讯;为1,表示TCP通讯

                      iii.              IPString型,可读可写,考勤机IP地址;

                       iv.              TcpPortLong型,可读可写,考勤机进行TCP连接时的端口号,一般是1001

                        v.              TcpStateInt型,只读,当前TCP连接的状态,它的取值为:

0

缺省的。关闭

1

打开

2

侦听

3

连接挂起

4

识别主机

5

已识别主机

6

正在连接

7

已连接

8

同级人员正在关闭连接

9

错误

a)          

 

GatherRecordSum                                  PC采集打卡数据总条数

GatherData                                                        PC采集打卡数据           

GatherSendCardSum                                      PC采集发卡名单总条数                  

GatherSendCardData                                       PC采集发卡数据           

ClearRecord                                                      :清除考勤机全部打卡数据                

ClearNameList                                         :清除考勤机全部发卡名单                

CardSendToMachine                               PC下传一条发卡名单            

ClearName                                                         :从考勤机的发卡名单中清除某张卡的逻辑卡号        

SendRecordToMachine                         :发送一条打卡数据到考勤机上。

RepairAddress                                         :修改考勤机地址

SetClock                                                              :下传响铃时间表

RepairSystemParameter                         :修改系统参数

ReadCardNum                                                  :读取最近一次打卡的物理卡号(即读卡) √

ClearFlag                                                            :清除新卡标志

FindCard                                                              查找此物理卡号是否在机器中与发已卡

SetPort                                                                  :设置端口

DestoryPort                                                 :释放端口

ReadSystemParameter                          :读取系统参

ModifyDateTime                                         :修改时间日期    

SendShortMsg                                                    :发送短信到考勤机              ×

GetSounds                                                 :设置语音        ×

SetMachinePassword                              : 设置(修改)机器菜单密码     ×

GetMachinePassword                              : 取得机器菜单密码  ×

          SetClockStr                                                    :设置响铃时间(以字符串型式传入参数) 

         SendPictureMach                                          :下传开机画面 

Dim  KQ ‘定义一个变量

Set KQ = CreateObject("KQCONNECT_v70.Connect_v70")

函数说明:

1、               GatherRecordSum(ByVal VarAddr As Integer, VarRecordCount As Long, VarDescritption As String) As Boolean

功能说明: PC采集打卡数据总条数

参数:                   VarAddr为机器地址

                               VarRecordCount返回的记录总数

                               VarDescription描述,用此参数可以查看错误信息

返回值:     布尔值True成功,False失败

例子:                   GatherRecordSum VarAddr, RecordSum, "ok"

 

2、               GatherData(ByVal VarAddr As Integer, ByVal VarFilePath As String, VarFileName As String, VarDescription As String, BackRecordSum As Long, Optional SleepDate As Long = 2Optional phStrCardFlg As Long = 0, Optional IsFullYear As Boolean = False) As Boolean

功能说明:PC采集打卡数据

参数:                   VarAddr为机器地址

VarFilePath文件路径

                               VarFileName文件名

                               VarDescription描述,用此参数可以查看错误信息

                               BackRecordSum 返回记录数

                               SleepDate 延时设置。(在局域网中采集可能要改变其参数)

                               phStrCardFlg 输出的物理卡号,默认0十六进制,1为十进制

                               IsFullYear  为真,表示输出完整年份,如2005,否则输出05

例子:                   GatherData(TxtAddress.Text, App.Path, "DataRecordSet.txt", "OK", RecordSum, SleepDate.Text)

文件格式如下:三位机器地址+十位物理卡号+(68)位年月日+6位时分秒.

 

3、               GatherRecordSum(ByVal VarAddr As Integer, VarRecordCount As Long, VarDescritption As String) As Boolean

功能说明: PC采集打卡数据总条数

参数:                   VarAddr为机器地址

                               VarRecordCount记录数

                               VarDescription描述,用此参数可以查看错误信息

返回值:     布尔值True成功,False失败

例子:                   GatherRecordSum TxtAddress.Text, RecordCount, "ok"

 

4、               GtherSendCardSum(ByVal VarAddr As Integer, VarRecordCount As String) As Boolean

功能说明:PC采集发卡名单总条数

参数:                VarAddr为机器地址

                                     VarRecordCount返回的记录总数

返回值:   布尔值True成功,False失败

例子:                GatherSendCardSum VarAddr, RecordSum

 

5、               GatherSendCardData(ByVal varaddr As Integer, ByVal VarFilePath As String, ByVal VarFileName As String, VarDescription As String, BackRecordSum As Long, Optional ByVal SleepDate As Long = 15, Optional ByVal phStrCardFlg As Long = 0) As Boolean

功能说明:PC采集发卡数据

参数:                   VarAddr为机器地址

                               VarFilePath文件路径

                               VarFileName文件名

                               VarDescription描述,用此参数可以查看错误信息

                               BackRecordSum记录数

SleepDate延时,单位是毫秒,在局域网中采集可能要将其改大一些一般为10—100之间)

                               phStrCardFlg 输出的物理卡号,默认0十六进制,1为十进制,此参数可选,为了与以前兼容

返回值:     布尔值True成功,False失败

例子:                   KQ.GatherSendCardData(TxtAddress.Text,App.Path,"NameList.txt", StrDescription, RecCount1, SleepDate.Text)

                   文件格式如下:十位物理卡号+8位卡号(即工号)+四个汉字姓名

6、               ClearRecord(ByVal VarAddr As Integer) As Boolean

功能说明:清除考勤机全部打卡数据

参数:                   VarAddr为机器地址

返回值:     布尔值True成功,False失败

例子:                   KQ.ClearRecord(CInt(Trim(TxtAddress)))

 

7、               ClearNameList(ByVal VarAddr As Integer) As Boolean

功能说明:清除考勤机全部发卡名单

参数:                   VarAddr为机器地址

返回值:     布尔值True成功,False失败

例子:                   KQ.ClearNameList(CInt(Trim(TxtAddress)))

 

8、               CardSendToMachine(ByVal varAddr As Integer, ByVal strPhyCard As String, ByVal strCardID As String, ByVal strName As String, ByVal WeekFlag As Integer, ByVal TimeSect As String) As Boolean

功能说明:PC下传一条发卡名单

参数: 6

           VarAddr  为机器地

            strPhyCard  为物理卡号,十进制数表示

            strCardID   为工号,8位表示

            strName 姓名

            WeekFlag 周允许状态,此参数暂时不用传"00"就可以了

            TimeSect 时间段,此参数暂时不用传"00000000"就可以了

返回值:     布尔值True成功,False失败

例子:KQ.CardSendToMachine(CInt(TxtAddress.Text), TxtCardNum.Text, Trim(TxtNo.Text), "徐荣华", "00", "00000000")

 

9、               ClearName (ByVal VarAddr As Integer, ByVal PhyNum As String) As Boolean

功能说明:用来从考勤机的发卡名单中清除某张卡的逻辑卡号

参数:                   VarAddr为机器地址

                               PhyNum为物理卡号

返回值:     布尔值True成功,False失败

例子:                   KQ.clearname(CInt(TxtAddress.Text), Trim(TxtCardNum.Text))

 

10、           Public Function SendRecordToMachine(ByVal varAddr As Integer, ByVal PhyNum As String, ByVal DateTime As String, Optional ByVal FlagByte As String = "FF", Optional ByVal KeepByte As String = "99") As Boolean

功能说明:发送一条打卡数据到考勤机上。

参数:                VarAddr为机器地址

           PhyNum  物理卡号     (传进8位十六进制的物理卡号)

           DateTime年月日时分秒,格式为:yymmddhhmmss

                            FlagByte特征字节,默认为FF

                            KeepByte保留字节,默认为99

返回值:   布尔值True成功,False失败

 

例子:KQ.SendRecordToMachine(TxtAddress.Text,TxtCardNum.Text, "051018121235”, "1", "2")

 

11、           RepairAddress (ByVal VarAddr As Integer, ByVal NewAddress As Integer) As Boolean

功能说明:修改考勤机地址

参数:           VarAddr为机器旧地址

                       NewAddress机器新地址

返回值:  布尔值True成功,False失败

例子:KQ.RepairAddress(CInt(TxtAddress.Text), CInt(TxtNewAddr.Text))

 

12、           SetClock(ByVal VarAddr As Integer, ByRef ITime() As Date, ByVal Sect As String) As Boolean

功能说明:下传响铃时间表总共为30段一次下发10段,分三次下发同SECT这个参数决定。

参数:VarAddr为机器地址

             Itime时间

             Sect时间段参数1、表第一个10段,2、表第二个10段,3、第三个10段。

                    

返回值:布尔值True成功,False失败

           另外请参见:SetClockStr函数,它可以接受字符串参数。

例子:

Dim TimeArry(10) As Date

Dim i As Integer

Dim IHour As String, IMinute As String

Dim MySecond As Long

   

    For i = 0 To 9

        If TxtHour(i) <> "" Then

            IHour = TxtHour(i).Text

        Else

            IHour = "0"

        End If

        If TxtMin(i) <> "" Then

            IMinute = TxtMin(i).Text

        Else

            IMinute = "0"

        End If

        TimeArry(i) = CDate(IHour + ":" + IMinute)

    Next

   

    If KQ.SetClock(CInt(TxtAddress.Text), TimeArry, 1) Then

      Sta_Info.SimpleText = "成功"

    Else

      Sta_Info.SimpleText = "不成功"

    End If

   

End Sub

 

13、           RepairSystemParameter(ByVal VarAddr As Integer, ByVal JDYS As String, ByVal DKYS As String, ByVal TZZ As String) As Boolean

 

功能说明:修改系统参数

参数:  VarAddr为机器地址

JDYS  继电器延时 2 bytes

DKYS  打卡 延时  2 bytes

TZZ   特征字     2 ytes

0B101905040611402900 0100 03E8 000097

0B 10 19 050406 112947 00 0100 0000 0000 7B

 

0B101905040611420200010003E8 8000 3E

A  +  0FH + 19H  + 日期、时间、周 +  响铃/开锁延时2bytes  +  打卡延时2bytes  +  特征字2bytes  +  校验

 

继电器延时为2个字节,前者对应继电器1/s,后者对应继电器2/s,数值均不超过9963H),打卡延时为2字节,其值小于144005A0H),对应24小时以下的延时分钟的数值

特征字:  D7    工作模式    0、考勤模式       1门禁模式

D6    字体设置    0、简体           1 繁体

D5    响铃允许    0、禁止响铃       1、允许响铃

D4    开锁模式    0、卡||密码        1、卡+密码

D3    认卡模式    0、发卡有效       1、直接有效

                                 

返回值:   布尔值True成功,False失败

例子:RepairSystemParameter(CInt(TxtAddress.Text), Right("0000" & TxtY.Text, 4), "0000", JF)

此函数暂不完善,很容易造成机器故障,请慎用此功能(一般使用出厂时设定)。

 

14、           ReadCardNum(ByVal VarAddr As Integer, ByRef AllStr As String) As String

功能说明:读取最近一次打卡的物理卡号(即读卡)

参数:                   VarAddr为机器地址 

                               AllStr读出的全部信息。(内部使用)

                    

返回值:     物理卡号

例子:                   KQ. ReadCardNum(CInt(Trim(TxtAddress)), AllStr)

 

15、           ClearFlag(ByVal VarAddr As Integer) As Boolean

功能说明:清除新卡标志

参数:

                            VarAddr为机器地址

返回值:   布尔值True成功,False失败

例子:                ClearFlag(18)

 

16、           SendPictureMach(ByVal VarAddr As String, ByVal BmpFilePath As String) As Boolean (此函数暂不完整,不允许使用)

功能说明:下传开机画面

参数:                   VarAddr为机器地址

                               BmpFilePath文件名

                    

返回值:     布尔值True成功,False失败

例子:KQ.SendPictureMach(TxtAddress.Text, BmpPath)

 

17、           FindCard(ByVal VarAddr As Integer, ByVal PhyNum As String, CardYN As Boolean) As Boolean                      

功能说明: 查找此物理卡号是否在机器中已发过卡

参数:                   VarAddr为机器地址

                               PhyNum 物理卡号     (传进十进制的物理卡号)

                               CardYN是否在机器中 (返回标志,True存在,False不存在)

返回值:     布尔值True成功,False失败

例子:FindCard(CInt(TxtAddress.Text), Trim(TxtCardNum.Text), CardYN)

18、           DestoryPort() As Boolean

功能说明:                 关闭串口

参数:                        

返回值:            布尔值True成功,False失败

19、           SetPort(ByVal intCom As Integer) As Boolean

功能说明:        如果是串口模式,则设置并打开串口;

如果是TCP模式,则连接考勤机

参数:                         intCom 串口号

返回值:      布尔值True成功,False失败

20、           ReadSystemParameter(ByVal VarAddr As Integer, ByRef BackString As String) As Boolean

功能说明:                 读取系统参

参数:                         VarAddr为机器地址

                                     BackString返回的参数

返回值:      布尔值True成功,False失败

例子:KQ.ReadSystemParameter(TxtAddress.Text, str)

 

21、           ModifyDateTime(ByVal VarAddr As Integer, ByVal DDate As String, ByVal TTime As String, ByVal WWeek As Byte) As Boolean

功能说明:                修改日期时间

参数:                                 VarAddr为机器地址

                                             Ddate为日期

                                             Ttime为时间

                                             Wweek为星期(做考勤时不用)

返回值:    布尔值True成功,False失败

例子:

DDate = Right(Year(Date), 2) & Right(("00" & Month(Date)), 2) & Right(("00" & Day(Date)), 2)

TTime = Right(("00" & Hour(Time)), 2) & Right(("00" & Minute(Time)), 2) & Right(("00" & Second(Time)), 2)

WWeek = "01"

Mreturn = KQ.ModifyDateTime(CInt(Trim(TxtAddress.Text)), DDate, TTime, WWeek)

If Mreturn Then

      Sta_Info.SimpleText = "修改日期成功"

Else

      Sta_Info.SimpleText = "修改日期不成功"

End If

24SendShortMsg(ByVal varaddr As Integer, ByVal TTime As Integer, ByVal MsgStr As String) As Boolean

功能说明:       发送短信到考勤机(此函数暂不提供)

参数:                        VarAddr为机器地址

                                    Ttime为显示时长

                                    MsgStr为短信内容

返回值:    布尔值True成功,False失败

例子:

    If KQ.SendShortMsg(TxtAddress.Text, Text6.Text, TxtMsg.Text) Then

        Sta_Info.SimpleText = " 发送短信成功!"

    Else

        Sta_Info.SimpleText = "发送短信失败!"

    End If

25、   GetSounds(ByVal varaddr As Integer, ByVal SoundNum As Integer) As Boolean

此函数主要用于实时监控,如有问题可直接找本公司。  

功能说明:                 发送语音到考勤机

参数:                         VarAddr为机器地址

                                     SoundNum为语音号内容为18对应语音如下

语音提示:               

1:无效卡              

2                    

3:欢迎你              

4:你好                

5:生日快乐            

6:你迟到了            

7:节日快乐            

8:注意安全

返回值:      布尔值True成功,False失败

例子:KQ.GetSounds(TxtAddress.Text, SoundNum.Text)

26、   SetMachinePassword(ByVal varaddr As Integer, ByVal nPassword As Integer) As Boolean

功能说明:设置(修改)机器的菜单密码(只适用带按键机型)

参数:                VarAddr     为机器地址

                                     nPassword       为要设置的密码,最多4

返回值:    布尔值True成功,False失败

 

27、   GetMachinePassword GetMachinePassword(ByVal varAddr As Integer) As Integer

功能说明:读取机器菜单密码(只适用带按键机型)

参数:                VarAddr     为机器地址

返回值:  不小于0的整数值,如读取失败,返回-1

 

28、   SetClockStr(ByVal varAddr As Integer, ByVal strTime As String, ByVal Sect As String) As Boolean

功能说明:下传响铃时间表总共为30段,一次下发10段,如果要下发30段,则要分三次下发。下发哪一段由SECT参数决定。此数功能与SetClock一样,只不过传的参数是字符串。

参数:VarAddr为机器地址

             strTime时间字符串,格式为两位小时+两位分钟;

例如:”0800120513301400180020302325”,代表8:0012:0513:3014:0018:0020:3023:25

             Sect时间段参数,可取的值为[1,2,3];1、表示第一个10段;取2、表示第二个10段;取3、表示第三个10段。

                    

返回值:布尔值True成功,False失败

 

例子:

 

Dim i As Integer

Dim IHour As String, IMinute As String

Dim MySecond As Long

            strTime = ""

    For i = 0 To 9

        If TxtHour(i) <> "" Then

            IHour = Right("00" & Trim(TxtHour(i).Text), 2)

        Else

            IHour = "00"

        End If

        If TxtMin(i) <> "" Then

            IMinute = Right("00" & Trim(TxtMin(i).Text), 2)

        Else

            IMinute = "00"

        End If

        strTime = strTime & IHour & IMinute

    Next

   

    If KQ.SetClockstr(CInt(TxtAddress.Text), strTime, Text7.Text) Then

      Sta_Info.SimpleText = "响铃时间设置成功!"

    Else

      Sta_Info.SimpleText = "响铃时间设置失败!"

    End If

 

Attribute VB_Name = "CheckData_250X"

Option Explicit

 

'*****************************************************************************

'功能说明

'根据采集回的数据*.txt),验证数据的正确性验证规则

'1)  读出当前机器内的数据总数(M),与文本文件中的总数(N)比较,如果(N<M M=0),则返回False

'2)  判断数据中的日期时间格式是否合法,如果不是有效的日期时间,则返回False

'3)  判断最后一笔记录的刷卡时间与当前时间的间隔,如果超过1小时,则返回False

'4)  动态判断日期时间是否升序排列,如果不是,则返回False

'5)  此函数一般用在采集完刷卡数据之后。

'修改时间:2008-01-07

'参数:共7

'               VarAddr为机器地址

'                VarFilePath文件路径

'                VarFileName文件名

'                VarDescription描述,用此参数可以查看错误信息

'                intDelay 合理的时间间隔,单位是小时

'                phStrCardFlg 输出的物理卡号,默认0十六进制,1为十进制,此参数可选,为了与以前兼容

'               IsFullYear 为真,表示输出完整年份,如2005,否则输出05

'返回值:   整型,

'0-表示数据正常;

'1-  表示总条数小于机器内的条数;

'2-  表示有乱数据;

'3-  表示最后一笔记录的刷卡时间离现在间隔过长;

'4-  日期时间没有按升序排列

'-1,表示其他异常,具体异常可查看VarDescription变量的值。

'*****************************************************************************

Public Function CheckData( _

                            ByVal varAddr As Integer _

                            , ByVal VarFilePath As String _

                            , ByVal VarFileName As String _

                            , ByRef VarDescription As String _

                            , Optional ByVal intDelay As Integer = 24 _

                            , Optional ByVal phStrCardFlg As Long = 0 _

                            , Optional ByVal IsFullYear As Boolean = False _

                           ) As Integer

    Dim lngSum_Mach As Long '机器中的总条数

 

   

    Dim i As Long, J As Long

    Dim intRow As Long

   

    Dim strFile As String

    Dim Nfile As Integer

    Dim strTemp As String

   

    Dim strMachine As String        '机器号

    Dim strPhyCardID10 As String     '1010进制物理卡号

    Dim strPhyCardID8 As String      '816进制物理卡号

    Dim strRecoString As String

   

    Dim strDateTime As String        '完全日期时间

    Dim strDate As String

'    Dim strTime As String

   

    Dim datLastTime As Date '最后打卡时间

    Dim datTemp As Date '存放上一条的打卡时间

   

    On Error GoTo Err2

   

    CheckData = -1

   

    '先?出????

    Sleep (2000)

    DoEvents

    If GatherRecordSum(varAddr, lngSum_Mach, "ok") = False Then

        CheckData = -1

        VarDescription = "采集总条数失败 "

        Exit Function

    End If

    If lngSum_Mach <= 0 Then

        CheckData = 1

        VarDescription = "采集出的总条数是0 "

        Exit Function

    End If

   

   

    '打开文件进行校对

    strFile = VarFilePath & "\" & VarFileName

   

    If Dir(strFile) = "" Then

        CheckData = -1

        VarDescription = "文件找不到," & strFile

        Exit Function

    End If

 

    intRow = 0

    datLastTime = CDate("2000-01-01")

    datTemp = CDate("2000-01-01")

   

    Nfile = FreeFile()

    Open strFile For Input As #Nfile

    Do While Not EOF(Nfile)   ' 循环至文件尾。

        Line Input #Nfile, strTemp   ' 读入一行数据并将其赋予某变量。

        Debug.Print strTemp   ' 在立即窗口中显示数据。

        intRow = intRow + 1

       

        If Len(strTemp) < 23 Then

            Close #Nfile

            CheckData = 2

            VarDescription = "有乱数据," & intRow & " "

            Exit Function

        End If

       

       

        strRecoString = Left(strTemp, 23)   '读取23位长度的记录

        strMachine = Mid(strRecoString, 1, 3)           '机器号

        strPhyCardID8 = Mid(strRecoString, 4, 8)        '816进制物理卡号

        strPhyCardID10 = Right("0000000000" & CLng("&H" & strPhyCardID8), 10)   '1010进制物理卡号

        strDateTime = "20" & Mid(strRecoString, 12, 2) & "-" & Mid(strRecoString, 14, 2) & "-" & Mid(strRecoString, 16, 2) & " " & Mid(strRecoString, 18, 2) & ":" & Mid(strRecoString, 20, 2) & ":" & Mid(strRecoString, 22, 2)

       

         strDate = "20" & Mid(strRecoString, 12, 2) & "-" & Mid(strRecoString, 14, 2) & "-" & Mid(strRecoString, 16, 2)

'        strTime = Mid(strRecoString, 18, 2) & ":" & Mid(strRecoString, 20, 2) & ":" & Mid(strRecoString, 22, 2)

       

        '如果时间格式不对,则记录错误

        If IsDate(Format(strDateTime, "yyyy-MM-dd hh:mm:ss")) = False Or _

            IsDate(Format(strDate, "yyyy-MM-dd")) = False Then

            Close #Nfile

            CheckData = 2

            VarDescription = "有乱数据," & intRow & " "

            Exit Function

        End If

        datLastTime = CDate(Format(strDateTime, "yyyy-MM-dd hh:mm:00"))    '2008-01-09比较时精确到分钟因为客户反映秒上有跳乱的显象

        If datTemp > datLastTime Then

            CheckData = 4  '没有按递增顺序

            VarDescription = "没有按递增顺序,位置" & intRow

        Else

            datTemp = datLastTime

        End If

    Loop

    Close #Nfile   ' 关闭文件。

   

    If intRow < lngSum_Mach Then

        CheckData = 1

        VarDescription = "文本文件中的总条数小于机器内的总条数文件内" & intRow & "机器内" & lngSum_Mach & ""

        Exit Function

    End If

   

    If DateAdd("n", intDelay * 60, datLastTime) < Now Then

        CheckData = 3

        VarDescription = "最后一条数据的时间距离现在超过" & intDelay & "小时最后时间为" & datLastTime

        Exit Function

    End If

   

    '能执行到这里而没被改变则说明数据合法

    If CheckData = "-1" Then

        CheckData = 0

    End If

   

    Exit Function

Err2:

    CheckData = -1

    VarDescription = Err.Description

End Function

 

 

    快速获得支持

   点击“在线服务 ”简单填写
   资料,您可以就您关注的硬
   件或软件获得相应在线支持。
   电话: 
0755-83740970