如何:在 Visual Basic 中从串行端口接收字符串

本主题介绍在 Visual Basic 中如何使用 My.Computer.Ports 从计算机的串行端口接收字符串。

从串行端口接收字符串

  1. 初始化返回字符串。

    Dim returnStr As String = ""
    
  2. 确定应提供字符串的串行端口。 此示例假定它是 COM1

  3. 使用 My.Computer.Ports.OpenSerialPort 方法获取对端口的引用。 有关详细信息,请参阅 OpenSerialPort

    Try...Catch...Finally 块允许应用程序在即使会生成异常的情况下也关闭串行端口。 操作串行端口的所有代码都应出现在此块中。

    Dim com1 As IO.Ports.SerialPort = Nothing
    Try
        com1 = My.Computer.Ports.OpenSerialPort("COM1")
        com1.ReadTimeout = 10000
    
    Catch ex As TimeoutException
        returnStr = "Error: Serial Port read timed out."
    Finally
        If com1 IsNot Nothing Then com1.Close()
    End Try
    
  4. 创建 Do 循环,用于读取文本行,直到没有更多行可用。

    Do
    Loop
    
  5. 使用 ReadLine() 方法来从串行端口读取下一个可用的文本行。

    Dim Incoming As String = com1.ReadLine()
    
  6. 使用 If 语句可确定 ReadLine() 方法是否返回 Nothing(这意味着没有更多文本可用)。 如果它未返回 Nothing,则退出 Do 循环。

    If Incoming Is Nothing Then
        Exit Do
    End If
    
  7. If 语句添加 Else 块以处理实际读取字符串的情况。 该块将来自串行端口的字符串追加到返回字符串。

    Else
        returnStr &= Incoming & vbCrLf
    
  8. 返回字符串。

    Return returnStr
    

示例

Function ReceiveSerialData() As String
    ' Receive strings from a serial port.
    Dim returnStr As String = ""

    Dim com1 As IO.Ports.SerialPort = Nothing
    Try
        com1 = My.Computer.Ports.OpenSerialPort("COM1")
        com1.ReadTimeout = 10000
        Do
            Dim Incoming As String = com1.ReadLine()
            If Incoming Is Nothing Then
                Exit Do
            Else
                returnStr &= Incoming & vbCrLf
            End If
        Loop
    Catch ex As TimeoutException
        returnStr = "Error: Serial Port read timed out."
    Finally
        If com1 IsNot Nothing Then com1.Close()
    End Try

    Return returnStr
End Function

此代码示例也可作为 IntelliSense 代码片段。 它位于代码片段选取器的“连接和网络”中。 有关详细信息,请参阅代码片段

编译代码

本示例假定计算机正在使用 COM1

可靠编程

本示例假定计算机正在使用 COM1。 为了获得更大的灵活性,代码应允许用户从可用端口列表中选择所需的串行端口。 有关详细信息,请参阅如何:显示可用的串行端口

此示例使用 Try...Catch...Finally 块确保应用程序关闭端口以及捕获任何超时异常。 有关详细信息,请参阅 Try...Catch...Finally 语句

另请参阅