Практическое руководство. Получение строк из последовательных портов в Visual Basic

В этом разделе описывается, как использовать My.Computer.Ports для получения строк из последовательных портов компьютера в Visual Basic.

Получение строк из последовательного порта

  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. В средстве выбора фрагмента кода он расположен в разделе Связь и сеть. Для получения дополнительной информации см. Code Snippets.

Компиляция кода

В этом примере предполагается, что компьютер использует COM1.

Отказоустойчивость

В этом примере предполагается, что компьютер использует COM1. Для большей гибкости код должен позволять пользователю выбирать нужный последовательный порт из списка доступных портов. Дополнительные сведения см. в разделе Практическое руководство. Отображение доступных последовательных портов.

В этом примере блок Try...Catch...Finally позволяет сделать так, чтобы приложение закрыло порт и перехватило все исключения времени ожидания. Дополнительные сведения см. в разделе Оператор Try...Catch...Finally.

См. также