Ana içeriğe geç

Sunucu betikleri

Sunucu betiği, bir ekran açık olsun olmasın sunucuda çalışan küçük bir TypeScript programıdır: sinyal değişimlerine, alarmlara, koşullara ya da bir takvime tepki verir, sonuçları dahili sinyallere yazar ve izin verilmişse komut gönderir. Etkin her betik kendi sürecinde çalışır; bu yüzden hata veren bir betik diğerlerini, sürücüleri ya da ağ geçidini etkilemez. Ekran betiklerinden farkı için bkz. Hangi betik nerede çalışır.

Başlamadan önce​

  • Proje konfigürasyon editöründe açık ve kullanıcınızın Editor access (Editör erişimi) yetkisi var.
  • Betiğin yazacağı dahili sinyaller var; burada sayısal bir dahili sinyal CheckCount.

Adımlar​

1. Sunucu betiklerini açın​

Etkinlik çubuğunda Automation'a (Otomasyon), sonra Server scripts'e (Sunucu betikleri) tıklayın. Liste her betiği Name, Description, Active, Can command, Command targets ve daha sağda sınırlar ve Kind (betik ya da kütüphane) ile gösterir.

Server scripts ve Internal tags ile Automation; Name, Description, Active, Can command ve Command targets sütunlarıyla boş Server scripts listesi.

2. Betik oluşturun​

new_script_name kutusuna bir ad yazın (harf, rakam ve _, en çok 64 karakter) ve New script'e (Yeni betik) tıklayın. Değişiklik önizlemesi açılır; Apply'a tıklayın. Yeni betik etkin değildir ve bir şablonla başlar.

Insert: 1 ve Apply ile yeni Line1_CheckCounter sunucu betiğinin değişiklik önizlemesi.

New library (Yeni kütüphane) bunun yerine paylaşılan bir kütüphane oluşturur; bkz. Sunucu betiği API'si.

3. Kaynağı yazın​

Source'ta (Kaynak) betiği yazın. Editör defineScript'i, ctx'i ve tırnak içindeki sinyal yollarını tamamlar:

defineScript({
every: "10s",
onTimer(ctx) {
const n = Number(ctx.state.get("count") ?? 0) + 1;
ctx.state.set("count", n);
ctx.setTag("CheckCount", n);
ctx.log("check", n);
},
});
defineScript koduyla Line1_CheckCounter'ın Source sekmesi, kaydedilmemiş değişiklikli Version 1 ve Compile and save.

Tüm tetikleyiciler ve işlevler için bkz. Sunucu betiği API'si.

4. Betiği deneyin​

Run now / try'a (Şimdi çalıştır / dene) tıklayın. Editördeki kod, kaydedilmemiş olsa da sunucuda ayrı bir süreçte bir kez çalışır: önce onStart, sonra listede seçilen tetikleyici (Automatic, betikte olan ilk işleyiciyi alır: onTimer, onSchedule, onChange, onAlarm, onWhen). Hiçbir şey yazılmaz: her setTag not written (dry run) olarak listelenir, durum değişiklikleri saklanmaz ve ctx.dryRun true'dur. Okumalar gerçek güncel değerleri kullanır.

Automatic ile Run now / try ve sonuç: onStart ok, every ok, check 1 günlük satırı ve not written (dry run): CheckCount = 1.

Bir deneme en çok 256 MB, işleyici başına 10 saniye ve toplam 30 saniye kullanabilir; sunucuda aynı anda en çok dört deneme çalışır.

5. İzinleri ve sınırları ayarlayın​

Permissions and limits'te (İzinler ve sınırlar) Active'i (Etkin) açın. Diğer alanlar:

Active, Can command field points, Command target patterns, Can publish computed values, Publish target patterns, sınırlar ve Time zone (cron) ile Permissions and limits sekmesi.
AlanVarsayılanAnlamı
Active (Etkin)kapalıBetik çalışır
Can command field points (Sahaya komut verebilir)kapalıBetik sürücülerin sinyallerine komut gönderebilir
Command target patterns (Komut hedef desenleri)—Komut verebileceği yollar; virgülle ayrılır, * ve ? ile, örneğin Line1.*, Boiler?.Sp; izinle birlikte en az bir desen gerekir
Can publish computed values (Hesaplanan değer yayınlayabilir)kapalıBetik hiçbir sürücüye bağlı olmayan sinyal noktalarına değer yayınlayabilir
Publish target patterns (Yayın hedef desenleri)—Yayın yapabileceği yollar
Command rate limit (per minute) (Komut hız sınırı)601–6000
Memory limit (MB) (Bellek sınırı)648–1024
Handler time limit (ms) (İşleyici süre sınırı)100010–60000
Time zone (cron) (Saat dilimi)sunucu saatiat takvimleri için, örneğin Europe/Istanbul

Dahili bellek sinyallerine yazmak izin gerektirmez. Komut hedeflerini olabildiğince dar tutun: tek başına * elektrik cihazlarının komut noktaları dışında bir sürücünün yazılabilir her noktasına izin verir. Bu alanları yalnız Editor access yetkisi olan kullanıcılar değiştirebilir; değişiklikler denetim kaydına yazılır.

6. Derleyin ve kaydedin​

Compile and save'e (Derle ve kaydet) tıklayın. Önce TypeScript denetlenir: hata varsa TypeScript errors: not saved listesi çıkar, her satır hataya gider ve hiçbir şey kaydedilmez. Yoksa değişiklik önizlemesi neyin değiştiğini gösterir; Apply'a tıklayın.

Yeni kaynak ve version 1 → 2 ile betiğin değişiklik önizlemesi ve Apply.

Her kayıt yeni bir sürümdür; çalışan betik onu kendiliğinden yükler. Versions'ta (Sürümler) eski bir sürümü seçerek şimdiki kaynakla satır satır karşılaştırın; Restore (Geri yükle) onu editöre geri koyar (yeni sürüm olması için kaydedin).

7. Günlüğü izleyin​

Log and status'u (Günlük ve durum) açın. Günlük ctx.log satırlarını, uyarıları ve hataları gösterir; Follow tail (Sona kaydır) en yeni satırı görünür tutar. Durum satırı Running, Quarantined, Version, Runs, Errors, Last run, Last error, Avg (ms), Commands, Rejected, Published ve Skipped'i gösterir.

Betiğin 10 saniyede bir yazdığı check satırlarıyla Log and status.

Ağ geçidi her betiğin son 500 günlük satırını tutar. Aynı durum değerleri ekranlar, alarmlar ve tarihçe için System.Scripts.<ad>.* sinyalleri olarak da vardır.

Sonuç​

Betik sunucuda çalışır ve durumunu (ctx.state) yeniden başlatmalarda korur. Gönderdiği her komut, tetikleyici ve sürümle birlikte komut kaydında script:<ad> olarak yer alır.

Bilmekte yarar var​

  • Karantina. Bir betiğin süreci beş dakikada beş kez çökerse betik karantinaya alınır: bekler ve yüksek öncelikli bir script_<ad> sistem alarmı üretilir. Karantinayı kaldırmak için betiği düzeltip yeniden kaydedin.
  • Sınırlar. Süre sınırından uzun süren işleyici kesilir ve hata sayılır; bellek sınırını aşan betik yeniden başlatılır. Bkz. Sınırlar.
  • Toplu işlem. Betikleri dosya olarak yüklemek ya da yedeklemek için bkz. Sunucu betiklerini içe ve dışa aktarma.
  • Örnekler. Bkz. Sunucu betiği örnekleri.