如何:在 Visual Basic 中从串行端口接收字符串
本主题介绍在 Visual Basic 中如何使用 My.Computer.Ports
从计算机的串行端口接收字符串。
从串行端口接收字符串
初始化返回字符串。
Dim returnStr As String = ""
确定应提供字符串的串行端口。 此示例假定它是
COM1
。使用
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
创建
Do
循环,用于读取文本行,直到没有更多行可用。Do Loop
使用 ReadLine() 方法来从串行端口读取下一个可用的文本行。
Dim Incoming As String = com1.ReadLine()
使用
If
语句可确定 ReadLine() 方法是否返回Nothing
(这意味着没有更多文本可用)。 如果它未返回Nothing
,则退出Do
循环。If Incoming Is Nothing Then Exit Do End If
向
If
语句添加Else
块以处理实际读取字符串的情况。 该块将来自串行端口的字符串追加到返回字符串。Else returnStr &= Incoming & vbCrLf
返回字符串。
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 语句。