wtuqi
4/29/2020 - 7:59 AM

串口收发(自写简)

'对于串口对发可以用虚拟串口软件
Friend WithEvents SerialPort As SerialPort '声明实体并及说明有事件(如果是拉控件该声明自动在Form1.Designer.vb)
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    SerialPort = New SerialPort
    For Each sp In SerialPort.GetPortNames()
        ComboBox1.Items.Add(sp)
    Next
    'ComboBox1.Sorted = True'排序
    ComboBox1.SelectedIndex = 0 '默认是加载列表到Text
    AddHandler SerialPort.DataReceived, AddressOf Sp_Receiving '注册事件(如果是拉控件不需要此代码)
End Sub
'触发接收事件(拉控件可以在事件中选择该过程)
Public Sub Sp_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort.DataReceived
    Me.Invoke(New EventHandler(AddressOf Sp_Receiving)) '调用接收数据函数
    '也可以用控件所在进程来引动如 receivebox.Invoke()
End Sub
'接收数据
Private Sub Sp_Receiving(ByVal sender As Object, ByVal e As EventArgs)
    Dim strIncoming As String
    'Try
    If SerialPort.BytesToRead > 0 Then
        Threading.Thread.Sleep(100) '添加的延时
        strIncoming = SerialPort.ReadExisting.ToString '读取缓冲区中的数据
        SerialPort.DiscardInBuffer()
        receivebox.Text = strIncoming
    End If
    'Catch ex As Exception
    '    MessageBox.Show(ex.Message)
    'End Try
End Sub
'打开串口连接
Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
    If Not SerialPort.IsOpen Then
        SerialPort.BaudRate = Val(ComboBox2.Text) '波特率
        SerialPort.PortName = ComboBox1.Text '串口名称
        SerialPort.DataBits = Val(ComboBox4.Text) '数据位
        SerialPort.StopBits = Val(ComboBox5.Text) '停止位
        Select Case ComboBox3.Text
            Case "空"
                SerialPort.Parity = IO.Ports.Parity.None '校验位
            Case "奇"
                SerialPort.Parity = Parity.Odd
            Case "偶"
                SerialPort.Parity = Parity.Even
            Case "空格"
                SerialPort.Parity = Parity.Space
            Case "标志"
                SerialPort.Parity = Parity.Mark
        End Select
        SerialPort.Open()
        Label12.BackColor = Color.Green
        Button4.Text = "关闭"
    Else
        SerialPort.Close()
        Label12.BackColor = Color.Red
        Button4.Text = "打开"
    End If
End Sub
'发送数据
Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
    'Try
    SerialPort.Write(sendbox.Text)
    'Catch ex As Exception
    '    MessageBox.Show(ex.Message)
    'End Try
End Sub