san.kothari 0 Newbie Poster

I have written a simple program which receive data from serial port i.e (temperature) and display on a line graph. but i require accumlate the graph data upto 10 minutes on screen. after that it again accumlate next 10 minutes data.

**The Code of VB.Net program is below :**

Imports System.Drawing.Image
Imports System.IO.Ports

Public Class frmGraph

Dim WithEvents port2 As SerialPort = _
     New SerialPort("COM2", 19200, Parity.Even, 7, StopBits.One)


' Variables to store the changing values to be charted (previous and current)
    Private OldValue As Single = 0
    Private NewValue As Single = 0

    Dim XMove As Integer = 4
    Dim Chunks As Integer = 10

Private Sub frmGraph_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        SwitchMT500()
        ReadLineAddress()


        txtMin.Text = 620
        txtMax.Text = 630
        '  Paint Guidelines on picGraph
        picGraph.Image = DisplayGuidelines(picGraph, Chunks)
        '  Paint Guidelines and Numbers on picValues
        picValues.Image = Me.DisplayVerticalValues(picValues, Chunks, CInt(txtMin.Text), CInt(txtMax.Text))
        ReadTemperature()
        
    End Sub

Private Function DisplayGuidelines(ByVal PicBox As PictureBox, ByVal chunks As Integer) As Bitmap
        '  Step 1
        ' Create a bitmap to draw on and grab its Graphics Object
        Dim bm As New Bitmap(PicBox.Width, PicBox.Height)
        Dim gr As Graphics = Graphics.FromImage(bm)

        '  Step 2
        ' Draw guidelines on main chart.
        '  Get the total height available and split it into  chunks
        Dim total As Integer = PicBox.Height
        Dim chunk As Single = total / chunks

        '  Step 3
        For i As Single = chunk To total Step chunk
            gr.DrawLine(Pens.WhiteSmoke, 0, i, PicBox.Width, i)
        Next i

        '  Step 4
        ' return the results.
        Return bm

        '  Step 5
        gr.Dispose()
    End Function

 Private Function DisplayVerticalValues(ByVal PB As PictureBox, ByVal HowManyChunks As Single, _
  ByVal MinValue As Single, ByVal MaxValue As Single) As Bitmap

        '  Step 1
        Dim bmp As New Bitmap(PB.Width, PB.Height)
        Dim gv As Graphics = Graphics.FromImage(bmp)

        '  Step 2
        '  Draw guidelines on values strip
        '  Get the total height available and split it into  chunks
        '  This value represents a number of pixels
        Dim TotalPixels As Integer = PB.Height
        Dim SingleChunk As Single = TotalPixels / HowManyChunks

        For i As Single = SingleChunk To TotalPixels Step SingleChunk
            gv.DrawLine(Pens.WhiteSmoke, 0, i, PB.Width, i)
        Next i

        '  Step 3
        '  Draw Numbers as Text, correctly spaced vertically
        '  Begin with the highest value allowed
        Dim NextMarker As Integer = MaxValue
        '  Calculate the plottable range
        Dim ValueRange As Integer = MaxValue - MinValue

        '  Draw the numbers, decrementing values proportionately each time through the loop
        For i As Single = 0 To TotalPixels Step SingleChunk
            gv.DrawString(CStr(NextMarker), New Font("Verdana", 8, FontStyle.Regular), Brushes.Black, 1, i)
            NextMarker -= (ValueRange / HowManyChunks)
        Next

        '  Step 4
        Return bmp

        '  Step 5
        gv.Dispose()

    End Function

Private Function DisplayGuidelinesAndChart(ByVal PicBox As PictureBox, ByVal chunks As Integer, _
  ByVal XMove As Integer, ByVal NewValue As Single, ByVal Min As Single, ByVal Max As Single) As Bitmap


        '  Step 1
        '  Grab the current image (the latest version of the chart)
        Dim bm As New Bitmap(PicBox.Width, PicBox.Height)
        Dim gr As Graphics = Graphics.FromImage(bm)

        '  Step 2
        '  Get the total height available and split it into  chunks
        Dim total As Integer = PicBox.Height
        Dim chunk As Single = total / chunks
        ' Tack missing guidelines to right hand side on the Graphics object.
        For i As Single = chunk To total Step chunk
            gr.DrawLine(Pens.WhiteSmoke, PicBox.Width - XMove, i, PicBox.Width, i)
        Next i

        '  Step 3
        '  Draw this grabbed image, placing it XMove pixels to the left 

        If Not IsNothing(PicBox.Image) Then
            gr.DrawImage(PicBox.Image, -XMove, 0)
        End If

        '  Step 4
        '  Plot the new value.  
        '  Calculate the scaling required to make full use of the height of
        '  the PictureBox
        Dim ValueRange As Single = Max - Min
        Dim vScale As Single = PicBox.Height / ValueRange
        '  Apply the scale to the current value
        NewValue *= vScale
        '  Step 5
        '  Shift start point from top left to bottom left.  
        gr.TranslateTransform(0, PicBox.Height)

        '  Step 6
        '  Draw the next line segment on the Graphics object.

        '  If Min is > 0 then you need to shift the drawing down once again,
        '  this time to put the Min value on the horizontal axis
        If Min > 0 Then gr.TranslateTransform(0, Min * vScale)

        Dim p As Pen = New Pen(Color.Navy, 1)

        gr.DrawLine(p, _
                 PicBox.Width - 1 - XMove, -OldValue, _
                 PicBox.Width - 1, -NewValue)
        OldValue = NewValue

        '   Step 7
        '  Return the Bitmap .
        Return bm


        '  Calculate length of baseline drawn by the code above
        BaseLineLength = PicBox.Width
        '  Calculate the width of each line segment
        LineWidth = (BaseLineLength / Sales.ToArray.Length)
        '   Step 8
        '  All done
        gr.Dispose()

    End Function

 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        picValues.Image = Me.DisplayVerticalValues(picValues, Chunks, CInt(txtMin.Text), CInt(txtMax.Text))
        ReadTemperature()
    
End Sub


 Private Function ReadTemperature()
Dim strValue as string
                strValue = port2.ReadExisting
            'picGraph.Image = DisplayGuidelinesAndChart(picGraph, Chunks, XMove, strvalue, CInt(txtMin.Text), CInt(txtMax.Text))
            picGraph.Image = DisplayGuidelinesAndChart(picGraph, Chunks, XMove, strvalue, CInt(txtMin.Text), CInt(txtMax.Text))

            lblValue.Text = strvalue
End Function

End Class

Kindly provide code or functions so that i accumulate reading data from serial port on graph upto 10 minutes.