投稿者 vb素人  (学生) 投稿日時 2017/9/15 08:52:21
シリアル通信から受信したデータを散布図に表示しています。
(Excelの散布図のようなグラフを描きたいと考えていて、Pointを選択しています。)
横軸が、Timerでカウントする時間
縦軸は、シリアル通信から得られるデータを考えています。

今の状況としては、
散布図のように点(マーカー)でプロットできている状況です。
散布図のように点(マーカー)と点(マーカー)を線で接続することができないかと思っています。

↓の投稿で魔界の仮面弁士さまに教えていただいて試してみているのですが、
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=30285


↓のプログラムの内容で実行すると、凡例の部分は、ラインで表示されているのですが、
グラフ上には何も表示がされません。(Point表示のseries2は表示されます。)

魔界の仮面弁士さまのコードと違う点は、
データが固定値なのか、シリアル通信で受信した値(受信するたびに変化)するかの違いだと思っています。

どうして何も表示されないのかがよく分かりません。
原因について教えていただけないでしょうか。


    Private Delegate Sub Delegate_RcvXDataToTextBox(xdec As String)
    Private Delegate Sub Delegate_RcvYDataToTextBox(ydec As String)


    Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

'細かい所は省略します
         Dim datax As Byte() = {bin(2), bin(1)}
         Dim x As UShort = BitConverter.ToUInt16(datax, 0)    '符号なし2 バイト整数に変換 

         Dim datay As Byte() = {bin(4), bin(3)}
         Dim y As UShort = BitConverter.ToUInt16(datay, 0)    '符号なし2 バイト整数に変換 

         Received(x, y)

    End Sub


    Private Sub Received(x As UShort, y As UShort)

        If InvokeRequired Then
            Invoke(New Action(Of UShort, UShort)(AddressOf Received), x, y)
        Else

        xdata = 1023 - x
        ydata = 1023 - y

'☆
        s.BorderWidth = 3
        s.BorderDashStyle = ChartDashStyle.Dot
        s.ChartType = SeriesChartType.Line
t.ChartType = SeriesChartType.Point

        s.Points.AddXY(time, (1023 - x))
        t.Points.AddXY(time, (1023 - y))


        End If
    End Sub



    'データ数
    Dim CountData As Integer
    '測定間隔
    Dim time As Double = 0.0

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        CountData = CInt(TextBox1.Text)
        Timer1.Interval = 100
        Timer1.Enabled = True
    End Sub


    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        CountData -= 1
        timeLabel.Text = "残り" & CountData & "個"
time+=0.1

        'Saveコード
        Dim sw As System.IO.StreamWriter
        sw = New System.IO.StreamWriter("accel.csv", True,
                                              System.Text.Encoding.GetEncoding(932))

        sw.WriteLine(xdata & "," & ydata & "," & time)
        sw.Close()

        If CountData = 0 Then
                Timer1.Enabled = False
                MessageBox.Show("測定終了")
            End If

    End Sub