Поделиться через


Практическое руководство. Получение строк из последовательных портов в 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. Добавьте блок 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