Scadalara Yönelik OOP Makale(Yeni başlayanlar için)

Katılım
21 Kas 2009
Mesajlar
58
Puanları
1
Yaş
41
VB.net ile OOP modeli

Günümüz teknolojisinde artık yazılım mühendisliğinin girmediği alan bulunmamaktadır. Bunun en büyük örneğini tıp, kontrol teknolojileri, muhasebe, vb. bir çok alanda görebiliyoruz. Bundan dolayıdır ki yazılım geliştiriciler yazılımlarını daha etkileşimli, kolay kullanılabilir ve hızlı yapmak zorundadırlar.

Bilhassa endüstriyel alanda gelişen teknolojiler kontrol-otomasyon mühendisliğini önemli bir konuma getirmiştir. Bu teknolojiler bilgisayar, Elektronik, Elektrik ve mekanik mühendisliği ile bütünleşerek bu dört mühendisliğin birleşimi olan kontrol ve otomasyon mühendisliğini doğurmuştur.

Bir kontrol ve yazılım mühendisi olarak endüstride en çok kullanılan yazılım dili olan VB.net ile OOP örnekleri yapıp sizinle gerçek hayatta gördüğümüz bir çok araç gerecin yazılım diliyle nasıl modellendiğini anlatmaya çalışacağım.

Endüstide yapılan çalışmalarda karşımıza mutlaka bir motor çıkmaktadır. Bu motorlara takılan akım ölçer(ampermetre), voltaj ölçer(voltmetre) gibi cihazlarla bu motorun nasıl çalıştığı hakkında bilgi edinebiliriz. Bu bilgiyi ister ekranda göstererek, ister veritabanına kaydederek raporlamasını yapar o motorun ne kadar verimle çalıştığını bulabiliriz.

Bu yüzden motorları vb. endüstri aletlerini kontrol etmek için özel CPU üniteleri geliştirilmiştir. Bu CPU ünitelerine verilen ad PLC’dir. PLC’lerin yazılımlarının çalışma mantığı bilgisayarlardan oldukça farklıdır. Endüstriyel yazılımlar PLC gibi akıllı cihazlarla konuşarak onlardan endüstriyel ortamdaki bilgileri alırlar. Bu bir motorun akım bilgisinden tutunda bir ortamın sıcaklığına kadar olan bütün bilgileri alır ve kaydederler. Ayrıca bu yazılımlar bu cihazlara bazı bilgiler göndererek bütün üniteleri kontrol edecek güce de sahiptirler.

Kontrol yazılımları bu cihazlarla haberleşmesi için çeşitli Com araçları geliştirilmiştir. Örneğin bir PLC için OPC Server’dır. Yaptığımız yazılımlar OPC Server aracılığıyla PLC’den bir ortamın sıcaklığını veya motorun akımını öğrenebilir. Ayrıca bir motorun yönünü PLC’ye göndererek motorun yönünü değiştirebiliriz. Burda biz yazılım tarafıyla ilgilendiğimiz için PLC ve motorun nasıl çalıştığını değil bunu OOP ile nasıl modelleyeceğimizdir. Bu ön bilgiden sonra sizinle OOP modellemeye geçebiliriz.

Şundan söz etmeden örneğime geçmek istemem. Bu kontrol yazılımlarına genel olarak scada denmektedir. SCADA(System Control And Data Acquisition)

OOP Modelleme

Bir motoru modellerken ilk önce motorun verilerini, hangi fonksiyonları ve hangi sub rutinleri olacağını çıkarmamız gerekmektedir. Bunun için proje grubuyla çalışıp bir UML diagramı çıkartırız. Biz bunu kendimiz yapacağımızdan aşağıdaki gibi bir örnek ile çalışabiliriz.

Bizim tasarladığımız yapıya göre OPC server’dan gelen akım bilgisi Be_MotorCurrent da işlenerek SQL server’a yazacak bu yazma esnasında ekrana event yollayacak.

Public Class BE_MotorCurrent
Dim MotorCurrentID As Byte

Dim ClutchStatus As Boolean = True
Dim WaterValve As Boolean
Dim Working As Boolean
Dim Current As Integer
Dim R_Date As DateTime

Public Enum StatusTypes As Byte
Working = 1
NotWorking = 0
End Enum

Public Sub New(ByVal ID As Byte)
MotorCurrentID = ID
End Sub

Public Event DatachangedEvent(ByVal ID As Byte, ByVal ValueType As Byte, ByVal Value As Integer)

Public Sub DataChanged(ByVal ValueType As Byte, ByVal Value As Integer, ByVal Time As DateTime)
Select Case ValueType
Case 1
Working = Value
Case 2
ClutchStatus = Value
Case 3
Current = Value
Case 4
WaterValve = Value
SendToDatabase()
End Select
RaiseEvent DatachangedEvent(MotorCurrentID, ValueType, Value)
End Sub

Public Sub SendToDatabase()
Dim kuy As New MessageQueue(".\Private$\sql")
Dim send As String
If BC.SummerTimeControl Then
send = "INSERT INTO aWaterValve_Real (Working,RealDate)"
send &= " Values(" & _
CInt(WaterValve) & "," & _
StringOp.ToSql(R_Date.AddHours(3)) & ")"
Else
send = "INSERT INTO aWaterValve_Real (Working,RealDate)"
send &= " Values(" & _
CInt(WaterValve) & "," & _
StringOp.ToSql(R_Date.AddHours(2)) & ")"
End If

kuy.Send(send)
End Sub

Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub
End Class

Bu örnekte DataChanged fonksiyonu PLC’den gelen herhangi bir değişiklikle tetiklenen bir fonksiyondur. Bu fonksiyon bir messagequeue’ya sql cümleciğini yazmakta scada bilgisayarının üstünde özel olarak yazılmış bir windows service ise bu sql cümleciğini çalıştırmaktadır. Raiseevent ilede bir windows formuna tanımlanmış olan bu sınıfın eventinin tutulması için gereken bir ifadedir.

Bu sınıfı bir windows forma tanımlarken şu şekilde tanımlamamız gerekmektedir.

Dim WithEvents obj_motor As New BE_MotorCurrent(1)

Private Sub obj_motor_DatachangedEvent(ByVal ID As Byte, ByVal ValueType As Byte, ByVal Value As Integer) Handles obj_motor.DatachangedEvent

End Sub

Burda gördüğünüz gibi bir motoru tanımlayan windows form bu motordan bir eventi tutarak kendi üstünde bulunan bir kontrole bunu yansıtabilir. Örnek olarak motorun akımını bir label kontrolde görmek için şu kodu yazmanız doğru olacaktır.

Private Sub obj_motor_DatachangedEvent(ByVal ID As Byte, ByVal ValueType As Byte, ByVal Value As Integer) Handles obj_motor.DatachangedEvent
If ValueType=3 Then Label1.Text=ID & “.Motorun Akımı= ” & Value.ToString
End Sub

Buradaki örnek kolay ve anlaşılabilir bir örnek. Bunu dahada genişletebilir birden fazla motoru aynı windows formda tanımlar ve bunları ID’lerine göre daha fazla label kontrolde gösterebilirsiniz. Ayrıca raporlama yazılımı yaparak sql server’dan bu bilgileri bir grafik yada datagirid içinde gösterebilirsiniz.

İyi çalışmalar.

Timuçin Çelik
 

Forum istatistikleri

Konular
129,800
Mesajlar
930,211
Kullanıcılar
452,600
Son üye
babaapo

Yeni konular

Geri
Üst