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.
Script Nerede Çalışır?
Section titled “Script Nerede Çalışır?”inSCADA’da script’ler birden fazla yerde kullanılır:
| Kullanım Alanı | Açıklama | Tetikleme |
|---|---|---|
| Zamanlanmış Script | Bağımsız otomasyon görevi | Periodic, Daily, Once veya manuel |
| Variable Expression | Değ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 Expression | SVG animasyon davranışı | Her UI güncellemesinde |
| MQTT Subscribe/Publish | Mesaj parse/oluşturma | Her MQTT mesajında |
| Log Expression | Özel loglama koşulu | Her 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.
Zamanlama Tipleri
Section titled “Zamanlama Tipleri”| Tip | Parametreler | Açıklama |
|---|---|---|
| Periodic | Period (ms), Offset (ms) | Sabit aralıkla tekrarlayan çalıştırma |
| Daily | Saat:Dakika | Her gün belirli bir saatte |
| Once | Gecikme (ms) | Tek seferlik çalıştırma |
| None | — | Otomatik zamanlama yok, API ile veya manuel tetiklenir |
Script Parametreleri
Section titled “Script Parametreleri”| Parametre | Açıklama |
|---|---|
| Name | Script adı (benzersiz) |
| Code | JavaScript kaynak kodu |
| Schedule Type | Zamanlama tipi |
| Period / Time | Zamanlama parametresi |
| Log | Script çalıştırma loglarını kaydet |
Örnek Script Tanımı
Section titled “Örnek Script Tanımı”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() { ... }"}ins.* API
Section titled “ins.* API”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ül | Açıklama | Sayfa |
|---|---|---|
| Variable API | Değişken okuma/yazma, loglama | Detay → |
| Connection API | Bağlantı başlatma/durdurma, güncelleme | Detay → |
| Alarm API | Alarm grup yönetimi, geçmiş sorgulama | Detay → |
| Trend API | Trend tanımları ve tag yönetimi | Detay → |
| Utils API | REST çağrısı, SQL, tarih, format, ping | Detay → |
| Notification API | E-posta, SMS, web bildirim | Detay → |
| Script API | Script zamanlama, global nesne | Detay → |
| Report API | Rapor üretme ve gönderme | Detay → |
| Project API | Proje bilgileri | Detay → |
| Log API | Denetim logu yazma | Detay → |
| System API | Sistem fonksiyonları | Detay → |
| Map API | GIS harita fonksiyonları | Detay → |
| Data Transfer API | Dosya tabanlı veri aktarımı | Detay → |
Script Editor
Section titled “Script Editor”
Temel Kullanım
Section titled “Temel Kullanım”// Değişken değeri okumavar result = ins.getVariableValue("ActivePower_kW");ins.consoleLog("Güç: " + result.value + " kW");
// Değişken değeri yazmains.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 yazmains.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 }Sandbox Ortamı
Section titled “Sandbox Ortamı”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