Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
Timerコントロールの精度
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30290#CommentId83123
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
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