Udostępnij za pośrednictwem


Porady: odbieranie ciągów z portów seryjnych w Visual Basic

W tym temacie opisano sposób odbierania My.Computer.Ports ciągów z portów seryjnych komputera w Visual Basic.

Aby odbierać ciągi z portu szeregowego

  1. Zainicjuj ciąg zwrotny.

    Dim returnStr As String = ""
    
  2. Określ, który port szeregowy powinien zawierać ciągi. W tym przykładzie przyjęto założenie, że jest to COM1.

  3. My.Computer.Ports.OpenSerialPort Użyj metody , aby uzyskać odwołanie do portu. Aby uzyskać więcej informacji, zobacz OpenSerialPort.

    Blok Try...Catch...Finally umożliwia aplikacji zamknięcie portu szeregowego, nawet jeśli generuje wyjątek. Cały kod, który manipuluje portem seryjnym, powinien pojawić się w tym bloku.

    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. Utwórz pętlę Do do odczytywania wierszy tekstu, dopóki nie będą dostępne żadne wiersze.

    Do
    Loop
    
  5. ReadLine() Użyj metody , aby odczytać następny dostępny wiersz tekstu z portu szeregowego.

    Dim Incoming As String = com1.ReadLine()
    
  6. If Użyj instrukcji , aby określić, czy ReadLine() metoda zwraca Nothing wartość (co oznacza, że nie jest dostępny żaden tekst). Jeśli funkcja zwróci Nothingwartość , zamknij pętlę Do .

    If Incoming Is Nothing Then
        Exit Do
    End If
    
  7. Else Dodaj blok do instrukcji If , aby obsłużyć przypadek, jeśli ciąg jest rzeczywiście odczytywany. Blok dołącza ciąg z portu szeregowego do zwracanego ciągu.

    Else
        returnStr &= Incoming & vbCrLf
    
  8. Zwróć ciąg.

    Return returnStr
    

Przykład

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

Ten przykład kodu jest również dostępny jako fragment kodu funkcji IntelliSense. W selektorze fragmentów kodu znajduje się on w Połączenie ivity i Networking. Aby uzyskać więcej informacji, zobacz Fragmenty kodu.

Kompilowanie kodu

W tym przykładzie przyjęto założenie, że komputer używa polecenia COM1.

Niezawodne programowanie

W tym przykładzie przyjęto założenie, że komputer używa polecenia COM1. Aby uzyskać większą elastyczność, kod powinien umożliwić użytkownikowi wybranie żądanego portu szeregowego z listy dostępnych portów. Aby uzyskać więcej informacji, zobacz How to: Show Available Serial Ports (Instrukcje: pokazywanie dostępnych portów seryjnych).

W tym przykładzie Try...Catch...Finally użyto bloku, aby upewnić się, że aplikacja zamknie port i przechwyci wyjątki przekroczenia limitu czasu. Aby uzyskać więcej informacji, zobacz Try... Złapać... Finally, instrukcja.

Zobacz też