timucincelik82
Üye
- 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
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