Örnek Script : WinTr SCADA'nın sanal COM port üzerinden internete çıkarak uzaktaki GSM Modem ile asenkron bilgi alışverişi yapmasını sağlayan script.

Aşağıdaki script WinTr içerisinden her dakikada bir kez çalıştırılarak(Bkz. Control Panel - General Setup - Script Setup) uzaktaki GSM modemden veri sorgulamaktadır. Script, WinTr içinde asenkron olarak çalışacak yapıdadır. Bu şekilde script GSM modem üzerinden gönderilen sorgunun cevabının gelmesini beklerken WinTr diğer görevleri üzerinde çalışmaya devam eder. Sorgu sonucunda alınan değerler script tarafından SQL Server'daki SQL Inp/Out taglarına yazılır ve bu değerler WinTr ekranından real time olarak takip edilebilir.
GSM Modeme bilgisayarın Com10 isimli sanal seri portundan erişilmektedir.


Imports System
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Imports System.Threading
Imports System.Data.SqlClient
Imports System.Globalization

Namespace WinTr
Public Class MainClass
       'Timer nesnesi oluşturuluyor.
       Private oTimer As System.Threading.Timer
       Dim bayt(3) As Byte
       Dim seri As New System.IO.Ports.SerialPort
       Dim str As String
       Public Tank_Level As Single
       Public Sub Load
       'Script çalıştığında seri port bağlantısı açılıyor ve sorgulama komutu gönderiliyor.
          Try      
               seri.Encoding = System.Text.Encoding.Default
               seri.BaudRate = 9600
               seri.Parity = IO.Ports.Parity.None
               seri.PortName = "Com10"
               seri.Open()       
               seri.Write("3")

               'Gelen cevabı 5 saniye(5000 milisaniye) sonra seri porttan okuyup
               'SQL Server taglarına yazacak olan asenkron fonksiyon timer kullanılarak çalıştırılıyor.
               Dim oCallback As New TimerCallback(AddressOf OnTimedEvent)
               oTimer = New System.Threading.Timer(oCallback, Nothing, 5000, 100)
           Catch ex As Exception
                MessageBox.Show(Ex.ToString, "Her Dakika Script" & Ex.Message)
           End Try
       End Sub

       'Asenkron çalışacak fonksiyonun tanımlanması
       Private Sub OnTimedEvent(ByVal state As Object)
                       Try

               'Asenkron fonksiyon her dakika bir kez çalışacağı,
               'için timer nesnesi ilk çalışmadan sonra yok ediliyor.
               oTimer.Dispose()

               'seri porta gelen veri str değişkeninin içine alınıyor.
               str = seri.ReadExisting

               'seri port kapatılıyor.
               seri.Close()
               
               'SQL Server bağlantı nesnesi oluşturuluyor
               Dim SQL_cn As New SqlConnection()
               SQL_cn.ConnectionString = "Server=(local)\WinTr;uid=sa;pwd=12341234;database=Hamidiye_Scada"
                 'SQL Server'a bağlanılıyor
               SQL_cn.Open()
              Dim SQL_val As String
               Dim SQL_val_2 As String
               Dim SQL_Ins  As String
               Dim Tank_Level_ As Single        
               Dim Tank_Urt_Syc As Single
               Dim Tank_CnFault As Boolean
                  'Seri porttan alınan string parçalanarak ilgili değişkenlere aktarılıyor.
               If str.Length = 8 Then 'alınan stringin uzunluğu 8 karakter ise işleme devam ediliyor

               'Seviye bilgisi
            bayt(3) = Asc(Mid(str, 1, 1))
               bayt(2) = Asc(Mid(str, 2, 1))
            bayt(1) = Asc(Mid(str, 3, 1))
               bayt(0) = Asc(Mid(str, 4, 1))
            Tank_Level_ = BitConverter.ToSingle(bayt, 0) 
               'Urt.Syc bilgisi
            bayt(3) = Asc(Mid(str, 6, 1))
               bayt(2) = Asc(Mid(str, 7, 1))
            bayt(1) = Asc(Mid(str, 8, 1))
               bayt(0) = Asc(Mid(str, 9, 1))
            Tank_Urt_Syc = BitConverter.ToSingle(bayt, 0) 
               Tank_CnFault = False
               SQL_val = Tank_Level_.ToString("G", CultureInfo.CreateSpecificCulture("en-US"))
               SQL_val_2 = Tank_Urt_Syc.ToString("G", CultureInfo.CreateSpecificCulture("en-US"))
               'Alınan değerler SQL Server'a ilgili tagların güncel değerleri olarak yazılıyor.
               SQL_Ins = "UPDATE Table1 SET [Tank_Level]='" & SQL_val & "',[Tank_Urt_Syc]='" & SQL_val_2 & "',[Tank_CnFault]='" & Tank_CnFault & "' WHERE [LastValue] = 1"
               Dim SQL_cmdnon As SqlCommand = New SqlCommand(SQL_Ins, SQL_cn)
            SQL_cmdnon.ExecuteNonQuery()

               Else 'alınan stringin uzunluğu 8 değilse Tank_CnFault tagı true yapılıyor.
                   Tank_CnFault = True
            SQL_Ins = "UPDATE Table1 SET [Tank_CnFault]='" & Tank_CnFault & "' WHERE [LastValue] = 1"
               Dim SQL_cmdnon As SqlCommand = New SqlCommand(SQL_Ins, SQL_cn)
            SQL_cmdnon.ExecuteNonQuery()
       End If
           SQL_cn.Close()
      Catch ex As Exception
        MessageBox.Show(Ex.ToString,"Her Dakika Script" & Ex.Message)                
      End Try
       End Sub

End Class
End Namespace
                                                                                                                                                                                                                                                                                                                                                               GSM Modem ile Asenkron İletişim Scripti

                                                                                                                                                                               English                Turkish
SCADA SOFTWARE
PLC
SECOND HAND
USED CARS
COLLEGES
Otomasyon        Scada        Plc
Cheap Flights Tickets, Cheap Airline Tickets, Cheap Car Rental, Home Security Systems, Industrial Automation Solutions