投稿者 vb素人  (学生) 投稿日時 2017/10/12 11:36:41
毎回の仮面弁士さま

いつもありがとうございます。

>次の座標の F2,F0 が送られてくるまでの最短間隔(ピーク時の頻度)を知りたいです。
送信側から送っているデータは、F2-F0-XH-XL-YH-YL-ZH-ZL と8バイトのデータを送っています。

↓の記録は、DataReceived内で記述して確認した結果です。

11:31:04.1776044 , 1 Bytes
11:31:04.2886108 , 2 Bytes
11:31:04.4006172 , 2 Bytes
11:31:04.5126236 , 5 Bytes
11:31:04.6246300 , 5 Bytes
11:31:04.7366364 , 5 Bytes
11:31:04.8486428 , 6 Bytes
11:31:04.9606492 , 6 Bytes
11:31:05.0726556 , 6 Bytes
11:31:05.1846620 , 6 Bytes
11:31:05.2966684 , 7 Bytes
11:31:05.5206812 , 7 Bytes



>座標データの『先頭(F2,F0)』を検出したときの時刻と
>座標データの『末尾(ZZ,ZZ)』を検出したときの時刻の
>どちらを取得していますか?

少しコードが長くなりますが、↓のように時刻を取得しています。

        If SerialPort1.BytesToRead >= 8 Then
            Dim bin(7) As Byte

            SerialPort1.Read(bin, 0, 2)
            If bin(0) = &HF2 AndAlso bin(1) = &HF0 Then
                'F2-F0-x1-x2-y1-y2-z1-z2 パターン  (コード省略)
                Received(x, y, z)
                Return
            End If


            SerialPort1.Read(bin, 2, 1)
            If bin(1) = &HF2 AndAlso bin(2) = &HF0 Then
                Return
            End If


            SerialPort1.Read(bin, 3, 1)
            If bin(2) = &HF2 AndAlso bin(3) = &HF0 Then
                'z1-z2-F2-F0-x1-x2-y1-y2パターン (コード省略) 
                Received(x, y, z)
                Return
            End If


            SerialPort1.Read(bin, 4, 1)
            If bin(3) = &HF2 AndAlso bin(4) = &HF0 Then
                Return
            End If


            SerialPort1.Read(bin, 5, 1)
            If bin(4) = &HF2 AndAlso bin(5) = &HF0 Then
                'y1-y2-z1-z2-F2-F0-x1-x2 パターン  (コード省略)
                Received(x, y, z)
                Return

            End If

              SerialPort1.Read(bin, 6, 1)
            If bin(5) = &HF2 AndAlso bin(6) = &HF0 Then
                Return

            End If

            SerialPort1.Read(bin, 6, 1)
            If bin(6) = &HF2 AndAlso bin(7) = &HF0 Then
                'x1-x2-y1-y2-z1-z2-F2-F0 パターン  (コード省略)
                Received(x, y, z)
                Return


            ElseIf bin(7) = &HF2 AndAlso bin(0) = &HF0 Then
                'F0-x1-x2-y1-y2-z1-z2-F2 パターン (コード省略)
                Received(x, y, z)
                Return
            End If

            '合致パターン無し! 
            Debug.WriteLine("不正なデータ:" & BitConverter.ToString(bin))

        End If

        Trace.WriteLine(String.Format("{0:HH:mm:ss.fffffff} , {1} Bytes", Now, SerialPort1.BytesToRead))

        Dim dtCurrent As Date = DateTime.Now   'データを受信した時刻
        Dim span As TimeSpan = dtCurrent - dtBegin  '経過時間
        totalSeconds = span.TotalSeconds '何秒経過したのか

        'Dim totalMilliseconds As Double = span.TotalMilliseconds
        'Enqueue メソッドの引数に指定したデータは、コレクションの末尾に追加される
        qx.Enqueue(Tuple.Create(totalseconds, xdata))
        qy.Enqueue(Tuple.Create(totalSeconds, ydata))
        qz.Enqueue(Tuple.Create(totalSeconds, zdata))

        CountData += 1

    End Sub