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