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

📄 form1.vb

📁 短信猫串口通信源码,使用serialport类进行串口通信
💻 VB
字号:
Imports System.IO
Public Class Form1
    Dim i, j As Integer
    Dim ECode As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SerialPort1.PortName = ComboBox1.Text.Trim
        If SerialPort1.IsOpen Then SerialPort1.Close()
        Try
            SerialPort1.Open()
            MsgBox("端口打开成功!", MsgBoxStyle.Information, "成功")

        Catch ex As ArgumentException

            MsgBox("该端口的文件类型无效!")
        Catch ex As InvalidOperationException

            MsgBox("指定的端口已经被打开,请先关闭后重试!")
        Catch ex As IOException

            MsgBox("端口号无效")

        Catch ex As Exception

            MsgBox("未知错误!")
        End Try
       
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If SerialPort1.PortName <> "" Then
            Try
                If SerialPort1.IsOpen Then SerialPort1.Close() : MsgBox("关闭端口成功")

            Catch ex As InvalidOperationException

                MsgBox("指定的端口已经被关闭")
            Catch ex As Exception

            End Try


        End If
    End Sub

    ''' <summary>
    ''' 开阀
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If TextBox1.Text.Trim = "" Then Exit Sub
        If Len(TextBox1.Text.Trim) <> 10 Then Exit Sub
        If Not ChargeData(1, TextBox1.Text.Trim) Then Exit Sub
        '0067305985
    End Sub

    Private Function ChargeData(ByVal OperateMode As Integer, ByVal cData As String) As Boolean
        Dim MyOrderText As String
        Dim t As Byte
        Dim k, l As Integer

        Dim SendDataByte(12) As Byte
        Select Case OperateMode
            '开阀
            Case 1
                ECode = cData
                MyOrderText = cData
                MyOrderText = Long.Parse(MyOrderText).ToString("x")
                MyOrderText = Reverse(FormatString(MyOrderText, 8, True))
                t = VerifySum(MyOrderText)
                SendDataByte(0) = Long.Parse("A5", Globalization.NumberStyles.HexNumber)
                SendDataByte(1) = Long.Parse("03", Globalization.NumberStyles.HexNumber)
                l = 2
                For k = 2 To 20 Step 2
                    If k <= 8 Then
                        SendDataByte(l) = Long.Parse(MyOrderText.Substring(k - 2, 2), Globalization.NumberStyles.HexNumber)
                    Else
                        SendDataByte(l) = "00"
                    End If
                    l = l + 1
                Next

                SendDataByte(12) = t

        End Select

        SerialPort1.Write(SendDataByte, 0, 13)
        Label2.Text = ""
        For y As Integer = 0 To SendDataByte.Length - 1

            Label2.Text = Label2.Text & FormatString(Long.Parse(SendDataByte(y)).ToString("x"), 2, True) & " "
        Next
    End Function

    '计算校验和
    '参数cData只接收十六进制的字符串形式
    Public Function VerifySum(ByVal cData As String) As Byte

        Dim HexData As String, bytHexData() As Byte

        HexData = cData

        If Len(HexData) Mod 2 <> 0 Then HexData = FormatString(HexData, Len(HexData) + 1, True)

        ReDim bytHexData(0 To Len(HexData) \ 2 - 1)

        For j = 0 To UBound(bytHexData)

            bytHexData(j) = CInt("&H" & Mid(HexData, (j + 1) * 2 - 1, 2))

        Next j

        HexData = ""

        For i = 0 To UBound(bytHexData)
            If HexData = "" Then

                HexData = CInt(bytHexData(i))
            Else
                HexData = HexData + bytHexData(i)
            End If
        Next i

        VerifySum = "&H" & Strings.Right(Hex(HexData), 2)
    End Function

    ''' <summary>
    ''' 格式化字符串,根据要求在前面自动补零
    ''' </summary>
    ''' <param name="SourceString"></param>
    ''' <param name="FormatLen"></param>
    ''' <param name="Head"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function FormatString(ByVal SourceString As String, ByVal FormatLen As Integer, Optional ByVal Head As Boolean = False) As String

        For i = 1 To FormatLen - Len(SourceString)

            SourceString = IIf(Head, "0" & SourceString, SourceString & "0")
        Next i

        FormatString = SourceString

    End Function

    ''' <summary>
    '''将十六进制字符串转换为低字节在前高字节在后
    '''参数:cData只接收十六进制的字符串形式
    '''返回值为十六进制的字符串形式
    ''' </summary>
    ''' <param name="cData"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function Reverse(ByVal cData As String) As String

        Dim HexData As String, bytHexData() As Byte
        Dim t As Byte
        If Len(cData) Mod 2 <> 0 Then
            HexData = FormatString(cData, Len(cData) + 1, True)
        Else

            HexData = Trim(cData)
        End If

        ReDim bytHexData(0 To Len(cData) \ 2 - 1)

        For i = 0 To UBound(bytHexData)

            bytHexData(i) = CInt("&H" & Mid(HexData, (i + 1) * 2 - 1, 2))

        Next i

        For i = 0 To UBound(bytHexData)

            If i < (UBound(bytHexData) + 1) \ 2 Then

                t = bytHexData(i)
                bytHexData(i) = bytHexData(UBound(bytHexData) - i)
                bytHexData(UBound(bytHexData) - i) = t
            Else

                Exit For
            End If
        Next i

        For j = 0 To UBound(bytHexData)

            Reverse = Reverse & FormatString(Hex(bytHexData(j)), 2, True)

        Next j

    End Function

    Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class

⌨️ 快捷键说明

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