タイトル : VB2010 SerialPortのコントロール配列化 投稿日 : 2014/07/22(Tue) 09:21 投稿者 : とも
お世話になります。 現在約10台のSerial機器(Bluetoothバーコードリーダー)をパソコンに接続し、情報収集するプログラムを作成しております。 【環境】 VB2010 / Windows7 64bit / Framework3.5 http://dobon.net/vb/bbs/log3-37/23024.html このサイトを参考にし、作成しているのですが、受信イベントの部分のHandles以降及び、 ポート名で判断し、どのPortからの受信だったのかを識別する方法が具体的にわかりません。 Dim TempStr As String ' 一時文字列 Private testCom() As Ports.SerialPort Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'シリアルコントロール配列の作成(ここでは5つ作成) Me.testCom = New Ports.SerialPort(4) {} 'シリアルコントロールのインスタンス作成し、プロパティを設定する Me.SuspendLayout() Dim i As Integer For i = 0 To Me.testCom.Length - 1 'インスタンス作成 Me.testCom(i) = New Ports.SerialPort 'プロパティ設定 Me.testCom(i).PortName = "COM" & i.ToString Me.testCom(i).BaudRate = 38400 Me.testCom(i).DataBits = 8 Me.testCom(i).StopBits = 1 'イベントハンドラに関連付け AddHandler Me.testCom(i).DataReceived, AddressOf Me.testCom_DataReceived Me.testCom(i).Open() Next i End Sub Delegate Sub RecvDataDelegate(ByVal RecvStr As String) Private Sub RecvData(ByVal RecvStr As String) ' 受信欄更新 TextBox2.Text = RecvStr ' 受信履歴更新 RichTextBox1.Text = RichTextBox1.Text + RecvStr + vbCr ' 受信履歴の最下行表示 RichTextBox1.SelectionStart = RichTextBox1.Text.Length - 1 RichTextBox1.ScrollToCaret() End Sub Private Sub testCom_DataReceived(ByVal sender As Object, ByVal e As Ports.SerialDataReceivedEventArgs) Handles ??? Dim Recv As New RecvDataDelegate(AddressOf RecvData) Dim strReceived As String Try '受信データ読込 'strReceived = SerialPort1.ReadExisting()?? ' 受信文字列結合 TempStr = TempStr + strReceived ' CR受信(受信完了) If strReceived(strReceived.Length - 1) = vbCr Then TextBox2.Invoke(Recv, TempStr) ' 一時文字列初期化 TempStr = "" End If Catch ex As Exception MessageBox.Show(ex.Message, "受信エラー", _ MessageBoxButtons.OK, _ MessageBoxIcon.Error, _ MessageBoxDefaultButton.Button3) End Try End Sub |