Практическое руководство. Получение строк из последовательных портов в Visual Basic
В этом разделе описывается, как использовать объект My.Computer.Ports в Visual Basic для получения строк из последовательных портов компьютера.
Получение строк из последовательного порта
Инициализируйте возвращаемую строку.
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
Добавьте блок Else в оператор If, чтобы обрабатывать случаи, когда строка является фактически прочитанной. Блок добавляет строку из последовательного порта к возвращаемой строке.
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. В окне выбора фрагмента кода он находится в разделе Связь и сеть. Дополнительные сведения см. в разделе Практическое руководство. Вставка фрагментов кода IntelliSense.
Компиляция кода
В этом примере предполагается, что на компьютере используется порт COM1.
Отказоустойчивость
В этом примере предполагается, что на компьютере используется порт COM1. Для большей гибкости код должен позволить пользователю выбрать нужный последовательный порт из списка доступных портов. Дополнительные сведения см. в разделе Практическое руководство. Отображение доступных последовательных портов в Visual Basic.
В этом примере используется блок Try...Catch...Finally, чтобы обеспечить закрытие порта приложением и перехватить любые исключения, возникающие во время ожидания. Дополнительные сведения см. в разделе Оператор Try... Catch... Finally (Visual Basic).
См. также
Задачи
Практическое руководство. Отправка строк в последовательный порт в Visual Basic
Практическое руководство. Отображение доступных последовательных портов в Visual Basic