COM1に割り当てたUSB接続のRS-232C 1ポートタイプ COM-1(USB)H で、対象装置からの送信データを受信イベント処理を用いて、非同期に受信バッファからデータを読み込みます。例えば、バーコードがデータを読み取った時点や計測器が計測を終えた時点で受信データを読み込む際に有効な方法です。デリゲートとInvokeメソッドを使用して受信データをテキストボックスに表示するプログラム例です。
Visual Basic 2005を立ち上げ、新しいプロジェクトを作成し、左図のような画面を作成します。SerialPortコンポーネントを画面に貼り付けます。SerialPortコンポーネントのプロパティの内容を確認します(ボーレートなどの通信設定)。
接続ボタン、切断ボタンクリック時の処理を追加します。Form1.vbに以下のコードを記述します。各オブジェクト(ボタンなど)をダブルクリックすると、ボタンならば、ボタンが押された時の処理を記述するプロシージャが開きます。そこに行いたい処理を記述していきます。
Private Sub Button1_Click(… → 接続ボタンが押されたときの処理 Try '例外処理のはじまり If SerialPort1.IsOpen = True Then 'ポートはオープン済み MessageBox.Show("エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If SerialPort1.PortName = TextBox1.Text 'オープンするポート名を格納 SerialPort1.Open() 'ポートオープン Catch ex As Exception '例外処理 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK,MessageBoxIcon.Error) End Try SerialPort1.RtsEnable = True 'RTSをON End Sub
Private Sub Button2_Click(… → 切断ボタンが押されたときの処理 If SerialPort1.IsOpen = True Then 'ポートオープン済み SerialPort1.Close() 'ポートクローズ End If End Sub
デリゲートの宣言を行います Delegate Sub DataDelegate(ByVal sdata As String)
Invokeメソッドによって呼び出されるメソッド(関数)を定義します Private Sub PrintData(ByVal sdata As String) TextBox2.Text = sdata End Sub
Private Sub SerialPort1_DataReceived(ByVal・・ → 受信イベントが発生したときの処理を記述します Dim ReceivedData As String = " " '受信データ用変数を宣言します Try ReceivedData = SerialPort1.ReadLine 'データを受信します Catch ex As Exception ReceivedData = ex.Message '例外処理を行います End Try 'Invokeメソッドにより実行されるメソッドへのデリゲートの宣言を行い、受信データを表示します Dim adre As New DataDelegate(AddressOf PrintData) Me.Invoke(adre, ReceivedData) End Sub