vb.net 编写的简易串口调试程序

前端之家收集整理的这篇文章主要介绍了vb.net 编写的简易串口调试程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Imports@H_404_12@ System
Imports@H_404_12@ System.IO.Ports

Public@H_404_12@ Class@H_404_12@ Form1

    Private@H_404_12@ Sub@H_404_12@ Form1_Load(ByVal@H_404_12@ sender As@H_404_12@ System.Object,ByVal@H_404_12@ e As@H_404_12@ System.EventArgs) Handles@H_404_12@ MyBase@H_404_12@.Load
        '获取计算机有效串口
@H_404_12@        Dim@H_404_12@ ports As@H_404_12@ String@H_404_12@() @H_404_12@=@H_404_12@ SerialPort.GetPortNames() '必须用命名空间,用SerialPort,获取计算机的有效串口
@H_404_12@        Dim@H_404_12@ port As@H_404_12@ String@H_404_12@
        For@H_404_12@ Each@H_404_12@ port In@H_404_12@ ports
            portnameBox.Items.Add(port) '向comboBox添加
@H_404_12@        Next@H_404_12@ port
        '初始化界面
@H_404_12@        baudrateBox.Text @H_404_12@=@H_404_12@ baudrateBox.Items(2@H_404_12@) '注释和不注释的地方可以替换
@H_404_12@        portnameBox.Text @H_404_12@=@H_404_12@ portnameBox.Items(0@H_404_12@)
        'baudrateBox.SelectedIndex() = 2
@H_404_12@        ' portnameBox.SelectedIndex() = 0
@H_404_12@        Serial_Port1() '初始化串口
@H_404_12@        Label3.Text @H_404_12@=@H_404_12@ SerialPort1.IsOpen
        statuslabel.Text @H_404_12@=@H_404_12@ "串口未连接"@H_404_12@
        statuslabel.ForeColor @H_404_12@=@H_404_12@ Color.Red
        sendBox.Text @H_404_12@=@H_404_12@ "123"@H_404_12@
        receivebytes.Text @H_404_12@=@H_404_12@ "0"@H_404_12@
        linecheck.Enabled @H_404_12@=@H_404_12@ True@H_404_12@
        timeBox.Enabled @H_404_12@=@H_404_12@ True@H_404_12@

    End Sub@H_404_12@

    Private@H_404_12@ Sub@H_404_12@ Serial_Port1() '设置串口参数
@H_404_12@        'SerialPort1.BaudRate = Val(baudrateBox.Text) '波特率
@H_404_12@        'SerialPort1.PortName = portnameBox.Text '串口名称
@H_404_12@        SerialPort1.PortName @H_404_12@=@H_404_12@ portnameBox.SelectedItem
        SerialPort1.BaudRate @H_404_12@=@H_404_12@ Val@H_404_12@(baudrateBox.SelectedItem)
        SerialPort1.DataBits @H_404_12@=@H_404_12@ 8@H_404_12@ '数据位
@H_404_12@        SerialPort1.StopBits @H_404_12@=@H_404_12@ IO.Ports.StopBits.One '停止位
@H_404_12@        SerialPort1.Parity @H_404_12@=@H_404_12@ IO.Ports.Parity.None '校验位
@H_404_12@    End Sub@H_404_12@

    '关闭串口连接
@H_404_12@    Private@H_404_12@ Sub@H_404_12@ closebtn_Click(ByVal@H_404_12@ sender As@H_404_12@ System.Object,ByVal@H_404_12@ e As@H_404_12@ System.EventArgs) Handles@H_404_12@ closebtn.Click
        Try@H_404_12@
            SerialPort1.Close() '关闭串口
@H_404_12@            Label3.Text @H_404_12@=@H_404_12@ SerialPort1.IsOpen
            If@H_404_12@ SerialPort1.IsOpen @H_404_12@=@H_404_12@ False@H_404_12@ Then@H_404_12@
                statuslabel.Text @H_404_12@=@H_404_12@ "串口未连接"@H_404_12@
                statuslabel.ForeColor @H_404_12@=@H_404_12@ Color.Red
                receiveBox.Text @H_404_12@=@H_404_12@ ""@H_404_12@
                receivebytes.Text @H_404_12@=@H_404_12@ ""@H_404_12@
            End@H_404_12@ If@H_404_12@
        Catch@H_404_12@ ex As@H_404_12@ Exception
            MessageBox.Show(ex.Message)
        End@H_404_12@ Try@H_404_12@
    End Sub@H_404_12@

    '打开串口连接
@H_404_12@    Private@H_404_12@ Sub@H_404_12@ openbtn_Click(ByVal@H_404_12@ sender As@H_404_12@ System.Object,ByVal@H_404_12@ e As@H_404_12@ System.EventArgs) Handles@H_404_12@ openbtn.Click
        Try@H_404_12@
            SerialPort1.Open() '打开串口
@H_404_12@            Label3.Text @H_404_12@=@H_404_12@ SerialPort1.IsOpen
            If@H_404_12@ SerialPort1.IsOpen @H_404_12@=@H_404_12@ True@H_404_12@ Then@H_404_12@
                statuslabel.Text @H_404_12@=@H_404_12@ "串口已连接"@H_404_12@
                statuslabel.ForeColor @H_404_12@=@H_404_12@ Color.Green
            End@H_404_12@ If@H_404_12@
        Catch@H_404_12@ ex As@H_404_12@ Exception
            MessageBox.Show(ex.Message)
        End@H_404_12@ Try@H_404_12@
    End Sub@H_404_12@

    '手动发送数据
@H_404_12@    Private@H_404_12@ Sub@H_404_12@ Button1_Click(ByVal@H_404_12@ sender As@H_404_12@ System.Object,ByVal@H_404_12@ e As@H_404_12@ System.EventArgs) Handles@H_404_12@ Button1.Click
        send()
    End Sub@H_404_12@

    '触发接收事件,接收数据
@H_404_12@    Public@H_404_12@ Sub@H_404_12@ Sp_DataReceived(ByVal@H_404_12@ sender As@H_404_12@ Object@H_404_12@,ByVal@H_404_12@ e As@H_404_12@ System.IO.Ports.SerialDataReceivedEventArgs) Handles@H_404_12@ SerialPort1.DataReceived
        Me@H_404_12@.Invoke(New@H_404_12@ EventHandler(AddressOf@H_404_12@ Sp_Receiving)) '调用接收数据函数
@H_404_12@    End Sub@H_404_12@

    '接收数据过程
@H_404_12@    Private@H_404_12@ Sub@H_404_12@ Sp_Receiving(ByVal@H_404_12@ sender As@H_404_12@ Object@H_404_12@,ByVal@H_404_12@ e As@H_404_12@ EventArgs)

        ' Dim strIncoming As Byte
@H_404_12@        Dim@H_404_12@ strIncoming As@H_404_12@ Integer@H_404_12@
        Dim@H_404_12@ str1() As@H_404_12@ String@H_404_12@
        Dim@H_404_12@ str2() As@H_404_12@ String@H_404_12@
        Dim@H_404_12@ bytes() As@H_404_12@ Byte@H_404_12@
        Dim@H_404_12@ i As@H_404_12@ Integer@H_404_12@
        Try@H_404_12@
            Threading.Thread.Sleep(100@H_404_12@) '添加的延时
@H_404_12@            receivebytes.Text @H_404_12@=@H_404_12@ Str@H_404_12@(Val@H_404_12@(receivebytes.Text) @H_404_12@+@H_404_12@ SerialPort1.BytesToRead)
            If@H_404_12@ SerialPort1.BytesToRead @H_404_12@>@H_404_12@ 0@H_404_12@ Then@H_404_12@

                ReDim@H_404_12@ bytes(SerialPort1.BytesToRead)
                'strIncoming = Convert.ToByte(SerialPort1.ReadByte())
@H_404_12@                If@H_404_12@ receivecheck.Checked @H_404_12@=@H_404_12@ True@H_404_12@ Then@H_404_12@
                    strIncoming @H_404_12@=@H_404_12@ SerialPort1.ReadByte()
                    bytes(0@H_404_12@) @H_404_12@=@H_404_12@ strIncoming
                    For@H_404_12@ i @H_404_12@=@H_404_12@ 1@H_404_12@ To@H_404_12@ SerialPort1.BytesToRead
                        strIncoming @H_404_12@=@H_404_12@ SerialPort1.ReadByte() '读取缓冲区中的数据
@H_404_12@                        bytes(i) @H_404_12@=@H_404_12@ strIncoming
                    Next@H_404_12@
                    ' SerialPort1.Write(sendBox.Text)'发送数据
@H_404_12@                    SerialPort1.DiscardInBuffer()
                    str1 @H_404_12@=@H_404_12@ Split@H_404_12@(BitConverter.ToString(bytes),"-"@H_404_12@)

                    ReDim@H_404_12@ str2(str1.Length @H_404_12@-@H_404_12@ 1@H_404_12@) '去除str1中最后的字符
@H_404_12@                    For@H_404_12@ i @H_404_12@=@H_404_12@ 0@H_404_12@ To@H_404_12@ str1.Length @H_404_12@-@H_404_12@ 2@H_404_12@
                        str2(i) @H_404_12@=@H_404_12@ str1(i)
                    Next@H_404_12@
                    receiveBox.Text @H_404_12@=@H_404_12@ receiveBox.Text @H_404_12@&@H_404_12@ Join@H_404_12@(str2," "@H_404_12@)
                    'BitConverter.ToString(bytes)
@H_404_12@                Else@H_404_12@
                    receiveBox.Text @H_404_12@=@H_404_12@ receiveBox.Text @H_404_12@&@H_404_12@ SerialPort1.ReadExisting()
                End@H_404_12@ If@H_404_12@

            End@H_404_12@ If@H_404_12@
        Catch@H_404_12@ ex As@H_404_12@ Exception
            MessageBox.Show(ex.Message)
        End@H_404_12@ Try@H_404_12@
    End Sub@H_404_12@

    '更改串口设置
@H_404_12@    Private@H_404_12@ Sub@H_404_12@ portnameBox_SelectedIndexChanged(ByVal@H_404_12@ sender As@H_404_12@ System.Object,ByVal@H_404_12@ e As@H_404_12@ System.EventArgs) Handles@H_404_12@ portnameBox.SelectedIndexChanged
        Try@H_404_12@
            Serial_Port1()
        Catch@H_404_12@ ex As@H_404_12@ Exception
            MessageBox.Show(ex.Message)
        End@H_404_12@ Try@H_404_12@
    End Sub@H_404_12@

    '清空接收区
@H_404_12@    Private@H_404_12@ Sub@H_404_12@ clearbtn_Click(ByVal@H_404_12@ sender As@H_404_12@ System.Object,ByVal@H_404_12@ e As@H_404_12@ System.EventArgs) Handles@H_404_12@ clearbtn.Click
        receiveBox.Text @H_404_12@=@H_404_12@ ""@H_404_12@
    End Sub@H_404_12@

    '定时发送数据
@H_404_12@    Private@H_404_12@ Sub@H_404_12@ Timer1_Tick(ByVal@H_404_12@ sender As@H_404_12@ System.Object,ByVal@H_404_12@ e As@H_404_12@ System.EventArgs) Handles@H_404_12@ Timer1.Tick
        Timer1.Interval @H_404_12@=@H_404_12@ timeBox.Text
        send()
    End Sub@H_404_12@

    '选择定时发送的触发事件
@H_404_12@    Private@H_404_12@ Sub@H_404_12@ timecheck_CheckedChanged(ByVal@H_404_12@ sender As@H_404_12@ System.Object,ByVal@H_404_12@ e As@H_404_12@ System.EventArgs) Handles@H_404_12@ timecheck.CheckedChanged

        If@H_404_12@ timecheck.Checked @H_404_12@=@H_404_12@ True@H_404_12@ Then@H_404_12@
            If@H_404_12@ timeBox.Text @H_404_12@=@H_404_12@ ""@H_404_12@ Then@H_404_12@
                MsgBox@H_404_12@("时间间隔不能为0"@H_404_12@)
                timecheck.Checked @H_404_12@=@H_404_12@ False@H_404_12@
            Else@H_404_12@
                send()
                timeBox.Enabled @H_404_12@=@H_404_12@ False@H_404_12@
            End@H_404_12@ If@H_404_12@
        Else@H_404_12@
            timeBox.Enabled @H_404_12@=@H_404_12@ True@H_404_12@
        End@H_404_12@ If@H_404_12@
    End Sub@H_404_12@

    Public@H_404_12@ Sub@H_404_12@ send() '发送数据过程
@H_404_12@        Dim@H_404_12@ databyte() As@H_404_12@ Byte@H_404_12@
        Dim@H_404_12@ str1() As@H_404_12@ String@H_404_12@
        Dim@H_404_12@ str2 As@H_404_12@ String@H_404_12@
        Dim@H_404_12@ str3 As@H_404_12@ String@H_404_12@
        Dim@H_404_12@ i As@H_404_12@ Integer@H_404_12@

        Try@H_404_12@
            If@H_404_12@ sendcheck.Checked @H_404_12@=@H_404_12@ False@H_404_12@ Then@H_404_12@ '不按照16进制发送
@H_404_12@                'timecheck.Enabled = True
@H_404_12@
                If@H_404_12@ linecheck.Checked @H_404_12@=@H_404_12@ False@H_404_12@ Then@H_404_12@ '判断是否选中分行发送
@H_404_12@                    SerialPort1.Write(sendBox.Text)
                Else@H_404_12@
                    SerialPort1.WriteLine(sendBox.Text)
                End@H_404_12@ If@H_404_12@

            Else@H_404_12@ '按照16进制发送
@H_404_12@                If@H_404_12@ InStr@H_404_12@(sendBox.Text," "@H_404_12@) Then@H_404_12@ '判断是否有空格
@H_404_12@                    str1 @H_404_12@=@H_404_12@ Split@H_404_12@(sendBox.Text)
                    str2 @H_404_12@=@H_404_12@ Join@H_404_12@(str1,""@H_404_12@)
                Else@H_404_12@
                    str2 @H_404_12@=@H_404_12@ sendBox.Text
                End@H_404_12@ If@H_404_12@

                If@H_404_12@ str2.Length Mod@H_404_12@ 2@H_404_12@ @H_404_12@=@H_404_12@ 0@H_404_12@ Then@H_404_12@ '判断字符串字节数是否为偶数
@H_404_12@                    ReDim@H_404_12@ databyte(str2.Length @H_404_12@/@H_404_12@ 2@H_404_12@) '重新定义数组
@H_404_12@                    For@H_404_12@ i @H_404_12@=@H_404_12@ 0@H_404_12@ To@H_404_12@ str2.Length @H_404_12@/@H_404_12@ 2@H_404_12@ @H_404_12@-@H_404_12@ 1@H_404_12@
                        databyte(i) @H_404_12@=@H_404_12@ Convert.ToByte(Mid@H_404_12@(str2,2@H_404_12@ @H_404_12@*@H_404_12@ i @H_404_12@+@H_404_12@ 1@H_404_12@,2@H_404_12@),16@H_404_12@) '两个字符转换为一个16进制字节
@H_404_12@                        'databyte(i) = Val(Mid(str2,2 * i + 1,2))
@H_404_12@                    Next@H_404_12@
                    SerialPort1.Write(databyte,0@H_404_12@,databyte.Length @H_404_12@-@H_404_12@ 1@H_404_12@)
                    sendbytes.Text @H_404_12@=@H_404_12@ Str@H_404_12@(Val@H_404_12@(sendbytes.Text) @H_404_12@+@H_404_12@ databyte.Length @H_404_12@-@H_404_12@ 1@H_404_12@)
                Else@H_404_12@

                    str3 @H_404_12@=@H_404_12@ Mid@H_404_12@(str2,1@H_404_12@,(str2.Length @H_404_12@-@H_404_12@ 1@H_404_12@)) @H_404_12@&@H_404_12@ "0"@H_404_12@ @H_404_12@&@H_404_12@ Mid@H_404_12@(str2,str2.Length)
                    ReDim@H_404_12@ databyte(str3.Length @H_404_12@/@H_404_12@ 2@H_404_12@)
                    For@H_404_12@ i @H_404_12@=@H_404_12@ 0@H_404_12@ To@H_404_12@ str3.Length @H_404_12@/@H_404_12@ 2@H_404_12@ @H_404_12@-@H_404_12@ 1@H_404_12@
                        databyte(i) @H_404_12@=@H_404_12@ Convert.ToByte(Mid@H_404_12@(str3,16@H_404_12@)
                    Next@H_404_12@
                    SerialPort1.Write(databyte,databyte.Length @H_404_12@-@H_404_12@ 1@H_404_12@)
                    sendbytes.Text @H_404_12@=@H_404_12@ Str@H_404_12@(Val@H_404_12@(sendbytes.Text) @H_404_12@+@H_404_12@ databyte.Length @H_404_12@-@H_404_12@ 1@H_404_12@)
                End@H_404_12@ If@H_404_12@
                'databyte = System.Text.Encoding.Default.GetBytes(sendBox.Text)把每个字符转换成字节
@H_404_12@
            End@H_404_12@ If@H_404_12@

        Catch@H_404_12@ ex As@H_404_12@ Exception
            MessageBox.Show(ex.Message)
        End@H_404_12@ Try@H_404_12@

    End Sub@H_404_12@

    '是否按照16进制发送,如果是换行将不可选。如果不是,换行可选
@H_404_12@    Private@H_404_12@ Sub@H_404_12@ sendcheck_CheckedChanged(ByVal@H_404_12@ sender As@H_404_12@ System.Object,ByVal@H_404_12@ e As@H_404_12@ System.EventArgs) Handles@H_404_12@ sendcheck.CheckedChanged
        If@H_404_12@ sendcheck.Checked @H_404_12@=@H_404_12@ True@H_404_12@ Then@H_404_12@ '不按照16进制发送
@H_404_12@            linecheck.Enabled @H_404_12@=@H_404_12@ False@H_404_12@
        Else@H_404_12@
            linecheck.Enabled @H_404_12@=@H_404_12@ True@H_404_12@
        End@H_404_12@ If@H_404_12@
    End Sub@H_404_12@
End Class

程序包括16进制发送和接受,定时发送,换行接收,接收和发送数据字节统计

猜你在找的VB相关文章