JavaScript betikleri
JavaScript betiğinin yapısı (Fonksiyon ve Genel modül), hazır Tag, Sayfa, Bildir ve Kullanici nesneleri, parametre alma ve dikkat edilecek farklar.
Yapı
JavaScript betikleri Live'ın kendi JavaScript ortamında çalışır; ayrı bir motor yoktur. Betik, Live açılırken derlenir. Betikler tablosunda iki tür vardır.
- Fonksiyon
- Her çağrıda çalışan koddur. Live kodunuzu
function (parametreler) { kod }biçiminde sarar: koddareturnyazabilirsiniz, Parametreler kolonuna yazdığınız adlar (ör.deger) fonksiyonun parametreleri olur. - Genel modül
- Proje açılırken bir kez çalışır. Başka betiklerin kullanacağı yardımcılar
windowüzerine eklenir (window.Ortak = { … }); gövdedekivarvefunctiontanımları yerel kalır.
12deger yazılıdır; kod alanında araç satırı ve Başvuru paneli yoktur.- Parametreler — yalnız JavaScript'te kullanılır.
- Kod — Live bu kodu
function (deger) { … }içine alır.
Fonksiyon betiği olaydan ya da görevden çağrılır. Tag değişince tetikli görevde tag'in yeni değeri ilk parametreye verilir; olaydan çağrılınca parametre gelmez (undefined). Prosedür / İşlev alanı JavaScript betiklerinde kullanılmaz.
Hazır nesneler
| Nesne | Ne yapar |
|---|---|
Tag.oku(ad) | Tag'in geçerli değerini döndürür. Bool tag için true / false, sayı tag'i için sayı, metin tag'i için metin gelir. Tag yoksa undefined döner. Tag adı büyük / küçük harfe duyarlıdır. |
Tag.yaz(ad, değer) | Değeri yazar ve bir Promise döndürür. Yazma reddedilirse (tag yok, değer alt / üst sınırın dışında, bağlantı durum tag'i) Live operatöre İşlem Yapılamadı penceresini gösterir; betik durmaz. |
Sayfa.ac(ad), Sayfa.ac(ad, önek) | Ana sayfayı değiştirir. İkinci parametre, yapı (UDT) cihaz penceresi için tag öneki verir. |
Sayfa.geri() | Önceki sayfaya döner. |
Bildir(metin) | Operatöre ortada bir bilgi penceresi gösterir; betik beklemeden sürer. |
Kullanici.ad | Oturumu açık kullanıcının adı; oturum yoksa boş metin. |
Betik ortamında standart JavaScript nesneleri (Math, Date, JSON, String, setTimeout …) kullanılabilir. Ürünün sağladığı nesneler yukarıdaki dörttür; VBS'teki HMIRuntime, SmartTags, ScreenItems JavaScript'te yoktur (Studio kullanılırsa uyarır). Ürün, JavaScript betiğine sayfa nesnelerinin özelliklerini (renk, yazı, görünürlük) değiştirme işlevi sağlamaz; bunun için VBS, C ya da Python kullanın.
Örnekler
Tag okuma ve yazma:
var seviye = Tag.oku('Tank1_Seviye');
// Kalan boşluk (%) = 100 - seviye
Tag.yaz('Tank1_Bosluk', 100 - seviye);
Parametreli fonksiyon. Tanıtım_Tesisi'ndeki Pompa_Ariza_Esle betiğinde Parametreler kolonu deger yazılıdır; P103_Calisiyor tag'i değişince çalışan görev, tag'in yeni değerini bu parametreye verir:
// P-103 durunca arıza bitini kaldırır, çalışınca indirir.
Tag.yaz('P103_Ariza', !deger);
Kullanıcı ve bildirim, return ile erken çıkış:
if (!Kullanici.ad) {
Bildir('Bu işlem için önce giriş yapın.');
return;
}
Tag.yaz('Son_Islem_Yapan', Kullanici.ad);
Tag.yaz('Uretim_Sayaci', 0);
Genel modül ve kullanımı. Genel modül:
window.Ortak = {
// Değeri iki sınır arasında tutar
sinirla: function (deger, enAz, enCok) { return Math.min(enCok, Math.max(enAz, deger)); }
};
Başka bir fonksiyon betiğinde:
Tag.yaz('Motor1_Hiz', Ortak.sinirla(Tag.oku('Motor1_Hiz_Ayar'), 0, 100));
Daha fazla örnek (koşul, döngü, ölçekleme, try / catch, setTimeout) için Betik örnekleri konusuna bakın.
Sıra ve zamanlama
Tag.yazbeklemeden döner. PLC tag'ine yazdıktan hemen sonraTag.okuçağırırsanız yazılan değer henüz okuma döngüsünden gelmemiş olabilir. Yazma bittikten sonra bir işlem yapmanız gerekiyorsaTag.yaz(…).then(function () { … })kullanın.awaityazılamaz: betik işleviasyncdeğildir. Studio await burada kullanılamaz hatası verir; sonucu beklemek için.then(…)kullanın.setTimeoutile geciktirilen işlem çalışır; zamanlayıcı betik bittikten sonra da sürer.
Hatalar
Söz dizimi hatası Studio'da canlı denetimle ve derlemede (F9) gösterilir; V8 iletileri Türkçeye çevrilir (ör. Beklenmeyen simge, Kod beklenmedik biçimde bitti). Hata, Live'ın kodu derlediği biçimde ve satır numarasıyla bildirilir.
Çalışma sırasında oluşan hata olay günlüğüne betik türünde Betik_Adı: ileti olarak yazılır ve program çalışmaya devam eder. Reçete aktarımının Önce betiği / Sonra betiği adımında hata, aktarımın hatası sayılır. Kendi hata yönetiminiz için try / catch kullanın.
Sınırlar ve dikkat edilecekler
- Veritabanı, dosya ve program çalıştırma işlevi sağlanmaz; bunlar için VBS, C ya da Python kullanın.
- VBS, C ve Python'daki 30 saniye süre sınırı ve üst üste çağrının atlanması kuralı JavaScript'te yoktur: uzun süren ya da sonsuz döngü arayüzü kilitleyebilir. Döngülerde çıkış koşulundan emin olun; sık tetiklenen görevlerde betiği kısa tutun.
- JavaScript için başvuru paneli, prosedür listesi ve otomatik tamamlama yoktur; Başvuru için Betik nesne modeli başvurusu konusuna bakın.
- Tarayıcıdan ve TV'den izleme kipinde betik çalışmaz.