Script ile Tag değerlerini okuma ve yazma
Script içerisinde Tag değerlerini okumak ve yazmak için ilk önce Tag tanıtımı yapılmalıdır.
“Public Sub Load” ifadesinin üst satırında “Public Tag_1 As Uint16” şeklinde tanımı yapılır. Daha sonra script içerisinde Tag_1 = 5 şeklinde kullanabiliriz. Çok sayıda Tag olduğunda ve bazı özel durumlarda Tag tanımı yapılmadan’da Tag değerlerine erişebiliriz. Örneğin: Script içerisinde Timer yapıp çalıştırdığımızda Timer fonksiyonu içersinde Tag_1 = 5 ifadesi neticesinde yeni değer scada’ya iletilemez. Ancak şimdi anlatacağım yöntem ile yaptığımızda Tag değeri değiştirilebilir.
Tag tanım alanına aşağıdaki ifadeyi ekleyelim.
Public RWTagValue As Object
Her hangi bir Tag değerine erişmek istediğimizde aşağıdaki kodu kullanabiliriz.
RWTagValue.Value(“Tag_1”)
Tag_1 yerine diğer tagların isimlerini yazarak aynı script’te hepsine erişebiliriz. Okuma ve yazma yapabiliriz. Asenkron scriptler’de bu komutlar kullanılamaz.
Alternatif bir yolda Tag dizilerini kullanmak olabilir. Bu amaçla kullanılan iki dizin mevcuttur.
Public TagNameTable() As String
Public TagValueTable() As String
ilk dizi tüm tagların ismini, ikinci dizi tüm Tag’ların değerini gösterir. Bu dizilerden sadece okuma yapabilirsiniz. Yazma işlemi yapılmaz. Bu diziler ile bir tagın değerine ulaşmak için o tag’ın bulunduğu index tespit edilmelidir. IndexOf komutu ile index bulunabilir. Tag adı hatalı olduğunda index değeri -1 olacaktır. Aşağıdaki kod bu dizilerin kullanımı için yeterlidir.
dim i as integer = Array.IndexOf(TagNameTable,”Tag_1″)
if i > -1 Then
MsgBox(TagValueTable(i))
End If
Sonuç: Script ile bir Tag’ın değerine erişebilmek için 3 yöntem anlatıldı. 1. Tag ismi ile variable direkt olarak oluşturulur. 2. RWTagValue fonksiyonu kullanılabilir. 3. Tag dizileri kullanılabilir. Bu yöntemlerin avantaj ve dezavantajları vardır. 1. yöntem her zaman daha hızlı çalışır. Cpu kullanımıda düşük olur. 2. Yöntem script içerinde kullanıldığı halde her zaman okuma yazma yapılmayacağı durumlarda avantajlıdır. Diğer bir avantajı ise çok sayıda tag kullanılan scriptlerin yazım kolaylığıdır. Yazım kolay olsada çalışması 1. yönteme gere daha fazla cpu gerektirecektir. Asenkron scriptlerde kullanılmaması da diğer bir dezavantajdır. 3. yöntem her ikisinden biraz diyebiliriz. Fakat en önemli dezavantajı sadece okunur olmasıdır.
C# kullanıcıları bu yazıyı mutlaka okumalı: https://www.wintr.com.tr/2015/01/c-ile-nesne-erisimi/
Was this answer helpful?
LikeDislikeTag değerini mssql den alınan veri ile değiştirmek istiyorum.
Mssql e veri girildiği zaman, taga o değer atanmalı. Nasıl yapabiliriz.
Erp programından değer girilecek ve veritabanına kaydolacak. WinTr bu değeri görecek ve taga yazacak.
Was this answer helpful?
LikeDislikeSorunuz bu konu ile ilgili değil. Soru göndermeden önce forumda arama yapınız. Sql serverdan veri almak için bu adresi ziyaret ediniz. https://www.wintr.com.tr/2014/10/script-ile-databaseden-veri-alma/
Was this answer helpful?
LikeDislikeTextbox a girilen değeri script ile numeric kontrol yapmak istiyorum. Sadece sayı değeri girilsin. keypress eventini kullanmama izin verir mi?
Was this answer helpful?
LikeDislikeTextBox Value için seçilen tag’ın tipine göre değer girilebilir. Ayrıca min-max parametreleri ile de sınırlama getirilebilir. Script ile sınırlama getirmeye gerek yok. Keypres ve diğer eventlar da kullanılabilir.
Was this answer helpful?
LikeDislikeTag değeri uint16 min max değerde belirledim fakat klavyeden hala harf yazılabiliyor. Ben bu yazımı engellemek istiyorum. Script yazmadan bunu engelleyebilirmiyim
Was this answer helpful?
LikeDislikeHarf yazılabilir ama enter yaptığında Value kısmında seçili olan tag tipine uygun değilse kabul edilmez. Ayrıca Value kısmında alt ve üst limit belirleye biliyorsunuz. Bu sistemin çalışması için ilk önce Tag seçimi yapılmalıdır. İlk önce Tag’ı seçin sonra runtime ile deneyin. NumericUpDown nesnesi de kullanılabilir.
Was this answer helpful?
LikeDislikeTamamdır teşekkür ederim.
Was this answer helpful?
LikeDislike