MODBUS TCP读卡器介绍:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.13.2a205b43dVtabq&id=601009585329https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.13.2a205b43dVtabq&id=601009585329 

Private Sub Command1_Click()
Dim sendbuf(12) As Byte
Dim sendstr, dispstr, writstr As String
Dim I, J As Integer

If Val(Text44) > 255 Then
    MsgBox "最大站号:255 !请重新输入有效站号。", vbCritical + vbOKOnly, "提示"
    Text44.SetFocus
    Exit Sub
End If

If Val(Text45) > 255 Then
    MsgBox "最大站号:255 !请重新输入有效站号。", vbCritical + vbOKOnly, "提示"
    Text45.SetFocus
    Exit Sub
End If

writstr = Trim(Text10.Text)
If writstr <> "" Then writstr = writstr + " "
writstr = writstr + "00 00"

sendbuf(0) = &H55
sendbuf(1) = &HAA
sendbuf(2) = &HB
sendbuf(3) = &H0
sendbuf(4) = &H0
sendbuf(5) = &H6    '指令长度
sendbuf(6) = Val(Text44)
sendbuf(7) = &H6
sendbuf(8) = &H0
sendbuf(9) = Val(Text7)
sendbuf(10) = "&H" + Mid(writstr, 1, 2)
sendbuf(11) = "&H" + Mid(writstr, 1, 2)
    
dispstr = Format(Now, "YYYY-MM-DD HH:MM:SS") & " SendTo:" + Mid(Winsock3.RemoteHost + ":" + Format(Winsock3.RemotePort, "0") + "                        ", 1, 22) + "电脑发送:"
For J = 0 To 11
    dispstr = dispstr + Right("00" + Hex(sendbuf(J)), 2) + " "
Next

Winsock3.SendData sendbuf

Form1.List1.AddItem (dispstr)
Form1.List1.ListIndex = Form1.List1.ListCount - 1
End Sub

Private Sub Command10_Click()
Dim sendbuf(12) As Byte
Dim sendstr, dispstr As String
Dim I, J As Integer

sendbuf(0) = &H55
sendbuf(1) = &HAA
sendbuf(2) = &H7
sendbuf(3) = &H0
sendbuf(4) = &H0
sendbuf(5) = &H6    '指令长度
sendbuf(6) = Val(Text44)
sendbuf(7) = &H6
sendbuf(8) = &H0
sendbuf(9) = &H7
sendbuf(10) = &H0
sendbuf(11) = &H8
    
dispstr = Format(Now, "YYYY-MM-DD HH:MM:SS") & " SendTo:" + Mid(Winsock3.RemoteHost + ":" + Format(Winsock3.RemotePort, "0") + "                        ", 1, 22) + "电脑发送:"
For J = 0 To 11
    dispstr = dispstr + Right("00" + Hex(sendbuf(J)), 2) + " "
Next

Winsock3.SendData sendbuf

Form1.List1.AddItem (dispstr)
Form1.List1.ListIndex = Form1.List1.ListCount - 1
End Sub

Private Sub Command11_Click()
Dim sendbuf(12) As Byte
Dim sendstr, dispstr As String
Dim I, J As Integer

sendbuf(0) = &H55
sendbuf(1) = &HAA
sendbuf(2) = &H8
sendbuf(3) = &H0
sendbuf(4) = &H0
sendbuf(5) = &H6    '指令长度
sendbuf(6) = Val(Text44)
sendbuf(7) = &H3
sendbuf(8) = &H0
sendbuf(9) = Val(Text7)
sendbuf(10) = &H0
sendbuf(11) = Val(Text8)
    
dispstr = Format(Now, "YYYY-MM-DD HH:MM:SS") & " SendTo:" + Mid(Winsock3.RemoteHost + ":" + Format(Winsock3.RemotePort, "0") + "                        ", 1, 22) + "电脑发送:"
For J = 0 To 11
    dispstr = dispstr + Right("00" + Hex(sendbuf(J)), 2) + " "
Next

Winsock3.SendData sendbuf

Form1.List1.AddItem (dispstr)
Form1.List1.ListIndex = Form1.List1.ListCount - 1
Text10 = ""
End Sub

Private Sub Command13_Click()
Dim sendbuf() As Byte
Dim bytes(0 To 100) As Byte
Dim sendstr, dispstr, writstr As String
Dim I, J, longs As Integer

writstr = Trim(Text10.Text)
longs = Val(Text8) * 2
ReDim sendbuf(longs + 12)

If writstr <> "" Then writstr = writstr + " "
For I = 1 To longs
    writstr = writstr + "00 "
Next

For I = 1 To longs
    bytes(I) = "&H" + Mid(writstr, (I - 1) * 3 + 1, 2)
Next


sendbuf(0) = &H55
sendbuf(1) = &HAA
sendbuf(2) = &H9
sendbuf(3) = &H0
sendbuf(4) = &H0
sendbuf(5) = &H6    '指令长度
sendbuf(6) = Val(Text44)
sendbuf(7) = &H10
sendbuf(8) = &H0
sendbuf(9) = Val(Text7)
sendbuf(10) = &H0
sendbuf(11) = Val(Text8)
sendbuf(12) = longs

For I = 1 To longs
   sendbuf(12 + I) = bytes(I)
Next
    
dispstr = Format(Now, "YYYY-MM-DD HH:MM:SS") & " SendTo:" + Mid(Winsock3.RemoteHost + ":" + Format(Winsock3.RemotePort, "0") + "                        ", 1, 22) + "电脑发送:"
For J = 0 To 12 + longs
    dispstr = dispstr + Right("00" + Hex(sendbuf(J)), 2) + " "
Next

Winsock3.SendData sendbuf

Form1.List1.AddItem (dispstr)
Form1.List1.ListIndex = Form1.List1.ListCount - 1
End Sub

Private Sub Command25_Click()
Dim sendbuf(11) As Byte
Dim sendstr, dispstr As String
Dim I, J As Integer

sendbuf(0) = &H55
sendbuf(1) = &HAA
sendbuf(2) = &HA
sendbuf(3) = &H0
sendbuf(4) = &H0
sendbuf(5) = &H6    '指令长度
sendbuf(6) = Val(Text44)
sendbuf(7) = &H6
sendbuf(8) = &H0
sendbuf(9) = &H7
sendbuf(10) = &H0
sendbuf(11) = &H4
    
dispstr = Format(Now, "YYYY-MM-DD HH:MM:SS") & " SendTo:" + Mid(Winsock3.RemoteHost + ":" + Format(Winsock3.RemotePort, "0") + "                        ", 1, 22) + "电脑发送:"
For J = 0 To 11
    dispstr = dispstr + Right("00" + Hex(sendbuf(J)), 2) + " "
Next

Winsock3.SendData sendbuf

Form1.List1.AddItem (dispstr)
Form1.List1.ListIndex = Form1.List1.ListCount - 1
End Sub

Private Sub Command57_Click()
Dim sendbuf(12) As Byte
Dim sendstr, dispstr, hexd As String
Dim I, J As Integer

sendbuf(0) = &H55
sendbuf(1) = &HAA
sendbuf(2) = &H6
sendbuf(3) = &H0
sendbuf(4) = &H0
sendbuf(5) = &H6          '指令长度
sendbuf(6) = Val(Text44)  '站号
sendbuf(7) = &H6          '功能码
sendbuf(8) = &H0
sendbuf(9) = &H1

If Check4.Value > 0 Then
    sendbuf(10) = &H80
    sendbuf(11) = Combo13.ListIndex + 2 * Combo14.ListIndex
Else
    sendbuf(10) = &H0
    sendbuf(11) = Combo13.ListIndex + 2 * Combo14.ListIndex
End If
    
dispstr = Format(Now, "YYYY-MM-DD HH:MM:SS") & " SendTo:" + Mid(Winsock3.RemoteHost + ":" + Format(Winsock3.RemotePort, "0") + "                        ", 1, 22) + "电脑发送:"
For J = 0 To 11
    dispstr = dispstr + Right("00" + Hex(sendbuf(J)), 2) + " "
Next

Winsock3.SendData sendbuf

Form1.List1.AddItem (dispstr)
Form1.List1.ListIndex = Form1.List1.ListCount - 1
End Sub

Private Sub Command61_Click()
On Error GoTo connerr
If Command61.Caption = "建立与读写器的TCP连接" Then
    Command61.Enabled = False
    Winsock3.Close
    Winsock3.Protocol = sckTCPProtocol
    Winsock3.RemoteHost = Trim(Text2.Text)
    Winsock3.RemotePort = CLng(Text1)
    Winsock3.Connect
    Timer6.Enabled = True
Else
'    Timer4.Enabled = False
'    Check15.Value = 0
    Winsock3.Close
    Frame6.Visible = False
    Command61.Caption = "建立与读写器的TCP连接"
End If
Exit Sub

connerr:
'    Timer4.Enabled = False
'    Check15.Value = 0
    Winsock3.Close
    Frame6.Visible = False
    Command61.Caption = "建立与读写器的TCP连接"
End Sub

Private Sub Command62_Click()
Dim sendbuf() As Byte
Dim sendstr, dispstr As String
Dim I, J As Integer

sendstr = "55AA01000006000300000001"
If Len(Trim(sendstr)) Mod 2 = 0 Then
    I = Len(Trim(sendstr)) / 2
    ReDim sendbuf(I)
    
    dispstr = Format(Now, "YYYY-MM-DD HH:MM:SS") & " SendTo:" + Mid(Winsock3.RemoteHost + ":" + Format(Winsock3.RemotePort, "0") + "                        ", 1, 22) + "电脑发送:"
    For J = 0 To I - 1
        sendbuf(J) = "&H" & Mid(sendstr, J * 2 + 1, 2)
        dispstr = dispstr + Right("00" + Hex(sendbuf(J)), 2) + " "
    Next

    Winsock3.SendData sendbuf
    
    Form1.List1.AddItem (dispstr)
    Form1.List1.ListIndex = Form1.List1.ListCount - 1
End If
End Sub

Private Sub Command63_Click()
Dim sendbuf(12) As Byte
Dim sendstr, dispstr As String
Dim I, J As Integer

If Val(Text44) > 255 Then
    MsgBox "最大站号:255 !请重新输入有效站号。", vbCritical + vbOKOnly, "提示"
    Text44.SetFocus
    Exit Sub
End If

If Val(Text45) > 255 Then
    MsgBox "最大站号:255 !请重新输入有效站号。", vbCritical + vbOKOnly, "提示"
    Text45.SetFocus
    Exit Sub
End If

sendbuf(0) = &H55
sendbuf(1) = &HAA
sendbuf(2) = &H2
sendbuf(3) = &H0
sendbuf(4) = &H0
sendbuf(5) = &H6    '指令长度
sendbuf(6) = Val(Text44)
sendbuf(7) = &H6
sendbuf(8) = &H0
sendbuf(9) = &H0
sendbuf(10) = &H0
sendbuf(11) = Val(Text45)
    
dispstr = Format(Now, "YYYY-MM-DD HH:MM:SS") & " SendTo:" + Mid(Winsock3.RemoteHost + ":" + Format(Winsock3.RemotePort, "0") + "                        ", 1, 22) + "电脑发送:"
For J = 0 To 11
    dispstr = dispstr + Right("00" + Hex(sendbuf(J)), 2) + " "
Next

Winsock3.SendData sendbuf

Form1.List1.AddItem (dispstr)
Form1.List1.ListIndex = Form1.List1.ListCount - 1
End Sub

Private Sub Command64_Click()
Dim sendbuf(12) As Byte
Dim sendstr, dispstr As String
Dim I, J As Integer

sendbuf(0) = &H55
sendbuf(1) = &HAA
sendbuf(2) = &H3
sendbuf(3) = &H0
sendbuf(4) = &H0
sendbuf(5) = &H6    '指令长度
sendbuf(6) = Val(Text44)
sendbuf(7) = &H6
sendbuf(8) = &H0
sendbuf(9) = &H2
sendbuf(10) = &H0
sendbuf(11) = Combo17.ListIndex + 1
    
dispstr = Format(Now, "YYYY-MM-DD HH:MM:SS") & " SendTo:" + Mid(Winsock3.RemoteHost + ":" + Format(Winsock3.RemotePort, "0") + "                        ", 1, 22) + "电脑发送:"
For J = 0 To 11
    dispstr = dispstr + Right("00" + Hex(sendbuf(J)), 2) + " "
Next

Winsock3.SendData sendbuf

Form1.List1.AddItem (dispstr)
Form1.List1.ListIndex = Form1.List1.ListCount - 1
End Sub

Private Sub Command65_Click()
Dim sendbuf(12) As Byte
Dim sendstr, dispstr As String
Dim I, J As Integer

sendbuf(0) = &H55
sendbuf(1) = &HAA
sendbuf(2) = &H4
sendbuf(3) = &H0
sendbuf(4) = &H0
sendbuf(5) = &H6           '指令长度
sendbuf(6) = Val(Text44)   '站号
sendbuf(7) = &H6           '功能码
sendbuf(8) = &H0
sendbuf(9) = &H46 + Combo18.ListIndex         '继电器寄存器地址

I = CLng(Text46)            '继电器开启时长
sendbuf(10) = Int(I / 256)
sendbuf(11) = I Mod 256
    
dispstr = Format(Now, "YYYY-MM-DD HH:MM:SS") & " SendTo:" + Mid(Winsock3.RemoteHost + ":" + Format(Winsock3.RemotePort, "0") + "                        ", 1, 22) + "电脑发送:"
For J = 0 To 11
    dispstr = dispstr + Right("00" + Hex(sendbuf(J)), 2) + " "
Next

Winsock3.SendData sendbuf

Form1.List1.AddItem (dispstr)
Form1.List1.ListIndex = Form1.List1.ListCount - 1
End Sub

Private Sub Command66_Click()
Dim sendbuf(12) As Byte
Dim sendstr, dispstr As String
Dim I, J As Integer

sendbuf(0) = &H55
sendbuf(1) = &HAA
sendbuf(2) = &H5
sendbuf(3) = &H0
sendbuf(4) = &H0
sendbuf(5) = &H6           '指令长度
sendbuf(6) = Val(Text44)   '站号
sendbuf(7) = &H6           '功能码
sendbuf(8) = &H0
sendbuf(9) = &H46 + Combo18.ListIndex         '继电器寄存器地址

sendbuf(10) = 0
sendbuf(11) = 0
    
dispstr = Format(Now, "YYYY-MM-DD HH:MM:SS") & " SendTo:" + Mid(Winsock3.RemoteHost + ":" + Format(Winsock3.RemotePort, "0") + "                        ", 1, 22) + "电脑发送:"
For J = 0 To 11
    dispstr = dispstr + Right("00" + Hex(sendbuf(J)), 2) + " "
Next

Winsock3.SendData sendbuf

Form1.List1.AddItem (dispstr)
Form1.List1.ListIndex = Form1.List1.ListCount - 1
End Sub

Private Sub Form_Load()
Text2 = Form1.Text1.Text + "." + Form1.Text2.Text + "." + Form1.Text3.Text + "." + Form1.Text4.Text
Text1 = Form1.Text38

Combo13.AddItem ("刷卡不发声音")
Combo13.AddItem ("刷卡发出嘀声")
Combo13.ListIndex = 1

Combo14.AddItem ("无")
Combo14.AddItem (" 5ms")
Combo14.AddItem ("10ms")
Combo14.AddItem ("20ms")
Combo14.AddItem ("30ms")
Combo14.AddItem ("40ms")
Combo14.ListIndex = 0

Combo17.ListIndex = 1
Combo18.ListIndex = 1
End Sub

Private Sub Timer6_Timer()
Timer6.Enabled = False
Command61.Enabled = True
Command61.Caption = "建立与读写器的TCP连接"
MsgBox "与IP地址为:" + Trim(Text2.Text) + " 的TCP连接建立失败!", vbCritical + vbOKOnly, "提示"

End Sub

Private Sub Winsock3_Close()
'Timer4.Enabled = False
'Check15.Value = 0
Frame6.Visible = False
Command61.Caption = "建立与读写器的TCP连接"
End Sub

Private Sub Winsock3_Connect()
Timer6.Enabled = False
Frame6.Visible = True
Command61.Enabled = True
Command61.Caption = "断开与读写器的TCP连接"
End Sub

Private Sub Winsock3_DataArrival(ByVal bytesTotal As Long)
Dim dispstr, rstr As String
Dim doublecardhao
Dim para As Integer
Winsock3.GetData Udpdata

On Error Resume Next  '防止winsock阻塞

dispstr = Format(Now, "YYYY-MM-DD HH:MM:SS") & " From>>:" + Mid(Winsock3.RemoteHostIP + ":" + Format(Winsock3.RemotePort, "0") + "                        ", 1, 22) + "电脑接收:"
For I = 0 To bytesTotal
    dispstr = dispstr + Right("00" + Hex(Udpdata(I)), 2) + " "
Next
    
If Form1.List1.ListCount > 100 Then
   Form1.List1.Clear
End If
Form1.List1.AddItem (dispstr)
Form1.List1.ListIndex = Form1.List1.ListCount - 1

If Udpdata(0) = &H55 And Udpdata(1) = &HAA Then
    Select Case Udpdata(2)
           Case &H1             '返回站号
                If bytesTotal >= 11 Then Text44 = Udpdata(bytesTotal - 1)
           Case &H2             '更改站号
                If bytesTotal >= 12 Then
                    Text44 = Udpdata(bytesTotal - 1)
                    MsgBox "站号已改为:" & Format(Udpdata(bytesTotal - 1), "0"), vbInformation + vbOKOnly, "提示"
                End If
           Case &H7            '驱动读卡器读卡 返回
                If bytesTotal >= 12 Then
                    answ = MsgBox("    读卡器已执行读卡操作,7 寄存器内保存了本次读卡操作是否成功的状态,是否要读出 7 寄存器内数据?", vbQuestion + vbOKCancel, "MODBUS测试程序")
                    If answ = vbOK Then
                       Text7.Text = 7     '根据7寄存器存放的读卡状态判断是否读卡成功。
                       Command11_Click
                    End If
                End If
           Case &H8         '读寄存器内数
                If bytesTotal >= 12 Then
                    rstr = ""
                    For I = 9 To 9 + Udpdata(8)
                        rstr = rstr + Right("00" + Hex(Udpdata(I)), 2) + " "
                    Next
                    Text10 = rstr
                    
                    If Val(Text7.Text) = 7 And Mid(Right("00000000" + DecToBin(Udpdata(9)), 8), 7, 1) = "1" Then '读卡成功,驱动发声
                       
                    End If
                End If
           Case &H9
                If Val(Text7.Text) >= 10 And Val(Text7.Text) <= 57 Then
                     answ = MsgBox("    存放IC卡扇区数据的寄存器数据更改成功,是否要驱动读卡器执行写卡操作?!", vbQuestion + vbOKCancel, "MODBUS测试程序")
                     If answ = vbOK Then
                         Command25_Click
                     End If
                Else
                     MsgBox "10指令写寄存器成功!", vbInformation, "MODBUS测试程序"
                End If
    End Select
End If
End Sub

Private Sub Winsock3_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Winsock3.Close
Frame6.Visible = False
Command61.Caption = "建立与读写器的TCP连接"
End Sub

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐