方法 : Visual Basic でシリアル ポートから文字列を受信する
このトピックでは、Visual Basic で My.Computer.Ports
を使用して、コンピューターのシリアル ポートから文字列を受信する方法について説明します。
シリアル ポートから文字列を受信する
戻り値の文字列を初期化します。
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 ステートメント」をご覧ください。
関連項目
.NET