tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。