Diskuze: Real - Time chart - VB.NET
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ve VB se nevyznám ani prd, takže konkrétně ke kódu nic neřeknu.
Nicméně pokud chce člověk ponechat timeline, škálování atp. je běžné, že se celý dat překreslí při změně vstupních dat.
Jo, budeš muset celý graf nechat překreslit. ALe to by neměl být problém, prostě mu změníš data a on se překreslí sám.
Ta pravidelnost závisí na "aktuálnosti dat". Ideální by bylo, kdyby sis ta data načítal někde v nějaké třídě nějakou funkcí nebo procedurou a tu pak pokaždé, při změně dat, zavolal s určitými parametry (novými daty)...
V mém případě se jedná o pravidelné ukládání z OPC serveru do SQL databáze, kde je přesně stanovený trigger. V tom případě bych asi volil to první řešení.. Kdyby to nebylo opravdu tak pravidelný, tak bych to řešil asi více do hloubky..
Pro představu posílám:
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Public Class Form1
Private Sub LoadData()
Chart1.DataSource = GetData()
Chart1.Series("Spechovatelnost").Points.Clear()
Chart1.Series("Spechovatelnost").XValueMember = "Mereni_ID"
Chart1.Series("Spechovatelnost").YValueMembers = "Jaderna_S1"
End Sub
Private Function GetData() As DataTable
Dim strConn As String = "Data Source=OPC-SERVER;Initial Catalog=OPC;User ID=****;Password=******"
Dim sqlComm As String = "SELECT Top 20 Mereni_ID, Jaderna_S1 FROM Sila ORDER BY Mereni_ID DESC"
Dim dtChartData As New DataTable()
Dim conn As New SqlConnection(strConn)
Using cmd As New SqlCommand(sqlComm, conn)
cmd.CommandType = CommandType.Text
conn.Open()
Dim reader As SqlDataReader = cmd.ExecuteReader()
dtChartData.Load(reader)
End Using
Return dtChartData
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'OPCDataSet.Sila' table. You can move, or remove it, as needed.
Me.SilaTableAdapter.Fill(Me.OPCDataSet.Sila)
Timer1.Interval = 10000
Timer1.Start()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
LoadData()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
LoadData()
End Sub
End Class
Zobrazeno 6 zpráv z 6.