投稿者 vb素人  (学生) 投稿日時 2017/7/10 17:19:50
魔界の仮面弁士さま

すこし分かったつもりになっていたのか…
なかなか解決できません。

まず、開始位置の見極めとして↓に示すコードでテストしています。
おっしゃる通り④通りのデータを取得する可能性があり、
①のときは、送信データが正しく(1023)TextBoxに表示されますが、
②、③、④のときは、TextBoxにデータが表示されません。

①F2-F0-03-FF
②FF-F2-F0-03
③03-FF-F2-F0
④F0-03-FF-F2

↓のコードの★の部分について。
私の考えでは、先頭バイトがF2-F0でなければ、Returnでスルーしています。
ここまでは、良いと思っていますが、
次にReadしたときも、同じデータの並びになってしまうのでしょうか。

最初にReadしたとき、③だった場合、
★の後、再Readしても③なのでしょうか。
そうだとすると私の考えが浅はかで1バイト毎にシフトさせてReadする? というようなことをしないとだめなのでしょうか。

魔界の仮面弁士様から本日教えていただいた内容はまだ試しておりません。(すみません)


Private Delegate Sub Delegate_RcvDataToTextBox(rdat1 As Byte())

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

            If SerialPort1.BytesToRead >= 4 Then

                Dim rdat1(3) As Byte
                SerialPort1.Read(rdat1, 0, 4)
                Debug.WriteLine(BitConverter.ToString(rdat1))

                If rdat1(0) = &HF2 AndAlso rdat1(1) = &HF0 Then
                    'Debug確認用
                    Debug.WriteLine(BitConverter.ToString(rdat1))

                    'rdatをInvoke(起動)
                    Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox), rdat1)

                    '★
                Else
                    Return
                End If

            End If

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


    Private Sub RcvDataToTextBox(rdat1 As Byte())

        If IsNothing(rdat1) = False Then

            Dim bin As Byte() = {rdat1(3), rdat1(2)}

            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