Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
Timerコントロールの精度
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30290#CommentId83109
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
vb素人
 (学生)
投稿日時
2017/10/3 16:07:48
魔界の仮面弁士さま
次の部分について。
>DataReceived が呼ばれたときに、
>Dim dtBegin As Date = [SerialPortをOpenした時の時刻]
>Dim dtCurrent As Date = DateTime.Now 'データを受信した時刻
>Dim span As TimeSpan = dtCurrent - dtBegin '経過時間
>Dim totalSeconds As Double = span.TotalSeconds '何秒経過したのか
>'Enqueue メソッドの引数に指定したデータは、コレクションの末尾に追加される
>qx.Enqueue(Tuple.Create(totalSeconds, xdata))
>qy.Enqueue(Tuple.Create(totalSeconds, ydata))
>qz.Enqueue(Tuple.Create(totalSeconds, zdata))
↓のように記述してみました。
☆の所でtotolSecondsをMessageBoxに表示させていまが、
MessageBoxに表示される値は、0です。
MessageBoxが表示される間隔をみていると、データを受信しているタイミング(x,y,zの3つのデータが揃うタイミング)がよく分かります。
グラフの横軸は、msec単位にしています。
msec単位で描写させる場合、通信開始時刻と現時刻をミリ秒単位で取得して、ミリ秒単位のtotalSecondsで描写させなければならないと思っていますが、正しい理解でしょうか。
↓の記述も含めて間違いがあれば指摘していただけると助かります。
Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim dtBegin As Date = DateTime.Now
'データ受信処理
'受信したデータはReceivedプロージャへ
Received(x, y, z)
Dim dtCurrent As Date = DateTime.Now 'データを受信した時刻
Dim span As TimeSpan = dtCurrent - dtBegin '経過時間
Dim totalSeconds As Double = span.TotalSeconds '何秒経過したのか
'Enqueue メソッドの引数に指定したデータは、コレクションの末尾に追加される
qx.Enqueue(Tuple.Create(totalSeconds, xdata))
qy.Enqueue(Tuple.Create(totalSeconds, ydata))
qz.Enqueue(Tuple.Create(totalSeconds, zdata))
'☆
MessageBox.Show(CStr(totalSeconds))
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim plot As Tuple(Of Double, UInteger) = Nothing
Do While qx.TryDequeue(plot)
Chart1.Series("X-Axis").Points.AddXY(plot.Item1, CDbl(plot.Item2))
Loop
Do While qy.TryDequeue(plot)
Chart1.Series("Y-Axis").Points.AddXY(plot.Item1, CDbl(plot.Item2))
Loop
Do While qz.TryDequeue(plot)
Chart1.Series("Z-Axis").Points.AddXY(plot.Item1, CDbl(plot.Item2))
Loop
End Sub