如何:在 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 程式碼片段。 在程式碼片段選擇器中,該程式碼片段會位於 [連接和網路] 中。 如需詳細資訊,請參閱 Code Snippets

編譯程式碼

此範例假設電腦使用的是 COM1

穩固程式設計

此範例假設電腦使用的是 COM1。 為了具有更大的彈性,程式碼應該允許使用者從可用序列埠清單中選取想要的序列埠。 如需詳細資訊,請參閱如何:顯示可用的序列埠

此範例使用 Try...Catch...Finally 區塊以確保應用程式會關閉序列埠,並攔截任何逾時例外狀況。 如需詳細資訊,請參閱 Try...Catch...Finally 陳述式

另請參閱