İçeriğe geç

Script Engine

inSCADA JDK21, iki ayrı script ortamı sunar: server-side (ins.*) ve client-side (Inscada.*). İkisi farklı yerlerde çalışır, farklı amaçlar için tasarlanmıştır ve birbirinden izole API yüzeyleri vardır.

Server-side (ins.*)Client-side (Inscada.*)
Nerede çalışırinSCADA sunucusu (JVM)Tarayıcı (browser JS)
EngineGraalJS (Nashorn uyumlu)Tarayıcının kendi motoru
Bindingins (global)new InscadaApi(projectName)
AmaçOtomasyon, hesap, alarm, zamanlı işKullanıcı etkileşimi, UI kontrolü
Tipik kullanımScheduled script, variable / alarm / log expression, MQTT parseAnimation click, custom HTML widget, dashboard widget

→ Server-side (ins.*) detayları → Client-side (Inscada.*) detayları

inSCADA’da script’ler pek çok yerde devreye girer. Aşağıdaki tablo her kullanım yerinin hangi ortamda çalıştığını gösterir.

Kullanım YeriOrtamTetikleme
Scheduled Scriptserver (ins.*)Periodic / Daily / Once / manuel
Variable Expressionserver (ins.*)Poll döngüsünde otomatik
Alarm Expressionserver (ins.*)Değer değişiminde otomatik
Log Expressionserver (ins.*)Poll döngüsünde otomatik
MQTT Subscribe/Publishserver (ins.*)Her MQTT mesajında
Animation Expressionserver (ins.*)UI güncellemesinde (uzaktan)
Animation Click Scriptclient (Inscada.*)Kullanıcı tıklaması
Custom HTML Widgetclient (Inscada.*, sandboxed iframe)Widget kendi içinde
Dashboard Widgetclient (Inscada.*)Dashboard render / etkileşim

İki ortamda da script’ler izole çalışır, ama kısıtlar farklıdır:

  • Server tarafı — HostAccess.EXPLICIT: yalnızca @HostAccess.Export işaretli Java metodlarına erişilebilir. eval ve with kapalı, host sınıf araması tamamen engelli (yani Java.type(...) ve java.* ad alanı yok); thread, native erişim, process oluşturma, ortam değişkeni erişimi ve guest dosya I/O’su da yok.
  • Client tarafı — Custom HTML widget’lar sandboxed iframe’de çalışır; ana sayfa API’sine InscadaBridge üzerinden, origin-doğrulamalı postMessage ile erişir.
SınırVarsayılanNeyi sınırlar
Statement sayısıKoşum başına 100.000Kaçak döngüyü. while(true){} milisaniyeler içinde durdurulur
Çalışma süresi5 dakikaDöngüye girmemiş ama takılmış koşumu — dönmeyen bir host çağrısı

Yazarların pratikte karşılaştığı sınır statement sınırıdır ve normal bir hata gibi gelmez: motor yakalanabilir bir hata atmak yerine context’i iptal eder, yani kendi try/catch’iniz bunu yutup devam edemez.

Client tarafında böyle bir bütçe yoktur; tarayıcı sekmesini donduracak kod yazmaktan kaçının.