このトピックでは、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 でシリアル ポートに文字列を送信する
方法 : Visual Basic で利用可能なシリアル ポートを表示する