Script İle XY Grafik Çizme
Script ile grafik çizme çok önemli konulardan biridir. Scada programları grafiklerin kolaylıkla oluşturulması için bir çok imkan verebilir. Ancak yinede yeterli gelemediği durumlar olabilir. Bu yazımızda script ile xy chart çizeceğiz. Xy chart’ın normal chart ile arasında ki temel fark x değerinin her zaman artan bir değer olmayışıdır. Bazen artıp bazen azalabilir, buda grafik üzerinde yatay eksende zig zag çizilmesi demektir. Xy chart X ve Y değeri yazılırken X değerinin hep artması ile normal chart çalışması elde edilebilir.
Bu yazımızda chart database’den getirilen değerler ile çizilmez. Anlık oluşan değerler ile çizilir. Database’den script ile chart çizimi için bu yazımızı okuyun. http://www.wintr.com.tr/2015/04/script-ile-grafik-cizme/
Chart’a X ve Y değerlerinin aktarımı için aşağıdaki script’i kullanabilirsiniz.
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Namespace WinTr
Public Class MainClass
Public Tag_1_X As UInt16
Public Tag_2_Y As UInt16
Public Tag_3_Y As UInt16
Public X_Length As UInt16
Public X_Maximum As Uint16
Public ObjectNameOfActiveScreen As System.Collections.ArrayList
Public ObjectOfActiveScreen As System.Collections.ArrayList
Public Sub Load
On error resume next
Dim index as integer
index = ObjectNameOfActiveScreen.IndexOf(“Chart_0”)
if index = -1 Then
MsgBox(“Chart_0 cannot found!”)
Exit Sub
End If
Dim MyChart As Object = ObjectOfActiveScreen(index)
MyChart.Series(0).Points.AddXY(Tag_1_X, Tag_2_Y)
MyChart.Series(1).Points.AddXY(Tag_1_X, Tag_3_Y)
MyChart.ChartAreas(0).AxisX.Maximum = X_Maximum
MyChart.ChartAreas(0).AxisX.Minimum = X_Maximum – X_Length
MyChart.Tag = now.AddMinutes(1) & “” & now.AddMinutes(1) & “bitti” ‘Blocking WinTr refresh
End Sub
End Class
End Namespace
Bazı projelerde chart üzerinde sabit çizgiler istenebilir. Bu çizgileri aynı anda bir den çok point ekleyerek yapabilirsiniz. Örneğin bizim chartımızda seri 2 böyle bir çizgi olsun. Aşağıdaki kodu kullanabiliriz.
MyChart.Series(1).Points.AddXY(X_Maximum – X_Length, 10)
MyChart.Series(1).Points.AddXY(X_Maximum, 10)
Bu kod ile yatay eksende boydan boya 10 seviyesinde bir çizgi çizdik. Bu kodu yukarıdaki script içersinde kullanırsak gereksiz yere chartı doldurmuş oluruz. Oysa bu kodun bir defa çalışması yeterlidir. Örneğin bu kod aşağıda chartı temizlemek için kullandığımız clear scripti içersinde kullanılabilir.
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Namespace WinTr
Public Class MainClass
Public ObjectNameOfActiveScreen As System.Collections.ArrayList
Public ObjectOfActiveScreen As System.Collections.ArrayList
Public Sub Load
On error resume next
Dim index as integer
index = ObjectNameOfActiveScreen.IndexOf(“Chart_0”)
if index = -1 Then
MsgBox(“Chart_0 cannot found!”)
Exit Sub
End If
Dim MyChart As Object = ObjectOfActiveScreen(index)
MyChart.Series(0).Points.Clear()
MyChart.Series(1).Points.Clear()
MyChart.Refresh()
End Sub
End Class
End Namespace
Bu konu hakkındaki örnek scada projesini buradan indirebilirsiniz.
Örnek Scada Projesi
bu örneği C# ile nasıl yapabiliriz ? teşekkürler
C# ile kullanılamaz, C#’ın tip bağımlılığından dolayı bazı nesnelerde doğru tipi bulmak biraz güç. Chart için doğru tip “Dundas.Charting.WinControl.Chart” olacaktır. Ama bu tip tanımlı olmadığından kullanılamaz. Bu script sadece vb ile çalışır.
Was this answer helpful?
LikeDislike