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