DNP3 Outstation
Last updated
Last updated
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.
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 : 20000
Timeout : 2000
Msg Timeout : 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.
Msg Timeout parametresinin şimdilik herhangi bir etkisi yoktur. Gelecekteki geliştirmeler de kullanılabilme ihtimalinden dolayı sadece gösterilmektedir.
Ş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 ;
Protokol : DNP3 Slave
Station Address : 100
Remote Address / DNP3 Master Address : 1
Unsolicated Events : Enable
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.
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.
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 ;
Frozen Counter,
Binary Input,
Double Input,
Binary Output,
Counter,
Analog Input,
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_FRM01
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_CONN" 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.
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 6'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.
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 ;
Tekrar yukarıdaki örnek Outstation cihazımıza oluşturmuş olduğumuz "DNP3Outstation_Analog_Value_01" isimli değişkenimizi Development-Variables menüsüne giderek düzenleyelim.
Resim 8'de görüldüğü değişkenimizin Value Expression kısmında bir javascript kodu yazıyoruz. Bu kodu aşağıda inceleyelim.
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 ;
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.