Практическое руководство. Получение строк из последовательных портов в 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
Добавьте в оператор
If
блокElse
— он будет использоваться, если строка уже прочитана. Этот блок прикрепляет строку из последовательного порта к возвращаемой строке.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. В средстве выбора фрагмента кода он расположен в разделе Связь и сеть. Для получения дополнительной информации см. Code Snippets.
Компиляция кода
В этом примере предполагается, что компьютер использует COM1
.
Отказоустойчивость
В этом примере предполагается, что компьютер использует COM1
. Для большей гибкости код должен позволять пользователю выбирать нужный последовательный порт из списка доступных портов. Дополнительные сведения см. в разделе Практическое руководство. Отображение доступных последовательных портов.
В этом примере блок Try...Catch...Finally
позволяет сделать так, чтобы приложение закрыло порт и перехватило все исключения времени ожидания. Дополнительные сведения см. в разделе Оператор Try...Catch...Finally.