DNP3 Outstation

DNP3 Outstation (slave/server), inSCADA platformunun, DNP3 Master taleplerini karşılayabilmesi için kullanıldığı bir protokoldür. inSCADA platformu diğer protokolleri ve veri toplama mekanizmaları ile birlikte DNP3 Outstation kullanarak bir veri toplama istasyonu veya bir protokol dönüştürücü rolünü üstlenebilir.

Resim 1'de görüldüğü gibi, inSCADA, diğer protokoller ile lokal ağdaki farklı sistemlerden veri toplamakta ve DNP3 Outstation protokolü ile uzak noktadaki DNP3 Master ile bu verileri paylaşmaktadır. Diğer protokollerle toplanan verilerin DNP3 Outstation' a aktarılması için inSCADA platformunda pratik yapılandırma araçları ve API' ler bulunmaktadır. Bu konu ayrıca detaylı olarak anlatılacaktır.

Öncelikle bir DNP3 Outstation yapılandırırken, DNP3 Master'in DNP3 profili hakkında bilgi sahibi olmamız veya DNP3 Outstation ile aynı profilde yapılandırmamız gerekir. Biz burada ki örnek genel bir profil uygulayacağız. Daha sonra aynı profilde DNP3 Master yapılandırıp uygulamamızı test edeceğiz.

DNP3 Protokolü inSCADA haberleşme mimarisi ile uyumlu çalışacak şekilde inSCADA platformuna entegre edilmiştir dolayısı ile diğer protokolleri yapılandırırken izlenen adımlarla benzeşmektedir.

Şimdi inSCADA platformunda DNP3 Outstation protokolünün nasıl yapılandırıldığını inceleyelim.

1. Adım Bağlantı Oluşturmak

Bir cihaza bağlanmak veya bir bağlantı kabul etmek için öncelikle bir bağlantı kanalı oluşturmamız gerekir.

Resim 2'de gösterildiği gibi bağlantı oluşturmak istediğimiz projeyi seçip bağlantımıza bir isim veriyoruz. Forum üzerinde ;

  • Ip : 0.0.0.0

  • Port : 20001

  • Min Retry Delay : 2000

  • Max Retry Delay : 2000

olarak parametrelerimizi girerek bağlantımızı oluşturuyoruz.

DNP3 Outstation protokolü server bir prokoldür. Çalıştırıldığı bilgisayar üzerinde server bir socket port açar ve dinlemeye başlar. Bundan dolayı tüm ağ gruplarından gelecek talepleri alabilmesi için 0.0.0.0 ip adresi girilmiştir.

2. Adım Bağlantı Bağlı Bir Cihaz Oluşturmak

Şimdi bağlantımıza bağlı bir cihaz oluşturalım.

Unutmayın! DNP3 Outstation server bir protokol olması nedeni ile bazı terimlerin kullanımı ve anlamları Client/Master bir protokole göre yer değiştirmekte veya değişmektedir.

Resim 3'te görüldüğü gibi bir önceki adımda oluşturduğumuz bağlantı ya bağlı bir cihaz oluşturuyoruz. Form üzerinde ;

  • Local Address : 100

  • Remote Address / DNP3 Master Address : 1

  • Unsolicated Events : Enable

  • Integrity Scan Time : 1000

olarak parametrelerimizi girip cihazımı oluşturuyoruz.

Unsolicated Events'i aktif ederek, DNP3 Outstation'ımızı Master' ın talepte bulunmadan, cevap vermesini veya veri göndermisini sağlar. Veri gönderme politikaları sonraki adımlarda açıklanacaktır.

Integrity Scan Time DNP3 Outstation veri dizileri ile inSCADA platformu içerisinde bu dizilere bağlanmış değişkenlerin (Variables) güncelleme sıklığını ifade eder.

3. Adım Frame Oluşturmak

Bu adımda artık DNP3 Outstation'ımız veri bloklarını oluşturuyoruz. Burada oluşturduğumuz veri blokları DNP3 Outstation'ımız için veri dizileri anlamına gelmektedir. inSCADA Platformumuzdaki DNP3 protokolümüz 7 farklı tipte Frame oluşturmamıza olanak verir. Bunlar ;

  1. Frozen Counter,

  2. Binary Input,

  3. Double Input,

  4. Binary Output,

  5. Counter,

  6. Analog Input,

  7. Analog Output,

Resim 4'te gösterildiği gibi bir önceki adımda oluşturmuş olduğumuz cihaza bağlı bir frame oluşturuyoruz. Form üzerinde ;

  • Name : DNP3outstation_Frame1

  • Type : Analog Input

  • Start Address : 0

  • Quantity :100

  • Minutes Offset : 0

  • Point Class : Class 1

  • Static Variation : Group30Var2

  • Event Variation : Group32Var1

  • Dead Band : 0

olarak parametrelerimizi girerek Frame'imizi oluşturuyoruz.

Buraya kadar yapmış olduğumuz yapılandırma ayarları ile artık outstation'ımızı oluşturmuş olduk. Bu adımdan sonra artık Control Panel gidip, "DNP3outstation_CON" isimli bağlantıya start verebilirsiniz. Eğer herhangi bir hata yapmamışsanız bağlantınızın durumu "Connected" olarak ekran görüntülenecektir.

Son Adım Değişken oluşturmak ve veri okumak/yazmak

Haberleşme kurulduktan sonra artık değişkenlerimizi oluşturabilir (variables) , cihaz içerisinden verileri okuyabilir ve yazabiliriz. Bunun için Development-Variables menüsünden değişken oluşturmamız gerekmektedir.

inSCADA Platform'unda DNP3 için oluşturduğumuz değişkenler, DNP3 protokolünde ki dizi içerisindeki "Point"lara karşılık gelmektedir. Değişkenlerin adresi ise "Point Index"e karşılık gelmektedir.

inSCADA Platform'unda diğer protokoller için değişken oluştururken, her bir değişken için Type seçebiliyorduk, DNP3' le beraber artık önce Frame tarafında bir Static Variation ve Event Variation ile default tip seçiyoruz. Daha sonra aynı seçimleri Variable oluştururken yapıyoruz. Bu sayede DNP3 dizimizin tamamına bir Type seçtikden sonra ayrıca Point larımızın Type' ını belirlemiş oluyoruz.

Resim 5'da görüldüğü gibi önceki adımlarda oluşturduğumuz DNP3 Outstation'ımıza bağlı bir değişken oluşturuyoruz. Form üzerinde ;

  • Name : DNP3Outstation_Analog_Value_01

  • Start Addres (Point Index) : 0

  • Point Class : Class 1

  • Static Variation : Group30Var1

  • Event Variation : Group32Var1

  • Dead Band : 0

  • Expression Type : NONE

  • Log Type : NONE

olarak parametrelerimizi girerek değişkenimizi (Variable/Point) oluşturmuş oluyoruz. Şimdi artık tekrar Control Panel gidip, bağlantımızı yeniledikten sonra değişken değerimizi ekranda görebiliriz.

DNP3 Outstation Değişkenlerine Veri Bağlama

Yukarıdaki yapılan örnekte oluşturmuş olduğumuz değişken değerimizin 0 olduğu görülmektedir. Outstation cihazımız ile veri paylaşımı yapabilmemiz için, platform içerisindeki herhangi bir değişkeni, outstation değişkenine bağlamamız gerekmektedir. Bunun için bir kaç metot bulunmaktadır. Bunlar ;

Value expression kullanarak veri bağlama

Tekrar yukarıdaki örnek Outstation cihazımıza oluşturmuş olduğumuz "DNP3Outstation_var1" isimli değişkenimizi Development-Variables menüsüne giderek düzenleyelim.

Resim 6'de görüldüğü değişkenimizin Value Expression kısmında bir javascript kodu yazıyoruz. Bu kodu aşağıda inceleyelim.

var tag=ins.getVariableValue("Percent");
if (tag!==null) {
    ins.setVariableValue(self.name,{value:tag.value});
    return initialValue;    
}
return -1;

Yukarıdaki javascript ile ilk satırında önce, platform içerisinde daha önce tanımlanmış "Percent" isimli değişkeni "tag" isimli değişkenimize alıyoruz. Altdaki kısımda değişkenimizin Null kontrolü yaparak ins.getVariableValue API'imizin başarılı olup olmadığını kontrol ediyoruz. Şayet başarılı ise "tag" ismi ile almış olduğumuz değişken değerini, Outstation değişkenimizin kendisine yazıp tekrar kendi değerini platforma gönderiyoruz. En altda işlem başarısız olursa outstation değişken değerinin -1 görünmesini sağlıyoruz.

Değişkenimizi düzenledikten sonra tekrar Control Panel'e gidip bağlantımızı yeniledikten sonra sonucu görebiliriz.

Bir başka basit örnek daha ;

var val=Math.random()*100;
ins.setVariableValue(self.name,{value:val});
return initialValue; 

Buradaki javascript kodunu aynı değişkenin value expression kısmına yazıp bağlantıyı yenileyin. Bu sayede 0-100 arasında rastgele değişen bir değer outstation değişkenimize bağlanmış olacaktır.

Last updated