SQL Server Rapor Sorguları

WinTr Scada ver 4.1.0 ile birlikte Sql server’a kayıt girişleri farklı metodlar ile yapılabiliyor.

  • Not Historical: Database’e kaydı yapılmayan Tag.
  • Periodically: Tag değeri sürekli olarak database’e kaydedilir. Kayıt periyotu kontrol panelinde mili saniye olarak seçilebilir.
  • Every Minute: Tag değeri her dakikada bir defa kaydedilir.
  • Every Hour: Tag değeri her saatde bir defa kaydedilir.
  • Every Day: Tag değeri her gün de bir defa kaydedilir.
  • Only value changed: Tag değeri her değiştiğinde bir defa kaydedilir.
  • Triggered: Başka bir tagın değeri her değiştiğinde tipi triggered olarak seçilen tagın değeri kaydedilir.

Bu seçenekler ile database gereksiz yere büyümeden kayıt işlemlerini gerçekleştirir. Ayrıca eski versiyonlarda olay bazlı kayıtlar için script yazmak gerekliydi, Triggered seçeneğiyle birlikte olay bazlı kayıt işlemleri yapılabilir. Periodically seçeneği haricindeki kayıt yöntemlerinden birini kullandığınız taktirde database satırlarında boşluklar oluşacaktır. Bunun neticesinde rapor modülü ile oluşturacağınız raporlarda da aynı boşluklar oluşacaktır. Raporlarınızda bu boşlukları görmek istemiyorsnız veya başka ihtiyaçlardan dolayı farklı raporlar oluşturmak istiyorsanız aşağıda ki örnek rapor sorgularını kullanabilirsiniz.

1. Sorguların sonuna Tag_1 is not null seçeneği ekleyerek boşluk olmayan değerlerin getirilmesiniz sağlayabilirsiniz. Bir den fazla Tag değeri getiren sorgularda ‘and’ komutu ile diğer tag lar için de is not null seçeveniğini ekleyebilirsiniz.

SELECT [DateTime],[Tag_1] FROM Table1 Where Tag_1 is not null and Tag_2 is not null

2. Satırdaki değer boş olduğunda daha önceki dolu değeri yerine koyan sorgu:

select T.DateTime, V1.Tag_1, V2.Tag_2 from Table1 T CROSS APPLY (select top (1) Tag_1 from Table1 T1 where T1.Datetime <=T.Datetime and T1.Tag_1 IS NOT NULL order by T1.DateTime DESC) V1 CROSS APPLY (select top (1) Tag_2 from Table1 T2 where T2.Datetime <=T.Datetime and T2.Tag_2 IS NOT NULL order by T2.DateTime DESC) V2

3. İkinci sorgu ile aynı şekilde çalışabilecek bir diğer sorgu. Bu sorguya başlangıç ve bitiş kısıtlaması eklenmiştir.

Select DateTime, Coalesce(Tag_1, MaxPrevVal1) FROM Table1 M1    Cross Apply (select top(1 )Tag_1 as MaxPrevVal1 From Table1 M2 where M2.DateTime < m1.DateTime and Tag_1 is not null order by DateTime DESC) as CS1     where DateTime between ‘4/28/2012 2:04:13 PM’ and ‘5/28/2012 2:04:15 PM’

4. Alternatif bir sorgu daha.

Select DateTime,Tag_1,Tag_2,Tag_3 from Table1 where DateTime between ‘05.12.2012 11:38:07’ and ‘06.12.2012 11:39:59’ and Tag_1 is not null and Tag_2 is not null and Tag_3 is not null UNION all Select Top 1 DateTime, Coalesce(Tag_1, PrevVal1),Coalesce(Tag_2, PrevVal2),Coalesce(Tag_3, PrevVal3) FROM Table1 M1   Cross Apply (select top(1) Tag_1 as PrevVal1 From Table1 M2 where M2.DateTime < m1.DateTime and Tag_1 is not null order by DateTime DESC) as CS1    Cross Apply (select top(1) Tag_2 as PrevVal2 From Table1 M2 where M2.DateTime < m1.DateTime and Tag_2 is not null order by DateTime DESC) as CS2   Cross Apply (select top(1) Tag_3 as PrevVal3 From Table1 M2 where M2.DateTime < m1.DateTime and Tag_3 is not null order by DateTime DESC) as CS3     where DateTime between ‘05.12.2012 11:38:07’ and ‘06.12.2012 11:39:59’ UNION all Select DateTime,Tag_1,Tag_2,Tag_3 from Table1 where DateTime between ‘05.12.2012 11:38:07’ and ‘06.12.2012 11:39:59’

5. Büyük database’ler den rapor oluşturduğunuzda çok fazla data getirilecektir. Bu raporun oluşturulması uzun süreceğinden rapor kısaltmak için değerlerin belli kurallar ile ortalamasını almayı düşünmelisiniz. Aşağıdaki sorgu her 5 değerin ortalamasını 1 değer olarak getirir.

WITH OrderedRows AS ( SELECT (Row_Number() OVER (ORDER BY LastValue ASC) – 1) / 5 As LastValue2 ,DateTime,Tag_1,Tag_2,Tag_3  FROM Table1 where DateTime between ‘05.12.2012 11:38:07’ and ‘06.22.2012 11:39:59’) SELECT min(DateTime) as DateTime, Avg(Tag_1) as Tag_1,Avg(Tag_2) as Tag_2,Avg(Tag_3) as Tag_3 FROM    OrderedRows GROUP BY LastValue2 order by LastValue2 ASC

Not: WinTr scada rapor oluşturduğunda sayfada bulunan data gridde çok fazla değer olabilir. Bu değerler silinmediği taktirde rapor sayfasının kapanması ve açılması yavaşlayabilir. Bu sorunu ortadan kaldırmak için rapor için kullandığınız datagridlerde row tag’ı kullanabilirsiniz. Örneğin: Tag_1 değişkenini row tag’ı olarak datagrid de işaretleyin. Rapor butonunda ilk önce Tag_1’e ‘1’ değerini yazın ikinci işlem ise rapor oluşturmak olsun. Sayfadan çıkışı sağlayan(Başka bir sayfayı açan) tüm butonlarda Tag_1’e “0” değerini altarın ve sonraki fonksiyon için açmak istediğiniz sayfayı seçin. Böylece sayfa kapatılmadan önce datagrid temizlenecek ve sayfa tekrar açıldığında hızlı olarak açılacaktır.

Not: Çok büyük raporlar oluşturulurken scada diğer görevlerini aksatabilir. Çözüm olarak aynı bilgisayarda iki farklı scada programı çalıştırabilirsiniz. Bir tanesi asıl scada programımız diğer ise sadece rapor almak için kullanacağımız diğer scada programı olabilir. Çift çekirdekli bir bilgisayarda rapor için çalışan scada programının cpu kullanımı asıl scada programımızı etkilemeyecektir.

Not: İleri seviye kullanıcı değilseniz veya scada projeniz büyük bir proje değilse database’e kaydedilmesini istediğimiz tag’ları periodically olarak seçelim. Böylece yukarıda yazdığımız komplike sorgular yerine daha basit sorgular ile rapor oluşturabiliriz. Projemiz büyük olmayacağından dolayı her hangi bir yavaşlık olmayacaktır. Periodically seçtiğimizde kontrol panelinden kayıt periyotunu mümkün olan en uzun aralığı da seçmeyi unutmayın. WinTr scada milisaniye bazında kayıt işlemi yapabilir. Bu işlemler tamamen bilgisayar performansınız ile alakalıdır.

Similar Posts

  • SCADA MARKET

    Gelişmiş ülkeler ve tabii onların büyük şirketleri Dünya SCADA pazarını yönetmektedir. Bir çok pazar araştırmasında 2020 yılında SCADA pazarının 20 milyar dolar olacağı öngörülüyor. Tabii ki bu rakam SCADA program satış gelirleri ve proje gelirlerinden oluşuyor. Üç büyük otomasyon şirketi bu pastanın %80’nini alıyor. Hatta bu şirketlerden bir tanesi yaptığı satın almalar ile çok bilenen…

  • Scada Eğitim Semineri

    Değerli hocamız Ercan Mutlu tarafından düzenlenen WinTr Scada Eğitim seminerine davetlisiniz. 4-5 Şubat 2014 tarihinde İzmit Ahmet Elginkan Meslek Eğitim Merkezin de yapılacaktır. Seminere katılmak isteyenlerin www.aemtem.org.tr adresinden seminerler kısmına kayıt olmaları gerekmektedir. Seminer tamamen ücretsizdir. Hocamıza emeklerinden dolayı teşekkür ederiz. Bu fırsatı kaçırmayacağınızı umut ediyoruz. Eğitim hakkındaki düşüncelerinizi bu sayfada paylaşabilirsiniz.

  • Script ile Scada Sayfalarını Açma/Kapatma

    Script ile açık olan scada sayfası okunabilir ve yazılabilir. Eğer scada sayfa ismini değiştirirseniz otomatik olarak ilgili sayfa açılacaktır. bu işlem için ScreenName değişkenini kullanabilirsiniz. Son açılan sayfanın ismini öğrenmek için aşağıdaki scripti kullanabilirsiniz. Imports System Imports System.IO Imports System.Windows.Forms Imports Microsoft.VisualBasic Namespace WinTr Public Class MainClass Public ScreenName as String     Public Sub Load…

  • Scada Virgüllü Sayı

    Bir çok müşterimiz scada’da decimal olarak okudukları sayıyı virgüllü sayıya nasıl çevireceklerini soruyor. Decimal sayı plc’den okunacaksa bu çevrim işlemine gerek yok. Zira plc programı içersinde virgüllü sayıya dönüştürebilirsiniz. Eğer enerji analizörü gibi dönüştürme işlemi cihaz içersinde yapılamıyorsa aşağıda açıkladığım şekilde dönüştürme işlemini yapabilirsiniz. Decimal olarak okuduğumuz değişkeni, virgüllü sayı(Floatpoint) olarak okuduğumuz bir değişkene aktarmaktan…

  • |

    WinTr Scada Sistemi

    Scada Sistemi Gelişim Süreci: WinTr Scada Sistemi üç yıllık ar-ge çalışmasının sonucunda 2009 yılında satışa çıkartılmıştır. Kullanılan bazı komponentler haricinde tamamen yerli olarak üretilmiştir. Beş yıllık süreçte başta Türkiye olmak üzere bir çok projede %100 müşteri memnuniyeti ile kullanılmıştır. WinTr scada sistemini aynı hızla geliştirmeye devam ediyoruz. Güncel versiyonumuz 5.1.7 dir. Bu güne kadar irili ufaklı 200 güncelleştirme…

Bir yanıt yazın