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

📄 frmmbtcp.frm

📁 modbus协议用vb编写
💻 FRM
📖 第 1 页 / 共 4 页
字号:
    lstSend.Clear
    lstReceive.Clear
End Sub

Private Sub cmdClearStatistic_Click()
    mlSendByte = 0
    mlSendPacket = 0
    mlReceiveByte = 0
    mlReceivePacket = 0
    lTime_Max = 0
    lTime_Min = 1000
    
    txtSendByte.Text = "0"
    txtSendPacket.Text = "0"
    txtReceiveByte.Text = "0"
    txtReceivePacket.Text = "0"
    txtDiffPercent.Text = "0.00 %"
    txtDiffPacket.Text = "0"
    txtTimeMax.Text = "0"
    txtTimeMin.Text = "1000"
End Sub

Private Sub cmdClose_Click()
    Timer1.Enabled = False
    cmdConnect.Enabled = True
    cmdClose.Enabled = False
    cmdSend.Enabled = False
    cmdStartPolling.Enabled = False
    cmdStopPolling.Enabled = False
    cmdStartTimer.Enabled = False
    cmdStopTimer.Enabled = False
    Winsock1.Close
    
    If chkDataLog.Value = vbChecked Then
        chkDataLog.Value = vbUnchecked
    End If
End Sub

Private Sub cmdConnect_Click()
    On Error GoTo CreatError
    Winsock1.RemoteHost = ServeripText.Text
    Winsock1.RemotePort = ServerPortText.Text
    Winsock1.Connect
    Exit Sub
    
CreatError:
    bFileIsReady = False
End Sub

Private Sub CmdEXIT_Click()
    Winsock1.Close
    Unload Me
End Sub

Private Sub cmdSend_Click()
    Dim i As Integer
    Dim cAscii As Byte
    Dim sTemp As String
    Dim iSpace As Integer
    Dim iCount As Integer
    Dim bytBinary() As Byte
    
    If Winsock1.State = sckConnected Then
        sTemp = txtString.Text
        i = 0
        While sTemp <> ""
            sTemp = LTrim(sTemp)    'Trim the space
            iSpace = InStr(1, sTemp, " ")
            If iSpace = 0 And sTemp <> "" Then
                iSpace = Len(sTemp)
            End If
            sTemp = Right(sTemp, Len(sTemp) - iSpace)
            iCount = iCount + 1

        Wend
        ReDim bytBinary(0 To iCount - 1)    'iCount-1 is the byte-count of the command,
                                           
        sTemp = txtString.Text
        For i = 0 To iCount - 1
            sTemp = LTrim(sTemp)    'Trim the space
            iSpace = InStr(1, sTemp, " ")
            'Last data (without space char)
            If iSpace = 0 And sTemp <> "" Then
                iSpace = Len(sTemp)
                bytBinary(i) = CInt("&H" & sTemp)
            Else
                bytBinary(i) = CInt("&H" & Left(sTemp, iSpace - 1))
            End If
            sTemp = Right(sTemp, Len(sTemp) - iSpace)
        Next i
        
        mlSendByte = mlSendByte + iCount
        mlSendPacket = mlSendPacket + 1
        txtSendByte.Text = mlSendByte
        txtSendPacket.Text = mlSendPacket
        
        txtDiffPacket.Text = mlSendPacket - mlReceivePacket
        txtDiffPercent.Text = Format((mlSendPacket - mlReceivePacket) / mlSendPacket, "0.00 " & "%")
        
        For i = 0 To iCount - 1
            'The 8th number is the FC n
            If i = 6 Then
                sTemp = sTemp & "--> "
            End If
            sTemp = sTemp & Right("0" & Hex(bytBinary(i)), 2) & " "
        Next i
        Call ShowTipText(bytBinary(7))
        If lstSend.ListCount > 2000 Then
            Call CmdClear_Click
        End If
            
        If mbPolling = True Then
            lTime_1 = GetTickCount
        Else
            lstSend.AddItem sTemp
            lstSend.ListIndex = lstSend.ListCount - 1
            If bFileIsReady Then
                Print #1, Now & " >>>> " & sTemp;
            End If
        End If
        Winsock1.SendData bytBinary
        DoEvents
    Else
        MsgBox "Not currently connected"
    End If
End Sub

Private Sub cmdSetInterval_Click()
    Timer1.Interval = CInt(txtInterval.Text)
End Sub

Private Sub cmdStopPolling_Click()
    mbPolling = False
    txtTimeAverage.Text = Format((GetTickCount - lStartTime) / Val(txtReceivePacket.Text), "000.0")
    txtStopTime.Text = Now
    cmdStartPolling.Enabled = True
    cmdStopPolling.Enabled = False
End Sub

Private Sub cmdStopTimer_Click()
    Timer1.Enabled = False
    cmdStartTimer.Enabled = True
    cmdStopTimer.Enabled = False
    txtStopTime.Text = Time
End Sub

Private Sub Form_Load()
    Caption = "MBTCP  Ver. " & App.Major & "." & App.Minor & "." & App.Revision
    cmdConnect.Enabled = True
    cmdClose.Enabled = False
    cmdSend.Enabled = False
    cmdStartPolling.Enabled = False
    cmdStopPolling.Enabled = False
    With cboFunction
        .AddItem "FC1  Read multiple coils status (0xxxx)  for DO"
        .AddItem "FC2  Read multiple input discretes (1xxxx)  for DI"
        .AddItem "FC3  Read multiple registers (4xxxx)  for AO"
        .AddItem "FC4  Read multiple input registers (3xxxx)  for AI"
        .AddItem "FC5  Write single coil (0xxxx)  for DO"
        .AddItem "FC6  Write single register (4xxxx)  for AO"
        .AddItem "FC15 Force multiple coils (0xxxx)  for DO"
        .AddItem "FC16 Write multiple registers (4xxxx)  for AO"
        .ListIndex = 0
    End With
    Call ShowTipText(1)
End Sub

Private Sub txtsend_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        KeyAscii = 0
        cmdSend_Click
    End If
End Sub




Private Sub Timer1_Timer()
    Call cmdSend_Click
End Sub

Private Sub txtString_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        Call cmdSend_Click
    End If
End Sub

Private Sub Winsock1_Close()
    While Winsock1.State = sckClosing
        DoEvents
    Wend
    MsgBox ("Connection is closed.")
End Sub

' Connect event fired when the client connects
Private Sub Winsock1_Connect()
    Dim vtdata As Variant
  
    If Winsock1.State = sckConnected Then
        cmdConnect.Enabled = False
        cmdSend.Enabled = True
        cmdStartPolling.Enabled = True
        cmdClose.Enabled = True
        cmdStartTimer.Enabled = True
        cmdClearStatistic_Click
    End If
End Sub

' DataArrival event is fired when the Winsock1 receive data
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim bytBuf() As Byte
    Dim i As Integer
    Dim sTemp As String

    ReDim bytBuf(bytesTotal - 1)
    
    Winsock1.GetData bytBuf, vbByte + vbArray
    
    If mbPolling = True Then
        lTime_2 = GetTickCount
        If (lTime_2 - lTime_1) > lTime_Max Then
            lTime_Max = lTime_2 - lTime_1
            txtTimeMax.Text = lTime_Max
        End If
        If (lTime_2 - lTime_1) < lTime_Min Then
            lTime_Min = lTime_2 - lTime_1
            txtTimeMin.Text = lTime_Min
        End If
    Else
        For i = 0 To bytesTotal - 1
            'The 8th number is the FC n
            If i = 6 Then
                sTemp = sTemp & "--> "
            End If
            If (i > 6) And ((i - 5) Mod 12 = 1) Then
                lstReceive.AddItem sTemp
                sTemp = Space(35)
            End If
            sTemp = sTemp & Right("0" & Hex(bytBuf(i)), 2) & " "
        Next i
        lstReceive.AddItem sTemp
        If bFileIsReady Then
            Print #1, " <<<< " & sTemp
        End If
    End If
    
    mlReceiveByte = mlReceiveByte + bytesTotal
    mlReceivePacket = mlReceivePacket + 1
    txtReceiveByte.Text = mlReceiveByte
    txtReceivePacket.Text = mlReceivePacket
    
    txtDiffPacket.Text = mlSendPacket - mlReceivePacket
    txtDiffPercent.Text = Format((mlSendPacket - mlReceivePacket) / mlSendPacket, "0.00 " & "%")

    
    lstReceive.ListIndex = lstReceive.ListCount - 1
    DoEvents
    If mbPolling = True Then
        Call cmdSend_Click
    End If
End Sub

Private Sub Winsock1_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)
    If Winsock1.State <> sckConnected Then
        MsgBox (Description)
        'Call cmdClose_Click
    End If
End Sub

Private Sub ShowTipText(ByVal iFC As Integer)
    Dim i As Integer
    
    lbCommand(0).ToolTipText = " Net ID (station number) "
    lbCommand(1).ToolTipText = " FC=" & iFC & ") "
    lbCommand(2).ToolTipText = " Reference number (high byte) "
    lbCommand(3).ToolTipText = " Reference number (low byte) "
    For i = 4 To lbCommand.Count - 1
        lbCommand(i).Visible = False
    Next i
    
    lbResponse(0).ToolTipText = " Net ID (station number) "
    lbResponse(1).ToolTipText = " FC=" & iFC & ") "
    For i = 2 To lbResponse.Count - 1
        lbResponse(i).Visible = False
    Next i
    
    Select Case iFC
        Case 1, 2
            For i = 4 To 5
                lbCommand(i).Visible = True
            Next i
            lbCommand(4).ToolTipText = " Bit count (high byte) "
            lbCommand(5).ToolTipText = " Bit count (low byte) "
            
            For i = 2 To 3
                lbResponse(i).Visible = True
            Next i
         
            lbResponse(2).ToolTipText = " Byte count of response (B=(bit count + 7)/8) "
            lbResponse(3).ToolTipText = " Byte 3-(B+2): Bit values (least significant is first coil!) "
            
        Case 3, 4
            For i = 4 To 5
                lbCommand(i).Visible = True
            Next i
            lbCommand(4).ToolTipText = " Word count (high byte) "
            lbCommand(5).ToolTipText = " Word count (low byte) "
            
            For i = 2 To 3
                lbResponse(i).Visible = True
            Next i
         
            lbResponse(2).ToolTipText = " Byte count of response (B=2 x word count) "
            lbResponse(3).ToolTipText = " Byte 3-(B+2): Register values "
            
        Case 5
            For i = 4 To 5
                lbCommand(i).Visible = True
            Next i
            lbCommand(4).ToolTipText = " =FF to turn ON coil, =00 to turn OFF coil "
            lbCommand(5).ToolTipText = " 00 "
            
            For i = 2 To 5
                lbResponse(i).Visible = True
            Next i
         
            lbResponse(2).ToolTipText = " Reference number (high byte) "
            lbResponse(3).ToolTipText = " Reference number (low byte) "
            lbResponse(4).ToolTipText = " =FF to turn ON coil, =00 to turn OFF coil "
            lbResponse(5).ToolTipText = " 00 "
            
        Case 6
            For i = 4 To 5
                lbCommand(i).Visible = True
            Next i
            lbCommand(4).ToolTipText = " Register value (high byte) "
            lbCommand(5).ToolTipText = " Register value (low byte) "

            For i = 2 To 5
                lbResponse(i).Visible = True
            Next i
         
            lbResponse(2).ToolTipText = " Reference number (high byte) "
            lbResponse(3).ToolTipText = " Reference number (low byte) "
            lbResponse(4).ToolTipText = " Register value (high byte) "
            lbResponse(5).ToolTipText = " Register value (low byte) "
            
        Case 15
            For i = 4 To 7
                lbCommand(i).Visible = True
            Next i
            lbCommand(4).ToolTipText = " Bit count (high byte) "
            lbCommand(5).ToolTipText = " Bit count (low byte) "
            lbCommand(6).ToolTipText = " Byte count of response (B=(bit count + 7)/8) "
            lbCommand(7).ToolTipText = " Byte 7-(B+6): Data to be written (least significant is first coil!) "
            
            For i = 2 To 5
                lbResponse(i).Visible = True
            Next i
         
            lbResponse(2).ToolTipText = " Reference number (high byte) "
            lbResponse(3).ToolTipText = " Reference number (low byte) "
            lbResponse(4).ToolTipText = " Bit count (high byte) "
            lbResponse(5).ToolTipText = " Bit count (low byte) "
            
        Case 16
            For i = 4 To 7
                lbCommand(i).Visible = True
            Next i
            lbCommand(2).ToolTipText = " Reference number (high byte) "
            lbCommand(3).ToolTipText = " Reference number (low byte) "
            lbCommand(4).ToolTipText = " Word count (high byte) "
            lbCommand(5).ToolTipText = " Word count (low byte) "
            lbCommand(6).ToolTipText = " Byte count (B=2 x word count) "
            lbCommand(7).ToolTipText = " Byte 7-(B+6): Register values "
            
            For i = 2 To 5
                lbResponse(i).Visible = True
            Next i
         
            lbResponse(2).ToolTipText = " Reference number (high byte) "
            lbResponse(3).ToolTipText = " Reference number (low byte) "
            lbResponse(4).ToolTipText = " Word count (high byte) "
            lbResponse(5).ToolTipText = " Word count (low byte) "
    End Select
End Sub

⌨️ 快捷键说明

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