⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modfuntion.bas

📁 自动回传考勤数据程序,小程序!大作用!可供大家参考一下!
💻 BAS
📖 第 1 页 / 共 2 页
字号:
                    MSComm.Settings = ComPortSpeed & ",S,8,1"  '设置通信口参数
                    
                    ptime = 0.015
                    zif = 4
                    stime = Timer
                    Do While True
                      If Timer > (stime + ptime) Then
                            zif = 4
                            Exit Do
                      End If
                      If MSComm.InBufferCount >= 2 Then
                            Exit Do
                      End If
                      DoEvents
                    Loop
                    If MSComm.InBufferCount >= 2 Then
                        For j = 0 To UBound(byt)
                            av = MSComm.Input
                            byt(j) = av(0)
                        Next
                        If MachineNo = 255 Then
                            If byt(0) = 0 Then
                                zif = 8
                                i = FailResendTimes + 1
                            Else
                                zif = 4     '4为找不到机子
                            End If
                        Else
                            If byt(0) = (MachineNo + 1) Then
                                zif = 8
                                i = FailResendTimes + 1
                            Else
                                zif = 4     '4为找不到机子
                            End If
                        End If
                        Select Case byt(1)  '取机器类型 考勤170 门禁187 考勤门禁204 份饭221
                            Case 170
                                MachineType = 0
                            Case 187
                                MachineType = 1
                            Case 204
                                MachineType = 2
                            Case 221
                                MachineType = 3
                        End Select
                    Else
                        zif = 4
                    End If
            Else
                zif = 8
                Sleep (5)
                Exit For
            End If
        Next i  'FailResendTimes   '若找不到卡钟,则重发
    Else
        zif = zif
    End If

    If zif = 8 Then
        FoundMac = 8
    Else
        FoundMac = zif
    End If
    Exit Function
ErrorHandler:
FoundMac = 44
End Function
Public Function FoundMacOnly(MSComm As MSComm, ComPortNo As Integer, ComPortSpeed As Long, MachineNo As Integer, FailResendTimes As Integer, Optional MachineType As Integer) As Integer
On Error GoTo ErrorHandler

    Dim OutChar(0) As Byte
    Dim OutCharS(1) As Byte
    Dim av As Variant
    Dim byt(1) As Integer
    Dim tmpT
    If MachineNo > 255 Then
        FoundMacOnly = 256
        Exit Function
    End If
    If MSComm.PortOpen = False Then
        zif = OpenCom(MSComm, ComPortNo, ComPortSpeed, "M")
    End If
    If MSComm.PortOpen = True Then
        For i = 0 To FailResendTimes   '若找不到卡钟,则重发
'            If i > 0 Then
'                Sleep (10)
'            End If
            MSComm.InBufferCount = 0
            MSComm.OutBufferCount = 0
            OutChar(0) = MachineNo
            MSComm.Settings = ComPortSpeed & ",M,8,1"  '设置通信口参数
            MSComm.Output = OutChar

            Sleep (2)
            If MachineNo < 255 Then

                    MSComm.Settings = ComPortSpeed & ",S,8,1"  '设置通信口参数
                    
                    ptime = 0.01
                    zif = 4
                    stime = Timer
                    Do While True
                      If Timer > (stime + ptime) Then
'                        Stop
                        zif = 4
                        Exit Do
                      End If
                      If MSComm.InBufferCount >= 2 Then
                            OutCharS(0) = 1
                            OutCharS(1) = 2
                            MSComm.Output = OutChar
                            Exit Do
                      End If
                      DoEvents
                    Loop
'If MachineNo = 10 Then
'Stop
'End If
                    If MSComm.InBufferCount >= 2 Then
                        For j = 0 To UBound(byt)
                            av = MSComm.Input
                            byt(j) = av(0)
                        Next
'If MachineNo = 10 Then
'Stop
'End If
                        If MachineNo = 255 Then
                            If byt(0) = 0 Then
                                zif = 8
                                i = FailResendTimes + 1
                            Else
                                zif = 4     '4为找不到机子
                            End If
                        Else
                            If byt(0) = (MachineNo + 1) Then
                                zif = 8
                                i = FailResendTimes + 1
                            Else
                                zif = 4     '4为找不到机子
                            End If
                        End If
                        Select Case byt(1)  '取机器类型 考勤170 门禁187 考勤门禁204 份饭221
                            Case 170
                                MachineType = 0
                            Case 187
                                MachineType = 1
                            Case 204
                                MachineType = 2
                            Case 221
                                MachineType = 3
                        End Select
                    Else
                        zif = 4
                    End If
            Else
                zif = 8
                Sleep (5)
                Exit For
            End If
        Next i  'FailResendTimes   '若找不到卡钟,则重发
    Else
        zif = zif
    End If

    If zif = 8 Then
        FoundMacOnly = 8
    Else
        FoundMacOnly = zif
    End If
    Exit Function
ErrorHandler:
FoundMacOnly = 44
End Function
Public Function SendCmd(MSComm As MSComm, CommandString As String, WaitSeconds As Single, Optional MachineNo As Integer = 255) As Integer
On Error GoTo ErrorHandler

    Dim OutChar(1) As Byte
    Dim InByt As String
    If Val("&H" & CommandString) > 255 Then
        SendCmd = 256
        Exit Function
    End If
        For Resend = 0 To 3
                MSComm.InBufferCount = 0
                MSComm.OutBufferCount = 0
                OutChar(0) = "&H" & CommandString
                OutChar(1) = "&H" & CommandString
                MSComm.Output = OutChar
                
                If MachineNo < 255 Then
                    ptime = WaitSeconds
                    zif = 1
                    stime = Timer
                    Do While True
                        If Timer > (stime + ptime) Then
                          zif = 2
                          Exit Do
                        End If
                        If MSComm.InBufferCount >= 1 Then
                          Exit Do
                        End If
                        DoEvents
                    Loop
        '            Debug.Print MSComm.InBufferCount
                    If MSComm.InBufferCount >= 1 Then
                            av = MSComm.Input
                            InByt = Hex(av(0))
                        If InByt = "CC" Then
                            zif = 8
                            Resend = 4
                        Else
                            zif = 2
                        End If
                    Else
                        zif = 2
                    End If
                Else
                    zif = 8
                    Sleep (5)
                    Exit For
                End If
                If Resend > 0 Then
                    Sleep (10)
                End If
        Next Resend
        
        SendCmd = zif
'        MSComm.InBufferCount = 0
'        MSComm.OutBufferCount = 0
    Exit Function
ErrorHandler:
SendCmd = 44
End Function
Public Function SendTotalEmployee(MSComm As MSComm, TotalEmployee As Long)
On Error GoTo ErrorHandler

Dim OutChar(2) As Byte
    Dim InByt As String
    Dim CheckCode As Integer
    
    
    For Resend = 0 To 3
                MSComm.InBufferCount = 0
                MSComm.OutBufferCount = 0
                OutChar(0) = Fix(TotalEmployee / 100)
                OutChar(1) = TotalEmployee Mod 100
                
                CheckCode = 0
                For i = 0 To 1
                    CheckCode = CheckCode + Val(OutChar(i))
                Next
                OutChar(2) = "&H" & Right(Hex(CheckCode), 2)
                MSComm.Output = OutChar
                
                ptime = 0.1
                zif = 1
                stime = Timer
                Do While True
                  If Timer > (stime + ptime) Then
                    zif = 2
                    Exit Do
                  End If
                  If MSComm.InBufferCount >= 1 Then
                    Exit Do
                  End If
                  DoEvents
                Loop
    '            Debug.Print MSComm.InBufferCount
                If MSComm.InBufferCount >= 1 Then
                        av = MSComm.Input
                        InByt = Hex(av(0))
                    If InByt = "CC" Then
                        zif = 8
                        Resend = 4
                    Else
                        zif = 2
                    End If
                Else
                    zif = 2
                End If
            Next Resend
            
SendTotalEmployee = zif

    Exit Function
ErrorHandler:
SendTotalEmployee = 44
End Function

Public Function ChangeTimeStrToArr(InString As String, OutArray() As String)
On Error GoTo ErrorHandler
Dim i As Integer, j As Integer
Dim tmpArr() As String

InString = Trim(InString)
tmpArr = Split(InString)

If (UBound(tmpArr) Mod 2) = 0 Then
    ReDim OutArray((UBound(tmpArr) - 2) / 2, 1)
Else
    ReDim OutArray((UBound(tmpArr) - 1) / 2, 1)
End If

For i = 0 To UBound(OutArray)
        OutArray(i, 0) = tmpArr(i * 2)
        OutArray(i, 1) = tmpArr(i * 2 + 1)
Next

    Exit Function
ErrorHandler:
ChangeTimeStrToArr = 44
End Function

Public Function ChangeMsgToArr(Message As String, ChnWord() As String)
    On Error GoTo ErrorHandler

    Dim i As Integer
    Dim WordNo  As Integer
    Dim NotChnCount As Integer

    WordNo = 0
    NotChnCount = 0
    For i = 0 To UBound(ChnWord)
        ChnWord(i) = ""
    Next
    For i = 1 To Len(Message)
        If WordNo < UBound(ChnWord) + 1 Then
            If IfChn(Mid(Message, i, 1)) Then
                ChnWord(WordNo) = Mid(Message, i, 1)
                WordNo = WordNo + 1
            ElseIf Mid(Message, i, 1) = Chr(13) Or Mid(Message, i, 1) = Chr(10) Then
                NotChnCount = 0
            Else
                NotChnCount = NotChnCount + 1
                If (NotChnCount Mod 2) = 1 Then
                    WordNo = WordNo + 1
                    NotChnCount = 1
                    If WordNo < UBound(ChnWord) + 1 Then
                            ChnWord(WordNo) = ""
                    End If
                End If
            End If
        Else
            Exit For
        End If
    Next
   Exit Function
ErrorHandler:
ChangeMsgToArr = 44

End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -