投稿者 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