怎么用VB.NET进行串口通信-四川成都软件开发定制APP编程

文-沙鸥-2018.11.9    

1,前言
前一段时间一位认识的朋友找到我,知道我这里是做工控自动化、电路板、控制器、仪器仪表、软件APP开发定制的(业务QQ2531263726),于是跟我说要把一个指纹模块和他们公司的触摸屏结合起来做成一个系统,发来了资料看了一下,这个指纹模块可以用串口和USB与上位机通信,为了做起来简单一些优先选择串口通信。朋友请求先在电脑上和指纹模块把数据调通,那么我就计划先写个电脑桌面小软件测试一下,找到几年前做的一个项目,是用VB.NET做的上位机软件,里面有串口通信模块例程可以参考。
那么,本文就介绍一下怎么在VB.NET中使用串口控件与下位机电路板通信。
2,使用VB.NET串口的总体技术梗概和实现流程
VB.NET有一个控件叫做SerialPort,在左边的toolbox里面把它拖拽到窗体,并对SerialPort控件进行配置和调用就能使用电脑进行串口通信。
 
•串口的一般配置和使用的流程

3,一点一点详细介绍串口操作和例程
开弓第一步,先用手将弓拉开,把左侧工具栏的SerialPort控件拖拽放置到窗体里面,一般SerialPort控件会自动定位到窗体的下方。
3.1 引入命名空间
Imports System
Imports System.IO.Ports
这两行代码将VB.NET串口开发必要的函数引入本工程文件里面。
3.2 读取和选择串口号
 ‘功能:读取计算机串口,并将可用的串口号显示在一个下拉列表框里面
    Sub GetSerialPortNames()
        For Each sp As String In My.Computer.Ports.SerialPortNames
            ComboBox1.Items.Add(sp)                                       'CompList是一个下列表框控件,显示计算机可用的串口号
        Next
        If ComboBox1.Items.Count >= 1 Then
            ComboBox1.SelectedIndex() = 0 ' 
            ComboBox1.Text = ComboBox1.SelectedItem.ToString
        Else
            MsgBox("请插入USB转串口线!", MsgBoxStyle.Information, "提示!")    ’假如是笔记本等没有串口的计算机,那么就需要买一根USB转串口线
            End
        End If
End Sub
以上程序就实现了将计算机上可以使用的串口号显示在软件界面的一个下拉列表框里面,假如计算机没有串口,可以使用USB转串口线,如没有插入,会提示你"请插入USB转串口线!"。
3.3 串口设置
串口在使用前需要进行一下配置,包括串口号、波特率、数据位、停止位、缓冲区大小等参数设置。
    '功能:串口设置
    Sub PortStart()  
        If SerialPort1.IsOpen Then SerialPort1.Close()
        SerialPort1.PortName = ComboBox1.SelectedItem.ToString '计算机串口设置,可以使用下列表框选择
        SerialPort1.BaudRate = 9600             '波特率设置
        SerialPort1.DataBits = 8                    '数据位设置
        SerialPort1.StopBits = StopBits.One        '停止位设置
        SerialPort1.ReadBufferSize = 256            '设置输入缓冲区大小为?字节
        SerialPort1.DtrEnable = True
        SerialPort1.ReadTimeout = 500           '超时时间
        SerialPort1.NewLine = vbCrLf              '行结束符号
    End Sub
3.4 打开串口
'功能:打开串口
    Sub PortOpen()
        If Not SerialPort1.IsOpen Then ''假如串口关着的,那么就打开串口
            Try
                Call PortStart()
                SerialPort1.Open()
            Catch ex As UnauthorizedAccessException
                MsgBox("串口被占用或串口错误!", MsgBoxStyle.Information, "提示!")
            End Try
        End If
    End Sub
把串口配置好后,就可以打开串口,进行后续的数据收发。
3.5 串口收发数据
    串口发送数据
    Sub send(ByVal send_dat As Byte)
        Dim senddata(0) As Byte
        senddata(0) = send_dat
        Try
            SerialPort1.Write(senddata, 0, senddata.Length)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
以上程序段实现了串口数据发送,将待发送的数据存在数组senddata中,执行指令即可发送数据。
    串口接收数据
串口接收数据有两种方式,一种是中断接收方式,另一种是定时查询接收的方式。
>>中断接收方式
'触发接收事件
    Public Sub Sp_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Me.Invoke(New EventHandler(AddressOf Sp_Receiving)) '调用接收数据函数
    End Sub

'接收数据
    Private Sub Sp_Receiving(ByVal sender As Object, ByVal e As EventArgs)
Dim strIncoming As String
Try
            receivebytes.Text = Str(Val(receivebytes.Text) + SerialPort1.BytesToRead)
If SerialPort1.BytesToRead > 0 Then
                Threading.Thread.Sleep(100) '添加的延时
                strIncoming = SerialPort1.ReadExisting.ToString '读取缓冲区中的数据
                SerialPort1.DiscardInBuffer()
                receivebox.Text = strIncoming
End If
Catch ex As Exception
            MessageBox.Show(ex.Message)
End Try
End Su
>>定时查询接收方式
‘定时扫描串口接收数据
Dim ReceivedLen As Integer
Dim i As Integer
If SerialPort1.IsOpen Then                        ‘假如串口是打开的
    If SerialPort1.BytesToRead > 0 Then            ‘假如串口接收到数据字节不为0
        ReceivedLen = SerialPort1.BytesToRead    ‘一次接收到的数据字节数
        Dim inx(ReceivedLen) As Byte            
        SerialPort1.Read(inx, 0, inx.Length)        ‘读取数据到数组inx中,读取索引从0到inx.Length之间的数据
    End If
End If
3.6 关闭串口
    '关闭À串口
    Sub PortClose()
        Try
            SerialPort1.Close()
            DrawCircle(New Point(400 * circle_X, 15 * circle_Y), 10 * circle_X, Brushes.Red)
        Catch ex As Exception
            MsgBox("串口未打开或串口异常!", MsgBoxStyle.Information, "提示!")
        End Try
    End Sub
使用完之后,关闭串口。
4,小结
以上本文就介绍了用VB.NET进行串口通信的一般流程和部分相关程序段,在实际过程中需要补充一些其他的控件和代码,就能实现一个完整的工程应用。
更多精彩,欢迎关注微信公众号“永珂在线”。
【参考】
vb.net利用SerialPort进行读取串口操作
https://blog.csdn.net/u011788252/article/details/53637993

猜你喜欢

转载自blog.csdn.net/u010755676/article/details/83903742