External Dll çalıştırma
Her zaman söylüyoruz, WinTr Scada script desteği diğer scadalardan kat be kat üstündür. Şimdi anlatacağım konuda bunlardan biridir. WinTr scriptleri haricinde hazırlanmış uygulama dosyalarınızı WinTr scada içersinde çalıştırabilirsiniz. Aynı zamanda script ile script çalıştırmak içinde kullanabilirsiniz. Görsel nesneleri Screen designer’dan Activex ve Net component özelliği ile kullanabiliyorsunuz. Sadece kod içeren uygulamalarınızı ise aşağıdaki script ile çalıştırabilirsiniz.
Not: Kopyala yapıştırdan sonra tırnak işaretlerini düzeltiniz. Test için oluşturduğumuz Class Library kodunu sayfanın en altında bulabilirsiniz.
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
imports System.Reflection
Namespace WinTr
PublicClass MainClass
Public Tag_1 AsUInt16
PublicSub Load
Dim o AsNew OpenFileDialog
If o.ShowDialog = Windows.Forms.DialogResult.OK Then
Try
Dim objAssembly As System.Reflection.Assembly
objAssembly = Reflection.Assembly.LoadFrom(o.FileName)
Dim objTheClass AsObject = objAssembly.CreateInstance(“ClassLibrary1.Class1”)
‘Dll’ye çalışmadan önce set değerleri gönderme.
ForEach field As FieldInfo In objTheClass.GetType.GetFields
If field.Name = “Tag_1”Then
field.SetValue(objTheClass, Tag_1)
EndIf
Next
‘Dll’nin çalıştırılması.
Dim objResult AsObject = objTheClass.GetType.InvokeMember(“Load”, 256, Nothing, objTheClass, Nothing)
‘Dll çalışması sonucu oluşan değerleri alma.
ForEach field As FieldInfo In objTheClass.GetType.GetFields
If field.Name = “Tag_1”Then
Tag_1 = field.GetValue(objTheClass)
EndIf
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
EndTry
EndIf
EndSub
EndClass
EndNamespace
PublicClass Class1
Public Tag_1 As UInt16
PublicSub Load()
MsgBox(“WinTr “ & Tag_1)
Tag_1 += 1
EndSub
EndClass
Not: Script’den script çalıştırmak istediğinizde Namespace ve Class ismini değiştirmelisiniz. WinTr scriptlerinde aşağıdaki gibi olmalıdır.
Dim objTheClass AsObject = objAssembly.CreateInstance(“WinTr.MainClass”)
İlk örneğimizde uygulama dosyasına set değeri gönderen ve sonuç değer alan bir script yazmıştık. Yeni başlayanlara kolaylık olması için sadece çalıştıran bu kodu ekliyorum. Bu kodun diğer bir özelliği ise external dll yerine diğer bir wintr scriptini çalıştırmasıdır.
Not: WinTr scriptlerinin dosya uzantıları üç tiptir. “.vbs” ve “.vcc” kod editör dosyasıdır. Burada “.dll” uzantılı dosyalar kullanılmalıdır. Ayrıca her derlemede bu dll dosyasının yeni versiyonu oluşturulduğunu unutmayın. Dolayısıyla bu script ile çalıştırdığınız dl’nin eski sürümü olabilir.
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
imports System.Reflection
Namespace WinTr
Public Class MainClass
Public Sub Load
Dim o As New OpenFileDialog
If o.ShowDialog = Windows.Forms.DialogResult.OK Then
Try
Dim objAssembly As System.Reflection.Assembly
objAssembly = Reflection.Assembly.LoadFrom(o.FileName)
Dim objTheClass As Object = objAssembly.CreateInstance(“WinTr.MainClass”)
Dim objResult As Object = objTheClass.GetType.InvokeMember(“Load”, 256, Nothing, objTheClass, Nothing)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If
End Sub
End Class
End Namespace
Was this answer helpful?
LikeDislikeÖrnek projeyi buradan indirebilirsiniz. Script çalıştığında dosya açma diyalog penceresi gözükğr. Class1\Class1\bin\Debug\Class1.dll dosyasını seçin.
http://www.fultek.com.tr/Download/ExternalDllProject.zip
Was this answer helpful?
LikeDislike