VS2005ではSerialPortを利用できるので、簡単にシリアル通信を実現できるようになりました。
今回は、簡単なシリアル通信プログラムを作成してみました。
尚、Virtual PC 2004 & Virtual Com Portでテストしたので、動作は保障できませんので・・・
シリアル通信イベントを処理できるように以下を定義します。
Private WithEvents _com As New System.IO.Ports.SerialPort
データ受信イベントはイベントプロシージャは、以下のようになっています。
'--------------------------------------------------------------------------------
'データ受信イベント
'--------------------------------------------------------------------------------
Private Sub _com_DataReceived(ByVal sender As Object, _
ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
Handles _com.DataReceived
Dim addmsg As New AddMessageDelegate(AddressOf AddMessage)
Dim strDataReceived As String
'Select Case e.EventType
' Case SerialData.Chars
' Case SerialData.Eof
'End Select
Try
strDataReceived = _com.ReadLine
Catch ex As Exception
strDataReceived = ex.Message
End Try
txtMessage.Invoke(addmsg, New Object() {"[RCV]" + strDataReceived})
End Sub
txtMessage.Text = strDataReceivedとしたい所ですが、フォーム上のコントロールは別スレッドから安全に呼び出すことが保障
されていないので、Invokeメソッドを利用してtxtMessage.Textにメッセージを表示するようにします。ちなみに、AddMessageは、以下のようになっています。
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'テキストボックスにメッセージを表示する
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Private Sub AddMessage(ByVal str As String)
txtMessage.Text = DateTime.Now.ToString("HH:mm:ss") + " " + _
str + ControlChars.CrLf + _
txtMessage.Text
End Sub
文字列を送信するイベントプロシージャは、以下のような簡単なものです。
'--------------------------------------------------------------------------------
'「文字列送信」ボタンクリック
'--------------------------------------------------------------------------------
Private Sub btnSendData_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSendData.Click
If (txtSendData.Text.Length = 0) Then
MessageBox.Show("送信文字列を入力してください", "エラー", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
txtSendData.Focus()
Exit Sub
End If
Try
_com.WriteLine(txtSendData.Text)
Call AddMessage("[SND]" + txtSendData.Text)
Catch ex As Exception
MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
あとはサンプルを提供するので、遊んでみてください。