如何:在 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. 将一个 Else 块添加到 If 语句,以处理实际读取到字符串的情况。 该块将串行端口中的字符串追加到返回字符串。

    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 代码段。 在代码段选择器中,此代码示例位于**“连接和网络”**中。 有关更多信息,请参见 如何:插入 IntelliSense 代码段

编译代码

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

可靠编程

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

此示例使用 Try...Catch...Finally 块来确保应用程序关闭端口,以及捕获任何超时异常。 有关更多信息,请参见 Try...Catch...Finally 语句 (Visual Basic)

请参见

任务

如何:在 Visual Basic 中使用连接到串行端口的调制解调器拨号

如何:在 Visual Basic 中将字符串发送到串行端口

如何:在 Visual Basic 中显示可用的串行端口

参考

Ports

System.IO.Ports.SerialPort