投稿者 vb素人  (社会人) 投稿日時 2017/7/9 15:39:43
Yuoさま

コメントありがとうございます。
諸事情により透過モードを採用しています。

(送信、受信共にマイコンで本来は制御するものを作成済です。
マイコンで受信するプログラムは完成しているのですが、
送信側の様子をPCで確認するためのツールとして、今回の掲示板に相談しているものを作成しております。)

そのため、面倒くさいかもしれませんが、透過モードでトライしています。
私自身、マイコン(C言語)とvb.netとで混乱している所があり、
初歩的な質問やあり得ない質問などが多くなってしまい、恐縮しているところです。


今、次のコードで意図することができたような気がしています。

※意図する動作
送信側は、FF FF FF 03が繰り返されるのですが、
受信側は、FFを2回受信したら、そこから2バイト受信して、2バイトのデータを10進数に変換。

送信側から送られるデータ(FF 03)が、テキストボックスに1023と表示されることが確認できました。

みなさまから教えていただいたことを振り返りながら、
これから、本当に今のコードで正しいのか検証してみます。
(なんとなく、バグ(FF 03ではなく、FF FFをデータとしてテキストボックスに表示してしまう)がありそうなので、
落ち着いて見直してみます。



Private Delegate Sub Delegate_RcvDataToTextBox(data As Byte())

    Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

        'シリアルポートをオープンしていない場合、処理を行わない.
        If SerialPort1.IsOpen = False Then
            Return
        End If

        Try

            If SerialPort1.BytesToRead >= 4 Then

                Dim rdat1(3) As Byte
                SerialPort1.Read(rdat1, 0, 2)

                If rdat1(0) = &HFF AndAlso rdat1(1) = &HFF Then
                    MessageBox.Show("OK")
                    Dim data(1) As Byte
                    SerialPort1.Read(data, 0, 2)
                    Debug.WriteLine(BitConverter.ToString(data))
                    Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox), data)
                End If


            End If


        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Private Sub RcvDataToTextBox(data As Byte())

        '受信データをテキストボックスの最後に追記する.
        If IsNothing(data) = False Then
            'RcvTextBox.AppendText(CStr(data))

            Dim bin As Byte() = {data(0), data(1)}
            Dim a As UShort = BitConverter.ToUInt16(bin, 0)   '符号付き 2 バイト整数に変換 
            Dim b As String = Convert.ToString(a, 10)  '10進数表記の "1023" に変換 
            RcvTextBox.AppendText(b)

        End If

    End Sub