FabyaVisionKullanım Kılavuzu
/

VBScript betikleri

6 dk okumaBetikler

VBS betiğinin yapısı (Modül ve Aksiyon), desteklenen dil özellikleri, tag ve sayfa nesnelerine erişim ve gerçek VBScript'ten bilinen farklar.

Dilin kapsamı

VBS betikleri, ürünün kendi VBScript motorunda çalışır; Windows Script Host gerekmez. Motor, gerçek Windows VBScript motoruyla yan yana sınanmıştır (işleçler, dönüşümler, dizgi, tarih, biçimleme, diziler, hata davranışı, döngüler, prosedürler, sınıflar). Bilerek bırakılan farklar bu konunun sonundadır.

Desteklenen yapılar

GrupYapılar
BildirimDim, ReDim (Preserve dahil), Erase, Const, Option Explicit, Public / Private
KoşulIf … Then … ElseIf … Else … End If, Select Case (Case 1, 2, Case Else)
DöngüFor … Next (Step), For Each, Do … Loop (While / Until), While … Wend, Exit For / Exit Do
ProsedürSub, Function, Call, ByVal / ByRef, Exit Sub / Exit Function
NesneSet, Nothing, Is, With, Class (Property Get / Let / Set, Class_Initialize)
HataOn Error Resume Next, On Error GoTo 0, Err nesnesi (Number, Description, Source, Clear, Raise)
YazımSatır devamı (_), : ile aynı satıra birden çok deyim, ' ve Rem yorumları, &h onaltılık sayılar, #tarih# sabitleri

Yerleşik işlevler

Başvuru panelindeki İşlevler sekmesi tam listeyi verir. Gruplar:

  • Dönüşüm: CStr, CInt, CLng, CDbl, CBool, CDate, Round, Hex
  • Matematik: Abs, Sqr, Sin, Log, Rnd; işleçler \, Mod, ^
  • Metin: Len, Left, Mid, InStr, Replace, Split, Join, UCase, Trim, Chr, FormatNumber
  • Tarih ve saat: Now, Timer, Year, Hour, Weekday, DateAdd, DateDiff, DateSerial
  • Sınama: IsEmpty, IsNull, IsNumeric, IsArray, TypeName, VarType
  • Dizi: Array, UBound, LBound, Filter
  • Etkileşim: MsgBox, InputBox (ortada, temaya uygun pencere), RGB, CreateObject

Sabitler: vbCrLf, vbTab, vbYes / vbNo, vbYesNo, vbQuestion gibi MsgBox sabitleri ve vbRed gibi hazır renkler.

CreateObject ile üretilebilen nesneler

ProgIDNe içinİzin
Scripting.DictionaryAnahtar → değer listesiGerekmez
System.Collections.ArrayListBüyüyebilen listeGerekmez
VBScript.RegExpDüzenli ifade (Pattern, Test, Execute, Replace)Gerekmez
ADODB.Connection, ADODB.Recordset, ADODB.CommandODBC ile veritabanı sorgusuVeritabanına bağlanma
WScript.ShellProgram başlatma (Run)Program çalıştırma
Scripting.FileSystemObjectDosya ve klasör işlemleriDosyalara erişme
WScript.NetworkBilgisayar ve Windows kullanıcı adıGerekmez

Başka bir ProgID verilirse çalışma sırasında hata oluşur; Studio da derlemede uyarır.

Betik türleri

Modül

Prosedürleri (Sub, Function) barındırır. Bütün VBS modüllerinin prosedürleri ve modül düzeyindeki değişken / sabit bildirimleri ortak bir ad alanındadır: bir modülde tanımlı prosedür başka bir modülden adıyla çağrılır. Bu yüzden iki modülde aynı prosedür adı kullanılamaz (Studio hata verir). Aynı modülde ikinci tanım sessizce geçerli olur (Studio uyarır).

Olayda ya da görevde prosedür seçilmezse modülle aynı adlı prosedür çalışır; farklısı çalıştırılacaksa Prosedür listesinden seçilir. İşlev dışındaki satırlar proje açılırken bir kez çalışır.

' T-101 şerbet tankı seviye denetimi (Tanıtım_Tesisi)
Const ALT_SINIR = 40
Const UST_SINIR = 88

Function Seviye_Durumu(seviye)
    If seviye < ALT_SINIR Then
        Seviye_Durumu = "DÜŞÜK"
    ElseIf seviye > UST_SINIR Then
        Seviye_Durumu = "YÜKSEK"
    Else
        Seviye_Durumu = "NORMAL"
    End If
End Function

Sub Tank_Seviye_Denetimi()
    Dim seviye, durum
    seviye = SmartTags("T101_Seviye")
    durum = Seviye_Durumu(seviye)
    If durum = "NORMAL" Then
        SmartTags("T101_Uyari") = 0
    Else
        SmartTags("T101_Uyari") = 1
    End If
End Sub

Aksiyon

Her çağrıda baştan çalışan koddur. Kodda Function Action() (ya da Sub Action) varsa o çalışır; yoksa kodun tamamı gövde sayılır ve Exit Sub ile bitirilebilir. Aksiyonda prosedür seçilmez. Aksiyondaki yardımcı Function'lar yalnızca o aksiyonun içinde görünür.

Option Explicit
Function Action()
    If SmartTags("Tank1_Seviye") >= 80 Then
        SmartTags("Tank1_Durum") = "Yüksek"
    Else
        SmartTags("Tank1_Durum") = "Normal"
    End If
    Action = 0
End Function

Olaya yazılan VBS kodu

VBS kodu çalıştır işlevinde kod doğrudan olaya yazılır (aksiyon gövdesi gibi çalışır). Burada Item (olayın nesnesi; sayfa olayında sayfa), ScreenItems, Layers, DataSet ve Parent (olayın sayfası) hazırdır.

' Tıklanan nesnenin rengini değiştirir
Item.BackColor = RGB(255, 0, 0)

Tag değerlerinin VBS'te görünümü

  • Bool tag VBS'e "ikili" değer olarak gelir: = 1, = True, If x Then, Not x, And / Or hepsi çalışır. CInt 1 ya da 0, CStr "1" ya da "0", TypeName Boolean verir. Yazarken True, 1 ve sıfırdan farklı her sayı 1 olarak yazılır.
  • Nesnelerin mantıksal özellikleri (Visible, Enabled, FontBold …) tag değildir; gerçek Boolean (True / False) döndürür.
  • Sayı ve tarihi metne çevirme Live bilgisayarının Windows bölgesel ayarını izler: ondalık ayraç virgülse CStr(1.5) "1,5", CDbl("1,5") 1.5 olur. Sabit biçim gerekiyorsa Day, Month, Year, Hour … ile parçaları birleştirin.
  • Kalite: HMIRuntime.Tags("Ad").QualityCode değeri 192 iyi, 84 tag sınırının dışında, 8 bağlantı yok demektir.
  • Olmayan tag ya da yazılamayan değer betiği durdurmaz. Projede olmayan tag okunursa değer Empty döner, LastError dolar ve olay günlüğüne Tag bulunamadı (okuma): Ad uyarısı düşer; yazma için de Tag bulunamadı (yazma): Ad yazılır. Tag'in türüne çevrilemeyen değer (ör. sayı tag'ine metin) de aynı biçimde günlüğe yazılır, tag değişmez. Bu durumları yakalamak için Tag.LastError (0 = hata yok) ve Tag.QualityCode değerlerine bakın.
  • Tag adlarında büyük / küçük harf farkı aranmaz.

Hata yakalama

Yalnızca On Error Resume Next ve On Error GoTo 0 desteklenir. Hata kontrolü Err.Number ile yapılır.

Sub Hata_Yakalama()
    Dim sonuc
    On Error Resume Next
    sonuc = SmartTags("Toplam_Miktar") / SmartTags("Parti_Adedi")   ' adet 0 ise hata 11
    If Err.Number <> 0 Then
        SmartTags("Hata_Metni") = "Hata " & Err.Number & ": " & Err.Description
        sonuc = 0
        Err.Clear
    Else
        SmartTags("Hata_Metni") = ""
    End If
    On Error GoTo 0
    SmartTags("Parti_Ortalama") = sonuc
End Sub

Yakalanmayan hata betiği durdurur ve olay günlüğüne Modül / Prosedür, satır N: ileti (hata numarası) biçiminde yazılır. Program çalışmaya devam eder.

Veritabanı, dosya ve program

Bu nesneler Betik İzinleri'ne bağlıdır. Veritabanı bağlantısı durumsuzdur: her komut kendi bağlantısını açıp kapatır; işlem (transaction), geçici #tablo ve kayıt kümesi üzerinden güncelleme (AddNew, Update, Delete) yoktur. Kayıt ekleme ve değiştirme conn.Execute "INSERT …" ile yapılır. WScript.Shell.Run programı başlatır ama bitmesini beklemez. Ayrıntı: Veritabanı erişimi.

Gerçek VBScript'ten bilinen farklar

KonuFabyaVision
Execute, ExecuteGlobal, Eval, GetObject, GetRefYok. Kullanılırsa 'Eval' bu sürümde desteklenmiyor gibi bir hata ile durur.
On Error GoTo etiket, ResumeYok; söz dizimi hatası verir.
Sayı alt türleriYok. Sayılar tek türde tutulur; TypeName değere göre ad verir (5 için Integer, 1.5 için Double). CSng 7 anlamlı basamağa yuvarlar ama Single türü oluşmaz.
Class_TerminateÇağrılmaz (nesnenin ne zaman bırakıldığı bilinemez).
Türkçe harfli adlarDeğişken ve prosedür adlarında ş, ğ, ı gibi harfler kabul edilir (gerçek VBScript yalnızca ASCII harf kabul eder).
ByRefKopyala ve geri yaz biçiminde çalışır.
Adı Dim'siz kullanılan değişkenlerModül düzeyinde geçen ad her prosedürde geneldir. Option Explicit kullanırsanız tanımsız ad Değişken tanımlı değil hatası verir.

Sınırlar ve dikkat edilecekler

  • Bir çağrı en çok 30 saniye hesap yapabilir; yalnızca kodun kendi çalıştığı süre sayılır (tag yazma, veritabanı, MsgBox beklemesi sayılmaz). VBS'te bekleme işlevi yoktur; zaman farkını denetleyen Do While döngüsü kodun kendi süresi sayılır ve kesilir. Uzun beklemeler için döngüsel görev kullanın.
  • HMIRuntime.Alarms, AlarmLogs, DataLogs, Logging ve MenuToolBarConfig bu sürümde yoktur.
  • Aynı görev ya da olay satırı için önceki çağrı sürerken gelen çağrı atlanır.
  • Betik, tarayıcıdan ya da TV'den izleme kipinde çalışmaz.

İlgili konular

FabyaVision 0.1.0 Kullanım Kılavuzu · 18 Ekim 2026© Fabyatek Yazılım Bilişim Teknolojileri Ltd. Şti.