Bazı otomasyon projelerinde benzer işlemlerin bir çok defa yapılması gerekebilir. Bu yazımızda bu tür işlemlerin nasıl yapılacağını anlatmaya çalışacağız. Örneğimizde 3 adet pompamız olsun. Her pompa için Oto-Manuel, Start, Stop butonları oluşturmak istemiyoruz. Tek Oto-Manuel, Start ve stop butonu ile tüm pompaları kontrol etmek istiyoruz. Ayrıca pompa detay bilgileri ekranda fazla yer tuttuğu için her pompa için bu detayları göstermek istemiyoruz. Yalnız seçtiğimiz pompanın detayını görmek istiyoruz.

Tüm yöntemlerde her pompa için Oto-Manuel,Start,Stop,Running ve Fault Tagleri oluşturmalıyız. Bu taglar münferit olabilir veya BitInTag fonksiyonu ile münferit bir Tag’ın bitleri olabilir. Örneğimizde tüm Tag’lar boolean(bit) ölçüsünde olması yeterlidir. Biz her sinyal için bir tag oluşturabiliriz. Veya 16bit’lik bir tag oluşturup BitInTag fonksiyonu ile bu tag’ın bitlerinden internal Taglar oluşturabiliriz. Internal taglar ücretsiz ve limitsizdir.

Tag Tablosu

Tag Tablosu

Yukarıdaki resimde oluşturduğumuz tag tablosunu görebilirsiniz. Kırmızı bölge münferit tag’dan Bit in tag ile elde ettiğimiz internal taglardır. Mavi bölge pompa seçimine bağlı olarak sinyallerin izleneceği ve kontrol edileceği yardımcı taglerdir. Yeşil bölge ise plc ile haberleşecek olan ve her biri bir pompanın tüm sinyallerini barındıran asıl taglarımızdır. Scada sayfasında sinyallerin görsel takibi ve kontrolleri Mavi bölgedeki Taglar ile yapılacaktır. Yukarıda anlatıldığı gibi pompa seçimine bağlı olarak bu (Mavi) Taglar pompanın durum bilgilerini bize gösterecektir. Yapmak istediğimiz scada sayfası aşağıdadır.

Scada Sayfasi

Scada Sayfasi

Resimde görüldüğü gibi pompa seçimine bağlı olarak detaylar yeşil alanda gösterilecek ve kontrol edilecektir. Bu alandaki nesneleri ayrı bir sayfa içerisine kopyalayıp popup screen olarak da kullanabilirsiniz.

ilk önce Pump_Name tagı’ına seçili olan pompayı yazmak olmalıdır. Bu işlem örneğimizde pompa sembolüne tıklanarak yapılır. Scada sayfasındaki pompa sembolüne tıklayıp, Mouse down fonksiyonunu açınız ve Cons. to tag bölümünden Pump_Name isimli Tag’a “P1” değerini atayın. Aynı işlemi diğer pompalarda P2 ve P3 şeklinde yapınız. Scada sistemi seçili pompanın hangisi olduğunu bilmektedir.

Pompa seçiminden sonra aşağıdaki script ile pompa sinyallerini yeşil alanda gösterebiliriz.

Imports System

Imports System.IO

Imports System.Windows.Forms

Imports Microsoft.VisualBasic

Namespace WinTr

Public Class MainClass

Public Auto,Start,Stop_,Running,Fault As Boolean

Public Pump_Name As String

Public RWTagValue As Object

Public Sub Load

Auto = RWTagValue.Value(“Auto_” & Pump_Name)

Start = RWTagValue.Value(“Start_” & Pump_Name)

Stop_ = RWTagValue.Value(“Stop_” & Pump_Name)

Running = RWTagValue.Value(“Running_” & Pump_Name)

Fault = RWTagValue.Value(“Fault_” & Pump_Name)

End Sub

End Class

End Namespace

Bu script’i sayfanın refresh özelliğinde çalıştırabiliriz. Set değerlerinin yazımı için ise aşağıdaki script kullanılabilir.

Imports System

Imports System.IO

Imports System.Windows.Forms

Imports Microsoft.VisualBasic

Namespace WinTr

Public Class MainClass

Public Start As Boolean

Public Pump_Name As String

Public RWTagValue As Object

Public Sub Load

RWTagValue.Value(“Start_” & Pump_Name)= Start

RWTagValue.Value(“Running_” & Pump_Name)= Start

End Sub

End Class

End Namespace

Start sinyalinin pompaya iletilmesi için yukarıdaki script’i hazırladık. Bu script’in can alıcı noktası aşağıdaki satırdır.

RWTagValue.Value(“Start_” & Pump_Name)= Start

Bu satırda RWTagValue.Value fonksiyonu ile seçime bağlı pompaya start sinyali gönderilir. Value parantezi içerisine tag’ın adı yazılmalıdır. Biz “Start_” string’inin sabit olarak kullandık. Pump_Name Tag’ı içersinde ise “P1” şeklinde pompa ismi yazılıdır. Bu ikisini birleştirdiğimizde Start_ + P1 = Start_P1 şeklinde seçili pompanın start tag’ının ismini buluruz. Bu tag’a da start değerini göndeririz.

Bu işlem size karışık geldi ise aşağıdaki script’i’de kullanabilirsiniz.

Imports System

Imports System.IO

Imports System.Windows.Forms

Imports Microsoft.VisualBasic

Namespace WinTr

Public Class MainClass

Public Start_P1 As Boolean

Public Start_P2 As Boolean

Public Start_P3 As Boolean

Public Pump_Name As String

Public Start As Boolean

Public Sub Load

Select Case Pump_Name

Case “P1”

Start_P1 = Start

Case “P2”

Start_P2 = Start

Case “P3”

Start_P3 = Start

End Select

End Sub

End Class

End Namespace

Her iki script arasında önemli bir fark vardır. İlk script’de her pompa için yapılması gereken bir işlem yoktur. İkincisinde ise her pompa için Tagler ve bazı kodlar eklenmelidir. Dolayısıyla ilk script’i anlamaya çalışmak daha doğru olacaktır.

Örnek projemizde kalıbı oluşturduktan sonra her pompa için yapılması gereken işlemler şunlardır.

1. Plc’den pompa için 16 bitlik Tag’ın oluşturulması.

2. Bu 16 bitlik tag’ın bitlerinden sinyalleri oluşturmak.

3. Scada sayfasına pompa sembolünü eklemek ve sembole tıklandığında pompa ismini Pump_Name Tag’ına aktarmak.

Sonuç:

Örnek projeyi Örnek scada projesi indirebilirsiniz. Bu projenin daha güncel versiyonunu aşağıdan indirebilirsiniz.

Buradaki yapıyı anlayıp kendi çözümünüzü üretmelisiniz. Örneğin daha hızlı işlem yapmak için bit in tag’lar kullanılmayabilir. Daha doğrusu kullanılır da farklı bir noktada kullanılır. Bu şekilde çok daha hızlı işlem yapabilirsiniz. Bunu da farklı bir proje olarak aşağıdan indirebilirsiniz. İkinci projede yazılan kod azaltılmıştır fakat anlamanız biraz daha güç olabilir. Anladıktan sonra ne kadar basit olduğunu göreceksiniz. Running ve Fault sinyalleri plc’den gelemesi gerekirken biz ilk projede simüle ettik. İkinci projede ise running devre dışı bırakılmıştır.

Örnek projeyi Örnek scada projesi indirebilirsiniz.