投稿者 vb素人  (社会人) 投稿日時 2017/7/9 07:18:37


SerialPort1.BytesToRead >= 4
にすることで、配列内に受信データが格納されるようになりました。

Debug.WriteLineで①、②、③の位置でデータを確認していますが、
送信データ(FF FF FF 03が繰り返される)のどこから受信をし始めるかによって
データが変わってしまいます。

Aパターン
①FF-03-FF-FF
②255
③3


Bパターン
①FF-FF-FF-03
②255
③255

今2つ課題が残っています。
1つ目は、
Aパターンの時は、④の"OK"表示まで進みません。
⇒こちらは、今のやり方ではだめだと感じていますが、他に方法が思い浮かびません。

2つ目は、
Bパターンの時は、④の"OK"表示まで進むのですが、
その後、TextBoxにデータが表示されません。
⇒こちらは何が間違えているのかがよく理解できていません。


            If SerialPort1.BytesToRead >= 4 Then

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

                Debug.WriteLine(BitConverter.ToString(rdat1)) '①

                Dim rdat1bin As Byte() = {rdat1(0), rdat1(1)}
                Dim rdat2bin As Byte() = {rdat1(2), rdat1(3)}

                Dim rdat1a As UShort = BitConverter.ToUInt16(rdat1, 0)  '符号付き 2 バイト整数に変換 
                Dim rdat2a As UShort = BitConverter.ToUInt16(rdat1, 2)  '符号付き 2 バイト整数に変換 

                Dim rdat1b As String = Convert.ToString(rdat1a, 10)  '10進数表記の "1023" に変換 
                Dim rdat2b As String = Convert.ToString(rdat1a, 10)  '10進数表記の "1023" に変換 

                Debug.WriteLine(rdat1(0)) '②
                Debug.WriteLine(rdat1(1)) '③


                If rdat1(0) = &HFF AndAlso rdat1(1) = &HFF Then
                    MessageBox.Show("OK") '④
                    Dim size As Integer = SerialPort1.BytesToRead
                    If size < 4 Then
                        Return
                    End If
                    Dim data(size - 1) As Byte
                    SerialPort1.Read(rdat1, 2, 2)
                    Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox), data)
                End If


            End If