İçeriğe geç

Script Engine

inSCADA, sunucu tarafında çalışan bir JavaScript script motoru içerir. Bu motor sayesinde otomasyon, veri işleme, entegrasyon ve raporlama gibi görevler platforma gömülü scriptlerle gerçekleştirilebilir.

Script engine, Nashorn (JDK 11 dahili) JavaScript çalışma ortamını kullanır ve ECMAScript 5 standardını destekler.

inSCADA’da script’ler birden fazla yerde kullanılır:

Kullanım AlanıAçıklamaTetikleme
Zamanlanmış ScriptBağımsız otomasyon göreviPeriodic, Daily, Once veya manuel
Variable ExpressionDeğişken değer dönüşümüHer poll döngüsünde otomatik
Alarm ExpressionÖzel alarm koşulu (Custom Alarm)Değer değişiminde otomatik
Animation ExpressionSVG animasyon davranışıHer UI güncellemesinde
MQTT Subscribe/PublishMesaj parse/oluşturmaHer MQTT mesajında
Log ExpressionÖzel loglama koşuluHer poll döngüsünde

Zamanlanmış Script’ler (Repeatable Scripts)

Section titled “Zamanlanmış Script’ler (Repeatable Scripts)”

Zamanlanmış script’ler, projeye bağlı bağımsız görevlerdir. Development → Scripts menüsünden oluşturulur.

TipParametrelerAçıklama
PeriodicPeriod (ms), Offset (ms)Sabit aralıkla tekrarlayan çalıştırma
DailySaat:DakikaHer gün belirli bir saatte
OnceGecikme (ms)Tek seferlik çalıştırma
NoneOtomatik zamanlama yok, API ile veya manuel tetiklenir
ParametreAçıklama
NameScript adı (benzersiz)
CodeJavaScript kaynak kodu
Schedule TypeZamanlama tipi
Period / TimeZamanlama parametresi
LogScript çalıştırma loglarını kaydet

REST API’den alınan bir script tanımı:

{
"id": 159,
"name": "Chart_ActiveReactivePower",
"projectId": 153,
"type": "None",
"log": false,
"dsc": null,
"owner": "inscada",
"code": "function main() { ... }"
}

Script’ler içinden ins nesnesi üzerinden inSCADA platformunun tüm fonksiyonlarına erişilebilir. ins nesnesi script çalıştırıldığında otomatik olarak enjekte edilir.

ins nesnesi şu API modüllerini içerir:

ModülAçıklamaSayfa
Variable APIDeğişken okuma/yazma, loglamaDetay →
Connection APIBağlantı başlatma/durdurma, güncellemeDetay →
Alarm APIAlarm grup yönetimi, geçmiş sorgulamaDetay →
Trend APITrend tanımları ve tag yönetimiDetay →
Utils APIREST çağrısı, SQL, tarih, format, pingDetay →
Notification APIE-posta, SMS, web bildirimDetay →
Script APIScript zamanlama, global nesneDetay →
Report APIRapor üretme ve göndermeDetay →
Project APIProje bilgileriDetay →
Log APIDenetim logu yazmaDetay →
System APISistem fonksiyonlarıDetay →
Map APIGIS harita fonksiyonlarıDetay →
Data Transfer APIDosya tabanlı veri aktarımıDetay →

Script Editor

// Değişken değeri okuma
var result = ins.getVariableValue("ActivePower_kW");
ins.consoleLog("Güç: " + result.value + " kW");
// Değişken değeri yazma
ins.setVariableValue("Temperature_C", {value: 55.0});
// REST API çağrısı
var response = ins.rest("GET",
"https://jsonplaceholder.typicode.com/todos/1",
"application/json", null);
var data = JSON.parse(response.body);
// → { userId: 1, id: 1, title: "delectus aut autem", completed: false }
// Denetim logu yazma
ins.writeLog("INFO", "Script Test", "Otomasyon görevi tamamlandı");
// Global nesne paylaşımı (script'ler arası)
ins.setGlobalObject("shift_data", {shift: "A", count: 150});
var data = ins.getGlobalObject("shift_data");
// → { shift: "A", count: 150 }

Script’ler izole bir sandbox ortamında çalışır:

  • Sınırlı classpath — yalnızca izin verilen Java sınıflarına erişim
  • Proje bazlı izolasyon — her script kendi projesinin kapsamında çalışır
  • Hata yakalama — script hatası platformu etkilemez