X Achse automatisch anpassen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    X Achse automatisch anpassen

    Hallo liebes Forum,

    ich versuche zur Zeit eine Laborwaage über einen SerialPort über einen Computer zu steuern. Dies habe ich auch soweit geschafft. Ich kann den Wert auf der Waage am Computer abfragen und auch speichern. Probleme habe ich jetzt allerdings bei der Darstellung. Die Waage übermittelt über einen Timer, jede Sekunde, einen Wert an den Computer Dieser wird in einem Liniengraph (Masse über Zeit) aufgetragen. Nun möchte ich aber, dass mir immer nur die letzten 20 Messpunkte angezeigt werden, so dass die x-Achse mitwandert. Weiß jemand wie ich dies machen kann? Ich nutze Visual Studio 2015, falls dies wichtig ist.

    Viele Grüße
    Famos
    Mein Code sieht wie folgt aus:

    Quellcode

    1. Imports System
    2. Imports System.IO.Ports
    3. Imports System.Threading
    4. Imports System.ComponentModel
    5. Imports System.Data.OleDb
    6. Public Class Form1
    7. Dim myPort As Array
    8. Dim dtTest0 As New DataTable
    9. Dim dtTest1 As New DataTable
    10. Dim dtTest2 As New DataTable
    11. Dim oExcel As Object
    12. Dim oBook As Object
    13. Dim oSheet As Object
    14. Dim t As Integer = 0
    15. Dim m As Integer = 0
    16. Dim time As Double = 0
    17. Dim hilf As Double = 0
    18. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    19. myPort = IO.Ports.SerialPort.GetPortNames()
    20. ComboBox1.Items.AddRange(myPort)
    21. dtTest0.Columns.Add("TimePoint", GetType(Double))
    22. dtTest0.Columns.Add("Mass", GetType(Double))
    23. dtTest1.Columns.Add("TimePoint", GetType(Double))
    24. dtTest1.Columns.Add("Mass", GetType(Double))
    25. dtTest2.Columns.Add("TimePoint", GetType(Double))
    26. dtTest2.Columns.Add("Mass", GetType(Double))
    27. End Sub
    28. Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
    29. If SerialPort1.IsOpen = True Then
    30. SerialPort1.Close()
    31. End If
    32. End Sub
    33. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    34. If Button1.Text = "Verbinden" Then
    35. Try
    36. SerialPort1.BaudRate = TextBox2.Text
    37. SerialPort1.Parity = IO.Ports.Parity.None
    38. SerialPort1.DataBits = 8
    39. SerialPort1.StopBits = IO.Ports.StopBits.One
    40. SerialPort1.Handshake = Handshake.None
    41. SerialPort1.Open()
    42. If SerialPort1.IsOpen = True Then
    43. Button2.Enabled = True
    44. Button3.Enabled = True
    45. Button4.Enabled = True
    46. Button1.Text = "Trennen"
    47. Label1.Text = "...verbunden"
    48. TextBox1.Enabled = True
    49. TextBox4.Enabled = True
    50. CheckBox1.Enabled = True
    51. Timer1.Enabled = True
    52. ComboBox2.Enabled = True
    53. ComboBox1.Enabled = False
    54. TextBox2.Enabled = False
    55. End If
    56. Catch ex As Exception
    57. MsgBox("Es konnte keine Verbindung aufgebaut werden. Dies kann mehrere Ursachen haben" & vbCrLf & "1.Kabel nicht richtig angeschlossen" & vbCrLf & "2.Falsche Verbindungsparameter. Überprüfen Sie den Portnamen und die Rate" & vbCrLf & "3.Gekoppeltes Gerät sendet und empfängt nicht")
    58. End Try
    59. Else
    60. If Button1.Text = "Trennen" Then
    61. SerialPort1.Close()
    62. Button1.Text = "Verbinden"
    63. Button2.Enabled = False
    64. Button3.Enabled = False
    65. Button4.Enabled = False
    66. Timer1.Enabled = False
    67. ComboBox2.Enabled = False
    68. ComboBox1.Enabled = True
    69. TextBox2.Enabled = True
    70. Label1.Text = "nicht verbunden"
    71. End If
    72. End If
    73. End Sub
    74. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    75. SerialPort1.Write("!KT" & vbCr)
    76. End Sub
    77. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    78. Timer3.Interval = CInt(TextBox4.Text) * 60 * 1000
    79. Timer2.Interval = CInt(TextBox1.Text) * 1000
    80. If TextBox3.Text = "" Or TextBox1.Text = "" Then
    81. RichTextBox1.ForeColor = Color.Red
    82. RichTextBox1.Text = "Para. fehlen"
    83. Else
    84. RichTextBox1.ForeColor = Color.DarkSlateBlue
    85. Timer3.Enabled = True
    86. Timer2.Enabled = True
    87. oExcel = CreateObject("Excel.Application")
    88. oBook = oExcel.Workbooks.Add
    89. oSheet = oBook.Worksheets(1)
    90. Timer1.Enabled = False
    91. End If
    92. End Sub
    93. Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    94. If CheckBox1.Checked = True Then
    95. TextBox3.Enabled = True
    96. ElseIf CheckBox1.Checked = False Then
    97. TextBox3.Enabled = False
    98. End If
    99. End Sub
    100. Private Sub TextBox3_TextChanged(sender As Object, e As EventArgs) Handles TextBox3.TextChanged
    101. If TextBox3.Text <> "" Then
    102. Button4.Enabled = True
    103. End If
    104. End Sub
    105. Private Sub Timer1_Tick_1(sender As Object, e As EventArgs) Handles Timer1.Tick
    106. Dim Sekunden As Integer
    107. SerialPort1.Write("!KP" & vbCrLf)
    108. Dim Zeile() As String = SerialPort1.ReadExisting.Split(vbNewLine)
    109. RichTextBox1.Text = Zeile(1).Substring(0, 10)
    110. Dim Zeit As Integer = 10
    111. RichTextBox2.Text = CDbl(Zeile(1).Substring(0, 10)) - CDbl(hilf) / CDbl(Timer1.Interval) / 1000
    112. RichTextBox3.Text = CDbl(Zeile(1).Substring(0, 10)) - CDbl(hilf) / CDbl(Timer1.Interval) / 1000 / TextBox5.Text * 10 ^ 6 * 60
    113. Label17.Text = "Zeit in Sekunden " & Sekunden
    114. Sekunden = Sekunden + 1
    115. Chart1.ResetAutoValues()
    116. With Chart1.ChartAreas(0)
    117. '.AxisX.Minimum = 0
    118. .AxisX.Maximum = Zeit
    119. '.AxisY.Minimum = 0
    120. '.AxisY.Maximum = 10
    121. '.AxisY.Interval = 1
    122. .AxisX.Title = "time (s)"
    123. '.AxisY.Title = "mass (kg)"
    124. End With
    125. dtTest0.Rows.Add(Zeit, (CDbl(Zeile(1).Substring(0, 10))))
    126. dtTest1.Rows.Add(Zeit, (CDbl(Zeile(1).Substring(0, 10)) - CDbl(hilf)) / CDbl(Timer1.Interval / 1000))
    127. dtTest2.Rows.Add(Zeit, (CDbl(Zeile(1).Substring(0, 10)) - CDbl(hilf)) / CDbl(Timer1.Interval / 1000 / TextBox5.Text * 60 / 1000))
    128. If CheckBox1.Enabled = True Then
    129. With Chart1.Series(0)
    130. .Points.DataBind(dtTest0.DefaultView, "TimePoint", "Mass", Nothing)
    131. .ChartType = DataVisualization.Charting.SeriesChartType.Line
    132. .BorderWidth = 4
    133. End With
    134. End If
    135. If CheckBox3.Enabled = True Then
    136. With Chart1.Series(1)
    137. .Points.DataBind(dtTest1.DefaultView, "TimePoint", "Mass", Nothing)
    138. .ChartType = DataVisualization.Charting.SeriesChartType.Line
    139. .BorderWidth = 4
    140. .Color = Color.AliceBlue
    141. End With
    142. End If
    143. If CheckBox4.Enabled = True Then
    144. With Chart1.Series(2)
    145. .Points.DataBind(dtTest2.DefaultView, "TimePoint", "Mass", Nothing)
    146. .ChartType = DataVisualization.Charting.SeriesChartType.Line
    147. .BorderWidth = 4
    148. .Color = Color.Lime
    149. End With
    150. End If
    151. hilf = Zeile(1).Substring(0, 10)
    152. Zeit = Zeit + 1
    153. End Sub
    154. Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    155. SerialPort1.Write("!KP" & vbCrLf)
    156. Dim Zeile() As String = SerialPort1.ReadExisting.Split(vbNewLine)
    157. RichTextBox1.Text = Zeile(1).Substring(0, 10)
    158. oSheet.Range("A" & m + 1&).Value = t
    159. oSheet.Range("B" & m + 1&).Value = Zeile(1).Substring(0, 9)
    160. t = t + CInt(Timer2.Interval)
    161. m = m + 1
    162. End Sub
    163. Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick
    164. If TextBox4.Text = "" Then
    165. Timer2.Enabled = False
    166. Else
    167. Timer2.Enabled = False
    168. Button3.BackColor = Color.Lime
    169. Button2.Enabled = True
    170. oBook.SaveAs("F:\" & TextBox3.Text & ".xls")
    171. oExcel.Quit
    172. Timer1.Enabled = True
    173. End If
    174. End Sub
    175. End Class

    Famos schrieb:

    so dass die x-Achse mitwandert
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!